From cf7e4b6950d293839c4d7e8423b1995c9b712205 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 23:40:44 +0300 Subject: [PATCH 01/13] fix(deps): update dependency framer-motion to ^11.5.6 (#1635) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/boutique/frontend/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/boutique/frontend/package.json b/packages/boutique/frontend/package.json index b012eb587..490034b55 100644 --- a/packages/boutique/frontend/package.json +++ b/packages/boutique/frontend/package.json @@ -19,7 +19,7 @@ "@tanstack/react-query": "^5.56.2", "@boutique/shared": "workspace:*", "class-variance-authority": "^0.7.0", - "framer-motion": "^11.5.4", + "framer-motion": "^11.5.6", "react": "^18.3.1", "react-dom": "^18.3.1", "react-hook-form": "^7.53.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f98ab3994..612d39c7c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -151,8 +151,8 @@ importers: specifier: ^0.7.0 version: 0.7.0 framer-motion: - specifier: ^11.5.4 - version: 11.5.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^11.5.6 + version: 11.5.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: ^18.3.1 version: 18.3.1 @@ -3702,8 +3702,8 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - framer-motion@11.5.4: - resolution: {integrity: sha512-E+tb3/G6SO69POkdJT+3EpdMuhmtCh9EWuK4I1DnIC23L7tFPrl8vxP+LSovwaw6uUr73rUbpb4FgK011wbRJQ==} + framer-motion@11.5.6: + resolution: {integrity: sha512-JMwUpAxv/DWgul9vPgX0ElKn0G66sUc6O9tOXsYwn3zxwvhxFljSXC0XT2QCzuTYBshwC8nyDAa1SYcV0Ldbhw==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 @@ -10266,7 +10266,7 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@11.5.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@11.5.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: tslib: 2.6.3 optionalDependencies: From 26801731697568e626300a516f56a9e57203778c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 23:41:05 +0300 Subject: [PATCH 02/13] fix(deps): update dependency react-select to ^5.8.1 (#1636) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/wallet/frontend/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/wallet/frontend/package.json b/packages/wallet/frontend/package.json index 4bfea2656..08b263617 100644 --- a/packages/wallet/frontend/package.json +++ b/packages/wallet/frontend/package.json @@ -21,7 +21,7 @@ "react-dom": "18.3.1", "react-hook-form": "^7.53.0", "react-joyride": "^2.9.2", - "react-select": "^5.8.0", + "react-select": "^5.8.1", "sharp": "^0.33.5", "socket.io-client": "^4.7.5", "tailwind-merge": "^2.5.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 612d39c7c..b5264839b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -443,8 +443,8 @@ importers: specifier: ^2.9.2 version: 2.9.2(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-select: - specifier: ^5.8.0 - version: 5.8.0(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^5.8.1 + version: 5.8.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) sharp: specifier: ^0.33.5 version: 0.33.5 @@ -5378,8 +5378,8 @@ packages: peerDependencies: react: '>=16.8' - react-select@5.8.0: - resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} + react-select@5.8.1: + resolution: {integrity: sha512-RT1CJmuc+ejqm5MPgzyZujqDskdvB9a9ZqrdnVLsvAHjJ3Tj0hELnLeVPQlmYdVKCdCpxanepl6z7R5KhXhWzg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -12134,7 +12134,7 @@ snapshots: '@remix-run/router': 1.19.2 react: 18.3.1 - react-select@5.8.0(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-select@5.8.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.25.0 '@emotion/cache': 11.13.1 From d9a37546cf6f079c77916f9e0648a5439be08d7e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 21 Sep 2024 18:09:54 +0300 Subject: [PATCH 03/13] chore(deps): update dependency @types/react to v18.3.8 (#1637) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/boutique/frontend/package.json | 2 +- packages/wallet/frontend/package.json | 2 +- pnpm-lock.yaml | 452 ++++++++++++------------ 3 files changed, 228 insertions(+), 228 deletions(-) diff --git a/packages/boutique/frontend/package.json b/packages/boutique/frontend/package.json index 490034b55..f674e335b 100644 --- a/packages/boutique/frontend/package.json +++ b/packages/boutique/frontend/package.json @@ -33,7 +33,7 @@ "devDependencies": { "@tailwindcss/forms": "^0.5.9", "@tailwindcss/typography": "^0.5.15", - "@types/react": "18.3.7", + "@types/react": "18.3.8", "@types/react-dom": "18.3.0", "@vitejs/plugin-react-swc": "^3.7.0", "autoprefixer": "^10.4.20", diff --git a/packages/wallet/frontend/package.json b/packages/wallet/frontend/package.json index 08b263617..7a2b992a8 100644 --- a/packages/wallet/frontend/package.json +++ b/packages/wallet/frontend/package.json @@ -35,7 +35,7 @@ "@tailwindcss/forms": "^0.5.9", "@types/node": "^20.12.11", "@types/nprogress": "^0.2.3", - "@types/react": "18.3.7", + "@types/react": "18.3.8", "@types/react-dom": "18.3.0", "autoprefixer": "^10.4.20", "postcss": "^8.4.47", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5264839b..bc0af077e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -125,25 +125,25 @@ importers: version: 3.9.0(react-hook-form@7.53.0(react@18.3.1)) '@radix-ui/react-dialog': specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.1.1 - version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-label': specifier: ^2.1.0 - version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-popover': specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.1.0 - version: 1.1.0(@types/react@18.3.7)(react@18.3.1) + version: 1.1.0(@types/react@18.3.8)(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.1.0 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-toast': specifier: ^1.2.1 - version: 1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-query': specifier: ^5.56.2 version: 5.56.2(react@18.3.1) @@ -176,7 +176,7 @@ importers: version: 1.0.7(tailwindcss@3.4.12) valtio: specifier: ^2.0.0 - version: 2.0.0(@types/react@18.3.7)(react@18.3.1) + version: 2.0.0(@types/react@18.3.8)(react@18.3.1) zod: specifier: ^3.23.8 version: 3.23.8 @@ -188,8 +188,8 @@ importers: specifier: ^0.5.15 version: 0.5.15(tailwindcss@3.4.12) '@types/react': - specifier: 18.3.7 - version: 18.3.7 + specifier: 18.3.8 + version: 18.3.8 '@types/react-dom': specifier: 18.3.0 version: 18.3.0 @@ -408,10 +408,10 @@ importers: version: 3.9.0(react-hook-form@7.53.0(react@18.3.1)) '@radix-ui/react-toast': specifier: ^1.2.1 - version: 1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wallet/shared': specifier: workspace:* version: link:../shared @@ -441,10 +441,10 @@ importers: version: 7.53.0(react@18.3.1) react-joyride: specifier: ^2.9.2 - version: 2.9.2(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.9.2(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-select: specifier: ^5.8.1 - version: 5.8.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 5.8.1(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) sharp: specifier: ^0.33.5 version: 0.33.5 @@ -459,7 +459,7 @@ importers: version: 1.0.7(tailwindcss@3.4.12) valtio: specifier: ^2.0.0 - version: 2.0.0(@types/react@18.3.7)(react@18.3.1) + version: 2.0.0(@types/react@18.3.8)(react@18.3.1) zod: specifier: ^3.23.8 version: 3.23.8 @@ -480,8 +480,8 @@ importers: specifier: ^0.2.3 version: 0.2.3 '@types/react': - specifier: 18.3.7 - version: 18.3.7 + specifier: 18.3.8 + version: 18.3.8 '@types/react-dom': specifier: 18.3.0 version: 18.3.0 @@ -2431,8 +2431,8 @@ packages: '@types/react-transition-group@4.4.11': resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} - '@types/react@18.3.7': - resolution: {integrity: sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==} + '@types/react@18.3.8': + resolution: {integrity: sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==} '@types/request@2.48.12': resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} @@ -6890,7 +6890,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.0(@types/react@18.3.7)(react@18.3.1)': + '@emotion/react@11.13.0(@types/react@18.3.8)(react@18.3.1)': dependencies: '@babel/runtime': 7.25.0 '@emotion/babel-plugin': 11.12.0 @@ -6902,7 +6902,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 transitivePeerDependencies: - supports-color @@ -7988,351 +7988,351 @@ snapshots: '@radix-ui/primitive@1.1.0': {} - '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-context@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-context@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.8)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.7(@types/react@18.3.7)(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.8)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-direction@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-direction@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-dropdown-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-id@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-id@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-label@2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-label@2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.8)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.7(@types/react@18.3.7)(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.8)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-popover@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popover@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.8)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.7(@types/react@18.3.7)(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.8)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.8)(react@18.3.1) '@radix-ui/rect': 1.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-slot@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-slot@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-tabs@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-tabs@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-toast@1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-toast@1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.7)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.8)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-use-size@1.1.0(@types/react@18.3.7)(react@18.3.1)': + '@radix-ui/react-use-size@1.1.0(@types/react@18.3.8)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.7)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.8)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-dom': 18.3.0 '@radix-ui/rect@1.1.0': {} @@ -8669,13 +8669,13 @@ snapshots: '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 '@types/react-transition-group@4.4.11': dependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - '@types/react@18.3.7': + '@types/react@18.3.8': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -12076,16 +12076,16 @@ snapshots: dependencies: react: 18.3.1 - react-innertext@1.1.5(@types/react@18.3.7)(react@18.3.1): + react-innertext@1.1.5(@types/react@18.3.8)(react@18.3.1): dependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 react: 18.3.1 react-is@16.13.1: {} react-is@18.3.1: {} - react-joyride@2.9.2(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-joyride@2.9.2(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@gilbarbara/deep-equal': 0.3.1 deep-diff: 1.0.2 @@ -12094,7 +12094,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-floater: 0.7.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-innertext: 1.1.5(@types/react@18.3.7)(react@18.3.1) + react-innertext: 1.1.5(@types/react@18.3.8)(react@18.3.1) react-is: 16.13.1 scroll: 3.0.1 scrollparent: 2.1.0 @@ -12103,24 +12103,24 @@ snapshots: transitivePeerDependencies: - '@types/react' - react-remove-scroll-bar@2.3.6(@types/react@18.3.7)(react@18.3.1): + react-remove-scroll-bar@2.3.6(@types/react@18.3.8)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.7)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.8)(react@18.3.1) tslib: 2.6.3 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - react-remove-scroll@2.5.7(@types/react@18.3.7)(react@18.3.1): + react-remove-scroll@2.5.7(@types/react@18.3.8)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.7)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.7)(react@18.3.1) + react-remove-scroll-bar: 2.3.6(@types/react@18.3.8)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.8)(react@18.3.1) tslib: 2.6.3 - use-callback-ref: 1.3.2(@types/react@18.3.7)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.7)(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.8)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.8)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 react-router-dom@6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -12134,11 +12134,11 @@ snapshots: '@remix-run/router': 1.19.2 react: 18.3.1 - react-select@5.8.1(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-select@5.8.1(@types/react@18.3.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.25.0 '@emotion/cache': 11.13.1 - '@emotion/react': 11.13.0(@types/react@18.3.7)(react@18.3.1) + '@emotion/react': 11.13.0(@types/react@18.3.8)(react@18.3.1) '@floating-ui/dom': 1.6.10 '@types/react-transition-group': 4.4.11 memoize-one: 6.0.0 @@ -12146,19 +12146,19 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.7)(react@18.3.1) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.8)(react@18.3.1) transitivePeerDependencies: - '@types/react' - supports-color - react-style-singleton@2.2.1(@types/react@18.3.7)(react@18.3.1): + react-style-singleton@2.2.1(@types/react@18.3.8)(react@18.3.1): dependencies: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 tslib: 2.6.3 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -13045,26 +13045,26 @@ snapshots: urlpattern-polyfill@8.0.2: {} - use-callback-ref@1.3.2(@types/react@18.3.7)(react@18.3.1): + use-callback-ref@1.3.2(@types/react@18.3.8)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.6.3 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - use-isomorphic-layout-effect@1.1.2(@types/react@18.3.7)(react@18.3.1): + use-isomorphic-layout-effect@1.1.2(@types/react@18.3.8)(react@18.3.1): dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 - use-sidecar@1.1.2(@types/react@18.3.7)(react@18.3.1): + use-sidecar@1.1.2(@types/react@18.3.8)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.6.3 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 util-deprecate@1.0.2: {} @@ -13082,11 +13082,11 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - valtio@2.0.0(@types/react@18.3.7)(react@18.3.1): + valtio@2.0.0(@types/react@18.3.8)(react@18.3.1): dependencies: proxy-compare: 3.0.0 optionalDependencies: - '@types/react': 18.3.7 + '@types/react': 18.3.8 react: 18.3.1 value-or-promise@1.0.12: {} From 318cc8305a065765f6c069a2fcf535158260acfc Mon Sep 17 00:00:00 2001 From: Timea <117268143+Tymmmy@users.noreply.github.com> Date: Sat, 21 Sep 2024 19:24:25 +0300 Subject: [PATCH 04/13] feat: boutique add currency into an env variable (#1638) * add .env to boutique * discard unused code * feat: set receiver in limits * fix: increase max attempts * chore(boutique-backend): format * chore(boutique-frontend): rename env to CURRENCY * Revert "chore(boutique-frontend): rename env to CURRENCY" This reverts commit 40694db3296396a1da2b3c0520d0565f97609111. --------- Co-authored-by: dragosp1011 Co-authored-by: beniaminmunteanu --- .../backend/src/open-payments/service.ts | 37 +++++++++---------- .../boutique/backend/src/payment/service.ts | 2 +- packages/boutique/frontend/.env.example | 1 + packages/boutique/frontend/package.json | 2 +- packages/boutique/frontend/src/lib/utils.ts | 2 +- packages/wallet/frontend/next-env.d.ts | 2 +- pnpm-lock.yaml | 34 ++++++++++++----- 7 files changed, 46 insertions(+), 34 deletions(-) create mode 100644 packages/boutique/frontend/.env.example diff --git a/packages/boutique/backend/src/open-payments/service.ts b/packages/boutique/backend/src/open-payments/service.ts index 26004075e..2ac918a00 100644 --- a/packages/boutique/backend/src/open-payments/service.ts +++ b/packages/boutique/backend/src/open-payments/service.ts @@ -40,10 +40,13 @@ interface CreateOutgoingPaymentParams { authServer: string identifier: string walletAddress: string - debitAmount: Amount - receiveAmount: Amount nonce: string finishUrl?: string + limits: { + debitAmount: Amount + receiveAmount: Amount + receiver?: string + } } interface CreateIncomingPaymentParams { @@ -127,9 +130,11 @@ export class OpenPayments implements IOpenPayments { identifier: order.id, walletAddress: customerWalletAddress.id, authServer: customerWalletAddress.authServer, - - debitAmount: quote.debitAmount, - receiveAmount: quote.receiveAmount, + limits: { + debitAmount: quote.debitAmount, + receiveAmount: quote.receiveAmount, + receiver: incomingPayment.id + }, nonce: clientNonce }) @@ -260,8 +265,10 @@ export class OpenPayments implements IOpenPayments { walletAddress: walletAddress.id, authServer: walletAddress.authServer, identifier: clientIdentifer, - debitAmount: amountData, - receiveAmount: amountData, + limits: { + debitAmount: amountData, + receiveAmount: amountData + }, finishUrl: `${this.env.FRONTEND_URL}/cart/finish?identifier=${clientIdentifer}` }) @@ -402,15 +409,8 @@ export class OpenPayments implements IOpenPayments { private async createOutgoingPaymentGrant( params: CreateOutgoingPaymentParams ): Promise { - const { - nonce, - authServer, - identifier, - walletAddress, - debitAmount, - receiveAmount, - finishUrl - } = params + const { nonce, authServer, identifier, walletAddress, limits, finishUrl } = + params const finish = finishUrl ?? @@ -426,10 +426,7 @@ export class OpenPayments implements IOpenPayments { type: 'outgoing-payment', actions: ['create', 'read', 'list'], identifier: walletAddress, - limits: { - debitAmount, - receiveAmount - } + limits } ] }, diff --git a/packages/boutique/backend/src/payment/service.ts b/packages/boutique/backend/src/payment/service.ts index 6f8b69b81..849aed2db 100644 --- a/packages/boutique/backend/src/payment/service.ts +++ b/packages/boutique/backend/src/payment/service.ts @@ -16,7 +16,7 @@ export interface IPaymentService { export class PaymentService implements IPaymentService { private readonly TRESHOLD_MS: number = 5000 - private readonly MAX_ATTEMPTS: number = 5 + private readonly MAX_ATTEMPTS: number = 24 constructor( private logger: Logger, diff --git a/packages/boutique/frontend/.env.example b/packages/boutique/frontend/.env.example new file mode 100644 index 000000000..b12ede696 --- /dev/null +++ b/packages/boutique/frontend/.env.example @@ -0,0 +1 @@ +VITE_CURRENCY= \ No newline at end of file diff --git a/packages/boutique/frontend/package.json b/packages/boutique/frontend/package.json index f674e335b..66f71a3ab 100644 --- a/packages/boutique/frontend/package.json +++ b/packages/boutique/frontend/package.json @@ -8,6 +8,7 @@ "preview": "vite preview" }, "dependencies": { + "@boutique/shared": "workspace:*", "@hookform/resolvers": "^3.9.0", "@radix-ui/react-dialog": "^1.1.1", "@radix-ui/react-dropdown-menu": "^2.1.1", @@ -17,7 +18,6 @@ "@radix-ui/react-tabs": "^1.1.0", "@radix-ui/react-toast": "^1.2.1", "@tanstack/react-query": "^5.56.2", - "@boutique/shared": "workspace:*", "class-variance-authority": "^0.7.0", "framer-motion": "^11.5.6", "react": "^18.3.1", diff --git a/packages/boutique/frontend/src/lib/utils.ts b/packages/boutique/frontend/src/lib/utils.ts index 1cfec42df..238c6f692 100644 --- a/packages/boutique/frontend/src/lib/utils.ts +++ b/packages/boutique/frontend/src/lib/utils.ts @@ -8,7 +8,7 @@ export function cn(...inputs: CxOptions) { export function formatPrice(price: number): string { const formatter = new Intl.NumberFormat('en-US', { style: 'currency', - currency: 'USD', + currency: import.meta.env.VITE_CURRENCY || 'USD', maximumFractionDigits: 2, minimumFractionDigits: 2 }) diff --git a/packages/wallet/frontend/next-env.d.ts b/packages/wallet/frontend/next-env.d.ts index 4f11a03dc..a4a7b3f5c 100644 --- a/packages/wallet/frontend/next-env.d.ts +++ b/packages/wallet/frontend/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/pages/building-your-application/configuring/typescript for more information. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bc0af077e..71d104a96 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -76,7 +76,7 @@ importers: version: 3.1.0(pg@8.13.0) objection: specifier: ^3.1.4 - version: 3.1.4(knex@3.1.0) + version: 3.1.4(knex@3.1.0(pg@8.13.0)) pg: specifier: ^8.13.0 version: 8.13.0 @@ -195,7 +195,7 @@ importers: version: 18.3.0 '@vitejs/plugin-react-swc': specifier: ^3.7.0 - version: 3.7.0(@swc/helpers@0.5.5)(vite@5.4.6(@types/node@20.14.15)) + version: 3.7.0(@swc/helpers@0.5.5)(vite@5.4.6(@types/node@22.5.5)) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.47) @@ -210,7 +210,7 @@ importers: version: 5.6.2 vite: specifier: ^5.4.6 - version: 5.4.6(@types/node@20.14.15) + version: 5.4.6(@types/node@22.5.5) packages/boutique/shared: dependencies: @@ -241,7 +241,7 @@ importers: version: 3.1.0(pg@8.13.0) objection: specifier: ^3.1.4 - version: 3.1.4(knex@3.1.0) + version: 3.1.4(knex@3.1.0(pg@8.13.0)) winston: specifier: ^3.14.2 version: 3.14.2 @@ -329,7 +329,7 @@ importers: version: 5.1.2 objection: specifier: ^3.1.4 - version: 3.1.4(knex@3.1.0) + version: 3.1.4(knex@3.1.0(pg@8.13.0)) pg: specifier: ^8.13.0 version: 8.13.0 @@ -2410,6 +2410,9 @@ packages: '@types/node@20.14.15': resolution: {integrity: sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==} + '@types/node@22.5.5': + resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} + '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} @@ -6092,6 +6095,9 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici@5.28.4: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} @@ -8657,6 +8663,11 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@22.5.5': + dependencies: + undici-types: 6.19.8 + optional: true + '@types/nprogress@0.2.3': {} '@types/parse-json@4.0.2': {} @@ -8812,10 +8823,10 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.5)(vite@5.4.6(@types/node@20.14.15))': + '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.5)(vite@5.4.6(@types/node@22.5.5))': dependencies: '@swc/core': 1.7.10(@swc/helpers@0.5.5) - vite: 5.4.6(@types/node@20.14.15) + vite: 5.4.6(@types/node@22.5.5) transitivePeerDependencies: - '@swc/helpers' @@ -11630,7 +11641,7 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 - objection@3.1.4(knex@3.1.0): + objection@3.1.4(knex@3.1.0(pg@8.13.0)): dependencies: ajv: 8.17.1 ajv-formats: 2.1.1(ajv@8.17.1) @@ -13013,6 +13024,9 @@ snapshots: undici-types@5.26.5: {} + undici-types@6.19.8: + optional: true + undici@5.28.4: dependencies: '@fastify/busboy': 2.1.1 @@ -13093,13 +13107,13 @@ snapshots: vary@1.1.2: {} - vite@5.4.6(@types/node@20.14.15): + vite@5.4.6(@types/node@22.5.5): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.20.0 optionalDependencies: - '@types/node': 20.14.15 + '@types/node': 22.5.5 fsevents: 2.3.3 walker@1.0.8: From 6a87399ae23672a2300b6a12b429e40f2d86da65 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 17:47:28 +0300 Subject: [PATCH 05/13] fix(deps): update socket.io packages to ^4.8.0 (#1640) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/wallet/backend/package.json | 2 +- packages/wallet/frontend/package.json | 2 +- pnpm-lock.yaml | 44 +++++++++++++-------------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/wallet/backend/package.json b/packages/wallet/backend/package.json index 2f164208b..c848c7888 100644 --- a/packages/wallet/backend/package.json +++ b/packages/wallet/backend/package.json @@ -32,7 +32,7 @@ "objection": "^3.1.4", "pg": "^8.13.0", "randexp": "^0.5.3", - "socket.io": "^4.7.5", + "socket.io": "^4.8.0", "uuid": "^10.0.0", "winston": "^3.14.2", "zod": "^3.23.8" diff --git a/packages/wallet/frontend/package.json b/packages/wallet/frontend/package.json index 7a2b992a8..7392cac51 100644 --- a/packages/wallet/frontend/package.json +++ b/packages/wallet/frontend/package.json @@ -23,7 +23,7 @@ "react-joyride": "^2.9.2", "react-select": "^5.8.1", "sharp": "^0.33.5", - "socket.io-client": "^4.7.5", + "socket.io-client": "^4.8.0", "tailwind-merge": "^2.5.2", "tailwindcss-animate": "^1.0.7", "valtio": "^2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71d104a96..07f9eb04b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -337,8 +337,8 @@ importers: specifier: ^0.5.3 version: 0.5.3 socket.io: - specifier: ^4.7.5 - version: 4.7.5 + specifier: ^4.8.0 + version: 4.8.0 uuid: specifier: ^10.0.0 version: 10.0.0 @@ -449,8 +449,8 @@ importers: specifier: ^0.33.5 version: 0.33.5 socket.io-client: - specifier: ^4.7.5 - version: 4.7.5 + specifier: ^4.8.0 + version: 4.8.0 tailwind-merge: specifier: ^2.5.2 version: 2.5.2 @@ -3409,15 +3409,15 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - engine.io-client@6.5.4: - resolution: {integrity: sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==} + engine.io-client@6.6.1: + resolution: {integrity: sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==} engine.io-parser@5.2.3: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} - engine.io@6.5.5: - resolution: {integrity: sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==} + engine.io@6.6.1: + resolution: {integrity: sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==} engines: {node: '>=10.2.0'} error-ex@1.3.2: @@ -5677,16 +5677,16 @@ packages: socket.io-adapter@2.5.5: resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} - socket.io-client@4.7.5: - resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==} + socket.io-client@4.8.0: + resolution: {integrity: sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==} engines: {node: '>=10.0.0'} socket.io-parser@4.2.4: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} - socket.io@4.7.5: - resolution: {integrity: sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==} + socket.io@4.8.0: + resolution: {integrity: sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==} engines: {node: '>=10.2.0'} sonic-boom@3.8.1: @@ -6352,8 +6352,8 @@ packages: utf-8-validate: optional: true - xmlhttprequest-ssl@2.0.0: - resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + xmlhttprequest-ssl@2.1.1: + resolution: {integrity: sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==} engines: {node: '>=0.4.0'} xtend@4.0.2: @@ -9799,13 +9799,13 @@ snapshots: dependencies: once: 1.4.0 - engine.io-client@6.5.4: + engine.io-client@6.6.1: dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.3.6 engine.io-parser: 5.2.3 ws: 8.17.1 - xmlhttprequest-ssl: 2.0.0 + xmlhttprequest-ssl: 2.1.1 transitivePeerDependencies: - bufferutil - supports-color @@ -9813,7 +9813,7 @@ snapshots: engine.io-parser@5.2.3: {} - engine.io@6.5.5: + engine.io@6.6.1: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 @@ -12532,11 +12532,11 @@ snapshots: - supports-color - utf-8-validate - socket.io-client@4.7.5: + socket.io-client@4.8.0: dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.3.6 - engine.io-client: 6.5.4 + engine.io-client: 6.6.1 socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil @@ -12550,13 +12550,13 @@ snapshots: transitivePeerDependencies: - supports-color - socket.io@4.7.5: + socket.io@4.8.0: dependencies: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 debug: 4.3.6 - engine.io: 6.5.5 + engine.io: 6.6.1 socket.io-adapter: 2.5.5 socket.io-parser: 4.2.4 transitivePeerDependencies: @@ -13255,7 +13255,7 @@ snapshots: ws@8.18.0: {} - xmlhttprequest-ssl@2.0.0: {} + xmlhttprequest-ssl@2.1.1: {} xtend@4.0.2: {} From 105ea1e0a21a88409cbbfe2de21b2c6fa58069d8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 09:22:08 +0300 Subject: [PATCH 06/13] chore(deps): update dependency vite to ^5.4.7 (#1641) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/boutique/frontend/package.json | 2 +- pnpm-lock.yaml | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/boutique/frontend/package.json b/packages/boutique/frontend/package.json index 66f71a3ab..df0058fe5 100644 --- a/packages/boutique/frontend/package.json +++ b/packages/boutique/frontend/package.json @@ -40,6 +40,6 @@ "postcss": "^8.4.47", "tailwindcss": "^3.4.12", "typescript": "^5.6.2", - "vite": "^5.4.6" + "vite": "^5.4.7" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07f9eb04b..85118e968 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -76,7 +76,7 @@ importers: version: 3.1.0(pg@8.13.0) objection: specifier: ^3.1.4 - version: 3.1.4(knex@3.1.0(pg@8.13.0)) + version: 3.1.4(knex@3.1.0) pg: specifier: ^8.13.0 version: 8.13.0 @@ -195,7 +195,7 @@ importers: version: 18.3.0 '@vitejs/plugin-react-swc': specifier: ^3.7.0 - version: 3.7.0(@swc/helpers@0.5.5)(vite@5.4.6(@types/node@22.5.5)) + version: 3.7.0(@swc/helpers@0.5.5)(vite@5.4.7(@types/node@22.5.5)) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.47) @@ -209,8 +209,8 @@ importers: specifier: ^5.6.2 version: 5.6.2 vite: - specifier: ^5.4.6 - version: 5.4.6(@types/node@22.5.5) + specifier: ^5.4.7 + version: 5.4.7(@types/node@22.5.5) packages/boutique/shared: dependencies: @@ -241,7 +241,7 @@ importers: version: 3.1.0(pg@8.13.0) objection: specifier: ^3.1.4 - version: 3.1.4(knex@3.1.0(pg@8.13.0)) + version: 3.1.4(knex@3.1.0) winston: specifier: ^3.14.2 version: 3.14.2 @@ -329,7 +329,7 @@ importers: version: 5.1.2 objection: specifier: ^3.1.4 - version: 3.1.4(knex@3.1.0(pg@8.13.0)) + version: 3.1.4(knex@3.1.0) pg: specifier: ^8.13.0 version: 8.13.0 @@ -6203,8 +6203,8 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite@5.4.6: - resolution: {integrity: sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==} + vite@5.4.7: + resolution: {integrity: sha512-5l2zxqMEPVENgvzTuBpHer2awaetimj2BGkhBPdnwKbPNOlHsODU+oiazEZzLK7KhAnOrO+XGYJYn4ZlUhDtDQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -8823,10 +8823,10 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.5)(vite@5.4.6(@types/node@22.5.5))': + '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.5)(vite@5.4.7(@types/node@22.5.5))': dependencies: '@swc/core': 1.7.10(@swc/helpers@0.5.5) - vite: 5.4.6(@types/node@22.5.5) + vite: 5.4.7(@types/node@22.5.5) transitivePeerDependencies: - '@swc/helpers' @@ -11641,7 +11641,7 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 - objection@3.1.4(knex@3.1.0(pg@8.13.0)): + objection@3.1.4(knex@3.1.0): dependencies: ajv: 8.17.1 ajv-formats: 2.1.1(ajv@8.17.1) @@ -13107,7 +13107,7 @@ snapshots: vary@1.1.2: {} - vite@5.4.6(@types/node@22.5.5): + vite@5.4.7(@types/node@22.5.5): dependencies: esbuild: 0.21.5 postcss: 8.4.47 From 2839dac2e5acf9ba64892e2c729584166b99ac1d Mon Sep 17 00:00:00 2001 From: Adrian Boros Date: Mon, 23 Sep 2024 13:44:08 +0300 Subject: [PATCH 07/13] feat: 1639 - add password view/hide functionality on the login/register pages (#1642) * 1639 - add password view/hide functionality on the login/register pages * fix lint issues * fix filename import * remove unused prop * add password view/hide functionality on the reset password form * add password view/hide functionality on the change password form --- .../frontend/src/components/icons/Eye.tsx | 36 ++++++++ .../src/components/icons/SlashEye.tsx | 34 +++++++ .../settings/ChangePasswordForm.tsx | 89 ++++++++++++++----- .../wallet/frontend/src/pages/auth/login.tsx | 30 +++++-- .../frontend/src/pages/auth/reset/[token].tsx | 61 +++++++++---- .../wallet/frontend/src/pages/auth/signup.tsx | 57 ++++++++---- 6 files changed, 243 insertions(+), 64 deletions(-) create mode 100644 packages/wallet/frontend/src/components/icons/Eye.tsx create mode 100644 packages/wallet/frontend/src/components/icons/SlashEye.tsx diff --git a/packages/wallet/frontend/src/components/icons/Eye.tsx b/packages/wallet/frontend/src/components/icons/Eye.tsx new file mode 100644 index 000000000..9b732a346 --- /dev/null +++ b/packages/wallet/frontend/src/components/icons/Eye.tsx @@ -0,0 +1,36 @@ +import { SVGProps } from 'react' + +export const Eye = (props: SVGProps) => { + return ( + + + + + + ) +} diff --git a/packages/wallet/frontend/src/components/icons/SlashEye.tsx b/packages/wallet/frontend/src/components/icons/SlashEye.tsx new file mode 100644 index 000000000..ace2b58fb --- /dev/null +++ b/packages/wallet/frontend/src/components/icons/SlashEye.tsx @@ -0,0 +1,34 @@ +import { SVGProps } from 'react' + +export const SlashEye = (props: SVGProps) => { + return ( + + + + + + ) +} diff --git a/packages/wallet/frontend/src/components/settings/ChangePasswordForm.tsx b/packages/wallet/frontend/src/components/settings/ChangePasswordForm.tsx index b3e88d272..53c390958 100644 --- a/packages/wallet/frontend/src/components/settings/ChangePasswordForm.tsx +++ b/packages/wallet/frontend/src/components/settings/ChangePasswordForm.tsx @@ -2,20 +2,37 @@ import { Button } from '@/ui/Button' import { Form } from '@/ui/forms/Form' import { useZodForm } from '@/lib/hooks/useZodForm' import { Input } from '@/ui/forms/Input' +import { Eye } from '@/components/icons/Eye' +import { SlashEye } from '@/components/icons/SlashEye' import { changePasswordSchema, userService } from '@/lib/api/user' import { useDialog } from '@/lib/hooks/useDialog' import { ErrorDialog } from '../dialogs/ErrorDialog' import { getObjectKeys } from '@/utils/helpers' import { SuccessDialog } from '../dialogs/SuccessDialog' import { usePasswordContext } from '@/lib/context/password' -import { useEffect } from 'react' +import { useEffect, useState } from 'react' export const ChangePasswordForm = () => { + const [isCurrentPasswordVisible, setCurrentPasswordVisible] = + useState(false) + const [isNewPasswordVisible, setNewPasswordVisible] = useState(false) + const [isConfirmNewPasswordVisible, setConfirmNewPasswordVisible] = + useState(false) + const changePasswordForm = useZodForm({ schema: changePasswordSchema }) const [openDialog, closeDialog] = useDialog() const { setIsChangePassword } = usePasswordContext() + const toggleCurrentPasswordVisibility = () => { + setCurrentPasswordVisible(!isCurrentPasswordVisible) + } + const toggleNewPasswordVisibility = () => { + setNewPasswordVisible(!isNewPasswordVisible) + } + const toggleConfirmNewPasswordVisibility = () => { + setConfirmNewPasswordVisible(!isConfirmNewPasswordVisible) + } useEffect(() => { changePasswordForm.setFocus('oldPassword') @@ -67,29 +84,53 @@ export const ChangePasswordForm = () => { } }} > - - - +
+ + + {isCurrentPasswordVisible ? : } + +
+
+ + + {isNewPasswordVisible ? : } + +
+
+ + + {isConfirmNewPasswordVisible ? : } + +
-
-
+
+
{children}
diff --git a/packages/wallet/frontend/src/components/settings/PersonalSettingsForm.tsx b/packages/wallet/frontend/src/components/settings/PersonalSettingsForm.tsx index 2a5dd2612..3ebfe2936 100644 --- a/packages/wallet/frontend/src/components/settings/PersonalSettingsForm.tsx +++ b/packages/wallet/frontend/src/components/settings/PersonalSettingsForm.tsx @@ -15,6 +15,7 @@ type PersonalSettingsFormProps = { user: UserResponse } +// TODO: Can these details be updated by the user when switching to GateHub? export const PersonalSettingsForm = ({ user }: PersonalSettingsFormProps) => { const [isReadOnly, setIsReadOnly] = useState(true) const { isChangePassword, setIsChangePassword } = usePasswordContext() diff --git a/packages/wallet/frontend/src/lib/api/user.ts b/packages/wallet/frontend/src/lib/api/user.ts index 1d25c6260..d86f9ef25 100644 --- a/packages/wallet/frontend/src/lib/api/user.ts +++ b/packages/wallet/frontend/src/lib/api/user.ts @@ -5,78 +5,22 @@ import { type ErrorResponse, type SuccessResponse } from '../httpClient' -import { ACCEPTED_IMAGE_TYPES } from '@/utils/constants' -import { SelectOption } from '@/ui/forms/Select' import { UserResponse, ValidTokenResponse, emailSchema, isValidPassword, signUpSchema, - loginSchema + loginSchema, + IFRAME_TYPE, + IframeResponse } from '@wallet/shared' -export const personalDetailsSchema = z.object({ - firstName: z.string().min(1, { message: 'First name is required' }), - lastName: z.string().min(1, { message: 'Last name is required' }), - country: z.object({ - value: z.string().length(2), - label: z.string().min(1) - }), - city: z.string().min(1, { message: 'City is required' }), - address: z.string().min(1, { message: 'Address is required' }), - zip: z.string().min(1, { message: 'ZIP code is required' }) -}) - export const profileSchema = z.object({ firstName: z.string().min(1, { message: 'First name is required' }), lastName: z.string().min(1, { message: 'Last name is required' }) }) -export const verifyIdentitySchema = z - .object({ - documentType: z.string({ - invalid_type_error: 'Please select an ID Type' - }), - frontSideImage: z - .string() - .min(1, { message: 'Front side of ID is required' }), - frontSideImageType: z.string(), - backSideImage: z.string().optional(), - backSideImageType: z.string().optional(), - faceImage: z.string().min(1, { message: 'A selfie image is required' }), - faceImageType: z.string() - }) - .superRefine( - ({ frontSideImageType, faceImageType, backSideImageType }, ctx) => { - if (!ACCEPTED_IMAGE_TYPES.includes(frontSideImageType)) { - ctx.addIssue({ - code: 'custom', - message: `Image must be 'jpeg' or 'png'`, - path: ['frontSideImage'] - }) - } - if (!ACCEPTED_IMAGE_TYPES.includes(faceImageType)) { - ctx.addIssue({ - code: 'custom', - message: `Image must be 'jpeg' or 'png'`, - path: ['faceImage'] - }) - } - if ( - backSideImageType && - backSideImageType?.length > 0 && - !ACCEPTED_IMAGE_TYPES.includes(backSideImageType) - ) { - ctx.addIssue({ - code: 'custom', - message: `Image must be 'jpeg' or 'png'`, - path: ['backSideImage'] - }) - } - } - ) - export const resetPasswordSchema = z .object({ password: z @@ -137,12 +81,6 @@ export const changePasswordSchema = z } }) -export type Document = { - type: string - name: string - isBackRequired: boolean -} - type SignUpArgs = z.infer type SignUpError = ErrorResponse type SignUpResponse = SuccessResponse | SignUpError @@ -179,14 +117,6 @@ type VerifyEmailResponse = SuccessResponse | VerifyEmailError type MeResult = SuccessResponse type MeResponse = MeResult | ErrorResponse -type CreateWalletArgs = z.infer -type CreateWalletError = ErrorResponse -type CreateWalletResponse = SuccessResponse | CreateWalletError - -type VerifyIdentityArgs = z.infer -type VerifyIdentityError = ErrorResponse -type VerifyIdentityResponse = SuccessResponse | VerifyIdentityError - type ProfileArgs = z.infer type ProfileError = ErrorResponse type ProfileResponse = SuccessResponse | ProfileError @@ -195,6 +125,9 @@ type ChangePasswordArgs = z.infer type ChangePasswordError = ErrorResponse type ChangePasswordResponse = SuccessResponse | ChangePasswordError +type GetGateHubIframeSrcResult = SuccessResponse +type GetGateHubIframeSrcResponse = GetGateHubIframeSrcResult | ErrorResponse + interface UserService { signUp: (args: SignUpArgs) => Promise login: (args: LoginArgs) => Promise @@ -204,15 +137,15 @@ interface UserService { checkToken: (token: string, cookies?: string) => Promise verifyEmail: (args: VerifyEmailArgs) => Promise me: (cookies?: string) => Promise - createWallet: (args: CreateWalletArgs) => Promise - verifyIdentity: (args: VerifyIdentityArgs) => Promise updateProfile: (args: ProfileArgs) => Promise - getDocuments: (cookies?: string) => Promise - getCountries: (cookies?: string) => Promise changePassword: (args: ChangePasswordArgs) => Promise resendVerifyEmail: ( args: ResendVerificationEmailArgs ) => Promise + getGateHubIframeSrc: ( + type: IFRAME_TYPE, + cookies?: string + ) => Promise } const createUserService = (): UserService => ({ @@ -355,99 +288,53 @@ const createUserService = (): UserService => ({ } }, - async createWallet(args) { - try { - const response = await httpClient - .post('wallet', { - json: { - ...args, - country: args.country.value - } - }) - .json() - return response - } catch (error) { - return getError( - error, - 'Something went wrong while trying to create your wallet. Please try again.' - ) - } - }, - - async verifyIdentity(args) { + async updateProfile(args) { try { const response = await httpClient - .post('verify', { + .post('updateProfile', { json: args }) .json() return response } catch (error) { - return getError( + return getError( error, - 'Something went wrong while verifying your ID. Please try again.' + 'Something went wrong while updating your profile. Please try again.' ) } }, - async updateProfile(args) { + async changePassword(args) { try { const response = await httpClient - .post('updateProfile', { + .patch('change-password', { json: args }) .json() return response } catch (error) { - return getError( + return getError( error, - 'Something went wrong while updating your profile. Please try again.' + 'Something went wrong while changing your password. Please try again.' ) } }, - async getDocuments(cookies) { - try { - const response = await httpClient - .get('documents', { - headers: { - ...(cookies ? { Cookie: cookies } : {}) - } - }) - .json>() - return response?.result ?? [] - } catch (error) { - return [] - } - }, - - async getCountries(cookies) { + async getGateHubIframeSrc(type, cookies) { try { const response = await httpClient - .get('countries', { + .get(`iframe-urls/${type}`, { headers: { ...(cookies ? { Cookie: cookies } : {}) } }) - .json>() - return response?.result ?? [] - } catch (error) { - return [] - } - }, - - async changePassword(args) { - try { - const response = await httpClient - .patch('change-password', { - json: args - }) - .json() + .json() return response } catch (error) { - return getError( + return getError( error, - 'Something went wrong while changing your password. Please try again.' + // TODO: Better error message + 'Something went wrong. Please try again.' ) } } diff --git a/packages/wallet/frontend/src/middleware.ts b/packages/wallet/frontend/src/middleware.ts index 0dca53418..b2ff773d0 100644 --- a/packages/wallet/frontend/src/middleware.ts +++ b/packages/wallet/frontend/src/middleware.ts @@ -10,6 +10,9 @@ const isPublicPath = (path: string) => { const publicPaths = ['/auth*'] +// TODO: Update middleware for the new KYC +// We might want to showcase the users that the identity verification is in +// progress and probably do not let them perform any action (sending money, etc). export async function middleware(req: NextRequest) { const isPublic = isPublicPath(req.nextUrl.pathname) const nextPage = req.nextUrl.searchParams.get('next') @@ -31,12 +34,10 @@ export async function middleware(req: NextRequest) { return NextResponse.redirect(url) } - if ( - response.result?.needsIDProof && - req.nextUrl.pathname !== '/kyc/proof' - ) { + console.log(response.result) + if (response.result?.needsIDProof && req.nextUrl.pathname !== '/kyc') { if (nextPage !== 'proof') - return NextResponse.redirect(new URL('/kyc/proof', req.url)) + return NextResponse.redirect(new URL('/kyc', req.url)) } // If KYC is completed and the user tries to navigate to the page, redirect diff --git a/packages/wallet/frontend/src/pages/kyc.tsx b/packages/wallet/frontend/src/pages/kyc.tsx new file mode 100644 index 000000000..089a2df29 --- /dev/null +++ b/packages/wallet/frontend/src/pages/kyc.tsx @@ -0,0 +1,119 @@ +import { HeaderLogo } from '@/components/HeaderLogo' +import AuthLayout from '@/components/layouts/AuthLayout' +import { userService } from '@/lib/api/user' +import { NextPageWithLayout } from '@/lib/types/app' +import { + GateHubMessageType, + type GateHubMessageError +} from '@/lib/types/windowMessages' +import { GetServerSideProps, InferGetServerSidePropsType } from 'next/types' +import { useEffect } from 'react' + +type KYCPageProps = InferGetServerSidePropsType + +type MessageData = + | { + type: GateHubMessageType.OnboardingCompleted + value: 'submitted' | 'resubmitted' + } + | { type: GateHubMessageType.OnboardingError; value: GateHubMessageError } + | { type: GateHubMessageType.OnboardingInitialized } + +const KYCPage: NextPageWithLayout = ({ + url, + addUserToGatewayUrl +}) => { + // const [openDialog, closeDialog] = useDialog() + // const router = useRouter() + + useEffect(() => { + // TODO: Handle the received message from iframe + // https://docs.gatehub.net/api-documentation/c3OPAp5dM191CDAdwyYS/gatehub-products/gatehub-onboarding#message-events + const onMessage = async (e: MessageEvent) => { + console.log('received message from iframe', { e }) + switch (e.data.type) { + case GateHubMessageType.OnboardingCompleted: + console.log( + 'received message from iframe', + GateHubMessageType.OnboardingCompleted, + JSON.stringify(e.data, null, 2) + ) + await fetch(addUserToGatewayUrl, { + method: 'POST', + body: JSON.stringify(e.data, null, 2), + credentials: 'include' + }) + break + case GateHubMessageType.OnboardingError: + console.log( + 'received message from iframe', + GateHubMessageType.OnboardingError, + JSON.stringify(e.data, null, 2) + ) + break + case GateHubMessageType.OnboardingInitialized: + console.log( + 'received message from iframe', + GateHubMessageType.OnboardingInitialized, + JSON.stringify(e.data, null, 2) + ) + break + } + } + window.addEventListener('message', onMessage, false) + + return () => { + window.removeEventListener('message', onMessage) + } + }, [addUserToGatewayUrl]) + + return ( + <> +

+ Personal Details +

+
+ +
+ + ) +} + +export const getServerSideProps: GetServerSideProps<{ + url: string + addUserToGatewayUrl: string +}> = async (ctx) => { + const response = await userService.getGateHubIframeSrc( + 'onboarding', + ctx.req.headers.cookie + ) + + if (!response.success || !response.result) { + return { + notFound: true + } + } + + return { + props: { + url: response.result.url, + addUserToGatewayUrl: `${process.env.NEXT_PUBLIC_BACKEND_URL}/gatehub/add-user-to-gateway` + } + } +} + +KYCPage.getLayout = function (page) { + return ( + + + {page} + + ) +} + +export default KYCPage diff --git a/packages/wallet/frontend/src/pages/kyc/personal.tsx b/packages/wallet/frontend/src/pages/kyc/personal.tsx deleted file mode 100644 index f7b0c09a6..000000000 --- a/packages/wallet/frontend/src/pages/kyc/personal.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import { HeaderLogo } from '@/components/HeaderLogo' -import { SuccessDialog } from '@/components/dialogs/SuccessDialog' -import AuthLayout from '@/components/layouts/AuthLayout' -import { personalDetailsSchema, userService } from '@/lib/api/user' -import { useDialog } from '@/lib/hooks/useDialog' -import { useZodForm } from '@/lib/hooks/useZodForm' -import { NextPageWithLayout } from '@/lib/types/app' -import { Button } from '@/ui/Button' -import { Form } from '@/ui/forms/Form' -import { Input } from '@/ui/forms/Input' -import { Select, SelectOption } from '@/ui/forms/Select' -import { USE_TEST_DATA_KYC } from '@/utils/constants' -import { getObjectKeys } from '@/utils/helpers' -import { useRouter } from 'next/router' -import { GetServerSideProps, InferGetServerSidePropsType } from 'next/types' -import { Controller } from 'react-hook-form' - -type PersonalDetailsProps = InferGetServerSidePropsType< - typeof getServerSideProps -> - -const PersonalDetailsPage: NextPageWithLayout = ({ - countries -}) => { - const [openDialog, closeDialog] = useDialog() - const router = useRouter() - - const defaultTestValues = { - city: 'Copenhagen', - address: 'Den Lille Havfrue', - zip: '2100', - country: { - value: 'DK', - label: 'Denmark' - } - } - - const personalDetailsForm = useZodForm({ - schema: personalDetailsSchema, - defaultValues: { ...(USE_TEST_DATA_KYC ? defaultTestValues : {}) } - }) - - return ( - <> -

- Personal Details -

- {USE_TEST_DATA_KYC && ( - - Denmark is selected by default for testing purposes! - - )} -
{ - const response = await userService.createWallet(data) - - if (response.success) { - openDialog( - { - router.push('/kyc/proof') - closeDialog() - }} - content="Your wallet was created." - redirect="/kyc/proof" - redirectText="Verify your identity" - /> - ) - } else { - const { errors, message } = response - personalDetailsForm.setError('root', { message }) - - if (errors) { - getObjectKeys(errors).map((field) => - personalDetailsForm.setError(field, { message: errors[field] }) - ) - } - } - }} - > -
- - -
- ( - - required - label="Country" - placeholder="Select country..." - options={countries} - value={value} - isDisabled={USE_TEST_DATA_KYC} - error={personalDetailsForm.formState.errors.country?.message} - onChange={(option) => { - if (option) { - personalDetailsForm.setValue('country', { ...option }) - } - }} - /> - )} - /> - - - - - - - ) -} - -export const getServerSideProps: GetServerSideProps<{ - countries: SelectOption[] -}> = async (ctx) => { - const countries = await userService.getCountries(ctx.req.headers.cookie) - return { - props: { - countries - } - } -} - -PersonalDetailsPage.getLayout = function (page) { - return ( - - - {page} - - ) -} - -export default PersonalDetailsPage diff --git a/packages/wallet/frontend/src/pages/kyc/proof.tsx b/packages/wallet/frontend/src/pages/kyc/proof.tsx deleted file mode 100644 index dd2a4c492..000000000 --- a/packages/wallet/frontend/src/pages/kyc/proof.tsx +++ /dev/null @@ -1,299 +0,0 @@ -import { HeaderLogo } from '@/components/HeaderLogo' -import { SuccessDialog } from '@/components/dialogs/SuccessDialog' -import AuthLayout from '@/components/layouts/AuthLayout' -import { - userService, - verifyIdentitySchema, - type Document -} from '@/lib/api/user' -import { useDialog } from '@/lib/hooks/useDialog' -import { useZodForm } from '@/lib/hooks/useZodForm' -import { NextPageWithLayout } from '@/lib/types/app' -import { Button } from '@/ui/Button' -import { FieldError } from '@/ui/forms/FieldError' -import { FileUpload } from '@/ui/forms/FileUpload' -import { Form } from '@/ui/forms/Form' -import { USE_TEST_DATA_KYC } from '@/utils/constants' -import { getObjectKeys } from '@/utils/helpers' -import { testImageVerifyIdentity, testImageType } from '@/utils/mocks' -import { cx } from 'class-variance-authority' -import { useRouter } from 'next/router' -import { GetServerSideProps, InferGetServerSidePropsType } from 'next/types' -import { useState, SyntheticEvent } from 'react' - -type IDVerificationPage = InferGetServerSidePropsType - -const IDVerificationPage: NextPageWithLayout = ({ - documents -}) => { - const [openDialog, closeDialog] = useDialog() - const [isBackRequired, setIsBackRequired] = useState(false) - const router = useRouter() - - const handleFileOnChange = (event: SyntheticEvent) => { - const reader = new FileReader() - const target = event.currentTarget - if (target.files && target.files.length > 0) { - const file = target.files[0] - reader.readAsDataURL(file) - reader.onloadend = () => { - let fileBase64 = reader.result?.toString() || '' - fileBase64 = fileBase64.slice(fileBase64.indexOf('base64') + 7) - if (target.name === 'faceImageUpload') { - verifyIdentityForm.setValue('faceImage', fileBase64) - verifyIdentityForm.setValue('faceImageType', file.type) - verifyIdentityForm.trigger('faceImage') - } else if (target.name === 'frontSideIDUpload') { - verifyIdentityForm.setValue('frontSideImage', fileBase64) - verifyIdentityForm.setValue('frontSideImageType', file.type) - verifyIdentityForm.trigger('frontSideImage') - } else { - verifyIdentityForm.setValue('backSideImage', fileBase64) - verifyIdentityForm.setValue('backSideImageType', file.type) - verifyIdentityForm.trigger('backSideImage') - } - } - } - } - - const handleDocumentChange = (event: SyntheticEvent) => { - const target = event.currentTarget - setIsBackRequired(target.getAttribute('data-back-id') === 'true') - if (!isBackRequired) { - verifyIdentityForm.setValue('backSideImage', '') - verifyIdentityForm.setValue('backSideImageType', '') - verifyIdentityForm.trigger('backSideImage') - } - } - - const verifyIdentityForm = useZodForm({ - schema: verifyIdentitySchema, - defaultValues: { - ...(USE_TEST_DATA_KYC ? { documentType: 'PA' } : {}) - } - }) - - return ( - <> - {USE_TEST_DATA_KYC && ( -

- For testing purposes Passport is selected, and images uploaded by - default! -

- )} - -
{ - const response = await userService.verifyIdentity(data) - - if (response.success) { - openDialog( - { - router.reload() - closeDialog() - }} - onSuccess={() => { - window.localStorage.setItem( - 'isUserFirstTimeOnTestnet', - 'true' - ) - router.reload() - }} - content="Your identity has been verified." - redirectText="Go to your account overview" - /> - ) - } else { - const { errors, message } = response - verifyIdentityForm.setError('root', { message }) - - if (errors) { - getObjectKeys(errors).map((field) => - verifyIdentityForm.setError(field, { message: errors[field] }) - ) - } - } - }} - > -
-
- {documents.map((document) => ( -
- Use Passport as default value - value={USE_TEST_DATA_KYC ? 'PA' : document.type} - data-back-id={document.isBackRequired} - {...verifyIdentityForm.register('documentType', { - onChange: handleDocumentChange - })} - /> - -
- ))} -
- -
-
-
- <> - - - - -
-
- <> - - - - -
-
- {isBackRequired && ( - <> - - - - - )} -
-
- - - - ) -} - -export const getServerSideProps: GetServerSideProps<{ - documents: Document[] -}> = async (ctx) => { - const documents = await userService.getDocuments(ctx.req.headers.cookie) - return { - props: { - documents - } - } -} - -IDVerificationPage.getLayout = function (page) { - return ( - - - {page} - - ) -} - -export default IDVerificationPage diff --git a/packages/wallet/frontend/src/utils/constants.ts b/packages/wallet/frontend/src/utils/constants.ts index f04c58c8e..dd3e9d1e8 100644 --- a/packages/wallet/frontend/src/utils/constants.ts +++ b/packages/wallet/frontend/src/utils/constants.ts @@ -1,10 +1,3 @@ -/** - * Default values for countries and documents - */ -export const USE_TEST_DATA_KYC = - process.env.NEXT_PUBLIC_USE_TEST_KYC_DATA === 'true' -export const ACCEPTED_IMAGE_TYPES = ['image/jpeg', 'image/png'] - export const OPEN_PAYMENTS_HOST = process.env.NEXT_PUBLIC_OPEN_PAYMENTS_HOST /** diff --git a/packages/wallet/frontend/src/utils/mocks.ts b/packages/wallet/frontend/src/utils/mocks.ts deleted file mode 100644 index 3c03a5341..000000000 --- a/packages/wallet/frontend/src/utils/mocks.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const testImageType = 'image/jpeg' -export const testImageVerifyIdentity = - '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' From f2f2c7e98251913f6ef78c33b39a8f2f5ef92db8 Mon Sep 17 00:00:00 2001 From: Timea <117268143+Tymmmy@users.noreply.github.com> Date: Wed, 25 Sep 2024 09:22:53 +0300 Subject: [PATCH 09/13] fix: update readme (#1645) * Update info on Readme * Update README.md * Update .env.example * Update README.md --- README.md | 13 +++---------- docker/dev/.env.example | 6 +++--- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index e8f5d5451..cfea21422 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Please read the [contribution guidelines](.github/contributing.md) before submit - [Docker](https://docs.docker.com/get-docker/) - [NVM](https://github.com/nvm-sh/nvm) -- [Rapyd](https://www.rapyd.net) account in Sandbox mode +- [GateHub](https://sandbox.gatehub.net) account in Sandbox mode ### Environment Setup @@ -86,21 +86,14 @@ cp ./docker/dev/.env.example ./docker/dev/.env ``` Using your preferred text editor, open the `./docker/dev/.env` file and configure the necessary environment variables. -The `RAPYD_ACCESS_KEY` and `RAPYD_SECRET_KEY` variables values can be found in your Rapyd Sandbox account (you need to create an account at [rapyd.net](https://www.rapyd.net)), under the Developers menu item. The `RAPYD_SETTLEMENT_EWALLET` variable value can be found in your Rapyd Sandbox account details. +The `GATEHUB` related environment variables are necessary in order to complete Sandbox KYC, and add play money to your account. In order to have the correct variables, create a `GateHub` Sandbox account. Optionally you could send an email to `timea@interledger.foundation` and request these variables. To create a new Interledger Test Wallet account, a verification email will be sent to the provided email address. If you want to send emails within the development environment, you will need to have a personal Sendgrid account and update the following environment variables: `SEND_EMAIL` to `true`, `SENDGRID_API_KEY` and `FROM_EMAIL`. If you prefer not to send emails in the development environment, simply set `SEND_EMAIL` to `false` and use the verification link found in the Docker `wallet-backend` container logs to finalize the registration process for a new user. Cross-currency transactions are supported. To enable this functionality, you will need to register at [freecurrencyapi.com/](https://freecurrencyapi.com/) and update the `RATE_API_KEY` environment variable with your own API key. Currencies can be added in the `admin` environment. For example `assetCode` is `EUR`, `assetScale` is `2`, and you will need to add an amount to `liquidity`. -To have everything ready for `DEV` environment, we already set up some default values for Interledger Test Wallet, this way developers are ready to login without validation, and test e-commerce application without any additional setup: - -- a `USD` asset set by default in the `admin` environment -- a user with email address `dev@email.com` and password `123456`, with a `USD` account, payment pointer and test money -- a user with email address `boutique@email.com` and password `123456`, with a `USD` account and a payment pointer `boutique`, which is used as a receiver payment pointer at the e-commerce application -- developer keys for the `boutique` payment pointer, these values will be copied to `.env` file from `.env.example`, as mentioned above - -If you would like to set up e-commerce application manually for another payment pointer, you will need to create a USD payment pointer, then generate public and private key for the payment pointer in the `Developer Keys` found in the `Settings` menu of Interledger Test Wallet. You also need to update the following environment variables: `PRIVATE_KEY` to the generated base64 encoded private key, `KEY_ID` to the payment pointer key id and `PAYMENT_POINTER` to the created payment pointer address. +If you would like to set up e-commerce application, you will need to create a USD payment pointer, then generate public and private key for the payment pointer in the `Developer Keys` found in the `Settings` menu of Interledger Test Wallet. You also need to update the following environment variables: `PRIVATE_KEY` to the generated base64 encoded private key, `KEY_ID` to the payment pointer key id and `PAYMENT_POINTER` to the created payment pointer address. ### Local Playground diff --git a/docker/dev/.env.example b/docker/dev/.env.example index 26b0c3cbe..85931f17f 100644 --- a/docker/dev/.env.example +++ b/docker/dev/.env.example @@ -12,6 +12,6 @@ GATEHUB_SETTLEMENT_WALLET_ADDRESS= # commerce env variables # encoded base 64 private key -PRIVATE_KEY=LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1DNENBUUF3QlFZREsyVndCQ0lFSUI0YzgyOVlSMDZCTUhtQmpIVTNrOHZmMEZhVEFvOHNCTzIrRFZwY1lPSk0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQ== -KEY_ID=32499ede-78d9-424d-a43e-3796ee07b60c -PAYMENT_POINTER=https://rafiki-backend/boutique +PRIVATE_KEY= +KEY_ID= +PAYMENT_POINTER= From 0f4a44a2be90d9f156c0d21944eb7c2081f4f232 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 09:31:54 +0300 Subject: [PATCH 10/13] chore(deps): update dependency tailwindcss to ^3.4.13 (#1647) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/boutique/frontend/package.json | 2 +- packages/wallet/frontend/package.json | 2 +- pnpm-lock.yaml | 36 ++++++++++++------------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/packages/boutique/frontend/package.json b/packages/boutique/frontend/package.json index df0058fe5..c977e99c6 100644 --- a/packages/boutique/frontend/package.json +++ b/packages/boutique/frontend/package.json @@ -38,7 +38,7 @@ "@vitejs/plugin-react-swc": "^3.7.0", "autoprefixer": "^10.4.20", "postcss": "^8.4.47", - "tailwindcss": "^3.4.12", + "tailwindcss": "^3.4.13", "typescript": "^5.6.2", "vite": "^5.4.7" } diff --git a/packages/wallet/frontend/package.json b/packages/wallet/frontend/package.json index 7392cac51..b845bc12f 100644 --- a/packages/wallet/frontend/package.json +++ b/packages/wallet/frontend/package.json @@ -39,7 +39,7 @@ "@types/react-dom": "18.3.0", "autoprefixer": "^10.4.20", "postcss": "^8.4.47", - "tailwindcss": "^3.4.12", + "tailwindcss": "^3.4.13", "typescript": "^5.6.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 85118e968..741f840b3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -173,7 +173,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.12) + version: 1.0.7(tailwindcss@3.4.13) valtio: specifier: ^2.0.0 version: 2.0.0(@types/react@18.3.8)(react@18.3.1) @@ -183,10 +183,10 @@ importers: devDependencies: '@tailwindcss/forms': specifier: ^0.5.9 - version: 0.5.9(tailwindcss@3.4.12) + version: 0.5.9(tailwindcss@3.4.13) '@tailwindcss/typography': specifier: ^0.5.15 - version: 0.5.15(tailwindcss@3.4.12) + version: 0.5.15(tailwindcss@3.4.13) '@types/react': specifier: 18.3.8 version: 18.3.8 @@ -203,8 +203,8 @@ importers: specifier: ^8.4.47 version: 8.4.47 tailwindcss: - specifier: ^3.4.12 - version: 3.4.12 + specifier: ^3.4.13 + version: 3.4.13 typescript: specifier: ^5.6.2 version: 5.6.2 @@ -456,7 +456,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.12) + version: 1.0.7(tailwindcss@3.4.13) valtio: specifier: ^2.0.0 version: 2.0.0(@types/react@18.3.8)(react@18.3.1) @@ -472,7 +472,7 @@ importers: version: 13.5.6 '@tailwindcss/forms': specifier: ^0.5.9 - version: 0.5.9(tailwindcss@3.4.12) + version: 0.5.9(tailwindcss@3.4.13) '@types/node': specifier: ^20.12.11 version: 20.14.15 @@ -492,8 +492,8 @@ importers: specifier: ^8.4.47 version: 8.4.47 tailwindcss: - specifier: ^3.4.12 - version: 3.4.12 + specifier: ^3.4.13 + version: 3.4.13 typescript: specifier: ^5.6.2 version: 5.6.2 @@ -5878,8 +5878,8 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' - tailwindcss@3.4.12: - resolution: {integrity: sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==} + tailwindcss@3.4.13: + resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==} engines: {node: '>=14.0.0'} hasBin: true @@ -8523,18 +8523,18 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.12)': + '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13)': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.12 + tailwindcss: 3.4.13 - '@tailwindcss/typography@0.5.15(tailwindcss@3.4.12)': + '@tailwindcss/typography@0.5.15(tailwindcss@3.4.13)': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.12 + tailwindcss: 3.4.13 '@tanstack/query-core@5.56.2': {} @@ -12755,11 +12755,11 @@ snapshots: tailwind-merge@2.5.2: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.12): + tailwindcss-animate@1.0.7(tailwindcss@3.4.13): dependencies: - tailwindcss: 3.4.12 + tailwindcss: 3.4.13 - tailwindcss@3.4.12: + tailwindcss@3.4.13: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 From 0ce3814fb233be416fc407625ba559839f50e1c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 09:32:19 +0300 Subject: [PATCH 11/13] chore(deps): update ghcr.io/tigerbeetle/tigerbeetle docker tag to v0.16.3 (#1648) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docker/dev/docker-compose.yml | 2 +- docker/prod/docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/dev/docker-compose.yml b/docker/dev/docker-compose.yml index b57f7bf2a..8cdf37cca 100644 --- a/docker/dev/docker-compose.yml +++ b/docker/dev/docker-compose.yml @@ -197,7 +197,7 @@ services: - testnet tigerbeetle: - image: ghcr.io/tigerbeetle/tigerbeetle:0.16.2 + image: ghcr.io/tigerbeetle/tigerbeetle:0.16.3 privileged: true volumes: - tigerbeetle-data:/var/lib/tigerbeetle diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index 18aea4197..fec73f297 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -231,7 +231,7 @@ services: <<: *logging tigerbeetle: - image: ghcr.io/tigerbeetle/tigerbeetle:0.16.2 + image: ghcr.io/tigerbeetle/tigerbeetle:0.16.3 privileged: true volumes: - tigerbeetle-data:/var/lib/tigerbeetle From bbf2abe4c1f868e5ab31d63461dc52dcf0f7b0b6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 09:32:41 +0300 Subject: [PATCH 12/13] chore(deps): update dependency @faker-js/faker to ^9.0.2 (#1649) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/wallet/backend/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/wallet/backend/package.json b/packages/wallet/backend/package.json index c848c7888..66ebccc5a 100644 --- a/packages/wallet/backend/package.json +++ b/packages/wallet/backend/package.json @@ -38,7 +38,7 @@ "zod": "^3.23.8" }, "devDependencies": { - "@faker-js/faker": "^9.0.1", + "@faker-js/faker": "^9.0.2", "@graphql-codegen/cli": "^5.0.2", "@graphql-codegen/typescript": "^4.0.9", "@graphql-codegen/typescript-operations": "^4.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 741f840b3..15c3425bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -350,8 +350,8 @@ importers: version: 3.23.8 devDependencies: '@faker-js/faker': - specifier: ^9.0.1 - version: 9.0.1 + specifier: ^9.0.2 + version: 9.0.2 '@graphql-codegen/cli': specifier: ^5.0.2 version: 5.0.2(@types/node@20.14.15)(graphql@16.9.0)(typescript@5.6.2) @@ -1071,8 +1071,8 @@ packages: resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@faker-js/faker@9.0.1': - resolution: {integrity: sha512-4mDeYIgM3By7X6t5E6eYwLAa+2h4DeZDF7thhzIg6XB76jeEvMwadYAMCFJL/R4AnEBcAUO9+gL0vhy3s+qvZA==} + '@faker-js/faker@9.0.2': + resolution: {integrity: sha512-nI/FP30ZGXb+UaR7yXawVTH40NVKXPIx0tA3GKjkKLjorqBoMAeq4iSEacl8mJmpVhOCDa0vYHwYDmOOcFMrYw==} engines: {node: '>=18.0.0', npm: '>=9.0.0'} '@fastify/busboy@2.1.1': @@ -7024,7 +7024,7 @@ snapshots: '@eslint/js@8.57.1': {} - '@faker-js/faker@9.0.1': {} + '@faker-js/faker@9.0.2': {} '@fastify/busboy@2.1.1': {} From 2bd0b31d60eddbb5ef653a4ddc0002e40dd45c23 Mon Sep 17 00:00:00 2001 From: dragosp1011 <109967337+dragosp1011@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:55:04 +0300 Subject: [PATCH 13/13] feat(wallet): replace rapyd fund account with gatehub deposit (#1650) * Update user service * Add standalone KYC page * Add TODO comment for settings page * Format; Update KYC Page; fix `getBearerToken` method * Remove old KYC pages * Format with latest prettier * Remove Rapyd env/constants * Remove Rapyd mocks * Better naming * Format * Add standalone deposit page; remove old fund dialog * fix: incorrect param * Update deposit.tsx * Update AppLayout.tsx --------- Co-authored-by: Radu-Cristian Popa Co-authored-by: Tymmmy <117268143+Tymmmy@users.noreply.github.com> --- .../components/dialogs/FundAccountDialog.tsx | 150 ------------------ .../src/components/layouts/AppLayout.tsx | 2 +- .../wallet/frontend/src/lib/api/account.ts | 27 +--- .../src/pages/account/[accountId].tsx | 17 +- .../wallet/frontend/src/pages/deposit.tsx | 64 ++++++++ packages/wallet/shared/src/types/account.ts | 1 + 6 files changed, 72 insertions(+), 189 deletions(-) delete mode 100644 packages/wallet/frontend/src/components/dialogs/FundAccountDialog.tsx create mode 100644 packages/wallet/frontend/src/pages/deposit.tsx diff --git a/packages/wallet/frontend/src/components/dialogs/FundAccountDialog.tsx b/packages/wallet/frontend/src/components/dialogs/FundAccountDialog.tsx deleted file mode 100644 index bfd0fd136..000000000 --- a/packages/wallet/frontend/src/components/dialogs/FundAccountDialog.tsx +++ /dev/null @@ -1,150 +0,0 @@ -import type { DialogProps } from '@/lib/types/dialog' -import { Dialog, Transition } from '@headlessui/react' -import { Fragment } from 'react' -import { Input } from '@/ui/forms/Input' -import { Button } from '@/ui/Button' -import { Account, accountService } from '@/lib/api/account' -import { useDialog } from '@/lib/hooks/useDialog' -import { ErrorDialog } from './ErrorDialog' -import { getCurrencySymbol, getObjectKeys } from '@/utils/helpers' -import { useZodForm } from '@/lib/hooks/useZodForm' -import { Form } from '@/ui/forms/Form' -import { useRouter } from 'next/router' -import { useOnboardingContext } from '@/lib/context/onboarding' -import { fundAccountSchema } from '@wallet/shared' - -type FundAccountDialogProps = Pick & { - account: Account -} - -export const FundAccountDialog = ({ - onClose, - account -}: FundAccountDialogProps) => { - const router = useRouter() - const [openDialog, closeDialog] = useDialog() - const fundAccountForm = useZodForm({ - schema: fundAccountSchema - }) - const { isUserFirstTime, setRunOnboarding, stepIndex, setStepIndex } = - useOnboardingContext() - - return ( - - - -
- -
-
- - - - Add Money to Account - -
-
{ - const response = await accountService.fund(data) - - if (!response) { - openDialog( - - ) - return - } - - if (response.success) { - router.replace(router.asPath) - closeDialog() - if (isUserFirstTime) { - setStepIndex(stepIndex + 1) - setRunOnboarding(true) - } - } else { - const { errors, message } = response - - if (errors) { - getObjectKeys(errors).map((field) => - fundAccountForm.setError(field, { - message: errors[field] - }) - ) - } - if (message) { - fundAccountForm.setError('root', { message }) - } - } - }} - > - - - -
- - -
- -
-
-
-
-
-
-
- ) -} diff --git a/packages/wallet/frontend/src/components/layouts/AppLayout.tsx b/packages/wallet/frontend/src/components/layouts/AppLayout.tsx index 140cc90dd..c121aa1ec 100644 --- a/packages/wallet/frontend/src/components/layouts/AppLayout.tsx +++ b/packages/wallet/frontend/src/components/layouts/AppLayout.tsx @@ -28,7 +28,7 @@ export const AppLayout = ({ children }: AppLayoutProps) => { {(isUserFirstTime || isDevKeysOnboarding) && } -
+
{children} diff --git a/packages/wallet/frontend/src/lib/api/account.ts b/packages/wallet/frontend/src/lib/api/account.ts index 4d9747cd1..030bc7dc2 100644 --- a/packages/wallet/frontend/src/lib/api/account.ts +++ b/packages/wallet/frontend/src/lib/api/account.ts @@ -5,11 +5,7 @@ import { type ErrorResponse, type SuccessResponse } from '../httpClient' -import { - createAccountSchema, - fundAccountSchema, - withdrawFundsSchema -} from '@wallet/shared' +import { createAccountSchema, withdrawFundsSchema } from '@wallet/shared' import { WalletAddressResponse } from '@wallet/shared/src' export type Account = { @@ -33,10 +29,6 @@ type CreateAccountResult = SuccessResponse type CreateAccountError = ErrorResponse type CreateAccountResponse = CreateAccountResult | CreateAccountError -type FundAccountArgs = z.infer -type FundAccountError = ErrorResponse -type FundAccountResponse = SuccessResponse | FundAccountError - type WithdrawFundsArgs = z.infer type WithdrawFundsError = ErrorResponse type WithdrawFundsResponse = SuccessResponse | WithdrawFundsError @@ -48,7 +40,6 @@ interface AccountService { include?: ('walletAddresses' | 'walletAddressKeys')[] ) => Promise create: (args: CreateAccountArgs) => Promise - fund: (args: FundAccountArgs) => Promise withdraw: (args: WithdrawFundsArgs) => Promise } @@ -108,22 +99,6 @@ const createAccountService = (): AccountService => ({ } }, - async fund(args) { - try { - const response = await httpClient - .post('accounts/fund', { - json: args - }) - .json() - return response - } catch (error) { - return getError( - error, - 'We were not able to fund your account. Please try again.' - ) - } - }, - async withdraw(args) { try { const response = await httpClient diff --git a/packages/wallet/frontend/src/pages/account/[accountId].tsx b/packages/wallet/frontend/src/pages/account/[accountId].tsx index 285b88cae..4ddc04fca 100644 --- a/packages/wallet/frontend/src/pages/account/[accountId].tsx +++ b/packages/wallet/frontend/src/pages/account/[accountId].tsx @@ -1,5 +1,4 @@ import { CreateWalletAddressDialog } from '@/components/dialogs/CreateWalletAddressDialog' -import { FundAccountDialog } from '@/components/dialogs/FundAccountDialog' import { WithdrawFundsDialog } from '@/components/dialogs/WithdrawFundsDialog' import { New } from '@/components/icons/New' import { Withdraw } from '@/components/icons/Withdraw' @@ -23,6 +22,7 @@ import { balanceState } from '@/lib/balance' import { PageHeader } from '@/components/PageHeader' import { WalletAddressResponse } from '@wallet/shared' import { WalletAddressesTable } from '@/components/WalletAddressesTable' +import { Link } from '@/ui/Link' type AccountPageProps = InferGetServerSidePropsType @@ -84,23 +84,16 @@ const AccountPage: NextPageWithLayout = ({ Add payment pointer - +