From 554a3e15cd220144a163b861b295f9719857d5e0 Mon Sep 17 00:00:00 2001 From: Rinat Arsaev <11846445+KrickRay@users.noreply.github.com> Date: Mon, 24 Jan 2022 14:38:04 +0300 Subject: [PATCH] TD-99: Make customizable (#2) --- .github/PULL_REQUEST_TEMPLATE.md | 71 - .github/actions/init/action.yaml | 14 + .github/workflows/master.yaml | 30 + .github/workflows/pr.yaml | 63 +- .gitignore | 1 - .gitmodules | 3 - .idea/.gitignore | 5 + .idea/checkout.iml | 13 + .idea/codeStyles/Project.xml | 58 + .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/inspectionProfiles/Project_Default.xml | 6 + .idea/modules.xml | 8 + .idea/prettier.xml | 8 + .idea/vcs.xml | 6 + .npmrc | 1 - .prettierignore | 6 +- Dockerfile | 3 + Dockerfile.sh | 23 - Jenkinsfile | 55 - LICENSE | 176 -- Makefile | 56 - README.md | 8 +- build_utils | 1 - config/checkout-config.js | 3 +- config/webpack.prod.js | 4 +- package-lock.json | 2259 ++++++++++++----- package.json | 49 +- renovate.json | 11 + src/app/backend/app-config.ts | 17 +- src/app/backend/create-payment-resource.ts | 15 +- src/app/components/app/app.tsx | 2 +- .../app/modal-container/footer/footer.tsx | 9 +- .../app/modal-container/footer/logo.svg | 26 - .../modal-content/modal-content.tsx | 2 +- .../modal-error/modal-error.tsx | 2 +- .../modal-loader/modal-loader.tsx | 2 +- .../app/modal-container/modal/close/close.tsx | 2 +- .../app/modal-container/modal/form-block.tsx | 10 +- .../form-container/card-form/card-form.tsx | 2 +- .../validate-card-expiry.ts | 1 - .../euroset-form/euroset-form.tsx | 2 +- .../modal/form-container/form-container.tsx | 4 +- .../form-loader/form-loader.tsx | 2 +- .../modal/form-container/header/header.tsx | 2 +- .../modal/form-container/input/input.tsx | 2 +- .../interaction-terminal-form.tsx | 9 +- .../receipt-info/receipt-info.tsx | 9 +- .../mobile-commerce-form.tsx | 2 +- .../payment-methods/methods/mthod-simple.ts | 2 +- .../payment-methods/payment-methods.tsx | 2 +- .../form-container/qps-forms/qps-form.tsx | 2 +- .../qps-forms/qps-interaction-form.tsx | 2 +- .../redirect-interaction-form.tsx | 2 +- .../result-form/action-block.tsx | 2 +- .../result-form/error-description-block.tsx | 2 +- .../result-form/result-form.tsx | 2 +- .../token-provider-form.tsx | 2 +- .../uzcard-form/uzcard-form.tsx | 2 +- .../wallet-form/wallet-form.tsx | 2 +- .../modal/mobile-header/mobile-header.tsx | 2 +- .../user-interaction-modal.tsx | 4 +- src/app/configure-store.ts | 6 +- src/app/log-messages.ts | 2 +- .../initialize-amount-info.ts | 2 +- .../sagas/initialize-app/initialize-app.ts | 2 +- .../is-ready-to-yandex-pay.ts | 10 +- .../load-third-part-lib.ts | 7 +- .../token-providers-to-methods.ts | 22 +- .../to-available-payment-methods.spec.ts | 6 +- .../to-available-payment-methods.ts | 2 +- .../sagas/initialize-app/initialize-model.ts | 31 +- .../sagas/initialize-app/load-config.spec.ts | 2 +- src/app/sagas/initialize-app/load-config.ts | 13 +- src/app/sagas/payment/pay.spec.ts | 2 +- src/app/sagas/payment/pay.ts | 2 +- .../create-invoice-with-template.ts | 4 +- .../provide-payment/get-payable-invoice.ts | 2 +- .../provide-payment/make-payment.spec.ts | 6 +- .../payment/provide-payment/make-payment.ts | 2 +- .../pay-with-apple-pay/begin-session.ts | 4 +- .../pay-with-apple-pay/pay-with-apple-pay.ts | 2 +- .../pay-with-google-pay/get-payment-data.ts | 19 +- .../pay-with-google-pay.spec.ts | 17 +- .../pay-with-google-pay.ts | 6 +- .../pay-with-yandex-pay/create-ya-payment.ts | 4 +- .../pay-with-yandex-pay.ts | 13 +- .../sagas/poll-events/poll-customer-events.ts | 13 +- .../sagas/poll-events/poll-invoice-events.ts | 26 +- src/app/themes/coral.ts | 1 - src/app/themes/eastern.ts | 59 + src/app/themes/index.ts | 3 +- src/app/themes/main.ts | 1 - src/app/themes/persian-green.ts | 1 - src/app/themes/solitude.ts | 1 - src/app/themes/theme-name.ts | 3 +- src/app/themes/theme.ts | 1 - src/app/utils/get-ya-pay-payment-data.ts | 5 +- src/appConfig.json | 17 +- src/assets/logo.svg | 7 + src/environment.ts | 6 +- src/get-origin.ts | 2 +- src/initializer/html-integration.ts | 2 +- src/initializer/iframe-container.ts | 4 +- src/initializer/index.ts | 4 +- .../init-button/append-init-button.ts | 2 +- src/locale/en.json | 2 +- src/locale/ru.json | 2 +- tsconfig.json | 1 - 108 files changed, 2092 insertions(+), 1355 deletions(-) delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/actions/init/action.yaml create mode 100644 .github/workflows/master.yaml delete mode 100644 .gitmodules create mode 100644 .idea/.gitignore create mode 100644 .idea/checkout.iml create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/prettier.xml create mode 100644 .idea/vcs.xml delete mode 100644 .npmrc create mode 100644 Dockerfile delete mode 100755 Dockerfile.sh delete mode 100644 Jenkinsfile delete mode 100644 LICENSE delete mode 100644 Makefile delete mode 160000 build_utils create mode 100644 renovate.json delete mode 100644 src/app/components/app/modal-container/footer/logo.svg create mode 100644 src/app/themes/eastern.ts create mode 100644 src/assets/logo.svg diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 946e0850..00000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,71 +0,0 @@ - - -## ⛵ JIRA - -- [ ] [FR-0](https://rbkmoney.atlassian.net/browse/FR-0) - -## 📑 Изменения - -``` -✍️(^◡^) -``` - -### 📦 Новые NPM пакеты - -- [ ] Добавлены новые NPM пакеты - - - -### 📚 Обновлен Guideline - -- [ ] Добавлено описание в [wiki](https://github.com/rbkmoney/dashboard/wiki) - - - -## 🖥️ Изменения в интерфейсе - -- [ ] Да -- [ ] Выглядит отлично на мобильных устройствах - -### 🔗 Страницы с изменениями либо как их воспроизвести - -- http://localhost:7050/ - -### 🖼 Скриншоты - - - - diff --git a/.github/actions/init/action.yaml b/.github/actions/init/action.yaml new file mode 100644 index 00000000..8bab8587 --- /dev/null +++ b/.github/actions/init/action.yaml @@ -0,0 +1,14 @@ +name: Init +description: Init +runs: + using: composite + steps: + - name: Init NodeJS + uses: actions/setup-node@v2 + with: + node-version: '16.13.2' + cache: 'npm' + + - name: Install Packages + run: npm ci + shell: bash diff --git a/.github/workflows/master.yaml b/.github/workflows/master.yaml new file mode 100644 index 00000000..d68997a9 --- /dev/null +++ b/.github/workflows/master.yaml @@ -0,0 +1,30 @@ +name: Master +on: + push: + branches: + - 'master' + - 'main' +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + - name: Init + uses: ./.github/actions/init + - name: Build + run: npm run build + - name: Deploy image + uses: valitydev/action-deploy-docker@v1.0.16 + with: + registry-username: ${{ github.actor }} + registry-access-token: ${{ secrets.GITHUB_TOKEN }} + dockerfile-path: . + env: + ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index a89fc047..c96d6b39 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -1,12 +1,55 @@ -name: 'PR Title Checker' +name: PR on: - pull_request: - types: [edited, opened, synchronize, reopened] - + pull_request: + branches: ['*'] jobs: - title-check: - runs-on: ubuntu-latest - steps: - - uses: naveenk1223/action-pr-title@master - with: - regex: '([A-Z]+-[0-9]+,?)+: [A-Z0-9].*' + init: + name: Init + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Init + uses: ./.github/actions/init + - name: Cache + uses: actions/cache@v2 + id: cache + with: + path: ./* + key: ${{ github.sha }} + check: + name: Check + runs-on: ubuntu-latest + needs: [init] + steps: + - name: Cache + uses: actions/cache@v2 + id: cache + with: + path: ./* + key: ${{ github.sha }} + - name: Init NodeJS + uses: actions/setup-node@v2 + with: + node-version: '16.13.2' + cache: 'npm' + - name: Check + run: npm run check + build: + name: Build + runs-on: ubuntu-latest + needs: [init] + steps: + - name: Cache + uses: actions/cache@v2 + id: cache + with: + path: ./* + key: ${{ github.sha }} + - name: Init NodeJS + uses: actions/setup-node@v2 + with: + node-version: '16.13.2' + cache: 'npm' + - name: Build + run: npm run build diff --git a/.gitignore b/.gitignore index 7668e002..aac1acb2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -.idea /node_modules/ /dist/ Dockerfile diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index d0f31b08..00000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "build_utils"] - path = build_utils - url = git+ssh://git@github.com/rbkmoney/build_utils diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..b58b603f --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/checkout.iml b/.idea/checkout.iml new file mode 100644 index 00000000..e6443337 --- /dev/null +++ b/.idea/checkout.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..f986f2fe --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 00000000..79ee123c --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..df7825df --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..609f301e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml new file mode 100644 index 00000000..8122d8ec --- /dev/null +++ b/.idea/prettier.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 9cf543fe..00000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -save-prefix='~' \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 75956c16..17e937d9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -28,5 +28,9 @@ package.json node_modules dist .cache-loader -build_utils + +# VS Code .vscode + +# IDEA +.idea \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..74250075 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,3 @@ +FROM nginx:1.21 +COPY dist /usr/share/nginx/html +COPY nginx.conf /etc/nginx/vhosts.d/checkout.conf diff --git a/Dockerfile.sh b/Dockerfile.sh deleted file mode 100755 index be4ebb44..00000000 --- a/Dockerfile.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -cat < -COPY dist /usr/share/nginx/html -COPY nginx.conf /etc/nginx/vhosts.d/payform.conf -EXPOSE 8080 -LABEL base_image_tag=$BASE_IMAGE_TAG -LABEL build_image_tag=$BUILD_IMAGE_TAG -# A bit of magic to get a proper branch name -# even when the HEAD is detached (Hey Jenkins! -# BRANCH_NAME is available in Jenkins env). -LABEL branch=$( \ - if [ "HEAD" != $(git rev-parse --abbrev-ref HEAD) ]; then \ - echo $(git rev-parse --abbrev-ref HEAD); \ - elif [ -n "$BRANCH_NAME" ]; then \ - echo $BRANCH_NAME; \ - else \ - echo $(git name-rev --name-only HEAD); \ - fi) -LABEL commit=$(git rev-parse HEAD) -LABEL commit_number=$(git rev-list --count HEAD) -EOF diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index a72e556c..00000000 --- a/Jenkinsfile +++ /dev/null @@ -1,55 +0,0 @@ -#!groovy - -build('payform', 'docker-host') { - checkoutRepo() - loadBuildUtils() - - def pipeDefault - def withWsCache - runStage('load pipeline') { - env.JENKINS_LIB = "build_utils/jenkins_lib" - pipeDefault = load("${env.JENKINS_LIB}/pipeDefault.groovy") - withWsCache = load("${env.JENKINS_LIB}/withWsCache.groovy") - } - - def pipeline = { - runStage('init') { - withGithubSshCredentials { - sh 'make wc_init' - } - } - runStage('check') { - sh 'make wc_check' - } - runStage('test') { - sh 'make wc_test' - } - if (env.BRANCH_NAME == 'master') { - runStage('build') { - withCredentials([string(credentialsId: 'SENTRY_AUTH_TOKEN', variable: 'SENTRY_AUTH_TOKEN')]) { - sh 'make wc_build' - } - } - } else { - runStage('build') { - sh "make wc_cmd WC_CMD='make build_pr'" - } - } - runStage('build image') { - sh 'make build_image' - } - runFESecurityTools() - try { - if (env.BRANCH_NAME == 'master' || env.BRANCH_NAME.startsWith('epic')) { - runStage('push image') { - sh 'make push_image' - } - } - } finally { - runStage('rm local image') { - sh 'make rm_local_image' - } - } - } - pipeDefault(pipeline) -} diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 2bb9ad24..00000000 --- a/LICENSE +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index 53add1f3..00000000 --- a/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -SUBMODULES = build_utils -SUBTARGETS = $(patsubst %,%/.git,$(SUBMODULES)) - -UTILS_PATH := build_utils -TEMPLATES_PATH := . - -# Name of the service -SERVICE_NAME := payform -# Service image default tag -SERVICE_IMAGE_TAG ?= $(shell git rev-parse HEAD) -# The tag for service image to be pushed with -SERVICE_IMAGE_PUSH_TAG ?= $(SERVICE_IMAGE_TAG) - -REGISTRY ?= dr2.rbkmoney.com - -# Base image for the service -BASE_IMAGE_NAME := service-fe -BASE_IMAGE_TAG := 647d66a59ba89ea42b326ca5156f5d1e1395febc - -BUILD_IMAGE_TAG := 25c031edd46040a8745334570940a0f0b2154c5c - -GIT_SSH_COMMAND := -DOCKER_RUN_OPTS = -e GIT_SSH_COMMAND='$(GIT_SSH_COMMAND)' -e NPM_TOKEN='$(GITHUB_TOKEN)' -e SENTRY_AUTH_TOKEN='$(SENTRY_AUTH_TOKEN)' - -CALL_W_CONTAINER := init check test build clean submodules - -.PHONY: $(CALL_W_CONTAINER) - -all: build - --include $(UTILS_PATH)/make_lib/utils_image.mk --include $(UTILS_PATH)/make_lib/utils_container.mk - -$(SUBTARGETS): %/.git: % - git submodule update --init $< - touch $@ - -submodules: $(SUBTARGETS) - -init: - npm i - -check: - npm run check - -test: - npm test - -build: - SENTRY_AUTH_TOKEN=$(SENTRY_AUTH_TOKEN) npm run build - -build_pr: - npm run build - -clean: - rm -rf dist diff --git a/README.md b/README.md index 49c9b48b..4f7f9abb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,4 @@ -# Payform - -[![Build Status](http://ci.rbkmoney.com/buildStatus/icon?job=rbkmoney_private/payform/master)](http://ci.rbkmoney.com/job/rbkmoney_private/job/payform/job/master) +# Checkout ## Настройка @@ -10,4 +8,6 @@ Например в случае с nginx `appConfig.json` нужно положить в `/usr/share/nginx/html` -### [Описание вариантов интеграции](https://rbkmoney.github.io/docs/docs/payments/checkout/) +## Логотип + +Заменяется в `dist/assets/logo.svg`. diff --git a/build_utils b/build_utils deleted file mode 160000 index a7655bc6..00000000 --- a/build_utils +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a7655bc60c877a65cdfe3d9b668021d970d88a76 diff --git a/config/checkout-config.js b/config/checkout-config.js index 43cc063d..626d03ae 100644 --- a/config/checkout-config.js +++ b/config/checkout-config.js @@ -39,7 +39,8 @@ module.exports = { [ { from: './src/app/finish-interaction.html' }, { from: './src/appConfig.json', to: '..' }, - { from: './src/locale/*.json', to: './locale', flatten: true } + { from: './src/locale/*.json', to: './locale', flatten: true }, + { from: './src/assets', to: '../assets' } ], { logLevel: 'warn' } ) diff --git a/config/webpack.prod.js b/config/webpack.prod.js index a3a06e56..c78e90fb 100644 --- a/config/webpack.prod.js +++ b/config/webpack.prod.js @@ -31,8 +31,8 @@ const commonProdConfig = { ? [ new SentryWebpackPlugin({ authToken: process.env.SENTRY_AUTH_TOKEN, - org: 'rbkmoney-fd', - project: 'payform', + org: 'vality', + project: 'checkout', include: './dist', ignore: ['node_modules', 'webpack.config.js'] }) diff --git a/package-lock.json b/package-lock.json index 308836d0..d5f93ed6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,13 @@ { "name": "checkout", - "version": "1.0.0", + "version": "0.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "checkout", - "version": "1.0.0", + "version": "0.1.0", + "license": "Apache-2.0", "dependencies": { "@sentry/react": "~6.13.2", "@sentry/tracing": "~6.13.2", @@ -19,15 +20,16 @@ "kjua": "^0.9.0", "libphonenumber-js": "1.9.6", "lodash-es": "~4.17.15", - "react": "~16.6.3", - "react-dom": "~16.6.3", - "react-redux": "~5.1.1", + "react": "17.0.2", + "react-dom": "17.0.2", + "react-redux": "7.2.6", + "react-svg": "14.1.8", "react-transition-group": "1.2.1", - "redux": "~3.7.2", - "redux-form": "~7.2.3", - "redux-saga": "~0.16.0", + "redux": "4.1.2", + "redux-form": "8.3.8", + "redux-saga": "1.1.3", "reselect": "~4.0.0", - "styled-components": "~4.1.1", + "styled-components": "5.3.3", "ts-polyfill": "~3.8.2", "uri-template": "~1.0.1", "url-polyfill": "~1.0.11", @@ -35,6 +37,7 @@ "whatwg-fetch": "~2.0.3" }, "devDependencies": { + "@redux-saga/testing-utils": "^1.1.3", "@sentry/webpack-plugin": "~1.17.1", "@types/card-validator": "~4.1.0", "@types/credit-card-type": "~7.0.0", @@ -44,14 +47,14 @@ "@types/jest": "~23.3.14", "@types/lodash-es": "~4.17.0", "@types/node": "^11.13.18", - "@types/react": "~16.7.6", - "@types/react-dom": "~16.0.9", - "@types/react-redux": "~5.0.21", - "@types/react-test-renderer": "~16.0.1", + "@types/react": "17.0.38", + "@types/react-dom": "17.0.11", + "@types/react-redux": "7.1.22", + "@types/react-test-renderer": "17.0.1", "@types/react-transition-group": "1.1.5", - "@types/redux-form": "~7.2.6", + "@types/redux-form": "8.3.3", "@types/reselect": "~2.2.0", - "@types/styled-components": "~4.1.0", + "@types/styled-components": "5.1.20", "@types/url-parse": "~1.1.0", "@types/uuid": "~8.3.0", "babel-jest": "~22.4.1", @@ -59,8 +62,9 @@ "babel-preset-env": "~1.7.0", "cache-loader": "~2.0.1", "compression-webpack-plugin": "~3.1.0", + "concurrently": "~6.5.1", "copy-webpack-plugin": "~5.1.1", - "cross-origin-communicator": "git+ssh://git@github.com/rbkmoney/cross-origin-communicator.git#dc3209dab12fb5d745c21b72d10ebe567270a836", + "cross-origin-communicator": "github:valitydev/cross-origin-communicator#bd13edd80e2d55cffa45c6b7b9ee3744475c5d0d", "css-loader": "~1.0.1", "file-loader": "~2.0.0", "fork-ts-checker-webpack-plugin": "~4.1.1", @@ -69,8 +73,8 @@ "jest": "~23.6.0", "mini-css-extract-plugin": "~0.4.5", "prettier": "~1.19.1", - "react-test-renderer": "~16.2.0", - "redux-devtools-extension": "~2.13.2", + "react-test-renderer": "17.0.2", + "redux-devtools-extension": "2.13.9", "rimraf": "~2.6.2", "style-loader": "~0.23.1", "svg-react-loader": "~0.4.6", @@ -82,7 +86,7 @@ "tslint-immutable": "~4.5.1", "tslint-loader": "~3.5.4", "tslint-react": "~3.6.0", - "typescript": "~3.5.3", + "typescript": "4.5.4", "typescript-plugin-styled-components": "~1.0.0", "webpack": "~4.29.0", "webpack-bundle-analyzer": "~3.6.0", @@ -93,46 +97,144 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dependencies": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "dependencies": { + "@babel/types": "^7.16.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dependencies": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dependencies": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -144,7 +246,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -158,7 +259,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, "engines": { "node": ">=4" } @@ -166,14 +266,12 @@ "node_modules/@babel/highlight/node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -181,27 +279,105 @@ "node": ">=4" } }, + "node_modules/@babel/parser": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/runtime": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.5.tgz", - "integrity": "sha512-xKnPpXG/pvK1B90JkwwxSGii90rQGKtzcMt2gI5G6+M0REXaq6rOHsGC2ay6/d0Uje7zzvSzjEzfR3ENhFlrfA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", "dependencies": { - "regenerator-runtime": "^0.12.0" + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@babel/types": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.0.tgz", - "integrity": "sha512-QkFPw68QqWU1/RVPyBe8SO7lXbPfjtqAxRYQKpFpaB8yMq7X2qAqfwK5LKoQufEkSmO5NQ70O6Kc3Afk03RwXw==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dependencies": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/types/node_modules/to-fast-properties": { @@ -213,22 +389,84 @@ } }, "node_modules/@emotion/is-prop-valid": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.6.8.tgz", - "integrity": "sha512-IMSL7ekYhmFlILXcouA6ket3vV7u9BqStlXzbKOF9HBtpUPMMlHU+bBxrLOa2NvleVwNIxeq/zL8LafLbeUXcA==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", "dependencies": { - "@emotion/memoize": "^0.6.6" + "@emotion/memoize": "0.7.4" } }, "node_modules/@emotion/memoize": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.6.tgz", - "integrity": "sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ==" + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" }, "node_modules/@emotion/unitless": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.3.tgz", - "integrity": "sha512-4zAPlpDEh2VwXswwr/t8xGNDGg8RQiPxtxZ3qQEXyQsBV39ptTdESCjuBvGze1nLMVrxmTIKmnO/nAV8Tqjjzg==" + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "node_modules/@redux-saga/core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.1.3.tgz", + "integrity": "sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg==", + "dependencies": { + "@babel/runtime": "^7.6.3", + "@redux-saga/deferred": "^1.1.2", + "@redux-saga/delay-p": "^1.1.2", + "@redux-saga/is": "^1.1.2", + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0", + "redux": "^4.0.4", + "typescript-tuple": "^2.2.1" + } + }, + "node_modules/@redux-saga/deferred": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.1.2.tgz", + "integrity": "sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ==" + }, + "node_modules/@redux-saga/delay-p": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.1.2.tgz", + "integrity": "sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g==", + "dependencies": { + "@redux-saga/symbols": "^1.1.2" + } + }, + "node_modules/@redux-saga/is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.2.tgz", + "integrity": "sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w==", + "dependencies": { + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0" + } + }, + "node_modules/@redux-saga/symbols": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.1.2.tgz", + "integrity": "sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ==" + }, + "node_modules/@redux-saga/testing-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@redux-saga/testing-utils/-/testing-utils-1.1.3.tgz", + "integrity": "sha512-MGMcBHgt80CoC8s8i0Mc7svGJPysS9qkJuAINlg+NvudLZcV23myd+H4uaXA4zmiLf16C4M+97b+e6wFoTaGcw==", + "dev": true, + "dependencies": { + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0" + } + }, + "node_modules/@redux-saga/types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.1.0.tgz", + "integrity": "sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg==" }, "node_modules/@sentry/browser": { "version": "6.13.2", @@ -359,14 +597,6 @@ "react": "15.x || 16.x || 17.x" } }, - "node_modules/@sentry/react/node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, "node_modules/@sentry/tracing": { "version": "6.13.2", "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.13.2.tgz", @@ -414,6 +644,21 @@ "node": ">= 8" } }, + "node_modules/@tanem/svg-injector": { + "version": "10.1.15", + "resolved": "https://registry.npmjs.org/@tanem/svg-injector/-/svg-injector-10.1.15.tgz", + "integrity": "sha512-dR6iN4Ha6w9qcfEEgp3l8jcQHi2TDRjvfD38B6BJGBFObHbO8++/NujVUPlhM6ds5X8Lu5R1+MCig5LIw3bMrw==", + "dependencies": { + "@babel/runtime": "^7.16.7", + "content-type": "^1.0.4", + "tslib": "^2.3.1" + } + }, + "node_modules/@tanem/svg-injector/node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, "node_modules/@types/card-validator": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@types/card-validator/-/card-validator-4.1.0.tgz", @@ -448,6 +693,15 @@ "@types/node": "*" } }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/ismobilejs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/ismobilejs/-/ismobilejs-0.4.1.tgz", @@ -488,45 +742,44 @@ "dev": true }, "node_modules/@types/prop-types": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.6.tgz", - "integrity": "sha512-ZBFR7TROLVzCkswA3Fmqq+IIJt62/T7aY/Dmz+QkU7CaW2QFqAitCE8Ups7IzmGhcN1YWMBT4Qcoc07jU9hOJQ==", - "dev": true + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" }, "node_modules/@types/react": { - "version": "16.7.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.7.6.tgz", - "integrity": "sha512-QBUfzftr/8eg/q3ZRgf/GaDP6rTYc7ZNem+g4oZM38C9vXyV8AWRWaTQuW5yCoZTsfHrN7b3DeEiUnqH9SrnpA==", - "dev": true, + "version": "17.0.38", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.38.tgz", + "integrity": "sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ==", "dependencies": { "@types/prop-types": "*", - "csstype": "^2.2.0" + "@types/scheduler": "*", + "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.9.tgz", - "integrity": "sha512-4Z0bW+75zeQgsEg7RaNuS1k9MKhci7oQqZXxrV5KUGIyXZHHAAL3KA4rjhdH8o6foZ5xsRMSqkoM5A3yRVPR5w==", + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", + "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", "dev": true, "dependencies": { - "@types/node": "*", "@types/react": "*" } }, "node_modules/@types/react-redux": { - "version": "5.0.21", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-5.0.21.tgz", - "integrity": "sha512-ewkOW4GjnyXq5L++T31utI8yRmwj8iCIahZohYi1Ef7Xkrw0V/q92ao7x20rm38FKgImDaCCsaRGWfCJmF/Ukg==", - "dev": true, + "version": "7.1.22", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.22.tgz", + "integrity": "sha512-GxIA1kM7ClU73I6wg9IRTVwSO9GS+SAKZKe0Enj+82HMU6aoESFU2HNAdNi3+J53IaOHPiUfT3kSG4L828joDQ==", "dependencies": { + "@types/hoist-non-react-statics": "^3.3.0", "@types/react": "*", - "redux": "^3.6.0" + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" } }, "node_modules/@types/react-test-renderer": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-16.0.1.tgz", - "integrity": "sha512-kmNh8g67Ck/y/vp6KX+4JTJXiTGLZBylNhu+R7sm7zcvsrnIGVO6J1zew5inVg428j9f8yHpl68RcYOZXVborQ==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-17.0.1.tgz", + "integrity": "sha512-3Fi2O6Zzq/f3QR9dRnlnHso9bMl7weKCviFmfF6B4LS1Uat6Hkm15k0ZAQuDz+UBq6B3+g+NM6IT2nr5QgPzCw==", "dev": true, "dependencies": { "@types/react": "*" @@ -542,13 +795,13 @@ } }, "node_modules/@types/redux-form": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/@types/redux-form/-/redux-form-7.2.6.tgz", - "integrity": "sha512-pDiEky1e/n6dBC4F7xAqSkQB9y04rZ3IeMqAUmR4YaNuicyWUXzKpBQCY5re7qYB37sM4YT3bFR6zrgD87YNOA==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@types/redux-form/-/redux-form-8.3.3.tgz", + "integrity": "sha512-RaxUMCXs72H4vSfwU4i/86/RDbQ4p3rK4/4TQvQXHJ49GTyEgdUgWDIaOnKZc84iNwvJTwv+ohDbw/tfXxLg7Q==", "dev": true, "dependencies": { "@types/react": "*", - "redux": "^3.6.0" + "redux": "^3.6.0 || ^4.0.0" } }, "node_modules/@types/reselect": { @@ -561,15 +814,20 @@ "reselect": "*" } }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, "node_modules/@types/styled-components": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-4.1.0.tgz", - "integrity": "sha512-B2OuPjx5LG+JIgDid7mR9WCYQ4XqWgOe9D6oyUtnEVES4D3S4rtyD0Vgp7BzAk6YAkLM6m4MqK/9Ityl5SwwTg==", + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.20.tgz", + "integrity": "sha512-TvpQceFwnxJJsAzR1aHsYpL5DxWMHRzM2/0EA6sGtRjV6DtJubmNxeoPMPiIPQzKEGNHccwObXO7Hug/iwm1Xw==", "dev": true, "dependencies": { - "@types/node": "*", + "@types/hoist-non-react-statics": "*", "@types/react": "*", - "csstype": "^2.2.0" + "csstype": "^3.0.2" } }, "node_modules/@types/url-parse": { @@ -1104,12 +1362,6 @@ "node": ">=0.10.0" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, "node_modules/asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -1476,14 +1728,14 @@ "dev": true }, "node_modules/babel-plugin-styled-components": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.0.tgz", - "integrity": "sha512-sQVKG8irFXx14ZfaK1bBePirfkacl3j8nZwSZK+ZjsbnadRHKQTbhXbe/RB1vT6Vgkz45E+V95LBq4KqdhZUNw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.2.tgz", + "integrity": "sha512-7eG5NE8rChnNTDxa6LQfynwgHTVOYYaHJbUYSlOhk8QBXIQiMBKq4gyfHBBKPrxUcVBXVJL61ihduCpCQbuNbw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.10" + "lodash": "^4.17.11" }, "peerDependencies": { "styled-components": ">= 2" @@ -2788,16 +3040,14 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, "dependencies": { "color-name": "^1.1.1" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/combined-stream": { "version": "1.0.7", @@ -3178,6 +3428,243 @@ "typedarray": "^0.0.6" } }, + "node_modules/concurrently": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", + "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/concurrently/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/concurrently/node_modules/date-fns": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", + "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/concurrently/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/concurrently/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", @@ -3221,7 +3708,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -3485,8 +3971,8 @@ }, "node_modules/cross-origin-communicator": { "version": "1.0.0", - "resolved": "git+ssh://git@github.com/rbkmoney/cross-origin-communicator.git#dc3209dab12fb5d745c21b72d10ebe567270a836", - "integrity": "sha512-FLAy7RDkiBNVzm6fVWpLIe/ehdKs1uTW0TWI+bysaMDDDiLClW1VTtlHERNxSTwfuHyvlNzl+lPCCjgp8lSPaA==", + "resolved": "git+ssh://git@github.com/valitydev/cross-origin-communicator.git#bd13edd80e2d55cffa45c6b7b9ee3744475c5d0d", + "integrity": "sha512-Pm3wuqjueoW81eoB5326W4fm2L1VuurNpz8efS4yOf4rPUej2Quq5cTjlNOi0eWiI982L7BGJFJUo/dW7ELGVg==", "dev": true, "dependencies": { "rimraf": "~2.6.3", @@ -3657,15 +4143,20 @@ } }, "node_modules/css-to-react-native": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", - "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", + "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" + "postcss-value-parser": "^4.0.2" } }, + "node_modules/css-to-react-native/node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, "node_modules/css-what": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", @@ -3709,10 +4200,9 @@ } }, "node_modules/csstype": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.7.tgz", - "integrity": "sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw==", - "dev": true + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" }, "node_modules/currency-formatter": { "version": "1.2.1", @@ -3805,7 +4295,8 @@ "node_modules/deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true }, "node_modules/deep-is": { "version": "0.1.3", @@ -4308,15 +4799,6 @@ "node": ">= 0.8" } }, - "node_modules/encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "dependencies": { - "iconv-lite": "~0.4.13" - } - }, "node_modules/end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -4402,6 +4884,15 @@ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4412,7 +4903,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -4500,6 +4990,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4968,28 +5459,6 @@ "bser": "^2.0.0" } }, - "node_modules/fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "dev": true, - "dependencies": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "node_modules/fbjs/node_modules/core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true - }, "node_modules/figgy-pudding": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", @@ -6513,15 +6982,15 @@ "dev": true }, "node_modules/has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { - "function-bind": "^1.0.2" + "function-bind": "^1.1.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4.0" } }, "node_modules/has-ansi": { @@ -6634,9 +7103,12 @@ } }, "node_modules/hoist-non-react-statics": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", - "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } }, "node_modules/home-or-tmp": { "version": "2.0.0", @@ -6924,18 +7396,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/icss-replace-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", @@ -7211,6 +7671,18 @@ "is-ci": "bin.js" } }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -7547,16 +8019,6 @@ "node": ">=0.10.0" } }, - "node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, - "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -9640,11 +10102,11 @@ } }, "node_modules/loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { - "js-tokens": "^3.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" @@ -9802,11 +10264,6 @@ "node": ">=6" } }, - "node_modules/memoize-one": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.3.tgz", - "integrity": "sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==" - }, "node_modules/memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -10217,16 +10674,6 @@ "lower-case": "^1.1.1" } }, - "node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, "node_modules/node-forge": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", @@ -10913,9 +11360,9 @@ } }, "node_modules/path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "node_modules/path-to-regexp": { @@ -11129,7 +11576,8 @@ "node_modules/postcss-value-parser": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=" + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true }, "node_modules/postcss/node_modules/ansi-styles": { "version": "3.2.1", @@ -11291,15 +11739,6 @@ "node": ">=0.4.0" } }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "dependencies": { - "asap": "~2.0.3" - } - }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -11320,24 +11759,13 @@ } }, "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/prop-types/node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" + "react-is": "^16.13.1" } }, "node_modules/proxy-addr": { @@ -11561,31 +11989,28 @@ "dev": true }, "node_modules/react": { - "version": "16.6.3", - "resolved": "https://registry.npmjs.org/react/-/react-16.6.3.tgz", - "integrity": "sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.11.2" + "object-assign": "^4.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "16.6.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.6.3.tgz", - "integrity": "sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.11.2" + "scheduler": "^0.20.2" }, "peerDependencies": { - "react": "^16.6.3" + "react": "17.0.2" } }, "node_modules/react-is": { @@ -11593,54 +12018,84 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, "node_modules/react-redux": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.1.tgz", - "integrity": "sha512-LE7Ned+cv5qe7tMV5BPYkGQ5Lpg8gzgItK07c67yHvJ8t0iaD9kPFPAli/mYkiyJYrs2pJgExR2ZgsGqlrOApg==", + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz", + "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==", "dependencies": { - "@babel/runtime": "^7.1.2", - "hoist-non-react-statics": "^3.1.0", - "invariant": "^2.2.4", - "loose-envify": "^1.1.0", - "prop-types": "^15.6.1", - "react-is": "^16.6.0", - "react-lifecycles-compat": "^3.0.0" + "@babel/runtime": "^7.15.4", + "@types/react-redux": "^7.1.20", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" }, "peerDependencies": { - "react": "^0.14.0 || ^15.0.0-0 || ^16.0.0-0", - "redux": "^2.0.0 || ^3.0.0 || ^4.0.0-0" + "react": "^16.8.3 || ^17" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } } }, - "node_modules/react-redux/node_modules/hoist-non-react-statics": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.1.0.tgz", - "integrity": "sha512-MYcYuROh7SBM69xHGqXEwQqDux34s9tz+sCnxJmN18kgWh6JFdTw/5YdZtqsOdZJXddE/wUpCzfEdDrJj8p0Iw==", + "node_modules/react-redux/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/react-shallow-renderer": { + "version": "16.14.1", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz", + "integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==", + "dev": true, "dependencies": { - "react-is": "^16.3.2" + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0" }, "peerDependencies": { - "react": ">=14.x" + "react": "^16.0.0 || ^17.0.0" + } + }, + "node_modules/react-svg": { + "version": "14.1.8", + "resolved": "https://registry.npmjs.org/react-svg/-/react-svg-14.1.8.tgz", + "integrity": "sha512-YqiiPmCDH4fUH1hj9UehcE8EpTxo2O8zLwhDlmntxQN/KhdLNo3v2944j2K3WrlRms2RPPw9YO7e8+OJ/tVsjg==", + "dependencies": { + "@babel/runtime": "^7.16.7", + "@tanem/svg-injector": "^10.1.14", + "@types/prop-types": "^15.7.4", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": "^15.5.4 || ^16.0.0 || ^17.0.0", + "react-dom": "^15.5.4 || ^16.0.0 || ^17.0.0" } }, "node_modules/react-test-renderer": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.2.0.tgz", - "integrity": "sha512-Kd4gJFtpNziR9ElOE/C23LeflKLZPRpNQYWP3nQBY43SJ5a+xyEGSeMrm2zxNKXcnCbBS/q1UpD9gqd5Dv+rew==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", + "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", "dev": true, "dependencies": { - "fbjs": "^0.8.16", "object-assign": "^4.1.1", - "prop-types": "^15.6.0" + "react-is": "^17.0.2", + "react-shallow-renderer": "^16.13.1", + "scheduler": "^0.20.2" }, "peerDependencies": { - "react": "^16.0.0" + "react": "17.0.2" } }, + "node_modules/react-test-renderer/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, "node_modules/react-transition-group": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-1.2.1.tgz", @@ -11751,49 +12206,63 @@ } }, "node_modules/redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.2.tgz", + "integrity": "sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==", "dependencies": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" + "@babel/runtime": "^7.9.2" } }, "node_modules/redux-devtools-extension": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.2.tgz", - "integrity": "sha1-4Pmo6N/KfBe+kscSSVijuU6ykR0=", + "version": "2.13.9", + "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz", + "integrity": "sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A==", + "deprecated": "Package moved to @redux-devtools/extension.", "dev": true, "peerDependencies": { - "redux": "^3.1.0" + "redux": "^3.1.0 || ^4.0.0" } }, "node_modules/redux-form": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.2.3.tgz", - "integrity": "sha512-UpopunO0bYMwGvKaHq5bcUUBJDvFmZ6lMM/uFfnzjpCtuP39Eb7i6UpB4OPzfuIBVpbDNIF5GRewQFvLZn9afw==", + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-8.3.8.tgz", + "integrity": "sha512-PzXhA0d+awIc4PkuhbDa6dCEiraMrGMyyDlYEVNX6qEyW/G2SqZXrjav5zrpXb0CCeqQSc9iqwbMtYQXbJbOAQ==", "dependencies": { - "deep-equal": "^1.0.1", + "@babel/runtime": "^7.9.2", "es6-error": "^4.1.1", - "hoist-non-react-statics": "^2.3.1", - "invariant": "^2.2.2", + "hoist-non-react-statics": "^3.3.2", + "invariant": "^2.2.4", "is-promise": "^2.1.0", - "lodash": "^4.17.3", - "lodash-es": "^4.17.3", - "prop-types": "^15.5.9" + "lodash": "^4.17.15", + "prop-types": "^15.6.1", + "react-is": "^16.4.2" + }, + "engines": { + "node": ">=8.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/redux-form" }, "peerDependencies": { - "react": "^15.0.0-0 || ^16.0.0-0", - "react-redux": "^4.3.0 || ^5.0.0", - "redux": "^3.0.0" + "immutable": "^3.8.2 || ^4.0.0", + "react": "^16.4.2 || ^17.0.0", + "react-redux": "^6.0.1 || ^7.0.0", + "redux": "^3.7.2 || ^4.0.0" + }, + "peerDependenciesMeta": { + "immutable": { + "optional": true + } } }, "node_modules/redux-saga": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-0.16.0.tgz", - "integrity": "sha1-CiMdsKFIkwHdmA9vL4jYztQY9yQ=" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.1.3.tgz", + "integrity": "sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw==", + "dependencies": { + "@redux-saga/core": "^1.1.3" + } }, "node_modules/regenerate": { "version": "1.3.3", @@ -12087,12 +12556,20 @@ "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" }, "node_modules/resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", "dev": true, "dependencies": { - "path-parse": "^1.0.5" + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-cwd": { @@ -12200,6 +12677,18 @@ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", "dev": true }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -12266,9 +12755,9 @@ } }, "node_modules/scheduler": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.11.2.tgz", - "integrity": "sha512-+WCP3s3wOaW4S7C1tl3TEXp4l9lJn0ZK8G3W3WKRWmw77Z2cIFUW2MiNTMHn5sCjxN+t7N43HAOOgMjyAg5hlg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -12435,6 +12924,11 @@ "sha.js": "bin.js" } }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -12680,7 +13174,6 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -12713,6 +13206,12 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, "node_modules/spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", @@ -13116,25 +13615,32 @@ } }, "node_modules/styled-components": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-4.1.1.tgz", - "integrity": "sha512-UzT/qyoOyKpYooeLdwKrPHZ85R8KWl8i0fbyH9I3z6B2WT9uGDCV7J4kbfKsBeSWFD9EytBriEODOkybcUFD/Q==", - "hasInstallScript": true, + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.3.tgz", + "integrity": "sha512-++4iHwBM7ZN+x6DtPPWkCI4vdtwumQ+inA/DdAsqYd4SVgUKJie5vXyzotA00ttcFdQkCng7zc6grwlfIfw+lw==", "dependencies": { - "@emotion/is-prop-valid": "^0.6.8", - "@emotion/unitless": "^0.7.0", - "babel-plugin-styled-components": ">= 1", - "css-to-react-native": "^2.2.2", - "memoize-one": "^4.0.0", - "prop-types": "^15.5.4", - "react-is": "^16.6.0", - "stylis": "^3.5.0", - "stylis-rule-sheet": "^0.0.10", + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^0.8.8", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", "supports-color": "^5.5.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, "peerDependencies": { - "react": ">= 16.3.0", - "react-dom": ">= 16.3.0" + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-is": ">= 16.8.0" } }, "node_modules/styled-components/node_modules/has-flag": { @@ -13156,19 +13662,6 @@ "node": ">=4" } }, - "node_modules/stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "node_modules/stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", - "peerDependencies": { - "stylis": "^3.5.0" - } - }, "node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -13178,6 +13671,18 @@ "node": ">=0.8.0" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/svg-react-loader": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/svg-react-loader/-/svg-react-loader-0.4.6.tgz", @@ -13214,14 +13719,6 @@ "node": ">=0.8.0" } }, - "node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/symbol-tree": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", @@ -13539,6 +14036,15 @@ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -13884,9 +14390,9 @@ "dev": true }, "node_modules/typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -13896,6 +14402,19 @@ "node": ">=4.2.0" } }, + "node_modules/typescript-compare": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz", + "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==", + "dependencies": { + "typescript-logic": "^0.0.0" + } + }, + "node_modules/typescript-logic": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz", + "integrity": "sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==" + }, "node_modules/typescript-plugin-styled-components": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typescript-plugin-styled-components/-/typescript-plugin-styled-components-1.0.0.tgz", @@ -13905,23 +14424,12 @@ "typescript": "^2.5.2 || ^3.0" } }, - "node_modules/ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" + "node_modules/typescript-tuple": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz", + "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==", + "dependencies": { + "typescript-compare": "^0.0.2" } }, "node_modules/uglify-js": { @@ -16017,38 +16525,100 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.16.7" + } + }, + "@babel/generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "requires": { + "@babel/types": "^7.16.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + } } }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "requires": { + "@babel/types": "^7.16.7" } }, "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.16.7" } }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/highlight": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -16056,7 +16626,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -16065,7 +16634,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -16075,48 +16643,96 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, + "@babel/parser": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==" + }, "@babel/runtime": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.5.tgz", - "integrity": "sha512-xKnPpXG/pvK1B90JkwwxSGii90rQGKtzcMt2gI5G6+M0REXaq6rOHsGC2ay6/d0Uje7zzvSzjEzfR3ENhFlrfA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", "requires": { - "regenerator-runtime": "^0.12.0" + "regenerator-runtime": "^0.13.4" }, "dependencies": { "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + } + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, "@babel/types": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.0.tgz", - "integrity": "sha512-QkFPw68QqWU1/RVPyBe8SO7lXbPfjtqAxRYQKpFpaB8yMq7X2qAqfwK5LKoQufEkSmO5NQ70O6Kc3Afk03RwXw==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" }, "dependencies": { @@ -16128,22 +16744,84 @@ } }, "@emotion/is-prop-valid": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.6.8.tgz", - "integrity": "sha512-IMSL7ekYhmFlILXcouA6ket3vV7u9BqStlXzbKOF9HBtpUPMMlHU+bBxrLOa2NvleVwNIxeq/zL8LafLbeUXcA==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", "requires": { - "@emotion/memoize": "^0.6.6" + "@emotion/memoize": "0.7.4" } }, "@emotion/memoize": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.6.tgz", - "integrity": "sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ==" + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" }, "@emotion/unitless": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.3.tgz", - "integrity": "sha512-4zAPlpDEh2VwXswwr/t8xGNDGg8RQiPxtxZ3qQEXyQsBV39ptTdESCjuBvGze1nLMVrxmTIKmnO/nAV8Tqjjzg==" + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "@redux-saga/core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.1.3.tgz", + "integrity": "sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg==", + "requires": { + "@babel/runtime": "^7.6.3", + "@redux-saga/deferred": "^1.1.2", + "@redux-saga/delay-p": "^1.1.2", + "@redux-saga/is": "^1.1.2", + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0", + "redux": "^4.0.4", + "typescript-tuple": "^2.2.1" + } + }, + "@redux-saga/deferred": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.1.2.tgz", + "integrity": "sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ==" + }, + "@redux-saga/delay-p": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.1.2.tgz", + "integrity": "sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g==", + "requires": { + "@redux-saga/symbols": "^1.1.2" + } + }, + "@redux-saga/is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.2.tgz", + "integrity": "sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w==", + "requires": { + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0" + } + }, + "@redux-saga/symbols": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.1.2.tgz", + "integrity": "sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ==" + }, + "@redux-saga/testing-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@redux-saga/testing-utils/-/testing-utils-1.1.3.tgz", + "integrity": "sha512-MGMcBHgt80CoC8s8i0Mc7svGJPysS9qkJuAINlg+NvudLZcV23myd+H4uaXA4zmiLf16C4M+97b+e6wFoTaGcw==", + "dev": true, + "requires": { + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0" + } + }, + "@redux-saga/types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.1.0.tgz", + "integrity": "sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg==" }, "@sentry/browser": { "version": "6.13.2", @@ -16246,16 +16924,6 @@ "@sentry/utils": "6.13.2", "hoist-non-react-statics": "^3.3.2", "tslib": "^1.9.3" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - } } }, "@sentry/tracing": { @@ -16293,6 +16961,23 @@ "@sentry/cli": "^1.68.0" } }, + "@tanem/svg-injector": { + "version": "10.1.15", + "resolved": "https://registry.npmjs.org/@tanem/svg-injector/-/svg-injector-10.1.15.tgz", + "integrity": "sha512-dR6iN4Ha6w9qcfEEgp3l8jcQHi2TDRjvfD38B6BJGBFObHbO8++/NujVUPlhM6ds5X8Lu5R1+MCig5LIw3bMrw==", + "requires": { + "@babel/runtime": "^7.16.7", + "content-type": "^1.0.4", + "tslib": "^2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, "@types/card-validator": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@types/card-validator/-/card-validator-4.1.0.tgz", @@ -16327,6 +17012,15 @@ "@types/node": "*" } }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "@types/ismobilejs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/ismobilejs/-/ismobilejs-0.4.1.tgz", @@ -16367,45 +17061,44 @@ "dev": true }, "@types/prop-types": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.6.tgz", - "integrity": "sha512-ZBFR7TROLVzCkswA3Fmqq+IIJt62/T7aY/Dmz+QkU7CaW2QFqAitCE8Ups7IzmGhcN1YWMBT4Qcoc07jU9hOJQ==", - "dev": true + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" }, "@types/react": { - "version": "16.7.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.7.6.tgz", - "integrity": "sha512-QBUfzftr/8eg/q3ZRgf/GaDP6rTYc7ZNem+g4oZM38C9vXyV8AWRWaTQuW5yCoZTsfHrN7b3DeEiUnqH9SrnpA==", - "dev": true, + "version": "17.0.38", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.38.tgz", + "integrity": "sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ==", "requires": { "@types/prop-types": "*", - "csstype": "^2.2.0" + "@types/scheduler": "*", + "csstype": "^3.0.2" } }, "@types/react-dom": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.9.tgz", - "integrity": "sha512-4Z0bW+75zeQgsEg7RaNuS1k9MKhci7oQqZXxrV5KUGIyXZHHAAL3KA4rjhdH8o6foZ5xsRMSqkoM5A3yRVPR5w==", + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", + "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", "dev": true, "requires": { - "@types/node": "*", "@types/react": "*" } }, "@types/react-redux": { - "version": "5.0.21", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-5.0.21.tgz", - "integrity": "sha512-ewkOW4GjnyXq5L++T31utI8yRmwj8iCIahZohYi1Ef7Xkrw0V/q92ao7x20rm38FKgImDaCCsaRGWfCJmF/Ukg==", - "dev": true, + "version": "7.1.22", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.22.tgz", + "integrity": "sha512-GxIA1kM7ClU73I6wg9IRTVwSO9GS+SAKZKe0Enj+82HMU6aoESFU2HNAdNi3+J53IaOHPiUfT3kSG4L828joDQ==", "requires": { + "@types/hoist-non-react-statics": "^3.3.0", "@types/react": "*", - "redux": "^3.6.0" + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" } }, "@types/react-test-renderer": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-16.0.1.tgz", - "integrity": "sha512-kmNh8g67Ck/y/vp6KX+4JTJXiTGLZBylNhu+R7sm7zcvsrnIGVO6J1zew5inVg428j9f8yHpl68RcYOZXVborQ==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-17.0.1.tgz", + "integrity": "sha512-3Fi2O6Zzq/f3QR9dRnlnHso9bMl7weKCviFmfF6B4LS1Uat6Hkm15k0ZAQuDz+UBq6B3+g+NM6IT2nr5QgPzCw==", "dev": true, "requires": { "@types/react": "*" @@ -16421,13 +17114,13 @@ } }, "@types/redux-form": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/@types/redux-form/-/redux-form-7.2.6.tgz", - "integrity": "sha512-pDiEky1e/n6dBC4F7xAqSkQB9y04rZ3IeMqAUmR4YaNuicyWUXzKpBQCY5re7qYB37sM4YT3bFR6zrgD87YNOA==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@types/redux-form/-/redux-form-8.3.3.tgz", + "integrity": "sha512-RaxUMCXs72H4vSfwU4i/86/RDbQ4p3rK4/4TQvQXHJ49GTyEgdUgWDIaOnKZc84iNwvJTwv+ohDbw/tfXxLg7Q==", "dev": true, "requires": { "@types/react": "*", - "redux": "^3.6.0" + "redux": "^3.6.0 || ^4.0.0" } }, "@types/reselect": { @@ -16439,15 +17132,20 @@ "reselect": "*" } }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, "@types/styled-components": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-4.1.0.tgz", - "integrity": "sha512-B2OuPjx5LG+JIgDid7mR9WCYQ4XqWgOe9D6oyUtnEVES4D3S4rtyD0Vgp7BzAk6YAkLM6m4MqK/9Ityl5SwwTg==", + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.20.tgz", + "integrity": "sha512-TvpQceFwnxJJsAzR1aHsYpL5DxWMHRzM2/0EA6sGtRjV6DtJubmNxeoPMPiIPQzKEGNHccwObXO7Hug/iwm1Xw==", "dev": true, "requires": { - "@types/node": "*", + "@types/hoist-non-react-statics": "*", "@types/react": "*", - "csstype": "^2.2.0" + "csstype": "^3.0.2" } }, "@types/url-parse": { @@ -16906,12 +17604,6 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -17259,14 +17951,14 @@ "dev": true }, "babel-plugin-styled-components": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.0.tgz", - "integrity": "sha512-sQVKG8irFXx14ZfaK1bBePirfkacl3j8nZwSZK+ZjsbnadRHKQTbhXbe/RB1vT6Vgkz45E+V95LBq4KqdhZUNw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.2.tgz", + "integrity": "sha512-7eG5NE8rChnNTDxa6LQfynwgHTVOYYaHJbUYSlOhk8QBXIQiMBKq4gyfHBBKPrxUcVBXVJL61ihduCpCQbuNbw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "babel-plugin-syntax-async-functions": { @@ -18465,16 +19157,14 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, "requires": { "color-name": "^1.1.1" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "combined-stream": { "version": "1.0.7", @@ -18771,6 +19461,177 @@ "typedarray": "^0.0.6" } }, + "concurrently": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", + "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "date-fns": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", + "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, "connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", @@ -18807,8 +19668,7 @@ "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "convert-source-map": { "version": "1.6.0", @@ -19025,10 +19885,10 @@ "integrity": "sha512-+1kZKW717eDTbZ1/EjkEi4+UrD2SygU2Iujn/VlrMHXloGW/y5GqPlQ/KgT4gaoDmWyufBfm/CAzNkpeccfMtA==" }, "cross-origin-communicator": { - "version": "git+ssh://git@github.com/rbkmoney/cross-origin-communicator.git#dc3209dab12fb5d745c21b72d10ebe567270a836", - "integrity": "sha512-FLAy7RDkiBNVzm6fVWpLIe/ehdKs1uTW0TWI+bysaMDDDiLClW1VTtlHERNxSTwfuHyvlNzl+lPCCjgp8lSPaA==", + "version": "git+ssh://git@github.com/valitydev/cross-origin-communicator.git#bd13edd80e2d55cffa45c6b7b9ee3744475c5d0d", + "integrity": "sha512-Pm3wuqjueoW81eoB5326W4fm2L1VuurNpz8efS4yOf4rPUej2Quq5cTjlNOi0eWiI982L7BGJFJUo/dW7ELGVg==", "dev": true, - "from": "cross-origin-communicator@git+ssh://git@github.com/rbkmoney/cross-origin-communicator.git#dc3209dab12fb5d745c21b72d10ebe567270a836", + "from": "cross-origin-communicator@github:valitydev/cross-origin-communicator#bd13edd80e2d55cffa45c6b7b9ee3744475c5d0d", "requires": { "rimraf": "~2.6.3", "typescript": "~3.3.4000" @@ -19179,13 +20039,20 @@ } }, "css-to-react-native": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", - "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", + "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", "requires": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + } } }, "css-what": { @@ -19216,10 +20083,9 @@ } }, "csstype": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.7.tgz", - "integrity": "sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw==", - "dev": true + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" }, "currency-formatter": { "version": "1.2.1", @@ -19305,7 +20171,8 @@ "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true }, "deep-is": { "version": "0.1.3", @@ -19740,15 +20607,6 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -19822,6 +20680,12 @@ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -19831,8 +20695,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { "version": "1.11.1", @@ -19890,7 +20753,8 @@ "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "etag": { "version": "1.8.1", @@ -20286,29 +21150,6 @@ "bser": "^2.0.0" } }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "dev": true, - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - } - } - }, "figgy-pudding": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", @@ -21523,12 +22364,12 @@ "dev": true }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "^1.0.2" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -21622,9 +22463,12 @@ } }, "hoist-non-react-statics": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", - "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } }, "home-or-tmp": { "version": "2.0.0", @@ -21874,15 +22718,6 @@ } } }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "icss-replace-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", @@ -22108,6 +22943,15 @@ "ci-info": "^1.5.0" } }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -22365,16 +23209,6 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -24113,11 +24947,11 @@ "dev": true }, "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "js-tokens": "^3.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "lower-case": { @@ -24246,11 +25080,6 @@ } } }, - "memoize-one": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.3.tgz", - "integrity": "sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==" - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -24603,16 +25432,6 @@ "lower-case": "^1.1.1" } }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, "node-forge": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", @@ -25183,9 +26002,9 @@ "dev": true }, "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-to-regexp": { @@ -25411,7 +26230,8 @@ "postcss-value-parser": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=" + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true }, "prelude-ls": { "version": "1.1.2", @@ -25492,15 +26312,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "requires": { - "asap": "~2.0.3" - } - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -25518,23 +26329,13 @@ } }, "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", - "react-is": "^16.8.1" - }, - "dependencies": { - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - } + "react-is": "^16.13.1" } }, "proxy-addr": { @@ -25725,25 +26526,22 @@ } }, "react": { - "version": "16.6.3", - "resolved": "https://registry.npmjs.org/react/-/react-16.6.3.tgz", - "integrity": "sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.11.2" + "object-assign": "^4.1.1" } }, "react-dom": { - "version": "16.6.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.6.3.tgz", - "integrity": "sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.11.2" + "scheduler": "^0.20.2" } }, "react-is": { @@ -25751,44 +26549,65 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, "react-redux": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.1.tgz", - "integrity": "sha512-LE7Ned+cv5qe7tMV5BPYkGQ5Lpg8gzgItK07c67yHvJ8t0iaD9kPFPAli/mYkiyJYrs2pJgExR2ZgsGqlrOApg==", + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz", + "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==", "requires": { - "@babel/runtime": "^7.1.2", - "hoist-non-react-statics": "^3.1.0", - "invariant": "^2.2.4", - "loose-envify": "^1.1.0", - "prop-types": "^15.6.1", - "react-is": "^16.6.0", - "react-lifecycles-compat": "^3.0.0" + "@babel/runtime": "^7.15.4", + "@types/react-redux": "^7.1.20", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" }, "dependencies": { - "hoist-non-react-statics": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.1.0.tgz", - "integrity": "sha512-MYcYuROh7SBM69xHGqXEwQqDux34s9tz+sCnxJmN18kgWh6JFdTw/5YdZtqsOdZJXddE/wUpCzfEdDrJj8p0Iw==", - "requires": { - "react-is": "^16.3.2" - } + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" } } }, - "react-test-renderer": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.2.0.tgz", - "integrity": "sha512-Kd4gJFtpNziR9ElOE/C23LeflKLZPRpNQYWP3nQBY43SJ5a+xyEGSeMrm2zxNKXcnCbBS/q1UpD9gqd5Dv+rew==", + "react-shallow-renderer": { + "version": "16.14.1", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz", + "integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==", "dev": true, "requires": { - "fbjs": "^0.8.16", "object-assign": "^4.1.1", - "prop-types": "^15.6.0" + "react-is": "^16.12.0 || ^17.0.0" + } + }, + "react-svg": { + "version": "14.1.8", + "resolved": "https://registry.npmjs.org/react-svg/-/react-svg-14.1.8.tgz", + "integrity": "sha512-YqiiPmCDH4fUH1hj9UehcE8EpTxo2O8zLwhDlmntxQN/KhdLNo3v2944j2K3WrlRms2RPPw9YO7e8+OJ/tVsjg==", + "requires": { + "@babel/runtime": "^7.16.7", + "@tanem/svg-injector": "^10.1.14", + "@types/prop-types": "^15.7.4", + "prop-types": "^15.8.1" + } + }, + "react-test-renderer": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", + "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "react-is": "^17.0.2", + "react-shallow-renderer": "^16.13.1", + "scheduler": "^0.20.2" + }, + "dependencies": { + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } } }, "react-transition-group": { @@ -25881,42 +26700,42 @@ } }, "redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.2.tgz", + "integrity": "sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==", "requires": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" + "@babel/runtime": "^7.9.2" } }, "redux-devtools-extension": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.2.tgz", - "integrity": "sha1-4Pmo6N/KfBe+kscSSVijuU6ykR0=", + "version": "2.13.9", + "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz", + "integrity": "sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A==", "dev": true, "requires": {} }, "redux-form": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.2.3.tgz", - "integrity": "sha512-UpopunO0bYMwGvKaHq5bcUUBJDvFmZ6lMM/uFfnzjpCtuP39Eb7i6UpB4OPzfuIBVpbDNIF5GRewQFvLZn9afw==", + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-8.3.8.tgz", + "integrity": "sha512-PzXhA0d+awIc4PkuhbDa6dCEiraMrGMyyDlYEVNX6qEyW/G2SqZXrjav5zrpXb0CCeqQSc9iqwbMtYQXbJbOAQ==", "requires": { - "deep-equal": "^1.0.1", + "@babel/runtime": "^7.9.2", "es6-error": "^4.1.1", - "hoist-non-react-statics": "^2.3.1", - "invariant": "^2.2.2", + "hoist-non-react-statics": "^3.3.2", + "invariant": "^2.2.4", "is-promise": "^2.1.0", - "lodash": "^4.17.3", - "lodash-es": "^4.17.3", - "prop-types": "^15.5.9" + "lodash": "^4.17.15", + "prop-types": "^15.6.1", + "react-is": "^16.4.2" } }, "redux-saga": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-0.16.0.tgz", - "integrity": "sha1-CiMdsKFIkwHdmA9vL4jYztQY9yQ=" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.1.3.tgz", + "integrity": "sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw==", + "requires": { + "@redux-saga/core": "^1.1.3" + } }, "regenerate": { "version": "1.3.3", @@ -26157,12 +26976,14 @@ "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" }, "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { @@ -26248,6 +27069,15 @@ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", "dev": true }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -26302,9 +27132,9 @@ } }, "scheduler": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.11.2.tgz", - "integrity": "sha512-+WCP3s3wOaW4S7C1tl3TEXp4l9lJn0ZK8G3W3WKRWmw77Z2cIFUW2MiNTMHn5sCjxN+t7N43HAOOgMjyAg5hlg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -26446,6 +27276,11 @@ "safe-buffer": "^5.0.1" } }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -26657,8 +27492,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-resolve": { "version": "0.5.2", @@ -26688,6 +27522,12 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, "spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", @@ -27022,19 +27862,19 @@ } }, "styled-components": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-4.1.1.tgz", - "integrity": "sha512-UzT/qyoOyKpYooeLdwKrPHZ85R8KWl8i0fbyH9I3z6B2WT9uGDCV7J4kbfKsBeSWFD9EytBriEODOkybcUFD/Q==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.3.tgz", + "integrity": "sha512-++4iHwBM7ZN+x6DtPPWkCI4vdtwumQ+inA/DdAsqYd4SVgUKJie5vXyzotA00ttcFdQkCng7zc6grwlfIfw+lw==", "requires": { - "@emotion/is-prop-valid": "^0.6.8", - "@emotion/unitless": "^0.7.0", - "babel-plugin-styled-components": ">= 1", - "css-to-react-native": "^2.2.2", - "memoize-one": "^4.0.0", - "prop-types": "^15.5.4", - "react-is": "^16.6.0", - "stylis": "^3.5.0", - "stylis-rule-sheet": "^0.0.10", + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^0.8.8", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", "supports-color": "^5.5.0" }, "dependencies": { @@ -27053,23 +27893,18 @@ } } }, - "stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", - "requires": {} - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "svg-react-loader": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/svg-react-loader/-/svg-react-loader-0.4.6.tgz", @@ -27105,11 +27940,6 @@ } } }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, "symbol-tree": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", @@ -27380,6 +28210,12 @@ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -27646,11 +28482,24 @@ "dev": true }, "typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "dev": true }, + "typescript-compare": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz", + "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==", + "requires": { + "typescript-logic": "^0.0.0" + } + }, + "typescript-logic": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz", + "integrity": "sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==" + }, "typescript-plugin-styled-components": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typescript-plugin-styled-components/-/typescript-plugin-styled-components-1.0.0.tgz", @@ -27658,11 +28507,13 @@ "dev": true, "requires": {} }, - "ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", - "dev": true + "typescript-tuple": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz", + "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==", + "requires": { + "typescript-compare": "^0.0.2" + } }, "uglify-js": { "version": "3.4.9", diff --git a/package.json b/package.json index 9bd48631..9449ca80 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "checkout", - "version": "1.0.0", - "description": "", + "version": "0.1.0", + "private": true, "scripts": { "clear": "rimraf dist && rimraf .cache-loader", "build": "npm run clear && webpack --mode production --colors --progress --config config/webpack.prod.js", @@ -13,13 +13,7 @@ "prettier:check": "prettier \"**\" --list-different", "lint:fix": "tslint \"src/**/*.@(ts|tsx)\" -e \"**/*.d.ts\"" }, - "repository": { - "type": "git", - "url": "git+https://github.com/rbkmoney/payform.git" - }, - "author": "rbkmoney", - "license": "", - "private": true, + "license": "Apache-2.0", "dependencies": { "@sentry/react": "~6.13.2", "@sentry/tracing": "~6.13.2", @@ -32,15 +26,16 @@ "kjua": "^0.9.0", "libphonenumber-js": "1.9.6", "lodash-es": "~4.17.15", - "react": "~16.6.3", - "react-dom": "~16.6.3", - "react-redux": "~5.1.1", + "react": "17.0.2", + "react-dom": "17.0.2", + "react-redux": "7.2.6", + "react-svg": "14.1.8", "react-transition-group": "1.2.1", - "redux": "~3.7.2", - "redux-form": "~7.2.3", - "redux-saga": "~0.16.0", + "redux": "4.1.2", + "redux-form": "8.3.8", + "redux-saga": "1.1.3", "reselect": "~4.0.0", - "styled-components": "~4.1.1", + "styled-components": "5.3.3", "ts-polyfill": "~3.8.2", "uri-template": "~1.0.1", "url-polyfill": "~1.0.11", @@ -48,6 +43,7 @@ "whatwg-fetch": "~2.0.3" }, "devDependencies": { + "@redux-saga/testing-utils": "^1.1.3", "@sentry/webpack-plugin": "~1.17.1", "@types/card-validator": "~4.1.0", "@types/credit-card-type": "~7.0.0", @@ -57,14 +53,14 @@ "@types/jest": "~23.3.14", "@types/lodash-es": "~4.17.0", "@types/node": "^11.13.18", - "@types/react": "~16.7.6", - "@types/react-dom": "~16.0.9", - "@types/react-redux": "~5.0.21", - "@types/react-test-renderer": "~16.0.1", + "@types/react": "17.0.38", + "@types/react-dom": "17.0.11", + "@types/react-redux": "7.1.22", + "@types/react-test-renderer": "17.0.1", "@types/react-transition-group": "1.1.5", - "@types/redux-form": "~7.2.6", + "@types/redux-form": "8.3.3", "@types/reselect": "~2.2.0", - "@types/styled-components": "~4.1.0", + "@types/styled-components": "5.1.20", "@types/url-parse": "~1.1.0", "@types/uuid": "~8.3.0", "babel-jest": "~22.4.1", @@ -72,8 +68,9 @@ "babel-preset-env": "~1.7.0", "cache-loader": "~2.0.1", "compression-webpack-plugin": "~3.1.0", + "concurrently": "~6.5.1", "copy-webpack-plugin": "~5.1.1", - "cross-origin-communicator": "git+ssh://git@github.com/rbkmoney/cross-origin-communicator.git#dc3209dab12fb5d745c21b72d10ebe567270a836", + "cross-origin-communicator": "github:valitydev/cross-origin-communicator#bd13edd80e2d55cffa45c6b7b9ee3744475c5d0d", "css-loader": "~1.0.1", "file-loader": "~2.0.0", "fork-ts-checker-webpack-plugin": "~4.1.1", @@ -82,8 +79,8 @@ "jest": "~23.6.0", "mini-css-extract-plugin": "~0.4.5", "prettier": "~1.19.1", - "react-test-renderer": "~16.2.0", - "redux-devtools-extension": "~2.13.2", + "react-test-renderer": "17.0.2", + "redux-devtools-extension": "2.13.9", "rimraf": "~2.6.2", "style-loader": "~0.23.1", "svg-react-loader": "~0.4.6", @@ -95,7 +92,7 @@ "tslint-immutable": "~4.5.1", "tslint-loader": "~3.5.4", "tslint-react": "~3.6.0", - "typescript": "~3.5.3", + "typescript": "4.5.4", "typescript-plugin-styled-components": "~1.0.0", "webpack": "~4.29.0", "webpack-bundle-analyzer": "~3.6.0", diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..3352e5b4 --- /dev/null +++ b/renovate.json @@ -0,0 +1,11 @@ +{ + "extends": ["config:base"], + "packageRules": [ + { + "matchPackagePatterns": ["*"], + "matchUpdateTypes": ["minor", "patch"], + "groupName": "all non-major dependencies", + "groupSlug": "all-minor-patch" + } + ] +} diff --git a/src/app/backend/app-config.ts b/src/app/backend/app-config.ts index b947c7bd..8496bda7 100644 --- a/src/app/backend/app-config.ts +++ b/src/app/backend/app-config.ts @@ -4,12 +4,21 @@ export class AppConfig { capiEndpoint: string; wrapperEndpoint: string; applePayMerchantID: string; - googlePayMerchantID: string; - googlePayGatewayMerchantID: string; samsungPayMerchantName: string; samsungPayServiceID: string; - yandexPayMerchantID: string; - yandexPayGatewayMerchantID: string; + yandexPay: { + merchantName: string; + merchantID: string; + gatewayMerchantID: string; + }; + googlePay: { + merchantName: string; + merchantID: string; + gateway: string; + gatewayMerchantID: string; + merchantOrigin: string; + }; brandless: boolean; fixedTheme: ThemeName; + brandName: string; } diff --git a/src/app/backend/create-payment-resource.ts b/src/app/backend/create-payment-resource.ts index 815ccd3f..fa0400d5 100644 --- a/src/app/backend/create-payment-resource.ts +++ b/src/app/backend/create-payment-resource.ts @@ -8,6 +8,15 @@ function getFingerprintFromComponents(components: Fingerprint2.Component[]) { return Fingerprint2.x64hash128(values.join(''), 31); } +const getClientInfoUrl = (): { url: string } | undefined => { + const url = (document.referrer || '').slice( + 0, + // URL max length (API constraint) + 599 + ); + return url ? { url } : undefined; +}; + export const createPaymentResource = ( capiEndpoint: string, accessToken: string, @@ -22,11 +31,7 @@ export const createPaymentResource = ( paymentTool, clientInfo: { fingerprint: getFingerprintFromComponents(fingerprintComponents), - url: (document.referrer || '').slice( - 0, - // URL max length (API constraint) - 599 - ) + ...getClientInfoUrl() } } }) diff --git a/src/app/components/app/app.tsx b/src/app/components/app/app.tsx index 1e6f9746..556e859f 100644 --- a/src/app/components/app/app.tsx +++ b/src/app/components/app/app.tsx @@ -43,7 +43,7 @@ const mapStateToProps = (state: State) => ({ initializeApp: state.initializeApp }); -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ initApp: bindActionCreators(initializeApp, dispatch) }); diff --git a/src/app/components/app/modal-container/footer/footer.tsx b/src/app/components/app/modal-container/footer/footer.tsx index c632c24b..53aea458 100644 --- a/src/app/components/app/modal-container/footer/footer.tsx +++ b/src/app/components/app/modal-container/footer/footer.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import { connect } from 'react-redux'; +import { ReactSVG } from 'react-svg'; import { State } from 'checkout/state'; import { Locale } from 'checkout/locale'; @@ -8,7 +9,6 @@ import SecureIcon from './secure-icon.svg'; import VisaIcon from './visa-icon.svg'; import McIcon from './mc-icon.svg'; import PciDssIcon from './pci-dss-icon.svg'; -import Logo from './logo.svg'; import MirAcceptIcon from './mir-accept.svg'; import { device } from 'checkout/utils/device'; import styled, { css } from 'checkout/styled-components'; @@ -121,7 +121,12 @@ const FooterDef: React.FC = (props) => ( - + { + svg.setAttribute('style', 'height: 24px; width: auto'); + }} + /> )} diff --git a/src/app/components/app/modal-container/footer/logo.svg b/src/app/components/app/modal-container/footer/logo.svg deleted file mode 100644 index 98449562..00000000 --- a/src/app/components/app/modal-container/footer/logo.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/app/components/app/modal-container/modal-content/modal-content.tsx b/src/app/components/app/modal-container/modal-content/modal-content.tsx index b30f7dfb..997ecb92 100644 --- a/src/app/components/app/modal-container/modal-content/modal-content.tsx +++ b/src/app/components/app/modal-container/modal-content/modal-content.tsx @@ -123,7 +123,7 @@ const mapStateToProps = (state: State) => ({ activeModal: state.modals.find((modal) => modal.active) }); -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ finishInteraction: bindActionCreators(finishInteraction, dispatch) }); diff --git a/src/app/components/app/modal-container/modal-error/modal-error.tsx b/src/app/components/app/modal-container/modal-error/modal-error.tsx index fa27528e..ba0adb81 100644 --- a/src/app/components/app/modal-container/modal-error/modal-error.tsx +++ b/src/app/components/app/modal-container/modal-error/modal-error.tsx @@ -15,7 +15,7 @@ const ModalErrorWrapper = styled.div` max-height: 690px; width: 680px; position: relative; - border-radius: 6px; + border-radius: 16px; } `; diff --git a/src/app/components/app/modal-container/modal-loader/modal-loader.tsx b/src/app/components/app/modal-container/modal-loader/modal-loader.tsx index f0163a2a..22134d8f 100644 --- a/src/app/components/app/modal-container/modal-loader/modal-loader.tsx +++ b/src/app/components/app/modal-container/modal-loader/modal-loader.tsx @@ -10,7 +10,7 @@ const LoaderWrapper = styled.div` left: 0; height: 100%; width: 100%; - border-radius: 6px; + border-radius: 16px; display: flex; flex-wrap: nowrap; flex-direction: row; diff --git a/src/app/components/app/modal-container/modal/close/close.tsx b/src/app/components/app/modal-container/modal/close/close.tsx index c1d8def9..a9dcf1b2 100644 --- a/src/app/components/app/modal-container/modal/close/close.tsx +++ b/src/app/components/app/modal-container/modal/close/close.tsx @@ -30,7 +30,7 @@ interface CloseProps { setResult: (resultState: ResultState) => ResultAction; } -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ setResult: bindActionCreators(setResult, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-block.tsx b/src/app/components/app/modal-container/modal/form-block.tsx index 5a514c2b..67de4b5f 100644 --- a/src/app/components/app/modal-container/modal/form-block.tsx +++ b/src/app/components/app/modal-container/modal/form-block.tsx @@ -1,4 +1,4 @@ -import styled from 'checkout/styled-components'; +import styled, { css } from 'checkout/styled-components'; import { device } from 'checkout/utils/device'; export const FormBlock = styled.div<{ inFrame: boolean }>` @@ -16,7 +16,7 @@ export const FormBlock = styled.div<{ inFrame: boolean }>` height: auto; min-height: auto; width: 680px; - border-radius: 6px; + border-radius: 16px; display: flex; flex-wrap: nowrap; flex-direction: row; @@ -28,4 +28,10 @@ export const FormBlock = styled.div<{ inFrame: boolean }>` display: none !important; } } + + ${({ inFrame }) => + inFrame && + css` + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + `}; `; diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/card-form.tsx b/src/app/components/app/modal-container/modal/form-container/card-form/card-form.tsx index f929c175..088a1d20 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/card-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/card-form/card-form.tsx @@ -38,7 +38,7 @@ const mapStateToProps = (state: State) => ({ integrationType: state.config.initConfig.integrationType }); -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ pay: bindActionCreators(pay, dispatch), subscribe: bindActionCreators(subscribe, dispatch), setViewInfoError: bindActionCreators(setViewInfoError, dispatch) diff --git a/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/validate-expire-date/validate-card-expiry.ts b/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/validate-expire-date/validate-card-expiry.ts index 6b9d622f..e63065e0 100644 --- a/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/validate-expire-date/validate-card-expiry.ts +++ b/src/app/components/app/modal-container/modal/form-container/card-form/fields/expire-date/validate-expire-date/validate-card-expiry.ts @@ -27,7 +27,6 @@ export function validateCardExpiry({ month, year }: ExpiryDate): boolean { } // TODO: Bring back the validation for the date when the world goes okay. - // https://rbkmoney.atlassian.net/browse/FE-1043 // const expiry = new Date(year, month); // const currentTime = new Date(); diff --git a/src/app/components/app/modal-container/modal/form-container/euroset-form/euroset-form.tsx b/src/app/components/app/modal-container/modal/form-container/euroset-form/euroset-form.tsx index 12378413..4801810d 100644 --- a/src/app/components/app/modal-container/modal/form-container/euroset-form/euroset-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/euroset-form/euroset-form.tsx @@ -42,7 +42,7 @@ const mapStateToProps = (state: State): Partial => ({ amount: formatAmount(state.amountInfo) }); -const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ +const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ pay: bindActionCreators(pay, dispatch), setViewInfoError: bindActionCreators(setViewInfoError, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/form-container.tsx b/src/app/components/app/modal-container/modal/form-container/form-container.tsx index 039cd19f..8d839209 100644 --- a/src/app/components/app/modal-container/modal/form-container/form-container.tsx +++ b/src/app/components/app/modal-container/modal/form-container/form-container.tsx @@ -35,7 +35,7 @@ const Container = styled.div` const Form = styled.div<{ error?: any; height?: number }>` background: #fff; - border-radius: 6px; + border-radius: 16px; box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.25); padding: 30px 20px; position: relative; @@ -140,7 +140,7 @@ const mapStateToProps = (state: State): Partial => { }; }; -const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ +const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ setViewInfoHeight: bindActionCreators(setViewInfoHeight, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/form-loader/form-loader.tsx b/src/app/components/app/modal-container/modal/form-container/form-loader/form-loader.tsx index 17715258..e4159f5b 100644 --- a/src/app/components/app/modal-container/modal/form-container/form-loader/form-loader.tsx +++ b/src/app/components/app/modal-container/modal/form-container/form-loader/form-loader.tsx @@ -21,7 +21,7 @@ const LoaderWrapper = styled.div` left: 0; height: 100%; width: 100%; - border-radius: 6px; + border-radius: 16px; display: flex; flex-wrap: nowrap; flex-direction: row; diff --git a/src/app/components/app/modal-container/modal/form-container/header/header.tsx b/src/app/components/app/modal-container/modal/form-container/header/header.tsx index b2d0255a..076d2418 100644 --- a/src/app/components/app/modal-container/modal/form-container/header/header.tsx +++ b/src/app/components/app/modal-container/modal/form-container/header/header.tsx @@ -47,7 +47,7 @@ const mapStateToProps = (state: State) => ({ destination: getDestination(state.modals) }); -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ goToFormInfo: bindActionCreators(goToFormInfo, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/input/input.tsx b/src/app/components/app/modal-container/modal/form-container/input/input.tsx index 8749cf3e..193c56d8 100644 --- a/src/app/components/app/modal-container/modal/form-container/input/input.tsx +++ b/src/app/components/app/modal-container/modal/form-container/input/input.tsx @@ -23,7 +23,7 @@ const StyledInput = styled.input` width: 100%; height: 48px; box-sizing: border-box; - border-radius: 3px; + border-radius: 8px; border: 1px solid ${({ theme }) => theme.color.neutral[0.2]}; box-shadow: 0 0 0 0 #fff; font-weight: 500; diff --git a/src/app/components/app/modal-container/modal/form-container/interaction-form/interaction-terminal-form/interaction-terminal-form.tsx b/src/app/components/app/modal-container/modal/form-container/interaction-form/interaction-terminal-form/interaction-terminal-form.tsx index ab81e0b9..219e1a79 100644 --- a/src/app/components/app/modal-container/modal/form-container/interaction-form/interaction-terminal-form/interaction-terminal-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/interaction-form/interaction-terminal-form/interaction-terminal-form.tsx @@ -9,6 +9,7 @@ import { Locale } from 'checkout/locale'; import { ReceiptInfo } from './receipt-info'; import { EurosetLogo } from 'checkout/components'; import styled from 'checkout/styled-components'; +import { Config } from 'checkout/config'; const Container = styled.div` display: flex; @@ -26,23 +27,25 @@ const SystemLogo = styled(EurosetLogo)` const mapStateToProps = (s: State) => ({ locale: s.config.locale, - amount: formatInvoiceAmount(s.model.invoice) + amount: formatInvoiceAmount(s.model.invoice), + config: s.config }); export interface InteractionTerminalFormProps { receipt: PaymentTerminalReceipt; locale: Locale; amount: FormattedAmount; + config: Config; } class InteractionTerminalFormDef extends React.Component { render() { - const { locale, receipt, amount } = this.props; + const { locale, receipt, amount, config } = this.props; return (
- + ); } diff --git a/src/app/components/app/modal-container/modal/form-container/interaction-form/interaction-terminal-form/receipt-info/receipt-info.tsx b/src/app/components/app/modal-container/modal/form-container/interaction-form/interaction-terminal-form/receipt-info/receipt-info.tsx index e939f567..20793f65 100644 --- a/src/app/components/app/modal-container/modal/form-container/interaction-form/interaction-terminal-form/receipt-info/receipt-info.tsx +++ b/src/app/components/app/modal-container/modal/form-container/interaction-form/interaction-terminal-form/receipt-info/receipt-info.tsx @@ -7,10 +7,12 @@ import { FormattedAmount } from 'checkout/utils'; import { Highlight } from 'checkout/components/app/modal-container/modal/form-container/highlight'; import { ListItem, NumerableList } from 'checkout/components/app/modal-container/modal/form-container/numerable-list'; import { Text } from '../../../text'; +import { Config } from 'checkout/config'; interface ReceiptInfo { locale: Locale; receipt: PaymentTerminalReceipt; + config: Config; amount: FormattedAmount; } @@ -35,7 +37,12 @@ export const ReceiptInfo: React.FC = (props) => ( {props.locale['form.pay.terminals.step.one.text']} {props.locale['brand.euroset']}. - {props.locale['form.pay.terminals.step.two.text']}. + + {props.locale['form.pay.terminals.step.two.text'].replace( + '${brandName}', + props.config.appConfig.brandName + )} + {props.locale['form.pay.terminals.step.three.text']}:
{formatPaymentId(props.receipt.shortPaymentID)}. diff --git a/src/app/components/app/modal-container/modal/form-container/mobile-commerce-form/mobile-commerce-form.tsx b/src/app/components/app/modal-container/modal/form-container/mobile-commerce-form/mobile-commerce-form.tsx index 5e15c8d6..f9b7349f 100644 --- a/src/app/components/app/modal-container/modal/form-container/mobile-commerce-form/mobile-commerce-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/mobile-commerce-form/mobile-commerce-form.tsx @@ -37,7 +37,7 @@ const mapStateToProps = (state: State) => ({ mobileCommerceFormInfo: toMobileCommerceFormInfo(state.modals) }); -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ setViewInfoError: bindActionCreators(setViewInfoError, dispatch), pay: bindActionCreators(pay, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/mthod-simple.ts b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/mthod-simple.ts index feb3f952..c09138e3 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/mthod-simple.ts +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/methods/mthod-simple.ts @@ -1,7 +1,7 @@ import styled from 'checkout/styled-components'; export const MethodSimple = styled.li` - border-radius: 3px; + border-radius: 8px; border: 1px solid ${({ theme }) => theme.color.neutral[0.2]}; padding: 20px; display: flex; diff --git a/src/app/components/app/modal-container/modal/form-container/payment-methods/payment-methods.tsx b/src/app/components/app/modal-container/modal/form-container/payment-methods/payment-methods.tsx index 4360221e..46250918 100644 --- a/src/app/components/app/modal-container/modal/form-container/payment-methods/payment-methods.tsx +++ b/src/app/components/app/modal-container/modal/form-container/payment-methods/payment-methods.tsx @@ -32,7 +32,7 @@ const mapStateToProps = (s: State): Partial => ({ emailPrefilled: !!s.config.initConfig.email }); -const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ +const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ setFormInfo: bindActionCreators(goToFormInfo, dispatch), setViewInfoHeight: bindActionCreators(setViewInfoHeight, dispatch), pay: bindActionCreators(payAction, dispatch) diff --git a/src/app/components/app/modal-container/modal/form-container/qps-forms/qps-form.tsx b/src/app/components/app/modal-container/modal/form-container/qps-forms/qps-form.tsx index 30b1a72f..63e07754 100644 --- a/src/app/components/app/modal-container/modal/form-container/qps-forms/qps-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/qps-forms/qps-form.tsx @@ -41,7 +41,7 @@ const mapStateToProps = (state: State): Partial => ({ amount: formatAmount(state.amountInfo) }); -const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ +const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ pay: bindActionCreators(pay, dispatch), setViewInfoError: bindActionCreators(setViewInfoError, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/qps-forms/qps-interaction-form.tsx b/src/app/components/app/modal-container/modal/form-container/qps-forms/qps-interaction-form.tsx index e2b7b276..12061892 100644 --- a/src/app/components/app/modal-container/modal/form-container/qps-forms/qps-interaction-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/qps-forms/qps-interaction-form.tsx @@ -26,7 +26,7 @@ const mapStateToProps = (state: State): Partial => ({ fieldsConfig: toFieldsConfig(state.config.initConfig, state.model.invoiceTemplate) }); -const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ +const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ setViewInfoError: bindActionCreators(setViewInfoError, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/redirect-interaction-form/redirect-interaction-form.tsx b/src/app/components/app/modal-container/modal/form-container/redirect-interaction-form/redirect-interaction-form.tsx index c8d61872..ff2c4e97 100644 --- a/src/app/components/app/modal-container/modal/form-container/redirect-interaction-form/redirect-interaction-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/redirect-interaction-form/redirect-interaction-form.tsx @@ -31,7 +31,7 @@ const mapStateToProps = (state: State): Partial => ({ fieldsConfig: toFieldsConfig(state.config.initConfig, state.model.invoiceTemplate) }); -const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ +const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ finishInteraction: bindActionCreators(finishInteraction, dispatch), setViewInfoError: bindActionCreators(setViewInfoError, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/action-block.tsx b/src/app/components/app/modal-container/modal/form-container/result-form/action-block.tsx index 19c4d968..dff3709b 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/action-block.tsx +++ b/src/app/components/app/modal-container/modal/form-container/result-form/action-block.tsx @@ -110,7 +110,7 @@ const mapStateToProps = (s: State) => { }; }; -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ prepareToRetry: bindActionCreators(prepareToRetry, dispatch), forgetPaymentAttempt: bindActionCreators(forgetPaymentAttempt, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/error-description-block.tsx b/src/app/components/app/modal-container/modal/form-container/result-form/error-description-block.tsx index c9b06760..d76a858c 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/error-description-block.tsx +++ b/src/app/components/app/modal-container/modal/form-container/result-form/error-description-block.tsx @@ -35,7 +35,7 @@ const mapStateToProps = (state: State) => ({ locale: state.config.locale }); -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ goToFormInfo: bindActionCreators(goToFormInfo, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/result-form/result-form.tsx b/src/app/components/app/modal-container/modal/form-container/result-form/result-form.tsx index 6b180142..c88d39ca 100644 --- a/src/app/components/app/modal-container/modal/form-container/result-form/result-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/result-form/result-form.tsx @@ -114,7 +114,7 @@ const mapStateToProps = (state: State) => { }; }; -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ setResult: bindActionCreators(setResult, dispatch), goToFormInfo: bindActionCreators(goToFormInfo, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/token-provider-form/token-provider-form.tsx b/src/app/components/app/modal-container/modal/form-container/token-provider-form/token-provider-form.tsx index 6945d5ef..83afaafa 100644 --- a/src/app/components/app/modal-container/modal/form-container/token-provider-form/token-provider-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/token-provider-form/token-provider-form.tsx @@ -35,7 +35,7 @@ const mapStateToProps = (state: State) => ({ formValues: get(state.form, 'tokenProviderForm.values') }); -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ setViewInfoError: bindActionCreators(setViewInfoError, dispatch), pay: bindActionCreators(pay, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/uzcard-form/uzcard-form.tsx b/src/app/components/app/modal-container/modal/form-container/uzcard-form/uzcard-form.tsx index 13401143..05af0886 100644 --- a/src/app/components/app/modal-container/modal/form-container/uzcard-form/uzcard-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/uzcard-form/uzcard-form.tsx @@ -41,7 +41,7 @@ const mapStateToProps = (state: State): Partial => ({ amount: formatAmount(state.amountInfo) }); -const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ +const mapDispatchToProps = (dispatch: Dispatch): Partial => ({ pay: bindActionCreators(pay, dispatch), setViewInfoError: bindActionCreators(setViewInfoError, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/form-container/wallet-form/wallet-form.tsx b/src/app/components/app/modal-container/modal/form-container/wallet-form/wallet-form.tsx index 3de151c5..32d62a88 100644 --- a/src/app/components/app/modal-container/modal/form-container/wallet-form/wallet-form.tsx +++ b/src/app/components/app/modal-container/modal/form-container/wallet-form/wallet-form.tsx @@ -37,7 +37,7 @@ const mapStateToProps = (state: State) => ({ walletFormInfo: toWalletFormInfo(state.modals) }); -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ setViewInfoError: bindActionCreators(setViewInfoError, dispatch), pay: bindActionCreators(pay, dispatch) }); diff --git a/src/app/components/app/modal-container/modal/mobile-header/mobile-header.tsx b/src/app/components/app/modal-container/modal/mobile-header/mobile-header.tsx index 9f3344d4..2306d6b1 100644 --- a/src/app/components/app/modal-container/modal/mobile-header/mobile-header.tsx +++ b/src/app/components/app/modal-container/modal/mobile-header/mobile-header.tsx @@ -78,7 +78,7 @@ const mapStateToProps = (state: State) => ({ destination: getDestination(state.modals) }); -const mapDispatchToProps = (dispatch: Dispatch) => ({ +const mapDispatchToProps = (dispatch: Dispatch) => ({ goToFormInfo: bindActionCreators(goToFormInfo, dispatch) }); diff --git a/src/app/components/app/modal-container/user-interaction-modal/user-interaction-modal.tsx b/src/app/components/app/modal-container/user-interaction-modal/user-interaction-modal.tsx index 751d8401..e430db55 100644 --- a/src/app/components/app/modal-container/user-interaction-modal/user-interaction-modal.tsx +++ b/src/app/components/app/modal-container/user-interaction-modal/user-interaction-modal.tsx @@ -25,7 +25,7 @@ const Container = styled.div` height: 690px; width: 680px; position: relative; - border-radius: 6px; + border-radius: 16px; overflow: hidden; } `; @@ -41,7 +41,7 @@ const IFrame = styled.iframe` border: none; @media ${device.desktop} { - border-radius: 6px; + border-radius: 16px; position: absolute; } `; diff --git a/src/app/configure-store.ts b/src/app/configure-store.ts index d7c2b80b..044d6e55 100644 --- a/src/app/configure-store.ts +++ b/src/app/configure-store.ts @@ -18,14 +18,14 @@ import rootSaga from 'checkout/sagas/root-saga'; export function configureStore(initState: any): Store { const sagaMiddleware = createSagaMiddleware(); - const store = createStore( - combineReducers({ + const store: Store = createStore( + combineReducers({ initializeApp: initializeAppReducer, result: resultReducer, config: configReducer, model: modelReducer, error: errorReducer, - form: formReducer, + form: formReducer as any, modals: modalReducer, availablePaymentMethods: availablePaymentMethodsReducer, amountInfo: amountInfoReducer, diff --git a/src/app/log-messages.ts b/src/app/log-messages.ts index 6340eb9a..f4d123bb 100644 --- a/src/app/log-messages.ts +++ b/src/app/log-messages.ts @@ -1,4 +1,4 @@ -export const logPrefix = '[RbkmoneyCheckout]'; +export const logPrefix = '[ValityCheckout]'; export const sadnessMessage = 'Param will not be applied.'; export const getMessageInvalidValue = (fieldName: string, value: string, reason: string): string => `${logPrefix} Invalid value of param '${fieldName}':'${value}'. ${reason} ${sadnessMessage}`; diff --git a/src/app/sagas/initialize-app/initialize-amount-info/initialize-amount-info.ts b/src/app/sagas/initialize-app/initialize-amount-info/initialize-amount-info.ts index 99e64079..0ee0c521 100644 --- a/src/app/sagas/initialize-app/initialize-amount-info/initialize-amount-info.ts +++ b/src/app/sagas/initialize-app/initialize-amount-info/initialize-amount-info.ts @@ -6,7 +6,7 @@ import { getAmountInfo } from '../../amount-info'; export type Effect = PutEffect | SelectEffect | AmountInfoState; -export function* initializeAmountInfo(initConfig: InitConfig, model: ModelState): Iterator { +export function* initializeAmountInfo(initConfig: InitConfig, model: ModelState) { yield put({ type: TypeKeys.INITIALIZE_AMOUNT_INFO_COMPLETED, payload: getAmountInfo(initConfig, model) diff --git a/src/app/sagas/initialize-app/initialize-app.ts b/src/app/sagas/initialize-app/initialize-app.ts index 9f08b6cc..2c16422a 100644 --- a/src/app/sagas/initialize-app/initialize-app.ts +++ b/src/app/sagas/initialize-app/initialize-app.ts @@ -14,7 +14,7 @@ type InitializeAppPutEffect = InitializeAppCompleted | InitializeAppFailed; export type InitializeAppEffect = CallEffect | PutEffect; -export function* initialize(userInitConfig: InitConfig): Iterator { +export function* initialize(userInitConfig: InitConfig) { const configChunk = yield call(loadConfig, userInitConfig.locale); if (configChunk.appConfig.sentryDsn) { Sentry.init({ diff --git a/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/is-ready-to-yandex-pay.ts b/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/is-ready-to-yandex-pay.ts index c32e6598..48a8f636 100644 --- a/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/is-ready-to-yandex-pay.ts +++ b/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/is-ready-to-yandex-pay.ts @@ -1,5 +1,4 @@ -import { call, CallEffect, race, RaceEffect } from 'redux-saga/effects'; -import { delay } from 'redux-saga'; +import { call, CallEffect, race, delay } from 'redux-saga/effects'; import { getYaPayPaymentData } from 'checkout/utils'; import { logPrefix } from 'checkout/log-messages'; @@ -7,9 +6,9 @@ import { logPrefix } from 'checkout/log-messages'; import { isYandexPayAvailable } from '../../../../../environment'; import { loadThirdPartLib } from './load-third-part-lib'; -function* createYaPayment(paymentData: YaPay.PaymentData, delayMs: number): Iterator { +function* createYaPayment(paymentData: YaPay.PaymentData, delayMs: number) { try { - const [timeout] = yield race([call(delay, delayMs), call(YaPay.createPayment, paymentData)]); + const [timeout] = yield race([delay(delayMs), call(YaPay.createPayment, paymentData)]); return !timeout; } catch (ex) { return false; @@ -18,6 +17,7 @@ function* createYaPayment(paymentData: YaPay.PaymentData, delayMs: number): Iter export function* isReadyToYandexPay( yaPayMerchantID: string, + yaPayMerchantName: string, yaPayGatewayMerchantId: string, delayMs = 2000 ): Iterator { @@ -26,7 +26,7 @@ export function* isReadyToYandexPay( if (!available) { return false; } - const paymentData = getYaPayPaymentData(yaPayMerchantID, yaPayGatewayMerchantId); + const paymentData = getYaPayPaymentData(yaPayMerchantID, yaPayMerchantName, yaPayGatewayMerchantId); try { return yield call(createYaPayment, paymentData, delayMs); } catch (error) { diff --git a/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/load-third-part-lib.ts b/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/load-third-part-lib.ts index 5b3fc6e2..ffe9d14b 100644 --- a/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/load-third-part-lib.ts +++ b/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/load-third-part-lib.ts @@ -1,10 +1,9 @@ -import { call, race, RaceEffect } from 'redux-saga/effects'; -import { delay } from 'redux-saga'; +import { call, race, delay } from 'redux-saga/effects'; import { logPrefix } from 'checkout/log-messages'; import { getScript } from 'checkout/utils'; -export function* loadThirdPartLib(libEndpoint: string, delayMs = 2000): Iterator { - const [timeout] = yield race([call(delay, delayMs), call(getScript, libEndpoint)]); +export function* loadThirdPartLib(libEndpoint: string, delayMs = 2000) { + const [timeout] = yield race([delay(delayMs), call(getScript, libEndpoint)]); if (timeout) { console.warn(`${logPrefix} Load timeout ${libEndpoint}`); } diff --git a/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/token-providers-to-methods.ts b/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/token-providers-to-methods.ts index 9474e738..396cc9c4 100644 --- a/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/token-providers-to-methods.ts +++ b/src/app/sagas/initialize-app/initialize-available-payment-methods/bank-card-to-methods/token-providers-to-methods.ts @@ -1,10 +1,5 @@ -import { call, CallEffect } from 'redux-saga/effects'; -import { - AmountInfoState, - ConfigState, - PaymentMethod as PaymentMethodState, - PaymentMethodName as PaymentMethodNameState -} from 'checkout/state'; +import { call } from 'redux-saga/effects'; +import { AmountInfoState, ConfigState, PaymentMethodName as PaymentMethodNameState } from 'checkout/state'; import { BankCardTokenProvider } from 'checkout/backend'; import { isReadyToApplePay } from './is-ready-to-apple-pay'; import { isReadyToGooglePay } from './is-ready-to-google-pay'; @@ -14,7 +9,7 @@ export function* tokenProvidersToMethods( providers: BankCardTokenProvider[], config: ConfigState, amountInfo: AmountInfoState -): Iterator { +) { const result = []; const { applePay, googlePay, samsungPay, yandexPay } = config.initConfig; for (const provider of providers) { @@ -46,10 +41,13 @@ export function* tokenProvidersToMethods( break; case BankCardTokenProvider.yandexpay: if (yandexPay) { - const { - appConfig: { yandexPayMerchantID, yandexPayGatewayMerchantID } - } = config; - const isYandexPay = yield call(isReadyToYandexPay, yandexPayMerchantID, yandexPayGatewayMerchantID); + const { appConfig } = config; + const isYandexPay = yield call( + isReadyToYandexPay, + appConfig.yandexPay.merchantID, + appConfig.yandexPay.merchantName, + appConfig.yandexPay.gatewayMerchantID + ); if (isYandexPay) { result.push({ name: PaymentMethodNameState.YandexPay }); } diff --git a/src/app/sagas/initialize-app/initialize-available-payment-methods/to-available-payment-methods.spec.ts b/src/app/sagas/initialize-app/initialize-available-payment-methods/to-available-payment-methods.spec.ts index 1963cef6..46cd0d82 100644 --- a/src/app/sagas/initialize-app/initialize-available-payment-methods/to-available-payment-methods.spec.ts +++ b/src/app/sagas/initialize-app/initialize-available-payment-methods/to-available-payment-methods.spec.ts @@ -41,7 +41,7 @@ describe('All payment methods', () => { }); it('should return PaymentMethodState with DigitalWallet, PaymentTerminal', () => { - const actual = iterator.next({ name: PaymentMethodName.BankCard }); + const actual = iterator.next({ name: PaymentMethodName.BankCard } as any); const expected = [ { name: PaymentMethodName.BankCard }, { name: PaymentMethodName.DigitalWallet }, @@ -110,7 +110,7 @@ describe('DigitalWallet', () => { const iterator = toAvailablePaymentMethods(paymentMethods, config, amountInfo); it('should return PaymentMethodState without DigitalWallet', () => { - const actual = iterator.next([bankCardState]); + const actual = iterator.next([bankCardState] as any); expect(actual.value).toEqual([{ name: PaymentMethodName.BankCard }]); expect(actual.done).toBeTruthy(); }); @@ -206,7 +206,7 @@ describe('MobileCommerce', () => { const iterator = toAvailablePaymentMethods(paymentMethods, config, amountInfo); it('should return PaymentMethodState without MobileCommerce', () => { - const actual = iterator.next([bankCardState]); + const actual = iterator.next([bankCardState] as any); expect(actual.value).toEqual([{ name: PaymentMethodName.BankCard }]); expect(actual.done).toBeTruthy(); }); diff --git a/src/app/sagas/initialize-app/initialize-available-payment-methods/to-available-payment-methods.ts b/src/app/sagas/initialize-app/initialize-available-payment-methods/to-available-payment-methods.ts index ac446943..491cdc80 100644 --- a/src/app/sagas/initialize-app/initialize-available-payment-methods/to-available-payment-methods.ts +++ b/src/app/sagas/initialize-app/initialize-available-payment-methods/to-available-payment-methods.ts @@ -19,7 +19,7 @@ export function* toAvailablePaymentMethods( for (const method of paymentMethods) { switch (method.method) { case PaymentMethodName.BankCard: - const bankCardMethods = yield call(bankCardToMethods, method, config, amountInfo); + const bankCardMethods = yield call(bankCardToMethods, method as any, config, amountInfo); result = result.concat(bankCardMethods); break; case PaymentMethodName.DigitalWallet: diff --git a/src/app/sagas/initialize-app/initialize-model.ts b/src/app/sagas/initialize-app/initialize-model.ts index 74a13e63..d111a3e8 100644 --- a/src/app/sagas/initialize-app/initialize-model.ts +++ b/src/app/sagas/initialize-app/initialize-model.ts @@ -1,4 +1,4 @@ -import { all, AllEffect, call, CallEffect, put, PutEffect, select, SelectEffect } from 'redux-saga/effects'; +import { all, call, put, select } from 'redux-saga/effects'; import { InvoiceTemplate, PaymentMethod, @@ -19,7 +19,7 @@ import { InvoiceTemplateInitConfig } from 'checkout/config'; import { InitializeModelCompleted, SetEventsAction, TypeKeys } from 'checkout/actions'; -import { EventsState, ModelState, State } from 'checkout/state'; +import { State } from 'checkout/state'; export interface ModelChunk { invoiceTemplate?: InvoiceTemplate; @@ -29,10 +29,7 @@ export interface ModelChunk { invoice?: Invoice; } -export function* resolveInvoiceTemplate( - endpoint: string, - config: InvoiceTemplateInitConfig -): Iterator { +export function* resolveInvoiceTemplate(endpoint: string, config: InvoiceTemplateInitConfig) { const token = config.invoiceTemplateAccessToken; const id = config.invoiceTemplateID; const [invoiceTemplate, paymentMethods] = yield all([ @@ -42,7 +39,7 @@ export function* resolveInvoiceTemplate( return { paymentMethods, invoiceTemplate }; } -export function* resolveInvoice(endpoint: string, config: InvoiceInitConfig): Iterator { +export function* resolveInvoice(endpoint: string, config: InvoiceInitConfig) { const token = config.invoiceAccessToken; const id = config.invoiceID; const [invoice, events, paymentMethods] = yield all([ @@ -53,37 +50,31 @@ export function* resolveInvoice(endpoint: string, config: InvoiceInitConfig): It return { paymentMethods, events, invoiceAccessToken: token, invoice }; } -export function* resolveCustomer(endpoint: string, config: CustomerInitConfig): Iterator { +export function* resolveCustomer(endpoint: string, config: CustomerInitConfig) { const token = config.customerAccessToken; const id = config.customerID; const events = yield call(getCustomerEvents, endpoint, token, id); return { events }; } -export function* resolveIntegrationType(endpoint: string, config: InitConfig): Iterator { +export function* resolveIntegrationType(endpoint: string, config: InitConfig) { let chunk; switch (config.integrationType) { case IntegrationType.invoiceTemplate: - chunk = yield call(resolveInvoiceTemplate, endpoint, config); + chunk = yield call(resolveInvoiceTemplate, endpoint, config as any); break; case IntegrationType.invoice: - chunk = yield call(resolveInvoice, endpoint, config); + chunk = yield call(resolveInvoice, endpoint, config as any); break; case IntegrationType.customer: - chunk = yield call(resolveCustomer, endpoint, config); + chunk = yield call(resolveCustomer, endpoint, config as any); break; } return chunk; } -export type InitializeEffect = - | CallEffect - | PutEffect - | SelectEffect - | { model: ModelState; events: EventsState }; - -export function* initializeModel(endpoint: string, config: InitConfig): Iterator { - const { events, ...modelChunk } = yield call(resolveIntegrationType, endpoint, config); +export function* initializeModel(endpoint: string, config: InitConfig) { + const { events, ...modelChunk }: ModelChunk = yield call(resolveIntegrationType, endpoint, config); yield put({ type: TypeKeys.INITIALIZE_MODEL_COMPLETED, payload: modelChunk } as InitializeModelCompleted); yield put({ type: TypeKeys.EVENTS_INIT, payload: events } as SetEventsAction); return yield select((s: State) => ({ model: s.model, events: s.events })); diff --git a/src/app/sagas/initialize-app/load-config.spec.ts b/src/app/sagas/initialize-app/load-config.spec.ts index ad85b3ed..6d252de3 100644 --- a/src/app/sagas/initialize-app/load-config.spec.ts +++ b/src/app/sagas/initialize-app/load-config.spec.ts @@ -16,7 +16,7 @@ describe('loadConfig', () => { it('should put config', () => { const appConfig = {}; const locale = {}; - const actual = iterator.next([appConfig, locale]).value; + const actual = iterator.next([appConfig, locale] as any).value; const expected = put({ type: TypeKeys.CONFIG_CHUNK_RECEIVED, payload: { appConfig, locale } diff --git a/src/app/sagas/initialize-app/load-config.ts b/src/app/sagas/initialize-app/load-config.ts index 83c088dc..213f720a 100644 --- a/src/app/sagas/initialize-app/load-config.ts +++ b/src/app/sagas/initialize-app/load-config.ts @@ -1,12 +1,11 @@ -import { all, AllEffect, call, put, PutEffect, select, SelectEffect } from 'redux-saga/effects'; -import { getAppConfig, getLocale } from '../../backend'; -import { ConfigChunk, ConfigChunkReceived, TypeKeys } from 'checkout/actions'; +import { all, call, put, select } from 'redux-saga/effects'; +import { AppConfig, getAppConfig, getLocale } from '../../backend'; +import { ConfigChunkReceived, TypeKeys } from 'checkout/actions'; import { State } from 'checkout/state'; +import { Locale } from 'checkout/locale'; -type LoadConfigEffect = AllEffect | PutEffect | SelectEffect | ConfigChunk; - -export function* loadConfig(localeName: string): IterableIterator { - const [appConfig, locale] = yield all([call(getAppConfig), call(getLocale, localeName)]); +export function* loadConfig(localeName: string) { + const [appConfig, locale]: [AppConfig, Locale] = yield all([call(getAppConfig), call(getLocale, localeName)]); yield put({ type: TypeKeys.CONFIG_CHUNK_RECEIVED, payload: { diff --git a/src/app/sagas/payment/pay.spec.ts b/src/app/sagas/payment/pay.spec.ts index 4e46b59c..672daec4 100644 --- a/src/app/sagas/payment/pay.spec.ts +++ b/src/app/sagas/payment/pay.spec.ts @@ -5,7 +5,7 @@ import { State, EventsStatus, ResultFormInfo, ResultType } from 'checkout/state' import last from 'lodash-es/last'; import { provideFromInvoiceEvent } from '../provide-modal'; import { providePayment } from './provide-payment'; -import { cloneableGenerator } from 'redux-saga/utils'; +import { cloneableGenerator } from '@redux-saga/testing-utils'; import { SagaIterator } from 'redux-saga'; it('watchPayment should takeLatest pay', () => { diff --git a/src/app/sagas/payment/pay.ts b/src/app/sagas/payment/pay.ts index 2368e212..04d6bec7 100644 --- a/src/app/sagas/payment/pay.ts +++ b/src/app/sagas/payment/pay.ts @@ -25,7 +25,7 @@ type PayEffect = SelectEffect | CallEffect | PutEffect; export function* pay(action: PaymentRequested): Iterator { try { - const { config, model, amountInfo } = yield select((s: State) => ({ + const { config, model, amountInfo }: State = yield select((s: State) => ({ config: s.config, model: s.model, amountInfo: s.amountInfo diff --git a/src/app/sagas/payment/provide-payment/create-invoice-with-template.ts b/src/app/sagas/payment/provide-payment/create-invoice-with-template.ts index c45c98a6..e7c185c9 100644 --- a/src/app/sagas/payment/provide-payment/create-invoice-with-template.ts +++ b/src/app/sagas/payment/provide-payment/create-invoice-with-template.ts @@ -1,5 +1,5 @@ import { call, CallEffect, put, PutEffect } from 'redux-saga/effects'; -import { InvoiceTemplate, createInvoiceWithTemplate as request } from 'checkout/backend'; +import { InvoiceTemplate, createInvoiceWithTemplate as request, InvoiceAndToken } from 'checkout/backend'; import { InvoiceCreated, TypeKeys } from 'checkout/actions'; import { AmountInfoState, AmountInfoStatus } from 'checkout/state'; import { toMinorAmount } from 'checkout/utils'; @@ -27,7 +27,7 @@ export function* createInvoiceWithTemplate( metadata: template.metadata, currency: amountInfo.currencyCode }; - const { invoice, invoiceAccessToken } = yield call(request, endpoint, token, template.id, params); + const { invoice, invoiceAccessToken }: InvoiceAndToken = yield call(request, endpoint, token, template.id, params); return yield put({ type: TypeKeys.INVOICE_CREATED, payload: { diff --git a/src/app/sagas/payment/provide-payment/get-payable-invoice.ts b/src/app/sagas/payment/provide-payment/get-payable-invoice.ts index da0614e4..9c8754ff 100644 --- a/src/app/sagas/payment/provide-payment/get-payable-invoice.ts +++ b/src/app/sagas/payment/provide-payment/get-payable-invoice.ts @@ -46,7 +46,7 @@ export function* getPayableInvoice( return { invoice, invoiceAccessToken }; } if (invoiceTemplate) { - return yield call(createInvoice, initConfig, endpoint, invoiceTemplate, amountInfo, formAmount); + return yield call(createInvoice, initConfig as any, endpoint, invoiceTemplate, amountInfo, formAmount); } throw { code: 'error.inconsistent.model' }; } diff --git a/src/app/sagas/payment/provide-payment/make-payment.spec.ts b/src/app/sagas/payment/provide-payment/make-payment.spec.ts index fd6e23ab..047f04f1 100644 --- a/src/app/sagas/payment/provide-payment/make-payment.spec.ts +++ b/src/app/sagas/payment/provide-payment/make-payment.spec.ts @@ -1,5 +1,5 @@ import { call, put } from 'redux-saga/effects'; -import { cloneableGenerator } from 'redux-saga/utils'; +import { cloneableGenerator } from '@redux-saga/testing-utils'; import { SagaIterator } from 'redux-saga'; import { makePayment } from './make-payment'; import { getPayableInvoice } from './get-payable-invoice'; @@ -28,7 +28,7 @@ describe('makePayment', () => { const m = 'ModelStateMock' as any; const a = 'AmountInfoStateMock' as any; const v = { amount: 'amountMock', mail: 'mailMock' } as any; - const fn = () => [] as any; + const fn = (_token) => [] as any; const gen = cloneableGenerator(() => makePayment(c, m, a, v, fn) as SagaIterator)(); it('should call getPayableInvoice', () => { @@ -46,7 +46,7 @@ describe('makePayment', () => { it('should call createPayment', () => { const paymentResource = 'paymentResourceMock' as any; const actual = gen.next(paymentResource).value; - const expected = call(createPayment, capiEndpoint, token, id, v.email, paymentResource, initConfig); + const expected = call(createPayment, capiEndpoint, token, id, v.email); expect(actual.toString()).toEqual(expected.toString()); }); diff --git a/src/app/sagas/payment/provide-payment/make-payment.ts b/src/app/sagas/payment/provide-payment/make-payment.ts index a16511f4..1c97ef98 100644 --- a/src/app/sagas/payment/provide-payment/make-payment.ts +++ b/src/app/sagas/payment/provide-payment/make-payment.ts @@ -8,7 +8,7 @@ import { pollInvoiceEvents } from '../../poll-events'; import { TypeKeys } from 'checkout/actions'; import { SetAcceptedError } from 'checkout/actions/error-actions/set-accepted-error'; -type CreatePaymentResourceFn = () => Iterator; +type CreatePaymentResourceFn = (invoiceAccessToken: any) => Iterator; export function* makePayment( config: Config, diff --git a/src/app/sagas/payment/provide-payment/pay-with-apple-pay/begin-session.ts b/src/app/sagas/payment/provide-payment/pay-with-apple-pay/begin-session.ts index 62bf1a88..390b1949 100644 --- a/src/app/sagas/payment/provide-payment/pay-with-apple-pay/begin-session.ts +++ b/src/app/sagas/payment/provide-payment/pay-with-apple-pay/begin-session.ts @@ -39,11 +39,11 @@ const begin = ( }); export function* beginSession(config: Config, session: ApplePaySession): Iterator { - const { applePayMerchantID, wrapperEndpoint } = config.appConfig; + const { applePayMerchantID, wrapperEndpoint, brandName } = config.appConfig; const payload = { merchantIdentifier: applePayMerchantID, domainName: location.hostname, - displayName: 'RBKmoney Checkout' + displayName: `${brandName} Checkout` }; return yield call(begin, session, `${wrapperEndpoint}/applepay`, payload); } diff --git a/src/app/sagas/payment/provide-payment/pay-with-apple-pay/pay-with-apple-pay.ts b/src/app/sagas/payment/provide-payment/pay-with-apple-pay/pay-with-apple-pay.ts index 659463d1..472d2fdf 100644 --- a/src/app/sagas/payment/provide-payment/pay-with-apple-pay/pay-with-apple-pay.ts +++ b/src/app/sagas/payment/provide-payment/pay-with-apple-pay/pay-with-apple-pay.ts @@ -31,7 +31,7 @@ export function* payWithApplePay( initConfig: { description, name }, appConfig } = c; - const label = description || name || 'RBKmoney'; + const label = description || name || appConfig.brandName; const paymentSystems = findPaymentSystems(m.paymentMethods); const session = createSession(label, a, paymentSystems, v.amount); const paymentToken = yield call(beginSession, c, session); diff --git a/src/app/sagas/payment/provide-payment/pay-with-google-pay/get-payment-data.ts b/src/app/sagas/payment/provide-payment/pay-with-google-pay/get-payment-data.ts index d639436c..f04b4998 100644 --- a/src/app/sagas/payment/provide-payment/pay-with-google-pay/get-payment-data.ts +++ b/src/app/sagas/payment/provide-payment/pay-with-google-pay/get-payment-data.ts @@ -2,23 +2,23 @@ import { call, CallEffect } from 'redux-saga/effects'; import { logPrefix } from 'checkout/log-messages'; import { AmountInfoState } from 'checkout/state'; import { toDisplayAmount } from 'checkout/utils'; +import { AppConfig } from 'checkout/backend'; const getPaymentDataRequest = ( - merchantId: string, - googlePayGatewayMerchantID: string, + config: AppConfig['googlePay'], amountInfo: AmountInfoState, formAmount: string ): PaymentDataRequest => ({ - merchantId, + merchantId: config.merchantID, merchantInfo: { - merchantName: 'RBKmoney', - merchantOrigin: 'checkout.rbk.money' + merchantName: config.merchantName, + merchantOrigin: config.merchantOrigin }, paymentMethodTokenizationParameters: { tokenizationType: 'PAYMENT_GATEWAY', parameters: { - gateway: 'rbkmoney', - gatewayMerchantId: googlePayGatewayMerchantID + gateway: config.gateway, + gatewayMerchantId: config.merchantID } }, allowedPaymentMethods: ['CARD', 'TOKENIZED_CARD'], @@ -54,14 +54,13 @@ const handleLoadPaymentDataError = (e: PaymentsError) => { }; export function* getPaymentData( - merchantId: string, - googlePayGatewayMerchantID: string, + googlePayConfig: AppConfig['googlePay'], amountInfo: AmountInfoState, formAmount: string ): Iterator { try { const paymentClient = new google.payments.api.PaymentsClient({ environment: 'PRODUCTION' }); - const request = getPaymentDataRequest(merchantId, googlePayGatewayMerchantID, amountInfo, formAmount); + const request = getPaymentDataRequest(googlePayConfig, amountInfo, formAmount); return yield call(loadPaymentData, paymentClient, request); } catch (e) { yield call(handleLoadPaymentDataError, e); diff --git a/src/app/sagas/payment/provide-payment/pay-with-google-pay/pay-with-google-pay.spec.ts b/src/app/sagas/payment/provide-payment/pay-with-google-pay/pay-with-google-pay.spec.ts index 2e643861..dd658394 100644 --- a/src/app/sagas/payment/provide-payment/pay-with-google-pay/pay-with-google-pay.spec.ts +++ b/src/app/sagas/payment/provide-payment/pay-with-google-pay/pay-with-google-pay.spec.ts @@ -2,16 +2,21 @@ import { payWithGooglePay, createPaymentResource } from './pay-with-google-pay'; import { makePayment } from '../make-payment'; import { call } from 'redux-saga/effects'; import { getPaymentData } from './get-payment-data'; +import { AppConfig } from 'checkout/backend'; describe('payWithGooglePay', () => { const endpoint = 'http://test.endpoint'; - const googlePayMerchantID = 'googlePayMerchantIDMock' as any; - const googlePayGatewayMerchantID = 'googlePayGatewayMerchantIDMock' as any; const locale = 'localeMock' as any; + const googlePayConfig: AppConfig['googlePay'] = { + merchantName: 'merchantName', + merchantID: 'googlePayMerchantIDMock', + gatewayMerchantID: 'googlePayGatewayMerchantIDMock', + gateway: 'gateway', + merchantOrigin: 'merchantOrigin' + }; const appConfig = { capiEndpoint: endpoint, - googlePayMerchantID, - googlePayGatewayMerchantID + googlePay: googlePayConfig } as any; const c = { appConfig, initConfig: { locale } } as any; const m = 'ModelStateMock' as any; @@ -21,13 +26,13 @@ describe('payWithGooglePay', () => { it('should call getPaymentData', () => { const actual = iterator.next().value; - const expected = call(getPaymentData, googlePayMerchantID, googlePayGatewayMerchantID, a, v.amount); + const expected = call(getPaymentData, googlePayConfig, a, v.amount); expect(actual).toEqual(expected); }); it('should call makePayment', () => { const paymentData = 'paymentDataMock' as any; - const fn = createPaymentResource(c.appConfig.capiEndpoint, googlePayMerchantID, paymentData); + const fn = createPaymentResource(c.appConfig.capiEndpoint, googlePayConfig.merchantID, paymentData); const actual = iterator.next(paymentData).value; const expected = call(makePayment, c, m, v, a, fn); expect(actual.toString()).toEqual(expected.toString()); diff --git a/src/app/sagas/payment/provide-payment/pay-with-google-pay/pay-with-google-pay.ts b/src/app/sagas/payment/provide-payment/pay-with-google-pay/pay-with-google-pay.ts index 20b228d3..5b4d2ca5 100644 --- a/src/app/sagas/payment/provide-payment/pay-with-google-pay/pay-with-google-pay.ts +++ b/src/app/sagas/payment/provide-payment/pay-with-google-pay/pay-with-google-pay.ts @@ -15,9 +15,9 @@ export function* payWithGooglePay( v: TokenProviderFormValues ): Iterator { const { - appConfig: { googlePayMerchantID, googlePayGatewayMerchantID, capiEndpoint } + appConfig: { capiEndpoint, googlePay } } = c; - const paymentData = yield call(getPaymentData, googlePayMerchantID, googlePayGatewayMerchantID, a, v.amount); - const fn = createPaymentResource(capiEndpoint, googlePayGatewayMerchantID, paymentData); + const paymentData = yield call(getPaymentData, googlePay, a, v.amount); + const fn = createPaymentResource(capiEndpoint, googlePay.gatewayMerchantID, paymentData); yield call(makePayment, c, m, v, a, fn); } diff --git a/src/app/sagas/payment/provide-payment/pay-with-yandex-pay/create-ya-payment.ts b/src/app/sagas/payment/provide-payment/pay-with-yandex-pay/create-ya-payment.ts index c61d1510..8be91ce8 100644 --- a/src/app/sagas/payment/provide-payment/pay-with-yandex-pay/create-ya-payment.ts +++ b/src/app/sagas/payment/provide-payment/pay-with-yandex-pay/create-ya-payment.ts @@ -1,6 +1,6 @@ -import { call, CallEffect } from 'redux-saga/effects'; +import { call } from 'redux-saga/effects'; -export function* createYaPayment(paymentData: YaPay.PaymentData): Iterator { +export function* createYaPayment(paymentData: YaPay.PaymentData) { try { return yield call(YaPay.createPayment, paymentData); } catch (error) { diff --git a/src/app/sagas/payment/provide-payment/pay-with-yandex-pay/pay-with-yandex-pay.ts b/src/app/sagas/payment/provide-payment/pay-with-yandex-pay/pay-with-yandex-pay.ts index 660223ce..1521c70d 100644 --- a/src/app/sagas/payment/provide-payment/pay-with-yandex-pay/pay-with-yandex-pay.ts +++ b/src/app/sagas/payment/provide-payment/pay-with-yandex-pay/pay-with-yandex-pay.ts @@ -21,14 +21,19 @@ export function* payWithYandexPay( v: TokenProviderFormValues ): Iterator { const { - appConfig: { yandexPayMerchantID, yandexPayGatewayMerchantID, capiEndpoint } + appConfig: { yandexPay, capiEndpoint } } = c; const yaOrder = getYaPaymentOrder(a, v.amount); - const yaPaymentData = getYaPayPaymentData(yandexPayMerchantID, yandexPayGatewayMerchantID, yaOrder); - const yaPayment = yield call(createYaPayment, yaPaymentData); + const yaPaymentData = getYaPayPaymentData( + yandexPay.merchantID, + yandexPay.merchantName, + yandexPay.gatewayMerchantID, + yaOrder + ); + const yaPayment: YaPay.Payment = yield call(createYaPayment, yaPaymentData); const yaProcessEvent = yield call(processYaCheckout, yaPayment); try { - const fn = createPaymentResource(capiEndpoint, yandexPayGatewayMerchantID, yaProcessEvent); + const fn = createPaymentResource(capiEndpoint, yandexPay.gatewayMerchantID, yaProcessEvent); yield call(makePayment, c, m, v, a, fn); } catch (error) { yaPayment.complete(YaPay.CompleteReason.Error, null); diff --git a/src/app/sagas/poll-events/poll-customer-events.ts b/src/app/sagas/poll-events/poll-customer-events.ts index c619f411..4549d97a 100644 --- a/src/app/sagas/poll-events/poll-customer-events.ts +++ b/src/app/sagas/poll-events/poll-customer-events.ts @@ -1,6 +1,5 @@ import last from 'lodash-es/last'; -import { delay } from 'redux-saga'; -import { call, put, race, select, CallEffect, PutEffect, RaceEffect, SelectEffect } from 'redux-saga/effects'; +import { call, put, race, select, CallEffect, PutEffect, SelectEffect, delay } from 'redux-saga/effects'; import { CustomerChangeType, CustomerEvent, getCustomerEvents } from 'checkout/backend'; import { SetEventsAction, TypeKeys } from 'checkout/actions'; import { State } from 'checkout/state'; @@ -34,7 +33,7 @@ function* poll( let lastEventID = yield call(getLastEventID); let lastEvent = null; while (!isStop(lastEvent)) { - yield call(delay, 1000); + yield delay(1000); const chunk: CustomerEvent[] = yield call(getCustomerEvents, endpoint, token, invoiceID, 5, lastEventID); yield put({ type: TypeKeys.EVENTS_POLLING, @@ -46,12 +45,8 @@ function* poll( return lastEvent; } -export function* pollCustomerEvents( - endpoint: string, - token: string, - invoiceID: string -): Iterator> { - const [result] = yield race([call(poll, endpoint, token, invoiceID), call(delay, 60000)]); +export function* pollCustomerEvents(endpoint: string, token: string, invoiceID: string) { + const [result] = yield race([call(poll, endpoint, token, invoiceID), delay(60000)]); if (result) { return yield put({ type: TypeKeys.EVENTS_POLLED diff --git a/src/app/sagas/poll-events/poll-invoice-events.ts b/src/app/sagas/poll-events/poll-invoice-events.ts index 01b0d043..ebe2ae06 100644 --- a/src/app/sagas/poll-events/poll-invoice-events.ts +++ b/src/app/sagas/poll-events/poll-invoice-events.ts @@ -1,6 +1,5 @@ import last from 'lodash-es/last'; -import { delay } from 'redux-saga'; -import { call, put, race, select, CallEffect, PutEffect, RaceEffect, SelectEffect } from 'redux-saga/effects'; +import { call, put, race, select, delay } from 'redux-saga/effects'; import { InvoiceEvent, getInvoiceEvents, InvoiceChangeType, InteractionType } from 'checkout/backend'; import { SetEventsAction, TypeKeys } from 'checkout/actions'; import { State } from 'checkout/state'; @@ -25,20 +24,15 @@ const isStop = (event: InvoiceEvent): boolean => { } }; -function* getLastEventID(): Iterator { +function* getLastEventID() { return yield select(({ events: { events: events } }: State) => (events && events.length > 0 ? last(events).id : 0)); } -function* poll( - endpoint: string, - token: string, - invoiceID: string, - interval = 1000 -): Iterator | boolean> { +function* poll(endpoint: string, token: string, invoiceID: string, interval = 1000) { let lastEventID = yield call(getLastEventID); let lastEvent = null; while (!isStop(lastEvent)) { - yield call(delay, interval); + yield delay(interval); let chunk: InvoiceEvent[] = []; try { chunk = yield call(getInvoiceEvents, endpoint, token, invoiceID, 5, lastEventID); @@ -67,23 +61,19 @@ const POLLING_INTEVAL_MS = 1000; const EVENTS_WAIT_POLLING_TIME_MS = 10 * 60 * 1000; const EVENTS_WAIT_INTERVAL_MS = 5 * 1000; -export function* pollInvoiceEvents( - endpoint: string, - token: string, - invoiceID: string -): Iterator | CallEffect> { +export function* pollInvoiceEvents(endpoint: string, token: string, invoiceID: string) { let result: InvoiceEvent; for (let i = 1; !result && i < 6; i += 1) { [result] = yield race([ call(poll, endpoint, token, invoiceID), - call(delay, POLLING_TIME_MS * i, POLLING_INTEVAL_MS * 2 ** i) + delay(POLLING_TIME_MS * i, POLLING_INTEVAL_MS * 2 ** i) ]); } if (isEventToWait(result)) { yield call(provideFromInvoiceEvent, result); - [result] = yield race([ + [result] = yield race([ call(poll, endpoint, token, invoiceID, EVENTS_WAIT_INTERVAL_MS), - call(delay, EVENTS_WAIT_POLLING_TIME_MS) + delay(EVENTS_WAIT_POLLING_TIME_MS) ]); } if (result) { diff --git a/src/app/themes/coral.ts b/src/app/themes/coral.ts index cd047598..306026b7 100644 --- a/src/app/themes/coral.ts +++ b/src/app/themes/coral.ts @@ -12,7 +12,6 @@ const theme: Theme = { color: { neutral, primary: { - 0.1: '#ff8454', 1: '#d1658e', 1.1: '#b85c76', 1.2: '#9b4f69' diff --git a/src/app/themes/eastern.ts b/src/app/themes/eastern.ts new file mode 100644 index 00000000..815335da --- /dev/null +++ b/src/app/themes/eastern.ts @@ -0,0 +1,59 @@ +import { css } from 'checkout/styled-components'; +import { ThemeName } from './theme-name'; +import { Theme } from './theme'; +import { error, neutral, warning } from './common-palettes'; + +const palette = { + Eastern: '#2596A1', + EasternBlue: '#28acba', + Emarald: '#06AA87', + MonteCarlo: '#7cceb7', + Elephant: '#0F253D', + Roman: '#DC5A53', + White: '#fff' +}; + +const theme: Theme = { + name: ThemeName.eastern, + color: { + neutral, + primary: { + 1: palette.Eastern, // Payment methods list hover, pay button + 1.1: palette.EasternBlue, // Button hover + 1.2: palette.EasternBlue // Button on click, chevron hover + }, + secondary: { + 0.9: palette.Eastern, // Payment methods list + 1: palette.Eastern, // Unused + 1.1: palette.EasternBlue // All payments method hover + }, + error, + warning, + info: {}, + success: { + 1: palette.Emarald + }, + focus: { + 1: palette.Eastern + }, + font: { + infoBlock: palette.White + } + }, + gradients: { + form: css`linear-gradient(45deg, ${palette.Eastern} -20%, ${palette.Emarald} 90%)`, + loader: [ + [palette.MonteCarlo, '0%'], + [palette.Eastern, '100%'] + ] + }, + font: { + family: "'Roboto', sans-serif" + }, + background: { + image: false, + color: css`linear-gradient(225deg, ${palette.Elephant} 0%, ${palette.Roman} 50%, ${palette.Elephant} 100%)` + } +}; + +export default theme; diff --git a/src/app/themes/index.ts b/src/app/themes/index.ts index 0c2b0bb8..c3c68075 100644 --- a/src/app/themes/index.ts +++ b/src/app/themes/index.ts @@ -4,8 +4,9 @@ import main from './main'; import coral from './coral'; import persianGreen from './persian-green'; import solitude from './solitude'; +import eastern from './eastern'; -const themes = [main, coral, persianGreen, solitude]; +const themes = [main, coral, persianGreen, solitude, eastern]; export const DEFAULT_THEME = main; diff --git a/src/app/themes/main.ts b/src/app/themes/main.ts index 2df00bd4..9d407ff9 100644 --- a/src/app/themes/main.ts +++ b/src/app/themes/main.ts @@ -12,7 +12,6 @@ const theme: Theme = { color: { neutral, primary: { - 0.1: '#c3f0dd', 1: '#38cd8f', 1.1: '#30b37c', 1.2: '#29996a' diff --git a/src/app/themes/persian-green.ts b/src/app/themes/persian-green.ts index 5587dcfa..a0c90036 100644 --- a/src/app/themes/persian-green.ts +++ b/src/app/themes/persian-green.ts @@ -18,7 +18,6 @@ const theme: Theme = { color: { neutral, primary: { - 0.1: palette.PersianGreen, 1: palette.PersianGreen, 1.1: palette.Pelorous, 1.2: palette.Teal diff --git a/src/app/themes/solitude.ts b/src/app/themes/solitude.ts index 0a4a4695..e36ace10 100644 --- a/src/app/themes/solitude.ts +++ b/src/app/themes/solitude.ts @@ -16,7 +16,6 @@ const theme: Theme = { color: { neutral, primary: { - 0.1: palette.Black, 1: palette.Black, 1.1: palette.Black, 1.2: palette.Black diff --git a/src/app/themes/theme-name.ts b/src/app/themes/theme-name.ts index 8ab33817..df992feb 100644 --- a/src/app/themes/theme-name.ts +++ b/src/app/themes/theme-name.ts @@ -2,5 +2,6 @@ export enum ThemeName { main = 'main', coral = 'coral', persianGreen = 'persianGreen', - solitude = 'solitude' + solitude = 'solitude', + eastern = 'eastern' } diff --git a/src/app/themes/theme.ts b/src/app/themes/theme.ts index b84f969f..7465068f 100644 --- a/src/app/themes/theme.ts +++ b/src/app/themes/theme.ts @@ -14,7 +14,6 @@ export interface Theme { 1: string; }; primary: { - 0.1: string; 1: string; 1.1: string; 1.2: string; diff --git a/src/app/utils/get-ya-pay-payment-data.ts b/src/app/utils/get-ya-pay-payment-data.ts index 54144686..239471b6 100644 --- a/src/app/utils/get-ya-pay-payment-data.ts +++ b/src/app/utils/get-ya-pay-payment-data.ts @@ -10,6 +10,7 @@ enum AllowedCardNetwork { export const getYaPayPaymentData = ( merchantID: string, + merchantName: string, gatewayMerchantId: string, order?: YaPay.Order ): YaPay.PaymentData => ({ @@ -19,7 +20,7 @@ export const getYaPayPaymentData = ( currencyCode: YaPay.CurrencyCode.Rub, merchant: { id: merchantID, - name: 'RBKmoney' + name: merchantName }, order: { ...(order || {}), @@ -28,7 +29,7 @@ export const getYaPayPaymentData = ( paymentMethods: [ { type: YaPay.PaymentMethodType.Card, - gateway: 'rbkmoney', + gateway: gatewayMerchantId, gatewayMerchantId, allowedAuthMethods: [YaPay.AllowedAuthMethod.PanOnly, YaPay.AllowedAuthMethod.CloudToken], allowedCardNetworks: [ diff --git a/src/appConfig.json b/src/appConfig.json index acd2f4c7..ea8b98c2 100644 --- a/src/appConfig.json +++ b/src/appConfig.json @@ -2,13 +2,22 @@ "capiEndpoint": "", "wrapperEndpoint": "", "applePayMerchantID": "", - "googlePayMerchantID": "", - "googlePayGatewayMerchantID": "", "samsungPayMerchantName": "", "samsungPayServiceID": "", "brandless": false, "fixedTheme": "", - "yandexPayMerchantID": "", - "yandexPayGatewayMerchantID": "", + "brandName": "Vality", + "yandexPay": { + "merchantName": "Vality", + "merchantID": "00000000-0000-0000-0000-000000000000", + "gatewayMerchantID": "vality" + }, + "googlePay": { + "merchantName": "Vality", + "merchantID": "12345678901234567890", + "gateway": "vality", + "gatewayMerchantID": "vality", + "merchantOrigin": "vality.dev/checkout" + }, "sentryDsn": "/projects//keys/>" } diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 00000000..6d138e16 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1,7 @@ + + + diff --git a/src/environment.ts b/src/environment.ts index c113a62a..c474cbc1 100644 --- a/src/environment.ts +++ b/src/environment.ts @@ -1,7 +1,7 @@ import { Initializer } from './initializer/initializer'; export interface Environment extends Window { - RbkmoneyCheckout?: Configurator; + ValityCheckout?: Configurator; ApplePaySession?: ApplePaySession; PaymentRequest?: PaymentRequest; google?: any; @@ -12,13 +12,13 @@ export interface Configurator { configure: (userConfig: any) => Initializer; } -export const environment = window as Environment; +export const environment = (window as any) as Environment; export const isApplePayAvailable = (): boolean => { try { return environment.ApplePaySession && ApplePaySession.canMakePayments(); } catch (e) { - console.warn('[RbkmoneyCheckout] apple pay availability', e); + console.warn('[ValityCheckout] apple pay availability', e); return false; } }; diff --git a/src/get-origin.ts b/src/get-origin.ts index 7be445ee..8ac1fadc 100644 --- a/src/get-origin.ts +++ b/src/get-origin.ts @@ -1,5 +1,5 @@ export const ieCurrentScriptStub = { - src: 'https://checkout.rbk.money/checkout.js' + src: `${document.location.origin}/checkout.js` }; const getCurrentScript = (): HTMLScriptElement => (document.currentScript || ieCurrentScriptStub) as HTMLScriptElement; diff --git a/src/initializer/html-integration.ts b/src/initializer/html-integration.ts index 194153e3..616ffb73 100644 --- a/src/initializer/html-integration.ts +++ b/src/initializer/html-integration.ts @@ -23,7 +23,7 @@ export class HtmlIntegration { constructor(origin: string) { this.origin = origin; - this.element = document.querySelector('.rbkmoney-checkout') as HTMLScriptElement; + this.element = document.querySelector('.vality-checkout') as HTMLScriptElement; this.isAvailable = !!(this.element && this.element.dataset); } diff --git a/src/initializer/iframe-container.ts b/src/initializer/iframe-container.ts index 3d9c586e..50e45595 100644 --- a/src/initializer/iframe-container.ts +++ b/src/initializer/iframe-container.ts @@ -26,8 +26,8 @@ const styles = { const create = (origin: string): HTMLIFrameElement => { const iframe = document.createElement('iframe'); iframe.setAttribute('src', `${origin}/v1/checkout.html`); - iframe.setAttribute('name', `rbkmoney-payframe-${generateId()}`); - iframe.setAttribute('class', 'rbkmoney-payframe'); + iframe.setAttribute('name', `vality-payframe-${generateId()}`); + iframe.setAttribute('class', 'vality-payframe'); iframe.setAttribute('allowtransparency', 'true'); iframe.setAttribute('frameborder', '0'); iframe.setAttribute('allowpaymentrequest', ''); diff --git a/src/initializer/index.ts b/src/initializer/index.ts index 3110125a..a0558921 100644 --- a/src/initializer/index.ts +++ b/src/initializer/index.ts @@ -24,11 +24,11 @@ const init = (origin: string): Configurator => ({ }); domReady().then((origin) => { - const RbkmoneyCheckout = (environment.RbkmoneyCheckout = init(origin)); + const ValityCheckout = (environment.ValityCheckout = init(origin)); const htmlIntegration = new HtmlIntegration(origin); if (htmlIntegration.isAvailable) { const userConfig = htmlIntegration.getUserConfig(); - const checkout = RbkmoneyCheckout.configure(userConfig); + const checkout = ValityCheckout.configure(userConfig); const payButton = htmlIntegration.renderPayButton(userConfig.label); payButton.onclick = (e: Event) => { e.preventDefault(); diff --git a/src/initializer/init-button/append-init-button.ts b/src/initializer/init-button/append-init-button.ts index 0048726d..2555dfa1 100644 --- a/src/initializer/init-button/append-init-button.ts +++ b/src/initializer/init-button/append-init-button.ts @@ -14,7 +14,7 @@ const appendPayButtonStyles = (origin: string) => { export const appendInitButton = (origin: string, appendEl: HTMLScriptElement, label: string): HTMLButtonElement => { appendPayButtonStyles(origin); const button = document.createElement('button'); - button.id = 'rbkmoney-button'; + button.id = 'vality-button'; button.className = initButton; button.innerHTML = label || getDefaultLabel(); appendEl.parentNode.appendChild(button); diff --git a/src/locale/en.json b/src/locale/en.json index 8f1f7233..e11e8030 100644 --- a/src/locale/en.json +++ b/src/locale/en.json @@ -98,7 +98,7 @@ "form.pay.terminals.instruction.to.pay": "To pay", "form.pay.terminals.instruction.dueDate": "Payment must be made before", "form.pay.terminals.step.one.text": "Choose nearest mobile shop", - "form.pay.terminals.step.two.text": "Tell the booking-clerk you’re paying with RBKmoney", + "form.pay.terminals.step.two.text": "Tell the booking-clerk you’re paying with ${brandName}", "form.pay.terminals.step.three.text": "Tell your payment code", "form.pay.terminals.step.four.text": "Pay with cash", "form.pay.terminals.step.five.text": "Don’t forget the receipt", diff --git a/src/locale/ru.json b/src/locale/ru.json index 14c3cac0..968327d6 100644 --- a/src/locale/ru.json +++ b/src/locale/ru.json @@ -98,7 +98,7 @@ "form.pay.terminals.instruction.to.pay": "К оплате", "form.pay.terminals.instruction.dueDate": "Оплату необходимо произвести до", "form.pay.terminals.step.one.text": "Посетите любой удобный для вас салон связи", - "form.pay.terminals.step.two.text": "Скажите кассиру, что платите через RBKmoney", + "form.pay.terminals.step.two.text": "Скажите кассиру, что платите через ${brandName}", "form.pay.terminals.step.three.text": "Скажите ваш код платежа", "form.pay.terminals.step.four.text": "Внесите наличные", "form.pay.terminals.step.five.text": "Обязательно возьмите чек", diff --git a/tsconfig.json b/tsconfig.json index 598d01d4..c995a8ba 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,6 @@ "compilerOptions": { "outDir": "./dist/", "sourceMap": true, - "noImplicitAny": true, "moduleResolution": "Node", "module": "ES2015", "target": "ES5",