From 349b515c4804816b3e76e51ce7abf827187ffc71 Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Thu, 14 Nov 2024 12:18:43 -0800 Subject: [PATCH 01/20] add migrate user view --- package.json | 2 +- .../ConnectMigrateUserView.stories.tsx | 32 + .../connect/ConnectMigrateUserView.tsx | 132 ++++ pnpm-lock.yaml | 637 ++++++++++-------- pnpm-workspace.yaml | 20 +- 5 files changed, 524 insertions(+), 299 deletions(-) create mode 100644 packages/react/src/components/connect/ConnectMigrateUserView.stories.tsx create mode 100644 packages/react/src/components/connect/ConnectMigrateUserView.tsx diff --git a/package.json b/package.json index a9d125c7..9cebc6dc 100644 --- a/package.json +++ b/package.json @@ -40,5 +40,5 @@ "@esbuild/linux-x64": "catalog:", "@rollup/rollup-linux-x64-gnu": "catalog:" }, - "packageManager": "pnpm@9.12.3" + "packageManager": "pnpm@9.13.1" } diff --git a/packages/react/src/components/connect/ConnectMigrateUserView.stories.tsx b/packages/react/src/components/connect/ConnectMigrateUserView.stories.tsx new file mode 100644 index 00000000..788c605d --- /dev/null +++ b/packages/react/src/components/connect/ConnectMigrateUserView.stories.tsx @@ -0,0 +1,32 @@ +import type { Meta, StoryObj } from "@storybook/react"; + +import { ConnectMigrateUserView } from "./ConnectMigrateUserView"; + +const meta: Meta = { + component: ConnectMigrateUserView, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + legacyProfiles: [ + { + id: "test-legacyProfile-1", + tag: "rappzula", + discriminant: 1337, + pfp: "https://djmahssgw62sw.cloudfront.net/general/0xb8e0d594cd869e49ae55c5b44fa886857b1cdeb9d4aeb49b44d47eeccf97c835.png", + banner: + "https://djmahssgw62sw.cloudfront.net/general/0x19a59e64df51da1aad93ee9d0c4ec00412c0de13b2401be65ee775714f786dd4.jpg", + }, + { + id: "test-legacyProfile-2", + tag: "rappzula", + discriminant: 0, + pfp: null, + banner: null, + }, + ], + }, +}; diff --git a/packages/react/src/components/connect/ConnectMigrateUserView.tsx b/packages/react/src/components/connect/ConnectMigrateUserView.tsx new file mode 100644 index 00000000..70eaa95e --- /dev/null +++ b/packages/react/src/components/connect/ConnectMigrateUserView.tsx @@ -0,0 +1,132 @@ +import { useState } from "react"; + +import { TreasureIcon } from "../../icons/TreasureIcon"; +import { cn } from "../../utils/classnames"; +import { Button } from "../ui/Button"; + +type Props = { + legacyProfiles: { + id: string; + tag: string | null; + discriminant: number | null; + pfp: string | null; + banner: string | null; + }[]; + error?: string; + onApprove: (id: string) => void; + onReject: () => void; + onCancel: () => void; +}; + +export const ConnectMigrateUserView = ({ + legacyProfiles, + error, + onApprove, + onReject, + onCancel, +}: Props) => { + const [selectedProfileId, setSelectedProfileId] = useState( + legacyProfiles[0]?.id, + ); + return ( +
+
+ {/* biome-ignore lint/a11y/useHeadingContent: screen reader title is in ConnectModal */} + +

+ {legacyProfiles.length > 1 ? ( + <> + We found the following matching profiles from the Treasure Market. + Please select one you would like to merge with your Treasure + Account and use as your identity across the Treasure ecosystem: + + ) : ( + <> + We found the following matching profile from the Treasure Market. + Would you like to merge it with your Treasure Account and use it + as your identity across the Treasure ecosystem? + + )} +

+
+
+ {legacyProfiles.map(({ id, tag, discriminant, pfp, banner }) => ( + + ))} +
+ {error ? ( +

+ {error} +

+ ) : null} +
+ + + +
+
+ ); +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 609d0ded..80e2f1e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,14 +64,14 @@ catalogs: specifier: ^0.34.0 version: 0.34.0 '@storybook/addon-essentials': - specifier: ^8.4.2 - version: 8.4.2 + specifier: ^8.4.4 + version: 8.4.4 '@storybook/react': - specifier: ^8.4.2 - version: 8.4.2 + specifier: ^8.4.4 + version: 8.4.4 '@storybook/react-vite': - specifier: ^8.4.2 - version: 8.4.2 + specifier: ^8.4.4 + version: 8.4.4 '@sushiswap/tines': specifier: ^1.0.11 version: 1.0.11 @@ -136,8 +136,8 @@ catalogs: specifier: ^9.1.6 version: 9.1.6 i18next: - specifier: ^23.16.4 - version: 23.16.4 + specifier: ^23.16.5 + version: 23.16.5 i18next-browser-languagedetector: specifier: ^8.0.0 version: 8.0.0 @@ -166,8 +166,8 @@ catalogs: specifier: ^13.0.0 version: 13.0.0 postcss: - specifier: ^8.4.47 - version: 8.4.47 + specifier: ^8.4.49 + version: 8.4.49 prisma: specifier: ^5.22.0 version: 5.22.0 @@ -178,11 +178,11 @@ catalogs: specifier: ^18.2.0 version: 18.3.1 react-i18next: - specifier: ^15.1.0 - version: 15.1.0 + specifier: ^15.1.1 + version: 15.1.1 storybook: - specifier: ^8.4.2 - version: 8.4.2 + specifier: ^8.4.4 + version: 8.4.4 tailwind-config-viewer: specifier: ^2.0.4 version: 2.0.4 @@ -202,8 +202,8 @@ catalogs: specifier: 8.3.0 version: 8.3.0 turbo: - specifier: ^2.2.3 - version: 2.2.3 + specifier: ^2.3.0 + version: 2.3.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -214,11 +214,11 @@ catalogs: specifier: 2.21.41 version: 2.21.41 vite: - specifier: ^5.4.10 - version: 5.4.10 + specifier: ^5.4.11 + version: 5.4.11 vitest: - specifier: ^2.1.4 - version: 2.1.4 + specifier: ^2.1.5 + version: 2.1.5 importers: @@ -257,13 +257,13 @@ importers: version: 15.2.10 turbo: specifier: 'catalog:' - version: 2.2.3 + version: 2.3.0 typescript: specifier: 'catalog:' version: 5.6.3 vite: specifier: 'catalog:' - version: 5.4.10(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.0) apps/api: dependencies: @@ -330,10 +330,10 @@ importers: version: 5.22.0 tsup: specifier: 'catalog:' - version: 8.3.0(jiti@2.4.0)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) + version: 8.3.0(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) vitest: specifier: 'catalog:' - version: 2.1.4(@types/node@22.9.0)(jsdom@25.0.1) + version: 2.1.5(@types/node@22.9.0)(jsdom@25.0.1) examples/connect-core: dependencies: @@ -346,7 +346,7 @@ importers: version: 5.6.3 vite: specifier: 'catalog:' - version: 5.4.10(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.0) examples/connect-electron: dependencies: @@ -380,7 +380,7 @@ importers: version: 18.3.1 '@vitejs/plugin-react': specifier: 'catalog:' - version: 4.3.3(vite@5.4.10(@types/node@22.9.0)) + version: 4.3.3(vite@5.4.11(@types/node@22.9.0)) dotenv-cli: specifier: 'catalog:' version: 7.4.2 @@ -392,7 +392,7 @@ importers: version: 25.1.7(electron-builder-squirrel-windows@24.13.3) electron-vite: specifier: 'catalog:' - version: 2.3.0(vite@5.4.10(@types/node@22.9.0)) + version: 2.3.0(vite@5.4.11(@types/node@22.9.0)) react: specifier: 'catalog:' version: 18.3.1 @@ -404,7 +404,7 @@ importers: version: 5.6.3 vite: specifier: 'catalog:' - version: 5.4.10(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.0) examples/connect-react: dependencies: @@ -435,19 +435,19 @@ importers: version: 18.3.1 '@vitejs/plugin-react': specifier: 'catalog:' - version: 4.3.3(vite@5.4.10(@types/node@22.9.0)) + version: 4.3.3(vite@5.4.11(@types/node@22.9.0)) autoprefixer: specifier: 'catalog:' - version: 10.4.20(postcss@8.4.47) + version: 10.4.20(postcss@8.4.49) postcss: specifier: 'catalog:' - version: 8.4.47 + version: 8.4.49 tailwindcss: specifier: 'catalog:' version: 3.4.14 vite: specifier: 'catalog:' - version: 5.4.10(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.0) examples/magicswap: dependencies: @@ -478,19 +478,19 @@ importers: version: 18.3.1 '@vitejs/plugin-react': specifier: 'catalog:' - version: 4.3.3(vite@5.4.10(@types/node@22.9.0)) + version: 4.3.3(vite@5.4.11(@types/node@22.9.0)) autoprefixer: specifier: 'catalog:' - version: 10.4.20(postcss@8.4.47) + version: 10.4.20(postcss@8.4.49) postcss: specifier: 'catalog:' - version: 8.4.47 + version: 8.4.49 tailwindcss: specifier: 'catalog:' version: 3.4.14 vite: specifier: 'catalog:' - version: 5.4.10(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.0) packages/auth: dependencies: @@ -506,13 +506,13 @@ importers: version: 9.0.7 tsup: specifier: 'catalog:' - version: 8.3.0(jiti@2.4.0)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) + version: 8.3.0(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) typescript: specifier: 'catalog:' version: 5.6.3 vitest: specifier: 'catalog:' - version: 2.1.4(@types/node@22.9.0)(jsdom@25.0.1) + version: 2.1.5(@types/node@22.9.0)(jsdom@25.0.1) packages/core: dependencies: @@ -549,13 +549,13 @@ importers: version: 10.0.0 tsup: specifier: 'catalog:' - version: 8.3.0(jiti@2.4.0)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) + version: 8.3.0(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) typescript: specifier: 'catalog:' version: 5.6.3 vitest: specifier: 'catalog:' - version: 2.1.4(@types/node@22.9.0)(jsdom@25.0.1) + version: 2.1.5(@types/node@22.9.0)(jsdom@25.0.1) packages/launcher: dependencies: @@ -565,7 +565,7 @@ importers: devDependencies: tsup: specifier: 'catalog:' - version: 8.3.0(jiti@2.4.0)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) + version: 8.3.0(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) typescript: specifier: 'catalog:' version: 5.6.3 @@ -589,7 +589,7 @@ importers: version: 2.1.1 i18next: specifier: 'catalog:' - version: 23.16.4 + version: 23.16.5 i18next-browser-languagedetector: specifier: 'catalog:' version: 8.0.0 @@ -601,7 +601,7 @@ importers: version: 18.3.1 react-i18next: specifier: 'catalog:' - version: 15.1.0(i18next@23.16.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.1.1(i18next@23.16.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: specifier: 'catalog:' version: 2.5.4 @@ -611,13 +611,13 @@ importers: devDependencies: '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.2(@types/react@18.3.12)(storybook@8.4.2(prettier@2.8.8)) + version: 8.4.4(@types/react@18.3.12)(storybook@8.4.4(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@2.8.8))(typescript@5.6.3) + version: 8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.4(prettier@2.8.8))(typescript@5.6.3) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.2(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.9.0)) + version: 8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.4(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)) '@treasure-dev/tailwind-config': specifier: workspace:* version: link:../tailwind-config @@ -626,13 +626,13 @@ importers: version: 18.3.12 autoprefixer: specifier: 'catalog:' - version: 10.4.20(postcss@8.4.47) + version: 10.4.20(postcss@8.4.49) postcss: specifier: 'catalog:' - version: 8.4.47 + version: 8.4.49 storybook: specifier: 'catalog:' - version: 8.4.2(prettier@2.8.8) + version: 8.4.4(prettier@2.8.8) tailwindcss: specifier: 'catalog:' version: 3.4.14 @@ -641,16 +641,16 @@ importers: version: 1.0.7(tailwindcss@3.4.14) tsup: specifier: 'catalog:' - version: 8.3.0(jiti@2.4.0)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) + version: 8.3.0(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) typescript: specifier: 'catalog:' version: 5.6.3 vite: specifier: 'catalog:' - version: 5.4.10(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.0) vitest: specifier: 'catalog:' - version: 2.1.4(@types/node@22.9.0)(jsdom@25.0.1) + version: 2.1.5(@types/node@22.9.0)(jsdom@25.0.1) packages/tailwind-config: devDependencies: @@ -2573,91 +2573,91 @@ packages: '@stablelib/x25519@1.0.3': resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} - '@storybook/addon-actions@8.4.2': - resolution: {integrity: sha512-+hA200XN5aeA4T3jq8IifQq6Y+9FyNQ0Q+blM1L0Tl7WLzBc7B1kHQnKvhSj5pvMSBWc/Q/kY7Ev5t9gdOu13g==} + '@storybook/addon-actions@8.4.4': + resolution: {integrity: sha512-+Dd6alcieS6UN7IKhXLuhyQYQMu9HG/Tdr790a4EOQKpJM1NxIMuPuUH3fAoKfa9VhtI1BxTBr7zNtzg9Akqhg==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 - '@storybook/addon-backgrounds@8.4.2': - resolution: {integrity: sha512-s4uag5VKuk8q2MSnuNS7Sv+v1/mykzGPXe/zZRW2ammtkdHp8Uy78eQS2G0aiG02chXCX+qQgWMyy5QItDcTFQ==} + '@storybook/addon-backgrounds@8.4.4': + resolution: {integrity: sha512-asaGD4ruIPFthyhpByQSJagvtNN7EGKdHj5yMnsMvkSXnN0r1uVkI2/Z37hmLt02Qbzf6OQiBPW5TDL+X+EEBg==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 - '@storybook/addon-controls@8.4.2': - resolution: {integrity: sha512-raCbHEj1xl4F3wKH6IdfEXNRaxKpY4QGhjSTE8Pte5iJSVhKG86taLqqRr+4dC7H1/LVMPU1XCGV4mkgDGtyxQ==} + '@storybook/addon-controls@8.4.4': + resolution: {integrity: sha512-FbZRbwJQggLz6M3zB6scCp1SDGwQ5zdiD6sjBilZzgGO5rBFqG0A8PoOyr4iPrLU2y/NZBdRrJBD+6MkaJ+yzw==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 - '@storybook/addon-docs@8.4.2': - resolution: {integrity: sha512-jIpykha7hv2Inlrq31ZoYg2QhuCuvcO+Q+uvhT45RDTB+2US/fg3rJINKlw2Djq8RPPOXvty5W0yvE6CrWKhnQ==} + '@storybook/addon-docs@8.4.4': + resolution: {integrity: sha512-wuHaStfpd2rkAN5Lf0qmvE3JKTHTEDbnAMTvfs9inzGBL0iAwBLjW48/ll7lLkJ2E3k/FQtaevNpuc7C52u1Bw==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 - '@storybook/addon-essentials@8.4.2': - resolution: {integrity: sha512-+/vfPrXM/GWU3Kbrg92PepwAZr7lOeulTTYF4THK0CL3DfUUlkGNpBPLP5PtjCuIkVrTCjXiIEdVWk47d5m2+w==} + '@storybook/addon-essentials@8.4.4': + resolution: {integrity: sha512-0ObUQ98zZkeWqP2k3Un5jny3WxT3THgUKZUGD+mR8eq6CuTmJ3bUXWzDHreuDxQwgr8s5f04XD8IcRvjZ9IRgA==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 - '@storybook/addon-highlight@8.4.2': - resolution: {integrity: sha512-vTtwp7nyJ09SXrsMnH+pukCjHjRMjQXgHZHxvbrv09uoH8ldQMv9B7u+X+9Wcy/jYSKFz/ng7pWo4b4a2oXHkg==} + '@storybook/addon-highlight@8.4.4': + resolution: {integrity: sha512-k7EUxiMe8RCasmgfa6ZKx7UG6kU9RooTYGwqY5TG5xAQOzDwKn4qom+OYkT/9/6lORhJrUe2GgQLCrq/WGpS1A==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 - '@storybook/addon-measure@8.4.2': - resolution: {integrity: sha512-z+j6xQwcUBSpgzl1XDU+xU4YYgLraLMljECW7NvRNyJ/PYixvol8R3wtzWbr+CBpxmvbXjEJCPlF+EjF9/mBWQ==} + '@storybook/addon-measure@8.4.4': + resolution: {integrity: sha512-KsjrwrXwrI+z7hKKfjyY1w1b0gLSLZmp15vIRJMELybWV0+4bZFLJGwMBOQFx+aWBED8yZrRV9OjTmoczawsZg==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 - '@storybook/addon-outline@8.4.2': - resolution: {integrity: sha512-oTMlPEyT4CBqzcQbfemoJzJ6yzeRAmvrAx9ssaBcnQQRsKxo0D2Ri/Jmm6SNcR0yBHxYRkvIH+2phLw8aiflCQ==} + '@storybook/addon-outline@8.4.4': + resolution: {integrity: sha512-CVS1dm6BNUWKGrJj9E1ThBp5Khe6Yw+Hhz6OFxrPZfoTr6RstwoTmvSpKjDUCn8zj6ujoORdiQUh1FsHOxAPBg==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 - '@storybook/addon-toolbars@8.4.2': - resolution: {integrity: sha512-DidzW/NQS224niMJIjcJI2ls83emqygUcS9GYNGgdc5Xwro/TPgGYOXP2qnXgYUxXQTHbrxmIbHdEehxC7CcYQ==} + '@storybook/addon-toolbars@8.4.4': + resolution: {integrity: sha512-ENPshJMDpfzOJ4Tgm1hSzQoaEmgDxCtP6C8LKk4MOd3X92MJ7p6kfb3y3R1BLg4E/g90qp6lKPFdcohS2tKCgQ==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 - '@storybook/addon-viewport@8.4.2': - resolution: {integrity: sha512-qVQ2UaxCNsUSFHnAAAizNPIJ/QwfMg7p5bBdpYROTZXJe+bxVp0rFzZmQgHZ3/sn+lzE4ItM4QEfxkfQUWi1ag==} + '@storybook/addon-viewport@8.4.4': + resolution: {integrity: sha512-SRHJlLhf3tu7+sYNfVIYTeMegn6aiv4HGX97ZLvL76NWWBU8BntQ1LKMki7475mWiZNUFMoYYPsHlG+HU9FAtg==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 - '@storybook/blocks@8.4.2': - resolution: {integrity: sha512-yAAvmOWaD8gIrepOxCh/RxQqd/1xZIwd/V+gsvAhW/thawN+SpI+zK63gmcqAPLX84hJ3Dh5pegRk0SoHNuDVA==} + '@storybook/blocks@8.4.4': + resolution: {integrity: sha512-LwM3guL7uWpYR1a/SY0KZjCUskTKEaS22eF7GK8iXAV5BY4KpKr6ArW4O9orK29KtFwKhDZQLcMcECsOJBVk/A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.2 + storybook: ^8.4.4 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@storybook/builder-vite@8.4.2': - resolution: {integrity: sha512-dO5FB5yH1C6tr/kBHn1frvGwp8Pt0D1apgXWkJ5ITWEUfh6WwOqX2fqsWsqaNwE7gP0qn0XgwCIEkI/4Mj55SA==} + '@storybook/builder-vite@8.4.4': + resolution: {integrity: sha512-UfPzE0p2xvBK7sA853N3VN+Plfw6/DIVppwbgsaRdzie52QXZQrl60u0igD47DHi6+xbqCBWDz7up4h3k00Z5A==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 vite: ^4.0.0 || ^5.0.0 - '@storybook/components@8.4.2': - resolution: {integrity: sha512-+W59oF7D73LAxLNmCfFrfs98cH9pyNHK9HlJoO5/lKbK4IdWhhOoqUR/AJ3ueksoLuetFat4DxyE8SN1H4Bvrg==} + '@storybook/components@8.4.4': + resolution: {integrity: sha512-0BSZVmsk23C0BSRKx3liZSVQFXtoF86XQFdNQxjrXIwdHIEN7TcL3DwcxeVUU5ilGp7HeDgAydGNIPGgTeEe6g==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/core@8.4.2': - resolution: {integrity: sha512-hF8GWoUZTjwwuV5j4OLhMHZtZQL/NYcVUBReC2Ba06c8PkFIKqKZwATr1zKd301gQ5Qwcn9WgmZxJTMgdKQtOg==} + '@storybook/core@8.4.4': + resolution: {integrity: sha512-WjTmJpsHsFCd7tQ/8jFpDWjhntauXcWYYTcEZk56Pq4miyNrrXhV0S80Gxv3Uvzk0jocgtT2AKf8rQuH2UkQEg==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true - '@storybook/csf-plugin@8.4.2': - resolution: {integrity: sha512-1f0t6W5xbC1sSAHHs3uXYPIQs2NXAEtIGqn6X9i3xbbub6hDS8PF8BIm7dOjQ8dZOPp7d9ltR64V5CoLlsOigA==} + '@storybook/csf-plugin@8.4.4': + resolution: {integrity: sha512-4+6SUhp5sEJN9BY5RuxcFKvJbOqCzIUp9oHSSz36hkP07a4QH+SwxfEd0U7JRfmPpB63L+izywTzWhdADiAMOQ==} peerDependencies: - storybook: ^8.4.2 + storybook: ^8.4.4 '@storybook/csf@0.1.11': resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==} @@ -2672,40 +2672,40 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/manager-api@8.4.2': - resolution: {integrity: sha512-rhPc4cgQDKDH8NUyRh/ZaJW7QIhR/PO5MNX4xc+vz71sM2nO7ONA/FrgLtCuu4SULdwilEPvGefYvLK0dE+Caw==} + '@storybook/manager-api@8.4.4': + resolution: {integrity: sha512-rmNPcbEyzakEHoaecUbhkW7WWOkyZ0z7ywH4d5/s0ZuQS57Px2N+ZLVgRJwYK+YNHiJYqDf1BTln9YJ/Mt1L6Q==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/preview-api@8.4.2': - resolution: {integrity: sha512-5X/xvIvDPaWJKUBCo5zVeBbbjkhnwcI2KPkuOgrHVRRhuQ5WqD0RYxVtOOFNyQXme7g0nNl5RFNgvT7qv9qGeg==} + '@storybook/preview-api@8.4.4': + resolution: {integrity: sha512-iZrWQcjRBqBHFdDXVxGpw6mHBZMCMYqhWXdyJ0d1S2y3PwcfOjkcXlQ1UiAenFHlA6dKrcYw8luKUQTL9bKReA==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/react-dom-shim@8.4.2': - resolution: {integrity: sha512-FZVTM1f34FpGnf6e3MDIKkz05gmn8H9wEccvQAgr8pEFe8VWfrpVWeUrmatSAfgrCMNXYC1avDend8UX6IM8Fg==} + '@storybook/react-dom-shim@8.4.4': + resolution: {integrity: sha512-kufv2FDK3kjADBo+/aKHsUn9T5E4p9IBAmCoIvXBGRDumPRds7Pt3MB4ODKlg+IumR7LMEq0jTJkn27ZRTuUmw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.2 + storybook: ^8.4.4 - '@storybook/react-vite@8.4.2': - resolution: {integrity: sha512-OoXaW/V1AqLggMyniRcnuwmqQ1/OtSn38t31lePX4nDDeJhbGT3ZPldRrwvsLb0EaD3N27uoL+QbAOgsYJIhwA==} + '@storybook/react-vite@8.4.4': + resolution: {integrity: sha512-NbTAY4R526hJ+gz7BFLS1HpGx3BikQDbq1BuEcaWsf/rJnygwlzeQmdPyfrfNC8R0ufIKRWUiPrPmMvrf8ZI6A==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.2 + storybook: ^8.4.4 vite: ^4.0.0 || ^5.0.0 - '@storybook/react@8.4.2': - resolution: {integrity: sha512-rO5/aVKBVhIKENcL7G8ud4QKC5OyWBPCkJIvY6XUHIuhErJy9/4pP+sZ85jypVwx5kq+EqCPF8AEOWjIxB/4/Q==} + '@storybook/react@8.4.4': + resolution: {integrity: sha512-92lGnRcAI2qW6zH8GMBScyXmOS1ANI8ZuSP4ExQj+lGsCrAr7PBr0wuHy3wIn1YyAvQGPUn/mpYrmMz08c2HfA==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.4.2 + '@storybook/test': 8.4.4 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.2 + storybook: ^8.4.4 typescript: '>= 4.2.x' peerDependenciesMeta: '@storybook/test': @@ -2713,8 +2713,8 @@ packages: typescript: optional: true - '@storybook/theming@8.4.2': - resolution: {integrity: sha512-9j4fnu5LcV+qSs1rdwf61Bt14lms0T1LOZkHxGNcS1c1oH+cPS+sxECh2lxtni+mvOAHUlBs9pKhVZzRPdWpvg==} + '@storybook/theming@8.4.4': + resolution: {integrity: sha512-iq4yt3Fx35ZV5owNC//E6G+QPV19xHHVN2Ugi3p7KOSFK3chuXX9mxZ1rfir+t+U30a5EPOEnlsY3/1LXn7aTw==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 @@ -2869,11 +2869,11 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 - '@vitest/expect@2.1.4': - resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==} + '@vitest/expect@2.1.5': + resolution: {integrity: sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==} - '@vitest/mocker@2.1.4': - resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==} + '@vitest/mocker@2.1.5': + resolution: {integrity: sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 @@ -2883,20 +2883,20 @@ packages: vite: optional: true - '@vitest/pretty-format@2.1.4': - resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} + '@vitest/pretty-format@2.1.5': + resolution: {integrity: sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==} - '@vitest/runner@2.1.4': - resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==} + '@vitest/runner@2.1.5': + resolution: {integrity: sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==} - '@vitest/snapshot@2.1.4': - resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==} + '@vitest/snapshot@2.1.5': + resolution: {integrity: sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==} - '@vitest/spy@2.1.4': - resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==} + '@vitest/spy@2.1.5': + resolution: {integrity: sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==} - '@vitest/utils@2.1.4': - resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} + '@vitest/utils@2.1.5': + resolution: {integrity: sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==} '@wagmi/core@2.14.1': resolution: {integrity: sha512-Vl7VK5XdKxPfnYlp3E7U7AJSweBdfh+cd953hgAU2H+uNrekS9Nmt89l1b6WkwkYyqvccRDjsCtlcKRwvPtNAQ==} @@ -3921,6 +3921,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} @@ -4393,8 +4396,8 @@ packages: i18next-browser-languagedetector@8.0.0: resolution: {integrity: sha512-zhXdJXTTCoG39QsrOCiOabnWj2jecouOqbchu3EfhtSHxIB5Uugnm9JaizenOy39h7ne3+fLikIjeW88+rgszw==} - i18next@23.16.4: - resolution: {integrity: sha512-9NIYBVy9cs4wIqzurf7nLXPyf3R78xYbxExVqHLK9od3038rjpyOEzW+XB130kZ1N4PZ9inTtJ471CRJ4Ituyg==} + i18next@23.16.5: + resolution: {integrity: sha512-KTlhE3EP9x6pPTAW7dy0WKIhoCpfOGhRQlO+jttQLgzVaoOjWwBWramu7Pp0i+8wDNduuzXfe3kkVbzrKyrbTA==} iconv-corefoundation@1.1.7: resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} @@ -5508,6 +5511,10 @@ packages: resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -5642,8 +5649,8 @@ packages: peerDependencies: react: ^18.3.1 - react-i18next@15.1.0: - resolution: {integrity: sha512-zj3nJynMnZsy2gPZiOTC7XctCY5eQGqT3tcKMmfJWC9FMvgd+960w/adq61j8iPzpwmsXejqID9qC3Mqu1Xu2Q==} + react-i18next@15.1.1: + resolution: {integrity: sha512-R/Vg9wIli2P3FfeI8o1eNJUJue5LWpFsQePCHdQDmX0Co3zkr6kdT8gAseb/yGeWbNz1Txc4bKDQuZYsC0kQfw==} peerDependencies: i18next: '>= 23.2.3' react: '>= 16.8.0' @@ -6044,8 +6051,11 @@ packages: std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - storybook@8.4.2: - resolution: {integrity: sha512-GMCgyAulmLNrkUtDkCpFO4SB77YrpiIxq6e5tzaQdXEuaDu1mdNwOuP3VG7nE2FzxmqDvagSgriM68YW9iFaZA==} + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + + storybook@8.4.4: + resolution: {integrity: sha512-xBOq3q/MuUUg3zM0imMMaK5ziKq3TO388jsnaiemJ4Uf0ZGwcHjM8HDBCDt0s5/CfsOQ49zo1ouZ3aNlu0qsUg==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -6403,38 +6413,38 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo-darwin-64@2.2.3: - resolution: {integrity: sha512-Rcm10CuMKQGcdIBS3R/9PMeuYnv6beYIHqfZFeKWVYEWH69sauj4INs83zKMTUiZJ3/hWGZ4jet9AOwhsssLyg==} + turbo-darwin-64@2.3.0: + resolution: {integrity: sha512-pji+D49PhFItyQjf2QVoLZw2d3oRGo8gJgKyOiRzvip78Rzie74quA8XNwSg/DuzM7xx6gJ3p2/LylTTlgZXxQ==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.2.3: - resolution: {integrity: sha512-+EIMHkuLFqUdJYsA3roj66t9+9IciCajgj+DVek+QezEdOJKcRxlvDOS2BUaeN8kEzVSsNiAGnoysFWYw4K0HA==} + turbo-darwin-arm64@2.3.0: + resolution: {integrity: sha512-AJrGIL9BO41mwDF/IBHsNGwvtdyB911vp8f5mbNo1wG66gWTvOBg7WCtYQBvCo11XTenTfXPRSsAb7w3WAZb6w==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.2.3: - resolution: {integrity: sha512-UBhJCYnqtaeOBQLmLo8BAisWbc9v9daL9G8upLR+XGj6vuN/Nz6qUAhverN4Pyej1g4Nt1BhROnj6GLOPYyqxQ==} + turbo-linux-64@2.3.0: + resolution: {integrity: sha512-jZqW6vc2sPJT3M/3ZmV1Cg4ecQVPqsbHncG/RnogHpBu783KCSXIndgxvUQNm9qfgBYbZDBnP1md63O4UTElhw==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.2.3: - resolution: {integrity: sha512-hJYT9dN06XCQ3jBka/EWvvAETnHRs3xuO/rb5bESmDfG+d9yQjeTMlhRXKrr4eyIMt6cLDt1LBfyi+6CQ+VAwQ==} + turbo-linux-arm64@2.3.0: + resolution: {integrity: sha512-HUbDLJlvd/hxuyCNO0BmEWYQj0TugRMvSQeG8vHJH+Lq8qOgDAe7J0K73bFNbZejZQxW3C3XEiZFB3pnpO78+A==} cpu: [arm64] os: [linux] - turbo-windows-64@2.2.3: - resolution: {integrity: sha512-NPrjacrZypMBF31b4HE4ROg4P3nhMBPHKS5WTpMwf7wydZ8uvdEHpESVNMOtqhlp857zbnKYgP+yJF30H3N2dQ==} + turbo-windows-64@2.3.0: + resolution: {integrity: sha512-c5rxrGNTYDWX9QeMzWLFE9frOXnKjHGEvQMp1SfldDlbZYsloX9UKs31TzUThzfTgTiz8NYuShaXJ2UvTMnV/g==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.2.3: - resolution: {integrity: sha512-fnNrYBCqn6zgKPKLHu4sOkihBI/+0oYFr075duRxqUZ+1aLWTAGfHZLgjVeLh3zR37CVzuerGIPWAEkNhkWEIw==} + turbo-windows-arm64@2.3.0: + resolution: {integrity: sha512-7qfUuYhfIVb1AZgs89DxhXK+zZez6O2ocmixEQ4hXZK7ytnBt5vaz2zGNJJKFNYIL5HX1C3tuHolnpNgDNCUIg==} cpu: [arm64] os: [win32] - turbo@2.2.3: - resolution: {integrity: sha512-5lDvSqIxCYJ/BAd6rQGK/AzFRhBkbu4JHVMLmGh/hCb7U3CqSnr5Tjwfy9vc+/5wG2DJ6wttgAaA7MoCgvBKZQ==} + turbo@2.3.0: + resolution: {integrity: sha512-/uOq5o2jwRPyaUDnwBpOR5k9mQq4c3wziBgWNWttiYQPmbhDtrKYPRBxTvA2WpgQwRIbt8UM612RMN8n/TvmHA==} hasBin: true type-fest@0.13.1: @@ -6632,8 +6642,8 @@ packages: typescript: optional: true - vite-node@2.1.4: - resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} + vite-node@2.1.5: + resolution: {integrity: sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -6668,15 +6678,46 @@ packages: terser: optional: true - vitest@2.1.4: - resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==} + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@2.1.5: + resolution: {integrity: sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.4 - '@vitest/ui': 2.1.4 + '@vitest/browser': 2.1.5 + '@vitest/ui': 2.1.5 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -7437,7 +7478,7 @@ snapshots: '@babel/helper-validator-identifier': 7.25.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.1.0 + picocolors: 1.1.1 '@babel/parser@7.25.7': dependencies: @@ -7669,7 +7710,7 @@ snapshots: clsx: 1.2.1 eventemitter3: 5.0.1 preact: 10.24.2 - vitest: 2.1.4(@types/node@22.9.0)(jsdom@25.0.1) + vitest: 2.1.5(@types/node@22.9.0)(jsdom@25.0.1) transitivePeerDependencies: - '@edge-runtime/vm' - '@types/node' @@ -8240,13 +8281,13 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.6.3)(vite@5.4.10(@types/node@22.9.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.6.3) - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.11(@types/node@22.9.0) optionalDependencies: typescript: 5.6.3 @@ -9490,111 +9531,111 @@ snapshots: '@stablelib/random': 1.0.2 '@stablelib/wipe': 1.0.1 - '@storybook/addon-actions@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/addon-actions@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/addon-backgrounds@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/addon-controls@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.4.2(@types/react@18.3.12)(storybook@8.4.2(prettier@2.8.8))': + '@storybook/addon-docs@8.4.4(@types/react@18.3.12)(storybook@8.4.4(prettier@2.8.8))': dependencies: '@mdx-js/react': 3.0.1(@types/react@18.3.12)(react@18.3.1) - '@storybook/blocks': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@2.8.8)) - '@storybook/csf-plugin': 8.4.2(storybook@8.4.2(prettier@2.8.8)) - '@storybook/react-dom-shim': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@2.8.8)) + '@storybook/blocks': 8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.4(prettier@2.8.8)) + '@storybook/csf-plugin': 8.4.4(storybook@8.4.4(prettier@2.8.8)) + '@storybook/react-dom-shim': 8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.4(prettier@2.8.8)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - webpack-sources - '@storybook/addon-essentials@8.4.2(@types/react@18.3.12)(storybook@8.4.2(prettier@2.8.8))': - dependencies: - '@storybook/addon-actions': 8.4.2(storybook@8.4.2(prettier@2.8.8)) - '@storybook/addon-backgrounds': 8.4.2(storybook@8.4.2(prettier@2.8.8)) - '@storybook/addon-controls': 8.4.2(storybook@8.4.2(prettier@2.8.8)) - '@storybook/addon-docs': 8.4.2(@types/react@18.3.12)(storybook@8.4.2(prettier@2.8.8)) - '@storybook/addon-highlight': 8.4.2(storybook@8.4.2(prettier@2.8.8)) - '@storybook/addon-measure': 8.4.2(storybook@8.4.2(prettier@2.8.8)) - '@storybook/addon-outline': 8.4.2(storybook@8.4.2(prettier@2.8.8)) - '@storybook/addon-toolbars': 8.4.2(storybook@8.4.2(prettier@2.8.8)) - '@storybook/addon-viewport': 8.4.2(storybook@8.4.2(prettier@2.8.8)) - storybook: 8.4.2(prettier@2.8.8) + '@storybook/addon-essentials@8.4.4(@types/react@18.3.12)(storybook@8.4.4(prettier@2.8.8))': + dependencies: + '@storybook/addon-actions': 8.4.4(storybook@8.4.4(prettier@2.8.8)) + '@storybook/addon-backgrounds': 8.4.4(storybook@8.4.4(prettier@2.8.8)) + '@storybook/addon-controls': 8.4.4(storybook@8.4.4(prettier@2.8.8)) + '@storybook/addon-docs': 8.4.4(@types/react@18.3.12)(storybook@8.4.4(prettier@2.8.8)) + '@storybook/addon-highlight': 8.4.4(storybook@8.4.4(prettier@2.8.8)) + '@storybook/addon-measure': 8.4.4(storybook@8.4.4(prettier@2.8.8)) + '@storybook/addon-outline': 8.4.4(storybook@8.4.4(prettier@2.8.8)) + '@storybook/addon-toolbars': 8.4.4(storybook@8.4.4(prettier@2.8.8)) + '@storybook/addon-viewport': 8.4.4(storybook@8.4.4(prettier@2.8.8)) + storybook: 8.4.4(prettier@2.8.8) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - webpack-sources - '@storybook/addon-highlight@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/addon-highlight@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) - '@storybook/addon-measure@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/addon-measure@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/addon-outline@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/addon-toolbars@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) - '@storybook/addon-viewport@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/addon-viewport@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: memoizerific: 1.11.3 - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) - '@storybook/blocks@8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@2.8.8))': + '@storybook/blocks@8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.4(prettier@2.8.8))': dependencies: '@storybook/csf': 0.1.11 '@storybook/icons': 1.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.4.2(storybook@8.4.2(prettier@2.8.8))(vite@5.4.10(@types/node@22.9.0))': + '@storybook/builder-vite@8.4.4(storybook@8.4.4(prettier@2.8.8))(vite@5.4.11(@types/node@22.9.0))': dependencies: - '@storybook/csf-plugin': 8.4.2(storybook@8.4.2(prettier@2.8.8)) + '@storybook/csf-plugin': 8.4.4(storybook@8.4.4(prettier@2.8.8)) browser-assert: 1.2.1 - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) ts-dedent: 2.2.0 - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.11(@types/node@22.9.0) transitivePeerDependencies: - webpack-sources - '@storybook/components@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/components@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) - '@storybook/core@8.4.2(prettier@2.8.8)': + '@storybook/core@8.4.4(prettier@2.8.8)': dependencies: '@storybook/csf': 0.1.11 better-opn: 3.0.2 @@ -9614,9 +9655,9 @@ snapshots: - supports-color - utf-8-validate - '@storybook/csf-plugin@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/csf-plugin@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) unplugin: 1.14.1 transitivePeerDependencies: - webpack-sources @@ -9632,35 +9673,35 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/manager-api@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/manager-api@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) - '@storybook/preview-api@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/preview-api@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) - '@storybook/react-dom-shim@8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@2.8.8))': + '@storybook/react-dom-shim@8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.4(prettier@2.8.8))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) - '@storybook/react-vite@8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.2(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.9.0))': + '@storybook/react-vite@8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.4(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.3)(vite@5.4.10(@types/node@22.9.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)) '@rollup/pluginutils': 5.1.2(rollup@4.24.0) - '@storybook/builder-vite': 8.4.2(storybook@8.4.2(prettier@2.8.8))(vite@5.4.10(@types/node@22.9.0)) - '@storybook/react': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@2.8.8))(typescript@5.6.3) + '@storybook/builder-vite': 8.4.4(storybook@8.4.4(prettier@2.8.8))(vite@5.4.11(@types/node@22.9.0)) + '@storybook/react': 8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.4(prettier@2.8.8))(typescript@5.6.3) find-up: 5.0.0 magic-string: 0.30.12 react: 18.3.1 react-docgen: 7.0.3 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.8 - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) tsconfig-paths: 4.2.0 - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.11(@types/node@22.9.0) transitivePeerDependencies: - '@storybook/test' - rollup @@ -9668,23 +9709,23 @@ snapshots: - typescript - webpack-sources - '@storybook/react@8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@2.8.8))(typescript@5.6.3)': + '@storybook/react@8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.4(prettier@2.8.8))(typescript@5.6.3)': dependencies: - '@storybook/components': 8.4.2(storybook@8.4.2(prettier@2.8.8)) + '@storybook/components': 8.4.4(storybook@8.4.4(prettier@2.8.8)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.4.2(storybook@8.4.2(prettier@2.8.8)) - '@storybook/preview-api': 8.4.2(storybook@8.4.2(prettier@2.8.8)) - '@storybook/react-dom-shim': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@2.8.8)) - '@storybook/theming': 8.4.2(storybook@8.4.2(prettier@2.8.8)) + '@storybook/manager-api': 8.4.4(storybook@8.4.4(prettier@2.8.8)) + '@storybook/preview-api': 8.4.4(storybook@8.4.4(prettier@2.8.8)) + '@storybook/react-dom-shim': 8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.4(prettier@2.8.8)) + '@storybook/theming': 8.4.4(storybook@8.4.4(prettier@2.8.8)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) optionalDependencies: typescript: 5.6.3 - '@storybook/theming@8.4.2(storybook@8.4.2(prettier@2.8.8))': + '@storybook/theming@8.4.4(storybook@8.4.4(prettier@2.8.8))': dependencies: - storybook: 8.4.2(prettier@2.8.8) + storybook: 8.4.4(prettier@2.8.8) '@sushiswap/tines@1.0.11(viem@2.21.41(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8)': dependencies: @@ -9870,54 +9911,54 @@ snapshots: '@types/node': 22.7.8 optional: true - '@vitejs/plugin-react@4.3.3(vite@5.4.10(@types/node@22.9.0))': + '@vitejs/plugin-react@4.3.3(vite@5.4.11(@types/node@22.9.0))': dependencies: '@babel/core': 7.25.7 '@babel/plugin-transform-react-jsx-self': 7.25.7(@babel/core@7.25.7) '@babel/plugin-transform-react-jsx-source': 7.25.7(@babel/core@7.25.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.11(@types/node@22.9.0) transitivePeerDependencies: - supports-color - '@vitest/expect@2.1.4': + '@vitest/expect@2.1.5': dependencies: - '@vitest/spy': 2.1.4 - '@vitest/utils': 2.1.4 + '@vitest/spy': 2.1.5 + '@vitest/utils': 2.1.5 chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.9.0))': + '@vitest/mocker@2.1.5(vite@5.4.10(@types/node@22.9.0))': dependencies: - '@vitest/spy': 2.1.4 + '@vitest/spy': 2.1.5 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: vite: 5.4.10(@types/node@22.9.0) - '@vitest/pretty-format@2.1.4': + '@vitest/pretty-format@2.1.5': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.1.4': + '@vitest/runner@2.1.5': dependencies: - '@vitest/utils': 2.1.4 + '@vitest/utils': 2.1.5 pathe: 1.1.2 - '@vitest/snapshot@2.1.4': + '@vitest/snapshot@2.1.5': dependencies: - '@vitest/pretty-format': 2.1.4 + '@vitest/pretty-format': 2.1.5 magic-string: 0.30.12 pathe: 1.1.2 - '@vitest/spy@2.1.4': + '@vitest/spy@2.1.5': dependencies: tinyspy: 3.0.2 - '@vitest/utils@2.1.4': + '@vitest/utils@2.1.5': dependencies: - '@vitest/pretty-format': 2.1.4 + '@vitest/pretty-format': 2.1.5 loupe: 3.1.2 tinyrainbow: 1.2.0 @@ -10531,14 +10572,14 @@ snapshots: atomic-sleep@1.0.0: {} - autoprefixer@10.4.20(postcss@8.4.47): + autoprefixer@10.4.20(postcss@8.4.49): dependencies: browserslist: 4.24.0 caniuse-lite: 1.0.30001667 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.0 - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -11244,7 +11285,7 @@ snapshots: electron-to-chromium@1.5.32: {} - electron-vite@2.3.0(vite@5.4.10(@types/node@22.9.0)): + electron-vite@2.3.0(vite@5.4.11(@types/node@22.9.0)): dependencies: '@babel/core': 7.25.7 '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.25.7) @@ -11252,7 +11293,7 @@ snapshots: esbuild: 0.21.5 magic-string: 0.30.11 picocolors: 1.1.0 - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.11(@types/node@22.9.0) transitivePeerDependencies: - supports-color @@ -11343,6 +11384,8 @@ snapshots: es-errors@1.3.0: {} + es-module-lexer@1.5.4: {} + es6-error@4.1.1: optional: true @@ -11981,7 +12024,7 @@ snapshots: dependencies: '@babel/runtime': 7.25.7 - i18next@23.16.4: + i18next@23.16.5: dependencies: '@babel/runtime': 7.25.7 @@ -13064,37 +13107,37 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.47): + postcss-import@15.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.47): + postcss-js@4.0.1(postcss@8.4.49): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.47 + postcss: 8.4.49 - postcss-load-config@4.0.2(postcss@8.4.47): + postcss-load-config@4.0.2(postcss@8.4.49): dependencies: lilconfig: 3.1.2 yaml: 2.5.1 optionalDependencies: - postcss: 8.4.47 + postcss: 8.4.49 - postcss-load-config@6.0.1(jiti@2.4.0)(postcss@8.4.47)(tsx@4.19.2)(yaml@2.5.1): + postcss-load-config@6.0.1(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.5.1): dependencies: lilconfig: 3.1.2 optionalDependencies: jiti: 2.4.0 - postcss: 8.4.47 + postcss: 8.4.49 tsx: 4.19.2 yaml: 2.5.1 - postcss-nested@6.2.0(postcss@8.4.47): + postcss-nested@6.2.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.1.2: @@ -13107,7 +13150,13 @@ snapshots: postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.1.0 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.4.49: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 source-map-js: 1.2.1 postgres-array@2.0.0: {} @@ -13233,11 +13282,11 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-i18next@15.1.0(i18next@23.16.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-i18next@15.1.1(i18next@23.16.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.25.7 html-parse-stringify: 3.0.1 - i18next: 23.16.4 + i18next: 23.16.5 react: 18.3.1 optionalDependencies: react-dom: 18.3.1(react@18.3.1) @@ -13659,9 +13708,11 @@ snapshots: std-env@3.7.0: {} - storybook@8.4.2(prettier@2.8.8): + std-env@3.8.0: {} + + storybook@8.4.4(prettier@2.8.8): dependencies: - '@storybook/core': 8.4.2(prettier@2.8.8) + '@storybook/core': 8.4.4(prettier@2.8.8) optionalDependencies: prettier: 2.8.8 transitivePeerDependencies: @@ -13806,11 +13857,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.4.47 - postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47) - postcss-nested: 6.2.0(postcss@8.4.47) + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49) + postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 @@ -14006,7 +14057,7 @@ snapshots: tsscmp@1.0.6: {} - tsup@8.3.0(jiti@2.4.0)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1): + tsup@8.3.0(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1): dependencies: bundle-require: 5.0.0(esbuild@0.23.1) cac: 6.7.14 @@ -14017,7 +14068,7 @@ snapshots: execa: 5.1.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.4.0)(postcss@8.4.47)(tsx@4.19.2)(yaml@2.5.1) + postcss-load-config: 6.0.1(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.5.1) resolve-from: 5.0.0 rollup: 4.24.0 source-map: 0.8.0-beta.0 @@ -14025,7 +14076,7 @@ snapshots: tinyglobby: 0.2.9 tree-kill: 1.2.2 optionalDependencies: - postcss: 8.4.47 + postcss: 8.4.49 typescript: 5.6.3 transitivePeerDependencies: - jiti @@ -14041,32 +14092,32 @@ snapshots: fsevents: 2.3.3 optional: true - turbo-darwin-64@2.2.3: + turbo-darwin-64@2.3.0: optional: true - turbo-darwin-arm64@2.2.3: + turbo-darwin-arm64@2.3.0: optional: true - turbo-linux-64@2.2.3: + turbo-linux-64@2.3.0: optional: true - turbo-linux-arm64@2.2.3: + turbo-linux-arm64@2.3.0: optional: true - turbo-windows-64@2.2.3: + turbo-windows-64@2.3.0: optional: true - turbo-windows-arm64@2.2.3: + turbo-windows-arm64@2.3.0: optional: true - turbo@2.2.3: + turbo@2.3.0: optionalDependencies: - turbo-darwin-64: 2.2.3 - turbo-darwin-arm64: 2.2.3 - turbo-linux-64: 2.2.3 - turbo-linux-arm64: 2.2.3 - turbo-windows-64: 2.2.3 - turbo-windows-arm64: 2.2.3 + turbo-darwin-64: 2.3.0 + turbo-darwin-arm64: 2.3.0 + turbo-linux-64: 2.3.0 + turbo-linux-arm64: 2.3.0 + turbo-windows-64: 2.3.0 + turbo-windows-arm64: 2.3.0 type-fest@0.13.1: optional: true @@ -14142,7 +14193,7 @@ snapshots: dependencies: browserslist: 4.24.0 escalade: 3.2.0 - picocolors: 1.1.0 + picocolors: 1.1.1 uqr@0.1.2: {} @@ -14222,10 +14273,11 @@ snapshots: - utf-8-validate - zod - vite-node@2.1.4(@types/node@22.9.0): + vite-node@2.1.5(@types/node@22.9.0): dependencies: cac: 6.7.14 debug: 4.3.7 + es-module-lexer: 1.5.4 pathe: 1.1.2 vite: 5.4.10(@types/node@22.9.0) transitivePeerDependencies: @@ -14248,27 +14300,36 @@ snapshots: '@types/node': 22.9.0 fsevents: 2.3.3 - vitest@2.1.4(@types/node@22.9.0)(jsdom@25.0.1): + vite@5.4.11(@types/node@22.9.0): dependencies: - '@vitest/expect': 2.1.4 - '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.9.0)) - '@vitest/pretty-format': 2.1.4 - '@vitest/runner': 2.1.4 - '@vitest/snapshot': 2.1.4 - '@vitest/spy': 2.1.4 - '@vitest/utils': 2.1.4 + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.24.0 + optionalDependencies: + '@types/node': 22.9.0 + fsevents: 2.3.3 + + vitest@2.1.5(@types/node@22.9.0)(jsdom@25.0.1): + dependencies: + '@vitest/expect': 2.1.5 + '@vitest/mocker': 2.1.5(vite@5.4.10(@types/node@22.9.0)) + '@vitest/pretty-format': 2.1.5 + '@vitest/runner': 2.1.5 + '@vitest/snapshot': 2.1.5 + '@vitest/spy': 2.1.5 + '@vitest/utils': 2.1.5 chai: 5.1.2 debug: 4.3.7 expect-type: 1.1.0 magic-string: 0.30.12 pathe: 1.1.2 - std-env: 3.7.0 + std-env: 3.8.0 tinybench: 2.9.0 tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 vite: 5.4.10(@types/node@22.9.0) - vite-node: 2.1.4(@types/node@22.9.0) + vite-node: 2.1.5(@types/node@22.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.9.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 4a4da826..1ea64469 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -23,9 +23,9 @@ catalog: "@rollup/rollup-linux-x64-gnu": ^4.24.0 "@sentry/node": ^8.38.0 "@sinclair/typebox": ^0.34.0 - "@storybook/addon-essentials": ^8.4.2 - "@storybook/react": ^8.4.2 - "@storybook/react-vite": ^8.4.2 + "@storybook/addon-essentials": ^8.4.4 + "@storybook/react": ^8.4.4 + "@storybook/react-vite": ^8.4.4 "@sushiswap/tines": ^1.0.11 "@thirdweb-dev/engine": ^0.0.16 "@types/jsonwebtoken": ^9.0.7 @@ -47,7 +47,7 @@ catalog: express: ^4.21.0 fastify: ^5.1.0 husky: ^9.1.6 - i18next: ^23.16.4 + i18next: ^23.16.5 "i18next-browser-languagedetector": ^8.0.0 "input-otp": ^1.4.1 jsdom: ^25.0.1 @@ -57,21 +57,21 @@ catalog: lint-staged: ^15.2.10 pino: ^9.5.0 pino-pretty: ^13.0.0 - postcss: ^8.4.47 + postcss: ^8.4.49 prisma: ^5.22.0 react: ^18.2.0 "react-dom": ^18.2.0 - "react-i18next": ^15.1.0 - storybook: ^8.4.2 + "react-i18next": ^15.1.1 + storybook: ^8.4.4 tailwindcss: ^3.4.14 "tailwind-config-viewer": ^2.0.4 "tailwindcss-animate": ^1.0.7 "tailwind-merge": ^2.5.4 thirdweb: ^5.67.0 tsup: 8.3.0 # --watch mode broken with Fastify in later versions - turbo: ^2.2.3 + turbo: ^2.3.0 typescript: ^5.6.3 uuid: ^11.0.2 viem: 2.21.41 # matches Thirdweb version to satisfy getAwsKmsAccount types - vite: ^5.4.10 - vitest: ^2.1.4 + vite: ^5.4.11 + vitest: ^2.1.5 From 183b53bc34e8737756be5de363603b1d5994a552 Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Thu, 14 Nov 2024 13:58:26 -0800 Subject: [PATCH 02/20] update copy --- .../ConnectMigrateUserView.stories.tsx | 10 ++ .../connect/ConnectMigrateUserView.tsx | 146 +++++++++--------- 2 files changed, 81 insertions(+), 75 deletions(-) diff --git a/packages/react/src/components/connect/ConnectMigrateUserView.stories.tsx b/packages/react/src/components/connect/ConnectMigrateUserView.stories.tsx index 788c605d..48f8a8a4 100644 --- a/packages/react/src/components/connect/ConnectMigrateUserView.stories.tsx +++ b/packages/react/src/components/connect/ConnectMigrateUserView.stories.tsx @@ -19,6 +19,7 @@ export const Default: Story = { pfp: "https://djmahssgw62sw.cloudfront.net/general/0xb8e0d594cd869e49ae55c5b44fa886857b1cdeb9d4aeb49b44d47eeccf97c835.png", banner: "https://djmahssgw62sw.cloudfront.net/general/0x19a59e64df51da1aad93ee9d0c4ec00412c0de13b2401be65ee775714f786dd4.jpg", + legacyAddress: "0x0DF42DB01fF1992FBd2aCff3b7a9010CF59B6F80", }, { id: "test-legacyProfile-2", @@ -26,6 +27,15 @@ export const Default: Story = { discriminant: 0, pfp: null, banner: null, + legacyAddress: "0x0DF42DB01fF1992FBd2aCff3b7a9010CF59B6F80", + }, + { + id: "test-legacyProfile-3", + tag: null, + discriminant: null, + pfp: null, + banner: null, + legacyAddress: "0x0DF42DB01fF1992FBd2aCff3b7a9010CF59B6F80", }, ], }, diff --git a/packages/react/src/components/connect/ConnectMigrateUserView.tsx b/packages/react/src/components/connect/ConnectMigrateUserView.tsx index 70eaa95e..12898260 100644 --- a/packages/react/src/components/connect/ConnectMigrateUserView.tsx +++ b/packages/react/src/components/connect/ConnectMigrateUserView.tsx @@ -1,6 +1,7 @@ import { useState } from "react"; +import { shortenAddress } from "thirdweb/utils"; -import { TreasureIcon } from "../../icons/TreasureIcon"; +import { TreasureSparklesIcon } from "../../icons/TreasureSparklesIcon"; import { cn } from "../../utils/classnames"; import { Button } from "../ui/Button"; @@ -11,6 +12,7 @@ type Props = { discriminant: number | null; pfp: string | null; banner: string | null; + legacyAddress: string; }[]; error?: string; onApprove: (id: string) => void; @@ -23,7 +25,6 @@ export const ConnectMigrateUserView = ({ error, onApprove, onReject, - onCancel, }: Props) => { const [selectedProfileId, setSelectedProfileId] = useState( legacyProfiles[0]?.id, @@ -36,96 +37,91 @@ export const ConnectMigrateUserView = ({ className="tdk-text-lg tdk-font-semibold tdk-text-white tdk-m-0" aria-hidden="true" > - Migrate your account + Migrate existing accounts

- {legacyProfiles.length > 1 ? ( - <> - We found the following matching profiles from the Treasure Market. - Please select one you would like to merge with your Treasure - Account and use as your identity across the Treasure ecosystem: - - ) : ( - <> - We found the following matching profile from the Treasure Market. - Would you like to merge it with your Treasure Account and use it - as your identity across the Treasure ecosystem? - - )} + It looks like you have several existing Treasure profiles! Please + choose one you would like to use moving forward as your identity + across the Treasure ecosystem.

- {legacyProfiles.map(({ id, tag, discriminant, pfp, banner }) => ( - - ))} + + ), + )}
{error ? (

{error}

) : null} -
- - - +
+
+ + +
+

+ NOTE: This is irreversible, so please choose carefully. +

); From 3db2e0d48577f56c277b503f30347fb72b574414 Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Thu, 14 Nov 2024 14:46:59 -0800 Subject: [PATCH 03/20] show migrate view in connect modal when legacy profiles are present --- apps/api/src/routes/auth.ts | 7 ++- apps/api/src/schema/auth.ts | 3 +- packages/core/src/types.ts | 3 + .../connect/ConnectMigrateUserView.tsx | 34 +++++------ .../src/components/connect/ConnectModal.tsx | 56 +++++++++++++++---- packages/react/src/contexts/treasure.tsx | 40 +++++++------ packages/react/src/translations/en.ts | 8 +++ packages/react/src/types.ts | 6 +- 8 files changed, 106 insertions(+), 51 deletions(-) diff --git a/apps/api/src/routes/auth.ts b/apps/api/src/routes/auth.ts index d6ff009b..90fd16fa 100644 --- a/apps/api/src/routes/auth.ts +++ b/apps/api/src/routes/auth.ts @@ -210,6 +210,7 @@ export const authRoutes = select: { ...USER_PUBLIC_PROFILE_SELECT_FIELDS, id: true, + legacyAddress: true, }, }) : userSmartAccount.initialWalletAddress @@ -217,7 +218,11 @@ export const authRoutes = where: { legacyAddress: userSmartAccount.initialWalletAddress, }, - select: { ...USER_PUBLIC_PROFILE_SELECT_FIELDS, id: true }, + select: { + ...USER_PUBLIC_PROFILE_SELECT_FIELDS, + id: true, + legacyAddress: true, + }, }) : [], ]); diff --git a/apps/api/src/schema/auth.ts b/apps/api/src/schema/auth.ts index 202f35e3..05e75863 100644 --- a/apps/api/src/schema/auth.ts +++ b/apps/api/src/schema/auth.ts @@ -1,5 +1,5 @@ import { type Static, Type } from "@sinclair/typebox"; -import { EXAMPLE_WALLET_ADDRESS } from "./shared"; +import { EXAMPLE_WALLET_ADDRESS, nullableStringSchema } from "./shared"; import { sessionSchema, userProfileSchema, @@ -50,6 +50,7 @@ export const loginReplySchema = Type.Object({ Type.Intersect([ Type.Object({ id: Type.String(), + legacyAddress: nullableStringSchema, }), Type.Omit(userPublicProfileSchema, ["socialAccounts"]), ]), diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 0e574c8c..91ed3771 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -66,6 +66,9 @@ export type Transaction = Awaited< export type User = Awaited< ReturnType<(typeof TDKAPI)["prototype"]["user"]["me"]> >; +export type LegacyProfile = Awaited< + ReturnType<(typeof TDKAPI)["prototype"]["auth"]["logIn"]> +>["legacyProfiles"][number]; export type Session = Awaited< ReturnType<(typeof TDKAPI)["prototype"]["user"]["getSessions"]> >[number]; diff --git a/packages/react/src/components/connect/ConnectMigrateUserView.tsx b/packages/react/src/components/connect/ConnectMigrateUserView.tsx index 12898260..394a561b 100644 --- a/packages/react/src/components/connect/ConnectMigrateUserView.tsx +++ b/packages/react/src/components/connect/ConnectMigrateUserView.tsx @@ -1,4 +1,7 @@ +import type { LegacyProfile } from "@treasure-dev/tdk-core"; import { useState } from "react"; +import { useTranslation } from "react-i18next"; +import { ZERO_ADDRESS } from "thirdweb"; import { shortenAddress } from "thirdweb/utils"; import { TreasureSparklesIcon } from "../../icons/TreasureSparklesIcon"; @@ -6,22 +9,16 @@ import { cn } from "../../utils/classnames"; import { Button } from "../ui/Button"; type Props = { - legacyProfiles: { - id: string; - tag: string | null; - discriminant: number | null; - pfp: string | null; - banner: string | null; - legacyAddress: string; - }[]; + legacyProfiles: LegacyProfile[]; + isLoading?: boolean; error?: string; onApprove: (id: string) => void; onReject: () => void; - onCancel: () => void; }; export const ConnectMigrateUserView = ({ legacyProfiles, + isLoading = false, error, onApprove, onReject, @@ -29,6 +26,7 @@ export const ConnectMigrateUserView = ({ const [selectedProfileId, setSelectedProfileId] = useState( legacyProfiles[0]?.id, ); + const { t } = useTranslation(); return (
@@ -37,12 +35,10 @@ export const ConnectMigrateUserView = ({ className="tdk-text-lg tdk-font-semibold tdk-text-white tdk-m-0" aria-hidden="true" > - Migrate existing accounts + {t("connect.migrate.header")}

- It looks like you have several existing Treasure profiles! Please - choose one you would like to use moving forward as your identity - across the Treasure ecosystem. + {t("connect.migrate.description")}

@@ -92,7 +88,7 @@ export const ConnectMigrateUserView = ({
) : (
- {shortenAddress(legacyAddress)} + {shortenAddress(legacyAddress ?? ZERO_ADDRESS)}
)}
@@ -108,19 +104,19 @@ export const ConnectMigrateUserView = ({
-

- NOTE: This is irreversible, so please choose carefully. + {t("connect.migrate.disclaimer")}

diff --git a/packages/react/src/components/connect/ConnectModal.tsx b/packages/react/src/components/connect/ConnectModal.tsx index e8d92a5e..8d764aba 100644 --- a/packages/react/src/components/connect/ConnectModal.tsx +++ b/packages/react/src/components/connect/ConnectModal.tsx @@ -2,6 +2,7 @@ import * as VisuallyHidden from "@radix-ui/react-visually-hidden"; import { type ConnectMethod, DEFAULT_TDK_APP_ICON_URI, + type LegacyProfile, SUPPORTED_WEB3_WALLETS, type SocialConnectMethod, type User, @@ -23,6 +24,7 @@ import { type Options as ConnectMethodSelectionOptions, ConnectMethodSelectionView, } from "./ConnectMethodSelectionView"; +import { ConnectMigrateUserView } from "./ConnectMigrateUserView"; import { ConnectVerifyCodeView } from "./ConnectVerifyCodeView"; export type Options = ConnectMethodSelectionOptions & { @@ -43,6 +45,7 @@ export type Props = Options & { const DEFAULT_STATE = { email: "", + legacyProfiles: [], isLoading: false, error: undefined, }; @@ -77,8 +80,9 @@ export const ConnectModal = ({ factoryAddress: contractAddresses.ManagedAccountFactory, sponsorGas: true, }; - const [{ email, isLoading, error }, setState] = useState<{ + const [{ email, legacyProfiles, isLoading, error }, setState] = useState<{ email: string; + legacyProfiles: LegacyProfile[]; isLoading: boolean; error: string | undefined; }>(DEFAULT_STATE); @@ -88,6 +92,8 @@ export const ConnectModal = ({ }); const { connect: connectWeb3Wallet } = useConnectModal(); + const isMigrating = legacyProfiles.length > 1; + const setIsLoading = (isLoading = true) => setState((curr) => ({ ...curr, @@ -98,6 +104,7 @@ export const ConnectModal = ({ const setError = (err: unknown, resetEmail = false) => setState((curr) => ({ email: resetEmail ? "" : curr.email, + legacyProfiles: [], isLoading: false, error: getErrorMessage(err), })); @@ -126,10 +133,15 @@ export const ConnectModal = ({ if (wallet) { try { - const nextUser = await logIn(wallet); - // Login was successful, close the connect modal - onConnected?.("email", wallet, nextUser); - onOpenChange(false); + const { user, legacyProfiles } = await logIn(wallet); + if (legacyProfiles.length > 1) { + // User has a legacy profile migration choice + setState((curr) => ({ ...curr, legacyProfiles })); + } else { + // Nothing to migrate, close the connect modal + onConnected?.("email", wallet, user); + onOpenChange(false); + } } catch (err) { console.error("Error logging in wallet with email:", err); setError(err, true); @@ -157,7 +169,12 @@ export const ConnectModal = ({ ecosystemPartnerId, email: nextEmail, }); - setState({ email: nextEmail, isLoading: false, error: undefined }); + setState({ + email: nextEmail, + legacyProfiles: [], + isLoading: false, + error: undefined, + }); } catch (err) { console.error("Error sending email verification code:", err); setError(err); @@ -246,10 +263,15 @@ export const ConnectModal = ({ if (wallet) { try { - const nextUser = await logIn(wallet); - // Login was successful, close the connect modal - onConnected?.(method, wallet, nextUser); - onOpenChange(false); + const { user, legacyProfiles } = await logIn(wallet); + if (legacyProfiles.length > 1) { + // User has a legacy profile migration choice + setState((curr) => ({ ...curr, legacyProfiles })); + } else { + // Nothing to migrate, close the connect modal + onConnected?.(method, wallet, user); + onOpenChange(false); + } } catch (err) { console.error("Error logging in wallet:", err); setError(err); @@ -296,7 +318,9 @@ export const ConnectModal = ({ > - {email ? ( + {isMigrating ? ( + t("connect.migrate.header") + ) : email ? ( t("connect.verify.header") ) : ( @@ -307,7 +331,15 @@ export const ConnectModal = ({
- {email ? ( + {isMigrating ? ( + {}} + onReject={() => {}} + /> + ) : email ? ( => { + ): Promise<{ user: User | undefined; legacyProfiles: LegacyProfile[] }> => { if (isUsingTreasureLauncher) { console.debug( "[TreasureProvider] Skipping login because launcher is being used", ); - return; + return { user: undefined, legacyProfiles: [] }; } - let nextUser: User | undefined; + let user: User | undefined; + let legacyProfiles: LegacyProfile[] = []; // Check for existing stored auth token - let nextAuthToken = getStoredAuthToken(); - if (nextAuthToken) { + let authToken = getStoredAuthToken(); + if (authToken) { // Validate if it's expired before attempting to use it try { - const { exp: authTokenExpirationDate } = decodeAuthToken(nextAuthToken); + const { exp: authTokenExpirationDate } = decodeAuthToken(authToken); if (authTokenExpirationDate > Date.now() / 1000) { setIsAuthenticating(true); - nextUser = await tdk.user.me({ overrideAuthToken: nextAuthToken }); + user = await tdk.user.me({ overrideAuthToken: authToken }); } } catch (err) { console.debug( @@ -237,15 +239,19 @@ const TreasureProviderInner = ({ } } - if (!nextUser) { + if (!user) { setIsAuthenticating(true); - const { token, user } = await authenticateWallet({ wallet, tdk }); - nextAuthToken = token; - nextUser = user; + const result = await authenticateWallet({ + wallet, + tdk, + }); + authToken = result.token; + user = result.user; + legacyProfiles = result.legacyProfiles; } // Set auth token and wallet on TDK so they can be used in future requests - tdk.setAuthToken(nextAuthToken as string); + tdk.setAuthToken(authToken as string); tdk.setActiveWallet(wallet); // Start user session if configured @@ -256,14 +262,14 @@ const TreasureProviderInner = ({ wallet, chainId: chainId ?? chain.id, tdk, - sessions: nextUser.sessions, + sessions: user.sessions, options: sessionOptions, }); } // Update user state - setUser(nextUser); - setStoredAuthToken(nextAuthToken as string); + setUser(user); + setStoredAuthToken(authToken as string); trackCustomEvent({ name: EVT_TREASURECONNECT_CONNECTED, @@ -273,10 +279,10 @@ const TreasureProviderInner = ({ }); // Trigger completion callback - onConnect?.(nextUser); + onConnect?.(user); setIsAuthenticating(false); - return nextUser; + return { user, legacyProfiles }; }; // Attempt an automatic background connection diff --git a/packages/react/src/translations/en.ts b/packages/react/src/translations/en.ts index 9b6c3d64..131cb23a 100644 --- a/packages/react/src/translations/en.ts +++ b/packages/react/src/translations/en.ts @@ -30,6 +30,14 @@ export const en = { countdown: "Resend available in {{resendAvailableInSec}}s...", }, }, + migrate: { + header: "Migrate existing accounts", + description: + "It looks like you have several existing Treasure profiles. Please choose one you would like to use moving forward as your identity across the Treasure ecosystem.", + approve: "Use this account", + reject: "Start fresh", + disclaimer: "NOTE: This is irreversible, so please choose carefully.", + }, }, }, }; diff --git a/packages/react/src/types.ts b/packages/react/src/types.ts index 81306c20..21af456e 100644 --- a/packages/react/src/types.ts +++ b/packages/react/src/types.ts @@ -4,6 +4,7 @@ import type { Contract, Device, EcosystemIdString, + LegacyProfile, PropertyValue, SessionOptions, TDKAPI, @@ -61,7 +62,10 @@ export type ContextValues = { ecosystemPartnerId: string; isConnecting: boolean; isUsingTreasureLauncher: boolean; - logIn: (wallet: Wallet, chainId?: number) => Promise; + logIn: ( + wallet: Wallet, + chainId?: number, + ) => Promise<{ user: User | undefined; legacyProfiles: LegacyProfile[] }>; logOut: () => void; startUserSession: (options: SessionOptions) => void; switchChain: (chainId: number) => void; From 08e91fde1f51b4a9c53124d196ba3b112af179db Mon Sep 17 00:00:00 2001 From: Antlion12 Date: Thu, 14 Nov 2024 18:56:37 -0800 Subject: [PATCH 04/20] Add call to treasure-infra's /admin/transfer-rewards endpoint for transferring gems/quests/badges/rewards from the legacy address to the current account. --- apps/api/src/routes/users.ts | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/apps/api/src/routes/users.ts b/apps/api/src/routes/users.ts index 155e497e..439d4c6d 100644 --- a/apps/api/src/routes/users.ts +++ b/apps/api/src/routes/users.ts @@ -49,7 +49,7 @@ import { import { transformUserProfileResponseFields } from "../utils/user"; export const usersRoutes = - ({ db, client }: TdkApiContext): FastifyPluginAsync => + ({ db, env, client }: TdkApiContext): FastifyPluginAsync => async (app) => { app.get<{ Reply: ReadCurrentUserReply; @@ -434,6 +434,29 @@ export const usersRoutes = }); } + // Transfer rewards from legacy profile to new profile. + if ( + canMigrate && + legacyProfile.legacyAddress !== user.externalWalletAddress + ) { + const response = await fetch( + `${env.TROVE_API_URL}/admin/transfer-rewards`, + { + method: "POST", + headers: { "X-API-Key": env.TROVE_API_KEY }, + body: JSON.stringify({ + oldAddress: legacyProfile.legacyAddress, + newAddress: user.externalWalletAddress, + }), + }, + ); + if (!response.ok) { + console.warning( + `Failed to transfer rewards from ${legacyProfile.legacyAddress} to ${user.externalWalletAddress}.`, + ); + } + } + reply.send({ ...updatedProfile, ...transformUserProfileResponseFields(updatedProfile), From b8a6b4c789af20e5e15767d69c70ff56f32b724f Mon Sep 17 00:00:00 2001 From: Antlion12 Date: Thu, 14 Nov 2024 19:22:24 -0800 Subject: [PATCH 05/20] Parse a { status: 'ok' } response from treasure-infra for the /admin/transfer-rewards endpoint. --- apps/api/src/routes/.users.ts.swp | Bin 0 -> 36864 bytes apps/api/src/routes/users.ts | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 apps/api/src/routes/.users.ts.swp diff --git a/apps/api/src/routes/.users.ts.swp b/apps/api/src/routes/.users.ts.swp new file mode 100644 index 0000000000000000000000000000000000000000..d0187a653fd0627debd3ad10bc8d692de25454a1 GIT binary patch literal 36864 zcmeI53vgsrnSdKbo&vKXKCpy40cSFpbiy#8WEh4_CV|MzB;+xQ!_;uo_aF()! zdxn@92V6nK6@iuVg$ly1TRyPFEhyAQ#r3he_(EN^%Gbi`%A&5gAS-I^_uq3L=RUgA z8DMLz?XLRL$-U>Cd+vGvk8?8ByM1`8ady5p$7e+@chS9P%{=JrJN(d(2CJyVKpTJSKO>+S9$ReoDtm z?Gk90K)VFmCD1N`b_ujg;Lo-M-0I=E1LXc${u}J^zYj@#ALjqP=zs4`+&|p^yXt>G znz(<2|Myhz?LQ!R&Y}MGARqsjxc?mg{yzWvONsl>_OGw=zx(}!g7p2%?XPwTv`e5} z0__rLmq5D&+9l8~fp!VBOQ2l>?Gk90!2in!4#0Le1D+56 zada;CRk$0jfdeoOXTl2j{ZYBxcj4pk9=H(>KnX5|A?SkR;p<1{a$kc_Kpm!F0#1iD z@B%m%{(xfQhwuSdfC8KaE8yAi1d5Gc!#CkZn1gen3p!vWdZdf`~e!GEFT_$~YhZiG7Y!-;SN91cIF z9{&M847b89Fb$(1b^Kgt_%Xr{ZW*=89^0BQYcsa%^cjxrIQW9(6F2hnX0@}^^+K&N zHk_LaQ!w)RydSA6yjrM~9XCkJF*X?D>M^d8c2rt^97)XRMB5Z3xIg^OFlx42ua(zp zSKQfJW$z@3ZL7FLm3rA4tko*D&NWe(;m{C6vaOC>5JMG*9?#ei z-ZZ>tHciOSm!2Oo&)eJ6#j|YbrlVs4etQs{#dK6l}`Xe5q zFl!deiA$xTU3T?rG@nVWlBrTjTz!&{+^72)L$sjE~P6i_gSN3BSXVm2Ae;`Z_CS1eSB;G*hGsj zGH=%0#_vIg_bR1H@duR`FM?Dp7cJH5hOKz*?VYu2cKj8ssl2q$JPqEOEEjjzZLNi= zX1_xMs6Nt_(T{gB44He)qHB!SD)U9h&YPu@v<$jx=Z>hiv@!sd&AK~VsTE&m`vZ{t z?F~g*R|`j?VJjSq{Qf0Fku*Q~sLU@Ks+V~gr#xc4(Fl___VX4sd-wXB7uPVIg>u2@ z^=DbOQ>YcI(sTQaj`MBTAfi0d zD-^@;0)}O~X0haS=uw^eJdKw}c+sRmXty2jt)g}n6jO)tMC_Tj{lNRr?expnd%-?q zEaSCR6);cc8T!tVwEW88QdkR}i-tATW!U9CT}HthGmZUy#)LK3Uo8$)%C3F6yQa?= zG93o1h0#)drdaOxs+1|#zPwtg@$TMSDzD;}ojlsz8kfX76rGb5r=T{x9xA)ixI64MDFcx$ng5NVQ(CWa?GRbnV9dFm-=xai-?Y zgozHD3b?6aX`NqsyR@qbX=G+WI;4|GAuGs5b-T9UxHYESXdnp!j@GA2#X{IpV}p%^ z(cUUpFlIb5BUHnuYGD&8H5l`}%9+e8W3LNH-KB2Fi@1ewQq+xu#qN$Zs)sOsRtT*? znuZ%SYv#O@3X-m<=0P%&(Mmp6m$8I00yWCH7SyXrZ4mMMl?-z8MawGLd(E2Ndi~c`m)esn_i8z?;5Mso7CXeMD7=T!0TZP zY=B;P39NwQ;G4+*?}OLDE*Js>j)Vu1{l5)ggipdfa66P>6pn}c$^YBoDsW*IcEM{v z-faxppLPkfOQ2l>?Gk90K)VFmCD1N`XQTwsBPkt7sPod4O#8!&1|PTLnk8BF2cP|G z5?W|a$=;{b8A{SrdiRZaw=(XDlAUXejT?=QUQMARsZFsDb#9_KZ=-{suf|h|-y@~r z@sS`gJvV+T+v@XEb}b_bbwkTZJTeMVPYt8;t=~fth6Mp#uy)_Ke`r?%8%R(%HBrG~ zR4H4!VWhbhUn_c*O#IzZh>2D$QFfJ@W!E;LEfeik^l|2j6l7=BoUx5=C#c6#nOzKFnryw zYGJW*jugHmdaCy1n6_6nVfFHECBy!aDA`22#ZaMX%k#c5g{HElve&K+n2z0HQy$_eGbr(f*!d@2d(~`GD*~le%HT{8d%?RpG&sv|ajrTSCdU0eojg4rEb6#rv zh_s@5L@_mLB^8G5=`n_Ew=nDFZndN8%rKRyCa{3nj)BU)Tv6&$RYXS75qwE@CRi3 zFTlIuM%V*oxCGXL_yhbiyanoT9*93cC!7q2z*ms(?|>_z0ybE12CM|}4fs#w`-k8` z_&WR@Tn`t*YIqSmf}Z2UPy+D-=ztf3_yHUahrtur{O^a`;byo7u7EO}4@bje*!=H< zo8fKnMp%TMuonIuoBw_AQFsSj0~f&nyciCJUt#zE27C^#g?&(k3S0!;@Dlh7SOHIB z|Nk+(A1Y9Q*TOiA!DcuSeufXgy>J)Y1aE~!xB&h{<$ed=0awBZY=T!n9#(*A%1?{= zC^QT$p(+k~PquZ)>q|;$tjtWw)HJ1Fq*V^mdJrluvLEMiyF227>hXm_6pE4ee3`42G(lmT74Zf@`B>3qzhCy5T67e!E6PRxIQ)$E&vO8 ztA57DQMsi2{o)cvd~iv)2_B69ppof87`}KQ8mVGvA}R-K8mYgaiO5U%B3VQKHsyDd zlc4IOY-Z7WssX^S2azz87g54sr;F;X%qdA1iq6o-N6UTaLgY((OZW}>p}L-7f1z-} zr`cm;_T5&;pVXQ!BSCGgl1}z1Ec*(YOA#YprQGc`grL6#t1s0gGS+%QdsxP3H;+MD zHRB-l%uz3+5SlOVG9qZDc983~Z2w8+Fk-P9N;y|X9frOeTi((2JZB0kKJn@iT3hw` z$uwB@#qUO`FTL*5`>SDS{ZG~Yr9=3c*%n$%wZfmqxws|{1~^xFu2rWlmh2g`un??B z)L(vY+%NG?U6h$MkGq#$E1RWP<9cYjL4f?FQD)_dGT>B7cAh7c@u3NP(Nt!F<%sWc zEONdYkAf*af0mJeG8;Sk@G(`Wk$bKUK2m9-PjC?P$|0wjsnecKr4Nib3knQh= zt6>;6z&hxLE;tE(j(q=V_r8X+0YBJ7oZbPgkK}ue-ZA5 z4}t6nxE_ko4KIX;knit>kHg=>d*J{~z)|oJvi;ZL9{3PAV8eP?1uNiDenXG92pXEQAnk|y4X@lO=I#u|K z;HiJx zf?MHQaG?*x_Wvhj`cJ{FP=S|&$oWUZv*1Z&`rnIO4{`>;?Qk=^8Los1Y=z_CXUOy7 z=P$Cq3)`R{&Vp_@4#eIse*d??b?`>`OK@NUMD{-k{)lWZw*Mc(SK(uD6TA*AD8O0p zbL9J(m7c-AJ5$s6qUj7boMy$4d8lM>enKq#1-u++_{BQ9BsT}aQ7ym8EM-O@%* zi4}dcf(kBXNvN6rZ=SECgw9f?XWQMEe1+Cs2x9a4!RI}u(LcycH{5(1WJ|s?O4^yN z>^Cj=sU8;m3_@(1c89Hu`|Q{+a-adrRyNs>&erff zRil8_pOLMM(8;{ZV3+g_j+(OX>6xq<-<>m1y{KV2=Hi<=gdyc@u|vhO{6xAE_M|R3 ztRQ87!jB^|0b{#nmu_X+$aqad)9)7~>? z1DBW1SmelMZEaIu#?mIR%t!53I<3CryUW0h+_dlnH*iigCKzDGy>m(!pJprdk|o2E zoRCtO&8ZHrezNfN4ok`7Y9F1ev!i$C#$dYuUi+~aYZ~4$5bm^8Ja-uVLf-ck_l~0S ze$N*ZhwEf#$D6x#OEWJ@NJsY&YHbZy^-tT<3sRgi)#b$1AT!bBn6*AA#=z(uBqA6YE`<>|57xrt$o<~{ z(F@!RZ-oQkKn*U0)o=ocp5Q2W82SGfa6Q=23&+6Mkoi9gSHK9o2#$tBAP3^}FXsZj z0d_z)tb|`8+us7)VHNxaS^gpT0em0C-oFn--tUD!AO0uQqdWdI zk_WQHn9LQvVJNYClHTpF1&28@tXwa}HWT_e$Xu;1C*8OcPjcK;PhkoeDA{Js&spH} z>L~_TrW#6y=b#+fIVAG|dl%&h5+)6EhGX<{DjEH!j9pn0L57RAM9VDcx+m_ZcGF3C zavZ28lz1NOdvbDeJNS@nVvk&K2gxRRY+8E7zJn9XvYfnjb{WyFEJ=4~Y~3Cg*^>f$ zs-d>nJhB9t*3w$4Nj%NXA*(55Gy}g0WEE$=K}*nD0j)9=o|vQ5(TKUIw%esnSu`&7 zxXNSc;%?OGvN}~*3%ZCDx4IYxTb&)Y=CY-Cs8XBaup_&yt+=HgmHvOAVi9Ov?-|kJ zN^Tas%ZcOI)QOHmBV(I}H*X%?7LQRj=Se7v;hpK0mq9r^@J$kyk9RzrCr$^)!No*> zTA@Vq^=>jImJzp0#qu1#`-?lSSw;cH3xlVx5zTpN^TSh8bI%{pVmod0B8x5mf?33$ zLGr3k4~n*=v1@zu5F9K$@z(d&w4HphTqxC19P7(vyx7%_(augiw6{R#pC&V9l;bzn za9ki2C5NOXPoeb>$ZfjLFP4igr;U1Vk=O&gCM>SNGOg!`U9Rdl-ncjt#?h7kO-gRN zU1JcjQ7wfrn}jx2t6Q`;9&0M`JBfVi6>RW{34ngXhh-L0mab?VtYsJp);??uH%pGqac)v%^3ey3 zMrtSqD`weNPMVIrZ){*%=9)$}adVz)UerA);l1&+6pU_}zHZ^FF)LI!*M%D0gr#K3 z1wm>p)nL_~)i$%YEK2?8LtLX!fdOYRCo!Ur-kwuOF=t0gy+pK|K0X~bt^-ftX?8j> z{)N68#2>Nz`d|&5xya51Z`4X#ZK^UA`CmlE56C~tL;j!gg+@91?-OtvTm{=f_WvIS zk095-3q;o63TMI*@EEfDgK!7j1dA{WtKj)?C_IiF{}?;~AAl-|jBmjT_;2KRk@0Va zt3dYpPr$iwB;1EQ|6T~>`+r5Aza8X!|Ml=Y4g zKD-P53S8)cQ{YJoUF`CA!rS3uSO-s151)sRgI6bERZEqp+G4T`N+66D{(!3Xwq@@w ziML&eS1DOxyx6GauZ;Yg$%rx@^%<`kAK8{y%N9;7jxFva?O9GL<)C7$Mn=bLy8B0m zyDzjCI{M@Q~qs{G)T1c(5I*DHH}|Fo*_v@w(OG6Nr9-3 zHV-vf@OV2TQk#oZ6$Jx_Y$g(Gl|PQ;v!}D9$PkQp-ahjd?5(Nxr!wKKHlvkawkAdk z+AKiW1hcd`vMP8QwJfn#?k@;fxstum?w4%sS(125Y6O`zV$W-34);|j{%jC7Okd9T zFZ-gs*5~#cHcJ}3yMlIx+D<89qLkEyG4CL%^;*FAs)QjYp+?RagqV_-e7Q`?Iko(- z_~#B-TlI`*-WSP@%HG~6e%czZ+EnsYJtaT` z_mCytxLMTni?{IL7^F*q%WXTV{c)mbR3ojqVWERhEs#>*x*bZPHw$_N_WbdVQ8?p3Qwf F{|BvL++zR$ literal 0 HcmV?d00001 diff --git a/apps/api/src/routes/users.ts b/apps/api/src/routes/users.ts index 439d4c6d..cc51fd93 100644 --- a/apps/api/src/routes/users.ts +++ b/apps/api/src/routes/users.ts @@ -450,7 +450,8 @@ export const usersRoutes = }), }, ); - if (!response.ok) { + const { status } = await response.json(); + if (status !== 'ok') { console.warning( `Failed to transfer rewards from ${legacyProfile.legacyAddress} to ${user.externalWalletAddress}.`, ); From 5b2e8cb65c000c585e568e683134fe6c069bf726 Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Fri, 15 Nov 2024 11:15:26 -0800 Subject: [PATCH 06/20] fix types; temp comment out code --- apps/api/src/routes/.users.ts.swp | Bin 36864 -> 0 bytes apps/api/src/routes/users.ts | 47 +++++++++++++++--------------- 2 files changed, 24 insertions(+), 23 deletions(-) delete mode 100644 apps/api/src/routes/.users.ts.swp diff --git a/apps/api/src/routes/.users.ts.swp b/apps/api/src/routes/.users.ts.swp deleted file mode 100644 index d0187a653fd0627debd3ad10bc8d692de25454a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36864 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 F{|BvL++zR$ diff --git a/apps/api/src/routes/users.ts b/apps/api/src/routes/users.ts index cc51fd93..16ac93d2 100644 --- a/apps/api/src/routes/users.ts +++ b/apps/api/src/routes/users.ts @@ -49,7 +49,7 @@ import { import { transformUserProfileResponseFields } from "../utils/user"; export const usersRoutes = - ({ db, env, client }: TdkApiContext): FastifyPluginAsync => + ({ db, client }: TdkApiContext): FastifyPluginAsync => async (app) => { app.get<{ Reply: ReadCurrentUserReply; @@ -249,6 +249,7 @@ export const usersRoutes = id: userId, }, select: { + externalWalletAddress: true, smartAccounts: { select: { initialEmail: true, @@ -435,28 +436,28 @@ export const usersRoutes = } // Transfer rewards from legacy profile to new profile. - if ( - canMigrate && - legacyProfile.legacyAddress !== user.externalWalletAddress - ) { - const response = await fetch( - `${env.TROVE_API_URL}/admin/transfer-rewards`, - { - method: "POST", - headers: { "X-API-Key": env.TROVE_API_KEY }, - body: JSON.stringify({ - oldAddress: legacyProfile.legacyAddress, - newAddress: user.externalWalletAddress, - }), - }, - ); - const { status } = await response.json(); - if (status !== 'ok') { - console.warning( - `Failed to transfer rewards from ${legacyProfile.legacyAddress} to ${user.externalWalletAddress}.`, - ); - } - } + // if ( + // canMigrate && + // legacyProfile.legacyAddress !== user.externalWalletAddress + // ) { + // const response = await fetch( + // `${env.TROVE_API_URL}/admin/transfer-rewards`, + // { + // method: "POST", + // headers: { "X-API-Key": env.TROVE_API_KEY }, + // body: JSON.stringify({ + // oldAddress: legacyProfile.legacyAddress, + // newAddress: user.externalWalletAddress, + // }), + // }, + // ); + // const { status } = await response.json(); + // if (status !== "ok") { + // log.warn( + // `Failed to transfer rewards from ${legacyProfile.legacyAddress} to ${user.externalWalletAddress}.`, + // ); + // } + // } reply.send({ ...updatedProfile, From 2ebd134ecf1a1c6e162607018c001284a51c9a52 Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Fri, 15 Nov 2024 12:32:02 -0800 Subject: [PATCH 07/20] auto-migrate users with single legacy profile --- apps/api/src/routes/auth.ts | 40 ++++---- apps/api/src/routes/users.ts | 169 ++++------------------------------ apps/api/src/utils/db.ts | 1 + apps/api/src/utils/user.ts | 171 ++++++++++++++++++++++++++++++++++- 4 files changed, 209 insertions(+), 172 deletions(-) diff --git a/apps/api/src/routes/auth.ts b/apps/api/src/routes/auth.ts index 90fd16fa..18da9a21 100644 --- a/apps/api/src/routes/auth.ts +++ b/apps/api/src/routes/auth.ts @@ -28,7 +28,6 @@ import type { TdkApiContext } from "../types"; import { USER_NOTIFICATION_SETTINGS_SELECT_FIELDS, USER_PROFILE_SELECT_FIELDS, - USER_PUBLIC_PROFILE_SELECT_FIELDS, USER_SELECT_FIELDS, USER_SMART_ACCOUNT_SELECT_FIELDS, USER_SOCIAL_ACCOUNT_SELECT_FIELDS, @@ -37,6 +36,7 @@ import { throwUnauthorizedError, throwUserNotFoundError } from "../utils/error"; import { log } from "../utils/log"; import { getThirdwebUser, + migrateLegacyUser, parseThirdwebUserEmail, transformUserProfileResponseFields, } from "../utils/user"; @@ -173,7 +173,7 @@ export const authRoutes = }); } - const [user, profile, legacyUserProfiles] = await Promise.all([ + const [user, profile, legacyProfiles] = await Promise.all([ // Fetch user db.user.findUnique({ where: { id: userSmartAccount.userId }, @@ -207,22 +207,12 @@ export const authRoutes = legacyEmail: userSmartAccount.initialEmail, legacyEmailVerifiedAt: { not: null }, }, - select: { - ...USER_PUBLIC_PROFILE_SELECT_FIELDS, - id: true, - legacyAddress: true, - }, }) : userSmartAccount.initialWalletAddress - ? db.userProfile.findUnique({ + ? db.userProfile.findMany({ where: { legacyAddress: userSmartAccount.initialWalletAddress, }, - select: { - ...USER_PUBLIC_PROFILE_SELECT_FIELDS, - id: true, - legacyAddress: true, - }, }) : [], ]); @@ -273,20 +263,30 @@ export const authRoutes = endTimestamp: session.endTimestamp.toString(), })); + let updatedProfile: typeof profile | undefined; + + // Automatically migrate legacy profile if only one exists + if (legacyProfiles.length === 1 && !!legacyProfiles[0]) { + const result = await migrateLegacyUser({ + db, + userId: user.id, + userProfileId: profile.id, + legacyProfile: legacyProfiles[0], + }); + updatedProfile = result.updatedProfile; + } + + const finalProfile = updatedProfile ?? profile; reply.send({ token: authTokenResult.value, user: { ...user, - ...profile, - ...transformUserProfileResponseFields(profile), + ...finalProfile, + ...transformUserProfileResponseFields(finalProfile), address, sessions, }, - legacyProfiles: legacyUserProfiles - ? Array.isArray(legacyUserProfiles) - ? legacyUserProfiles - : [legacyUserProfiles] - : [], + legacyProfiles: legacyProfiles.length > 1 ? legacyProfiles : [], }); }, ); diff --git a/apps/api/src/routes/users.ts b/apps/api/src/routes/users.ts index 16ac93d2..ed810b46 100644 --- a/apps/api/src/routes/users.ts +++ b/apps/api/src/routes/users.ts @@ -46,7 +46,10 @@ import { throwUnauthorizedError, throwUserNotFoundError, } from "../utils/error"; -import { transformUserProfileResponseFields } from "../utils/user"; +import { + migrateLegacyUser, + transformUserProfileResponseFields, +} from "../utils/user"; export const usersRoutes = ({ db, client }: TdkApiContext): FastifyPluginAsync => @@ -258,7 +261,10 @@ export const usersRoutes = }, }, }), - db.userProfile.findUnique({ where: { userId } }), + db.userProfile.findUnique({ + where: { userId }, + select: { id: true }, + }), db.userProfile.findUnique({ where: { id: req.body.id, @@ -309,155 +315,16 @@ export const usersRoutes = }); } - await Promise.all([ - // Migrate social accounts - db.userSocialAccount.updateMany({ - where: { - userId, - // Clear legacy profile data so migration is not triggered again - legacyUserProfileId: legacyProfile.id, - }, - data: { - legacyUserProfileId: null, - }, - }), - // Migrate notification settings - db.userNotificationSettings.updateMany({ - where: { - userId, - // Clear legacy profile data so migration is not triggered again - legacyUserProfileId: legacyProfile.id, - }, - data: { - legacyUserProfileId: null, - }, - }), - ]); - - const [[, updatedSocialAccounts], [, updatedNotificationSettings]] = - await Promise.all([ - db.$transaction([ - // Migrate social accounts - db.userSocialAccount.updateMany({ - where: { - userId, - // Clear legacy profile data so migration is not triggered again - legacyUserProfileId: legacyProfile.id, - }, - data: { - legacyUserProfileId: null, - }, - }), - db.userSocialAccount.findMany({ - where: { - userId, - }, - select: USER_SOCIAL_ACCOUNT_SELECT_FIELDS, - }), - ]), - db.$transaction([ - // Migrate notification settings - db.userNotificationSettings.updateMany({ - where: { - userId, - // Clear legacy profile data so migration is not triggered again - legacyUserProfileId: legacyProfile.id, - }, - data: { - legacyUserProfileId: null, - }, - }), - db.userNotificationSettings.findMany({ - where: { - userId, - }, - select: USER_NOTIFICATION_SETTINGS_SELECT_FIELDS, - }), - ]), - ]); - - let updatedProfile: Pick< - Prisma.$UserProfilePayload["scalars"], - keyof typeof USER_PROFILE_SELECT_FIELDS - >; - - // Merge data if user has existing profile or connect legacy profile if not - if (profile) { - const [updateResult] = await db.$transaction([ - db.userProfile.update({ - where: { - id: profile.id, - }, - data: { - tag: legacyProfile.tag ?? undefined, - discriminant: legacyProfile.discriminant ?? undefined, - emailSecurityPhrase: - legacyProfile.emailSecurityPhrase ?? undefined, - emailSecurityPhraseUpdatedAt: - legacyProfile.emailSecurityPhraseUpdatedAt ?? undefined, - featuredNftIds: legacyProfile.featuredNftIds, - featuredBadgeIds: legacyProfile.featuredBadgeIds, - highlyFeaturedBadgeId: - legacyProfile.highlyFeaturedBadgeId ?? undefined, - about: legacyProfile.about ?? undefined, - pfp: legacyProfile.pfp ?? undefined, - banner: legacyProfile.banner ?? undefined, - showMagicBalance: legacyProfile.showMagicBalance, - showEthBalance: legacyProfile.showEthBalance, - showGemsBalance: legacyProfile.showGemsBalance, - testnetFaucetLastUsedAt: - legacyProfile.testnetFaucetLastUsedAt ?? undefined, - legacyProfileMigratedAt: new Date(), - }, - select: USER_PROFILE_SELECT_FIELDS, - }), - db.userProfile.delete({ - where: { - id: legacyProfile.id, - }, - }), - ]); - updatedProfile = updateResult; - } else { - updatedProfile = await db.userProfile.update({ - where: { - id: legacyProfile.id, - }, - data: { - userId, - legacyProfileMigratedAt: new Date(), - // Clear legacy profile data so migration is not triggered again - legacyAddress: null, - legacyEmail: null, - legacyEmailVerifiedAt: null, - }, - select: USER_PROFILE_SELECT_FIELDS, - }); - } - - // Transfer rewards from legacy profile to new profile. - // if ( - // canMigrate && - // legacyProfile.legacyAddress !== user.externalWalletAddress - // ) { - // const response = await fetch( - // `${env.TROVE_API_URL}/admin/transfer-rewards`, - // { - // method: "POST", - // headers: { "X-API-Key": env.TROVE_API_KEY }, - // body: JSON.stringify({ - // oldAddress: legacyProfile.legacyAddress, - // newAddress: user.externalWalletAddress, - // }), - // }, - // ); - // const { status } = await response.json(); - // if (status !== "ok") { - // log.warn( - // `Failed to transfer rewards from ${legacyProfile.legacyAddress} to ${user.externalWalletAddress}.`, - // ); - // } - // } + const { + updatedProfile, + updatedSocialAccounts, + updatedNotificationSettings, + } = await migrateLegacyUser({ + db, + userId, + userProfileId: profile?.id ?? undefined, + legacyProfile, + }); reply.send({ ...updatedProfile, diff --git a/apps/api/src/utils/db.ts b/apps/api/src/utils/db.ts index 7fe3201a..ee8d08ad 100644 --- a/apps/api/src/utils/db.ts +++ b/apps/api/src/utils/db.ts @@ -18,6 +18,7 @@ export const USER_PUBLIC_PROFILE_SELECT_FIELDS = { export const USER_PROFILE_SELECT_FIELDS = { ...USER_PUBLIC_PROFILE_SELECT_FIELDS, + id: true, email: true, emailSecurityPhrase: true, emailSecurityPhraseUpdatedAt: true, diff --git a/apps/api/src/utils/user.ts b/apps/api/src/utils/user.ts index 5ae4115e..75e3ca6c 100644 --- a/apps/api/src/utils/user.ts +++ b/apps/api/src/utils/user.ts @@ -1,4 +1,4 @@ -import type { UserProfile } from "@prisma/client"; +import type { PrismaClient, UserProfile } from "@prisma/client"; import { DEFAULT_TDK_ECOSYSTEM_ID, type EcosystemIdString, @@ -6,6 +6,11 @@ import { import { type GetUserResult, type ThirdwebClient, getUser } from "thirdweb"; import { checksumAddress } from "thirdweb/utils"; +import { + USER_NOTIFICATION_SETTINGS_SELECT_FIELDS, + USER_PROFILE_SELECT_FIELDS, + USER_SOCIAL_ACCOUNT_SELECT_FIELDS, +} from "./db"; import { log } from "./log"; export const transformUserProfileResponseFields = ( @@ -83,3 +88,167 @@ export const parseThirdwebUserEmail = (user: GetUserResult) => { return undefined; }; + +export const migrateLegacyUser = async ({ + db, + userId, + userProfileId, + legacyProfile, +}: { + db: PrismaClient; + userId: string; + userProfileId?: string; + legacyProfile: UserProfile; +}) => { + await Promise.all([ + // Migrate social accounts + db.userSocialAccount.updateMany({ + where: { + userId, + // Clear legacy profile data so migration is not triggered again + legacyUserProfileId: legacyProfile.id, + }, + data: { + legacyUserProfileId: null, + }, + }), + // Migrate notification settings + db.userNotificationSettings.updateMany({ + where: { + userId, + // Clear legacy profile data so migration is not triggered again + legacyUserProfileId: legacyProfile.id, + }, + data: { + legacyUserProfileId: null, + }, + }), + ]); + + const [[, updatedSocialAccounts], [, updatedNotificationSettings]] = + await Promise.all([ + db.$transaction([ + // Migrate social accounts + db.userSocialAccount.updateMany({ + where: { + userId, + // Clear legacy profile data so migration is not triggered again + legacyUserProfileId: legacyProfile.id, + }, + data: { + legacyUserProfileId: null, + }, + }), + db.userSocialAccount.findMany({ + where: { + userId, + }, + select: USER_SOCIAL_ACCOUNT_SELECT_FIELDS, + }), + ]), + db.$transaction([ + // Migrate notification settings + db.userNotificationSettings.updateMany({ + where: { + userId, + // Clear legacy profile data so migration is not triggered again + legacyUserProfileId: legacyProfile.id, + }, + data: { + legacyUserProfileId: null, + }, + }), + db.userNotificationSettings.findMany({ + where: { + userId, + }, + select: USER_NOTIFICATION_SETTINGS_SELECT_FIELDS, + }), + ]), + ]); + + let updatedProfile: Pick< + UserProfile, + keyof typeof USER_PROFILE_SELECT_FIELDS + >; + + // Merge data if user has existing profile or connect legacy profile if not + if (userProfileId) { + const [updateResult] = await db.$transaction([ + db.userProfile.update({ + where: { + id: userProfileId, + }, + data: { + tag: legacyProfile.tag ?? undefined, + discriminant: legacyProfile.discriminant ?? undefined, + emailSecurityPhrase: legacyProfile.emailSecurityPhrase ?? undefined, + emailSecurityPhraseUpdatedAt: + legacyProfile.emailSecurityPhraseUpdatedAt ?? undefined, + featuredNftIds: legacyProfile.featuredNftIds, + featuredBadgeIds: legacyProfile.featuredBadgeIds, + highlyFeaturedBadgeId: + legacyProfile.highlyFeaturedBadgeId ?? undefined, + about: legacyProfile.about ?? undefined, + pfp: legacyProfile.pfp ?? undefined, + banner: legacyProfile.banner ?? undefined, + showMagicBalance: legacyProfile.showMagicBalance, + showEthBalance: legacyProfile.showEthBalance, + showGemsBalance: legacyProfile.showGemsBalance, + testnetFaucetLastUsedAt: + legacyProfile.testnetFaucetLastUsedAt ?? undefined, + legacyProfileMigratedAt: new Date(), + }, + select: USER_PROFILE_SELECT_FIELDS, + }), + db.userProfile.delete({ + where: { + id: legacyProfile.id, + }, + }), + ]); + updatedProfile = updateResult; + } else { + updatedProfile = await db.userProfile.update({ + where: { + id: legacyProfile.id, + }, + data: { + userId, + legacyProfileMigratedAt: new Date(), + // Clear legacy profile data so migration is not triggered again + legacyAddress: null, + legacyEmail: null, + legacyEmailVerifiedAt: null, + }, + select: USER_PROFILE_SELECT_FIELDS, + }); + } + + // Transfer rewards from legacy profile to new profile. + // if (legacyProfile.legacyAddress !== user.externalWalletAddress) { + // const response = await fetch( + // `${env.TROVE_API_URL}/admin/transfer-rewards`, + // { + // method: "POST", + // headers: { "X-API-Key": env.TROVE_API_KEY }, + // body: JSON.stringify({ + // oldAddress: legacyProfile.legacyAddress, + // newAddress: user.externalWalletAddress, + // }), + // }, + // ); + // const { status } = await response.json(); + // if (status !== "ok") { + // log.warn( + // `Failed to transfer rewards from ${legacyProfile.legacyAddress} to ${user.externalWalletAddress}.`, + // ); + // } + // } + + return { + updatedProfile, + updatedSocialAccounts, + updatedNotificationSettings, + }; +}; From beca05854429e70a711a2ae60df7417736ccf7be Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Fri, 15 Nov 2024 13:26:21 -0800 Subject: [PATCH 08/20] fix notification and social account migration logic --- apps/api/src/utils/user.ts | 49 ++++++++++++++------------------------ 1 file changed, 18 insertions(+), 31 deletions(-) diff --git a/apps/api/src/utils/user.ts b/apps/api/src/utils/user.ts index 75e3ca6c..fb9d1e2e 100644 --- a/apps/api/src/utils/user.ts +++ b/apps/api/src/utils/user.ts @@ -4,8 +4,8 @@ import { type EcosystemIdString, } from "@treasure-dev/tdk-core"; import { type GetUserResult, type ThirdwebClient, getUser } from "thirdweb"; - import { checksumAddress } from "thirdweb/utils"; + import { USER_NOTIFICATION_SETTINGS_SELECT_FIELDS, USER_PROFILE_SELECT_FIELDS, @@ -100,42 +100,23 @@ export const migrateLegacyUser = async ({ userProfileId?: string; legacyProfile: UserProfile; }) => { - await Promise.all([ - // Migrate social accounts - db.userSocialAccount.updateMany({ - where: { - userId, - // Clear legacy profile data so migration is not triggered again - legacyUserProfileId: legacyProfile.id, - }, - data: { - legacyUserProfileId: null, - }, - }), - // Migrate notification settings - db.userNotificationSettings.updateMany({ - where: { - userId, - // Clear legacy profile data so migration is not triggered again - legacyUserProfileId: legacyProfile.id, - }, - data: { - legacyUserProfileId: null, - }, - }), - ]); - - const [[, updatedSocialAccounts], [, updatedNotificationSettings]] = + const [[, , updatedSocialAccounts], [, , updatedNotificationSettings]] = await Promise.all([ db.$transaction([ + // Delete current social accounts + db.userSocialAccount.deleteMany({ + where: { + userId, + }, + }), // Migrate social accounts db.userSocialAccount.updateMany({ where: { - userId, - // Clear legacy profile data so migration is not triggered again legacyUserProfileId: legacyProfile.id, }, data: { + userId, + // Clear legacy profile data so migration is not triggered again legacyUserProfileId: null, }, }), @@ -147,14 +128,20 @@ export const migrateLegacyUser = async ({ }), ]), db.$transaction([ + // Delete current notification settings + db.userNotificationSettings.deleteMany({ + where: { + userId, + }, + }), // Migrate notification settings db.userNotificationSettings.updateMany({ where: { - userId, - // Clear legacy profile data so migration is not triggered again legacyUserProfileId: legacyProfile.id, }, data: { + userId, + // Clear legacy profile data so migration is not triggered again legacyUserProfileId: null, }, }), From aac927f816e86aea0b0f7f799441bce9b33d4b34 Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:12:23 -0800 Subject: [PATCH 09/20] clear legacy profiles if migration is rejected --- apps/api/src/routes/users.ts | 73 +++++++++++---- apps/api/src/schema/users.ts | 1 + apps/api/src/utils/user.ts | 169 ++++++++++++++++++++++++----------- 3 files changed, 170 insertions(+), 73 deletions(-) diff --git a/apps/api/src/routes/users.ts b/apps/api/src/routes/users.ts index ed810b46..630e7f39 100644 --- a/apps/api/src/routes/users.ts +++ b/apps/api/src/routes/users.ts @@ -47,6 +47,7 @@ import { throwUserNotFoundError, } from "../utils/error"; import { + clearLegacyUser, migrateLegacyUser, transformUserProfileResponseFields, } from "../utils/user"; @@ -240,7 +241,11 @@ export const usersRoutes = }, }, async (req, reply) => { - const { userId, authError } = req; + const { + userId, + authError, + body: { id: legacyProfileId, rejected = false }, + } = req; if (!userId) { throwUnauthorizedError(authError); return; @@ -267,7 +272,7 @@ export const usersRoutes = }), db.userProfile.findUnique({ where: { - id: req.body.id, + id: legacyProfileId, }, }), ]); @@ -315,23 +320,53 @@ export const usersRoutes = }); } - const { - updatedProfile, - updatedSocialAccounts, - updatedNotificationSettings, - } = await migrateLegacyUser({ - db, - userId, - userProfileId: profile?.id ?? undefined, - legacyProfile, - }); - - reply.send({ - ...updatedProfile, - ...transformUserProfileResponseFields(updatedProfile), - socialAccounts: updatedSocialAccounts, - notificationSettings: updatedNotificationSettings, - }); + if (rejected) { + await clearLegacyUser({ db, legacyProfile }); + const [profile, socialAccounts, notificationSettings] = + await Promise.all([ + db.userProfile.upsert({ + where: { userId }, + update: {}, + create: { userId, email: legacyProfile.email }, + select: USER_PROFILE_SELECT_FIELDS, + }), + db.userSocialAccount.findMany({ + where: { + userId, + }, + select: USER_SOCIAL_ACCOUNT_SELECT_FIELDS, + }), + db.userNotificationSettings.findMany({ + where: { + userId, + }, + select: USER_NOTIFICATION_SETTINGS_SELECT_FIELDS, + }), + ]); + reply.send({ + ...profile, + ...transformUserProfileResponseFields(profile), + socialAccounts, + notificationSettings, + }); + } else { + const { + updatedProfile, + updatedSocialAccounts, + updatedNotificationSettings, + } = await migrateLegacyUser({ + db, + userId, + userProfileId: profile?.id ?? undefined, + legacyProfile, + }); + reply.send({ + ...updatedProfile, + ...transformUserProfileResponseFields(updatedProfile), + socialAccounts: updatedSocialAccounts, + notificationSettings: updatedNotificationSettings, + }); + } }, ); diff --git a/apps/api/src/schema/users.ts b/apps/api/src/schema/users.ts index b1e22a40..3475ae77 100644 --- a/apps/api/src/schema/users.ts +++ b/apps/api/src/schema/users.ts @@ -148,6 +148,7 @@ export const updateCurrentUserReplySchema = userProfileSchema; const updateCurrentUserMigrationBodySchema = Type.Object({ id: Type.String(), + rejected: Type.Optional(Type.Boolean()), }); export const updateCurrentUserMigrationReplySchema = userProfileSchema; diff --git a/apps/api/src/utils/user.ts b/apps/api/src/utils/user.ts index fb9d1e2e..6707ea36 100644 --- a/apps/api/src/utils/user.ts +++ b/apps/api/src/utils/user.ts @@ -100,60 +100,6 @@ export const migrateLegacyUser = async ({ userProfileId?: string; legacyProfile: UserProfile; }) => { - const [[, , updatedSocialAccounts], [, , updatedNotificationSettings]] = - await Promise.all([ - db.$transaction([ - // Delete current social accounts - db.userSocialAccount.deleteMany({ - where: { - userId, - }, - }), - // Migrate social accounts - db.userSocialAccount.updateMany({ - where: { - legacyUserProfileId: legacyProfile.id, - }, - data: { - userId, - // Clear legacy profile data so migration is not triggered again - legacyUserProfileId: null, - }, - }), - db.userSocialAccount.findMany({ - where: { - userId, - }, - select: USER_SOCIAL_ACCOUNT_SELECT_FIELDS, - }), - ]), - db.$transaction([ - // Delete current notification settings - db.userNotificationSettings.deleteMany({ - where: { - userId, - }, - }), - // Migrate notification settings - db.userNotificationSettings.updateMany({ - where: { - legacyUserProfileId: legacyProfile.id, - }, - data: { - userId, - // Clear legacy profile data so migration is not triggered again - legacyUserProfileId: null, - }, - }), - db.userNotificationSettings.findMany({ - where: { - userId, - }, - select: USER_NOTIFICATION_SETTINGS_SELECT_FIELDS, - }), - ]), - ]); - let updatedProfile: Pick< UserProfile, keyof typeof USER_PROFILE_SELECT_FIELDS @@ -188,6 +134,7 @@ export const migrateLegacyUser = async ({ }, select: USER_PROFILE_SELECT_FIELDS, }), + // Delete the legacy record now that it's merged db.userProfile.delete({ where: { id: legacyProfile.id, @@ -212,6 +159,81 @@ export const migrateLegacyUser = async ({ }); } + const [[, , updatedSocialAccounts], [, , updatedNotificationSettings]] = + await Promise.all([ + // Migrate social accounts + db.$transaction([ + // Delete current social accounts + db.userSocialAccount.deleteMany({ + where: { + userId, + }, + }), + // Connect social accounts to user + db.userSocialAccount.updateMany({ + where: { + legacyUserProfileId: legacyProfile.id, + }, + data: { + userId, + // Clear legacy profile data so migration is not triggered again + legacyUserProfileId: null, + }, + }), + // Select migrated social accounts + db.userSocialAccount.findMany({ + where: { + userId, + }, + select: USER_SOCIAL_ACCOUNT_SELECT_FIELDS, + }), + ]), + // Migrate notification settings + db.$transaction([ + // Delete current notification settings + db.userNotificationSettings.deleteMany({ + where: { + userId, + }, + }), + // Connect notification settings to user + db.userNotificationSettings.updateMany({ + where: { + legacyUserProfileId: legacyProfile.id, + }, + data: { + userId, + // Clear legacy profile data so migration is not triggered again + legacyUserProfileId: null, + }, + }), + // Select migrated notification settings + db.userNotificationSettings.findMany({ + where: { + userId, + }, + select: USER_NOTIFICATION_SETTINGS_SELECT_FIELDS, + }), + ]), + // Delete any other legacy records that weren't migrated + db.$transaction([ + db.userProfile.deleteMany({ + where: { + legacyAddress: legacyProfile.legacyAddress, + }, + }), + ...(legacyProfile.email + ? [] + : [ + db.userProfile.deleteMany({ + where: { + legacyEmail: legacyProfile.legacyEmail, + }, + }), + ]), + ]), + ]); + // Transfer rewards from legacy profile to new profile. // if (legacyProfile.legacyAddress !== user.externalWalletAddress) { // const response = await fetch( @@ -239,3 +261,42 @@ export const migrateLegacyUser = async ({ updatedNotificationSettings, }; }; + +export const clearLegacyUser = async ({ + db, + legacyProfile, +}: { + db: PrismaClient; + legacyProfile: UserProfile; +}) => + Promise.all([ + // Delete social accounts associated with this legacy profile + db.userSocialAccount.deleteMany({ + where: { + legacyUserProfileId: legacyProfile.id, + }, + }), + // Delete notification settings associated with this legacy profile + db.userNotificationSettings.deleteMany({ + where: { + legacyUserProfileId: legacyProfile.id, + }, + }), + // Delete all legacy records + db.$transaction([ + db.userProfile.deleteMany({ + where: { + legacyAddress: legacyProfile.legacyAddress, + }, + }), + ...(legacyProfile.email + ? [] + : [ + db.userProfile.deleteMany({ + where: { + legacyEmail: legacyProfile.legacyEmail, + }, + }), + ]), + ]), + ]); From f5ff1cd29a53f42c29365c3762bddc3f0b21a2a8 Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Mon, 18 Nov 2024 14:08:39 -0800 Subject: [PATCH 10/20] upgrade dependencies --- pnpm-lock.yaml | 1294 ++++++++++++++++++++++--------------------- pnpm-workspace.yaml | 22 +- 2 files changed, 678 insertions(+), 638 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80e2f1e0..6ed23784 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,11 +7,11 @@ settings: catalogs: default: '@aws-sdk/client-kms': - specifier: ^3.687.0 - version: 3.687.0 + specifier: ^3.693.0 + version: 3.693.0 '@aws-sdk/client-secrets-manager': - specifier: ^3.687.0 - version: 3.687.0 + specifier: ^3.693.0 + version: 3.693.0 '@biomejs/biome': specifier: ^1.9.4 version: 1.9.4 @@ -37,8 +37,8 @@ catalogs: specifier: ^10.0.0 version: 10.0.1 '@fastify/swagger': - specifier: ^9.2.0 - version: 9.2.0 + specifier: ^9.3.0 + version: 9.3.0 '@fastify/swagger-ui': specifier: ^5.1.0 version: 5.1.0 @@ -61,8 +61,8 @@ catalogs: specifier: ^8.38.0 version: 8.38.0 '@sinclair/typebox': - specifier: ^0.34.0 - version: 0.34.0 + specifier: ^0.34.3 + version: 0.34.3 '@storybook/addon-essentials': specifier: ^8.4.4 version: 8.4.4 @@ -97,8 +97,8 @@ catalogs: specifier: ^4.3.3 version: 4.3.3 '@wagmi/core': - specifier: ^2.14.3 - version: 2.14.3 + specifier: ^2.14.6 + version: 2.14.6 abitype: specifier: ^1.0.6 version: 1.0.6 @@ -133,8 +133,8 @@ catalogs: specifier: ^5.1.0 version: 5.1.0 husky: - specifier: ^9.1.6 - version: 9.1.6 + specifier: ^9.1.7 + version: 9.1.7 i18next: specifier: ^23.16.5 version: 23.16.5 @@ -154,8 +154,8 @@ catalogs: specifier: ^4.0.0 version: 4.0.0 knip: - specifier: ^5.36.6 - version: 5.36.6 + specifier: ^5.37.1 + version: 5.37.1 lint-staged: specifier: ^15.2.10 version: 15.2.10 @@ -190,14 +190,14 @@ catalogs: specifier: ^2.5.4 version: 2.5.4 tailwindcss: - specifier: ^3.4.14 - version: 3.4.14 + specifier: ^3.4.15 + version: 3.4.15 tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7 thirdweb: - specifier: ^5.67.0 - version: 5.67.0 + specifier: ^5.68.0 + version: 5.68.0 tsup: specifier: 8.3.0 version: 8.3.0 @@ -208,11 +208,11 @@ catalogs: specifier: ^5.6.3 version: 5.6.3 uuid: - specifier: ^11.0.2 - version: 11.0.2 + specifier: ^11.0.3 + version: 11.0.3 viem: - specifier: 2.21.41 - version: 2.21.41 + specifier: 2.21.44 + version: 2.21.44 vite: specifier: ^5.4.11 version: 5.4.11 @@ -245,13 +245,13 @@ importers: version: 22.9.0 husky: specifier: 'catalog:' - version: 9.1.6 + version: 9.1.7 jsdom: specifier: 'catalog:' version: 25.0.1 knip: specifier: 'catalog:' - version: 5.36.6(@types/node@22.9.0)(typescript@5.6.3) + version: 5.37.1(@types/node@22.9.0)(typescript@5.6.3) lint-staged: specifier: 'catalog:' version: 15.2.10 @@ -269,19 +269,19 @@ importers: dependencies: '@aws-sdk/client-secrets-manager': specifier: 'catalog:' - version: 3.687.0 + version: 3.693.0 '@fastify/cors': specifier: 'catalog:' version: 10.0.1 '@fastify/swagger': specifier: 'catalog:' - version: 9.2.0 + version: 9.3.0 '@fastify/swagger-ui': specifier: 'catalog:' version: 5.1.0 '@fastify/type-provider-typebox': specifier: 'catalog:' - version: 5.0.1(@sinclair/typebox@0.34.0) + version: 5.0.1(@sinclair/typebox@0.34.3) '@prisma/client': specifier: 'catalog:' version: 5.22.0(prisma@5.22.0) @@ -290,7 +290,7 @@ importers: version: 8.38.0 '@sinclair/typebox': specifier: 'catalog:' - version: 0.34.0 + version: 0.34.3 '@thirdweb-dev/engine': specifier: 'catalog:' version: 0.0.16 @@ -302,7 +302,7 @@ importers: version: link:../../packages/core '@wagmi/core': specifier: 'catalog:' - version: 2.14.3(@tanstack/query-core@5.59.17)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.41(typescript@5.6.3)(zod@3.23.8)) + version: 2.14.6(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.44(typescript@5.6.3)(zod@3.23.8)) abitype: specifier: 'catalog:' version: 1.0.6(typescript@5.6.3)(zod@3.23.8) @@ -320,10 +320,10 @@ importers: version: 13.0.0 thirdweb: specifier: 'catalog:' - version: 5.67.0(@aws-sdk/client-kms@3.687.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) viem: specifier: 'catalog:' - version: 2.21.41(typescript@5.6.3)(zod@3.23.8) + version: 2.21.44(typescript@5.6.3)(zod@3.23.8) devDependencies: prisma: specifier: 'catalog:' @@ -367,7 +367,7 @@ importers: version: 4.21.0 thirdweb: specifier: 'catalog:' - version: 5.67.0(@aws-sdk/client-kms@3.687.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) devDependencies: '@electron-toolkit/tsconfig': specifier: 'catalog:' @@ -422,7 +422,7 @@ importers: version: 18.3.1(react@18.3.1) thirdweb: specifier: 'catalog:' - version: 5.67.0(@aws-sdk/client-kms@3.687.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) devDependencies: '@treasure-dev/tailwind-config': specifier: workspace:* @@ -444,7 +444,7 @@ importers: version: 8.4.49 tailwindcss: specifier: 'catalog:' - version: 3.4.14 + version: 3.4.15 vite: specifier: 'catalog:' version: 5.4.11(@types/node@22.9.0) @@ -465,7 +465,7 @@ importers: version: 18.3.1(react@18.3.1) thirdweb: specifier: 'catalog:' - version: 5.67.0(@aws-sdk/client-kms@3.687.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) devDependencies: '@treasure-dev/tailwind-config': specifier: workspace:* @@ -487,7 +487,7 @@ importers: version: 8.4.49 tailwindcss: specifier: 'catalog:' - version: 3.4.14 + version: 3.4.15 vite: specifier: 'catalog:' version: 5.4.11(@types/node@22.9.0) @@ -496,7 +496,7 @@ importers: dependencies: '@aws-sdk/client-kms': specifier: 'catalog:' - version: 3.687.0 + version: 3.693.0 jsonwebtoken: specifier: 'catalog:' version: 9.0.2 @@ -518,13 +518,13 @@ importers: dependencies: '@aws-sdk/client-kms': specifier: 'catalog:' - version: 3.687.0 + version: 3.693.0 '@sushiswap/tines': specifier: 'catalog:' - version: 1.0.11(viem@2.21.41(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8) + version: 1.0.11(viem@2.21.44(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8) '@wagmi/core': specifier: 'catalog:' - version: 2.14.3(@tanstack/query-core@5.59.17)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.41(typescript@5.6.3)(zod@3.23.8)) + version: 2.14.6(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.44(typescript@5.6.3)(zod@3.23.8)) abitype: specifier: 'catalog:' version: 1.0.6(typescript@5.6.3)(zod@3.23.8) @@ -536,13 +536,13 @@ importers: version: 4.0.0 thirdweb: specifier: 'catalog:' - version: 5.67.0(@aws-sdk/client-kms@3.687.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) uuid: specifier: 'catalog:' - version: 11.0.2 + version: 11.0.3 viem: specifier: 'catalog:' - version: 2.21.41(typescript@5.6.3)(zod@3.23.8) + version: 2.21.44(typescript@5.6.3)(zod@3.23.8) devDependencies: '@types/uuid': specifier: 'catalog:' @@ -561,7 +561,7 @@ importers: dependencies: '@treasure-dev/tdk-core': specifier: '*' - version: 2.7.1(@tanstack/query-core@5.59.17)(@types/react@18.3.12)(react@18.3.1)(thirdweb@5.67.0(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8))(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(zod@3.23.8) + version: 2.7.1(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(thirdweb@5.68.0(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8))(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(zod@3.23.8) devDependencies: tsup: specifier: 'catalog:' @@ -607,7 +607,7 @@ importers: version: 2.5.4 thirdweb: specifier: 'catalog:' - version: 5.67.0(@aws-sdk/client-kms@3.687.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) devDependencies: '@storybook/addon-essentials': specifier: 'catalog:' @@ -635,10 +635,10 @@ importers: version: 8.4.4(prettier@2.8.8) tailwindcss: specifier: 'catalog:' - version: 3.4.14 + version: 3.4.15 tailwindcss-animate: specifier: 'catalog:' - version: 1.0.7(tailwindcss@3.4.14) + version: 1.0.7(tailwindcss@3.4.15) tsup: specifier: 'catalog:' version: 8.3.0(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) @@ -656,10 +656,10 @@ importers: devDependencies: tailwind-config-viewer: specifier: 'catalog:' - version: 2.0.4(tailwindcss@3.4.14) + version: 2.0.4(tailwindcss@3.4.15) tailwindcss: specifier: 'catalog:' - version: 3.4.14 + version: 3.4.15 packages: @@ -690,107 +690,107 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-kms@3.687.0': - resolution: {integrity: sha512-5vp1v1iR3NM2GkC/0C/dftWYjA0KEONHObbbzduTI0HuptaKdLBFlO6AfNU8/FB/ZfN1dN+Ch4rYv+FfSVAqPw==} + '@aws-sdk/client-kms@3.693.0': + resolution: {integrity: sha512-9APrRDbScYqfCG89Trruf9+Bx39wlXQdwPEhluycpCF+bHYiTKdIXc4uix6hjbXzK0NKbgitus8bbMvsHX+Oxg==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-secrets-manager@3.687.0': - resolution: {integrity: sha512-/fCUosMm+CJyLHGM/aDZw6OGQNOkifP7M/bvMH7TED8evQzFGMyyQwUF8PNvYHxEaqSchR1l+N+QKEZM0UfP8w==} + '@aws-sdk/client-secrets-manager@3.693.0': + resolution: {integrity: sha512-PiXkl64LYhwZQ2zPQhxwpnLwGS7Lw8asFCj29SxEaYRnYra3ajE5d+Yvv68qC+diUNkeZh6k6zn7nEOZ4rWEwA==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-sso-oidc@3.687.0': - resolution: {integrity: sha512-Rdd8kLeTeh+L5ZuG4WQnWgYgdv7NorytKdZsGjiag1D8Wv3PcJvPqqWdgnI0Og717BSXVoaTYaN34FyqFYSx6Q==} + '@aws-sdk/client-sso-oidc@3.693.0': + resolution: {integrity: sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==} engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-sts': ^3.687.0 + '@aws-sdk/client-sts': ^3.693.0 - '@aws-sdk/client-sso@3.687.0': - resolution: {integrity: sha512-dfj0y9fQyX4kFill/ZG0BqBTLQILKlL7+O5M4F9xlsh2WNuV2St6WtcOg14Y1j5UODPJiJs//pO+mD1lihT5Kw==} + '@aws-sdk/client-sso@3.693.0': + resolution: {integrity: sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-sts@3.687.0': - resolution: {integrity: sha512-SQjDH8O4XCTtouuCVYggB0cCCrIaTzUZIkgJUpOsIEJBLlTbNOb/BZqUShAQw2o9vxr2rCeOGjAQOYPysW/Pmg==} + '@aws-sdk/client-sts@3.693.0': + resolution: {integrity: sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/core@3.686.0': - resolution: {integrity: sha512-Xt3DV4DnAT3v2WURwzTxWQK34Ew+iiLzoUoguvLaZrVMFOqMMrwVjP+sizqIaHp1j7rGmFcN5I8saXnsDLuQLA==} + '@aws-sdk/core@3.693.0': + resolution: {integrity: sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-env@3.686.0': - resolution: {integrity: sha512-osD7lPO8OREkgxPiTWmA1i6XEmOth1uW9HWWj/+A2YGCj1G/t2sHu931w4Qj9NWHYZtbTTXQYVRg+TErALV7nQ==} + '@aws-sdk/credential-provider-env@3.693.0': + resolution: {integrity: sha512-hMUZaRSF7+iBKZfBHNLihFs9zvpM1CB8MBOTnTp5NGCVkRYF3SB2LH+Kcippe0ats4qCyB1eEoyQX99rERp2iQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-http@3.686.0': - resolution: {integrity: sha512-xyGAD/f3vR/wssUiZrNFWQWXZvI4zRm2wpHhoHA1cC2fbRMNFYtFn365yw6dU7l00ZLcdFB1H119AYIUZS7xbw==} + '@aws-sdk/credential-provider-http@3.693.0': + resolution: {integrity: sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-ini@3.687.0': - resolution: {integrity: sha512-6d5ZJeZch+ZosJccksN0PuXv7OSnYEmanGCnbhUqmUSz9uaVX6knZZfHCZJRgNcfSqg9QC0zsFA/51W5HCUqSQ==} + '@aws-sdk/credential-provider-ini@3.693.0': + resolution: {integrity: sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==} engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-sts': ^3.687.0 + '@aws-sdk/client-sts': ^3.693.0 - '@aws-sdk/credential-provider-node@3.687.0': - resolution: {integrity: sha512-Pqld8Nx11NYaBUrVk3bYiGGpLCxkz8iTONlpQWoVWFhSOzlO7zloNOaYbD2XgFjjqhjlKzE91drs/f41uGeCTA==} + '@aws-sdk/credential-provider-node@3.693.0': + resolution: {integrity: sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-process@3.686.0': - resolution: {integrity: sha512-sXqaAgyzMOc+dm4CnzAR5Q6S9OWVHyZjLfW6IQkmGjqeQXmZl24c4E82+w64C+CTkJrFLzH1VNOYp1Hy5gE6Qw==} + '@aws-sdk/credential-provider-process@3.693.0': + resolution: {integrity: sha512-cvxQkrTWHHjeHrPlj7EWXPnFSq8x7vMx+Zn1oTsMpCY445N9KuzjfJTkmNGwU2GT6rSZI9/0MM02aQvl5bBBTQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-sso@3.687.0': - resolution: {integrity: sha512-N1YCoE7DovIRF2ReyRrA4PZzF0WNi4ObPwdQQkVxhvSm7PwjbWxrfq7rpYB+6YB1Uq3QPzgVwUFONE36rdpxUQ==} + '@aws-sdk/credential-provider-sso@3.693.0': + resolution: {integrity: sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-web-identity@3.686.0': - resolution: {integrity: sha512-40UqCpPxyHCXDP7CGd9JIOZDgDZf+u1OyLaGBpjQJlz1HYuEsIWnnbTe29Yg3Ah/Zc3g4NBWcUdlGVotlnpnDg==} + '@aws-sdk/credential-provider-web-identity@3.693.0': + resolution: {integrity: sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==} engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-sts': ^3.686.0 + '@aws-sdk/client-sts': ^3.693.0 - '@aws-sdk/middleware-host-header@3.686.0': - resolution: {integrity: sha512-+Yc6rO02z+yhFbHmRZGvEw1vmzf/ifS9a4aBjJGeVVU+ZxaUvnk+IUZWrj4YQopUQ+bSujmMUzJLXSkbDq7yuw==} + '@aws-sdk/middleware-host-header@3.693.0': + resolution: {integrity: sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-logger@3.686.0': - resolution: {integrity: sha512-cX43ODfA2+SPdX7VRxu6gXk4t4bdVJ9pkktbfnkE5t27OlwNfvSGGhnHrQL8xTOFeyQ+3T+oowf26gf1OI+vIg==} + '@aws-sdk/middleware-logger@3.693.0': + resolution: {integrity: sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-recursion-detection@3.686.0': - resolution: {integrity: sha512-jF9hQ162xLgp9zZ/3w5RUNhmwVnXDBlABEUX8jCgzaFpaa742qR/KKtjjZQ6jMbQnP+8fOCSXFAVNMU+s6v81w==} + '@aws-sdk/middleware-recursion-detection@3.693.0': + resolution: {integrity: sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-user-agent@3.687.0': - resolution: {integrity: sha512-nUgsKiEinyA50CaDXojAkOasAU3Apdg7Qox6IjNUC4ZjgOu7QWsCDB5N28AYMUt06cNYeYQdfMX1aEzG85a1Mg==} + '@aws-sdk/middleware-user-agent@3.693.0': + resolution: {integrity: sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==} engines: {node: '>=16.0.0'} - '@aws-sdk/region-config-resolver@3.686.0': - resolution: {integrity: sha512-6zXD3bSD8tcsMAVVwO1gO7rI1uy2fCD3czgawuPGPopeLiPpo6/3FoUWCQzk2nvEhj7p9Z4BbjwZGSlRkVrXTw==} + '@aws-sdk/region-config-resolver@3.693.0': + resolution: {integrity: sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==} engines: {node: '>=16.0.0'} - '@aws-sdk/token-providers@3.686.0': - resolution: {integrity: sha512-9oL4kTCSePFmyKPskibeiOXV6qavPZ63/kXM9Wh9V6dTSvBtLeNnMxqGvENGKJcTdIgtoqyqA6ET9u0PJ5IRIg==} + '@aws-sdk/token-providers@3.693.0': + resolution: {integrity: sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==} engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-sso-oidc': ^3.686.0 + '@aws-sdk/client-sso-oidc': ^3.693.0 - '@aws-sdk/types@3.686.0': - resolution: {integrity: sha512-xFnrb3wxOoJcW2Xrh63ZgFo5buIu9DF7bOHnwoUxHdNpUXicUh0AHw85TjXxyxIAd0d1psY/DU7QHoNI3OswgQ==} + '@aws-sdk/types@3.692.0': + resolution: {integrity: sha512-RpNvzD7zMEhiKgmlxGzyXaEcg2khvM7wd5sSHVapOcrde1awQSOMGI4zKBQ+wy5TnDfrm170ROz/ERLYtrjPZA==} engines: {node: '>=16.0.0'} - '@aws-sdk/util-endpoints@3.686.0': - resolution: {integrity: sha512-7msZE2oYl+6QYeeRBjlDgxQUhq/XRky3cXE0FqLFs2muLS7XSuQEXkpOXB3R782ygAP6JX0kmBxPTLurRTikZg==} + '@aws-sdk/util-endpoints@3.693.0': + resolution: {integrity: sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==} engines: {node: '>=16.0.0'} '@aws-sdk/util-locate-window@3.568.0': resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} engines: {node: '>=16.0.0'} - '@aws-sdk/util-user-agent-browser@3.686.0': - resolution: {integrity: sha512-YiQXeGYZegF1b7B2GOR61orhgv79qmI0z7+Agm3NXLO6hGfVV3kFUJbXnjtH1BgWo5hbZYW7HQ2omGb3dnb6Lg==} + '@aws-sdk/util-user-agent-browser@3.693.0': + resolution: {integrity: sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==} - '@aws-sdk/util-user-agent-node@3.687.0': - resolution: {integrity: sha512-idkP6ojSTZ4ek1pJ8wIN7r9U3KR5dn0IkJn3KQBXQ58LWjkRqLtft2vxzdsktWwhPKjjmIKl1S0kbvqLawf8XQ==} + '@aws-sdk/util-user-agent-node@3.693.0': + resolution: {integrity: sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==} engines: {node: '>=16.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -1003,8 +1003,8 @@ packages: '@changesets/write@0.3.2': resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} - '@coinbase/wallet-sdk@4.2.0': - resolution: {integrity: sha512-dkw3B3fNZ5T5Ei0A7iOTWK+aJEk2lnUQBOPYdXRo70tEXZQJ2dE4rmXx+ExWe9ObPYtgM9U0Q6GNWAWMpHKZtA==} + '@coinbase/wallet-sdk@4.2.2': + resolution: {integrity: sha512-0AoZGaXZLOqc0WCqHiUZxzdNBRu1VBQdozifELntHM2Dd7F9cDf47ppWnD5EeaYuaHw8xGwoOQnGDDs11m3Xmg==} '@develar/schema-utils@2.6.5': resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} @@ -1485,8 +1485,8 @@ packages: '@fastify/swagger-ui@5.1.0': resolution: {integrity: sha512-XWb+zWz0vlP4QIXbF2xo/n9XuOjNF5aRdQ+0AiBXY9nlIuoTYU1ZXCkXNStdnM/sOdnDy8Q1vsxZ2RsN7XivQA==} - '@fastify/swagger@9.2.0': - resolution: {integrity: sha512-tuy78fW3G4z8EhTdopAu6gXbllFrQBkcYduOmPiEVESZNaLnxR8N80YVu7F6WuMwk7sd9rYGnGo9bxDQChCFjg==} + '@fastify/swagger@9.3.0': + resolution: {integrity: sha512-e34xt616umWP8hekeGZIOSVd+U5XxrEDJyCg2yntRchxfAPm7ukUBz+D4NnGkS/kQLIabr5ezF3V2Xw5vWhsdQ==} '@fastify/type-provider-typebox@5.0.1': resolution: {integrity: sha512-zepdCWmgvpcLS06DN5vznMJLUP/5gLt/X3lVXZvddXmHSImQxm2Em+dV64b6x9P4G4V9DKuS4EL08ASjpCboNA==} @@ -2343,38 +2343,38 @@ packages: resolution: {integrity: sha512-3X7MgIKIx+2q5Al7QkhaRB4wV6DvzYsaeIwdqKUzGLuRjXmNgJrLoU87TAwQRmZ6Wr3IoEpThZZMNrzYPXxArw==} engines: {node: '>=14.18'} - '@sinclair/typebox@0.34.0': - resolution: {integrity: sha512-BwY8C9W0/LP34i0Nzj0Xj2My0a7vBA1JGC7G0NxvQBBdHyXBf1ar27d79drRdhkgdlLhcyEpQHJKdpdoxZd+tA==} + '@sinclair/typebox@0.34.3': + resolution: {integrity: sha512-fEgncmnqn6WGibPn34deH5PwmMTuNCZ2clwlwevgFn8rP0l38zzWRg3KVYhoOZwkZ2Ew3yhZ/STdGDuMig66oQ==} '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@smithy/abort-controller@3.1.6': - resolution: {integrity: sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==} + '@smithy/abort-controller@3.1.8': + resolution: {integrity: sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ==} engines: {node: '>=16.0.0'} - '@smithy/config-resolver@3.0.10': - resolution: {integrity: sha512-Uh0Sz9gdUuz538nvkPiyv1DZRX9+D15EKDtnQP5rYVAzM/dnYk3P8cg73jcxyOitPgT3mE3OVj7ky7sibzHWkw==} + '@smithy/config-resolver@3.0.12': + resolution: {integrity: sha512-YAJP9UJFZRZ8N+UruTeq78zkdjUHmzsY62J4qKWZ4SXB4QXJ/+680EfXXgkYA2xj77ooMqtUY9m406zGNqwivQ==} engines: {node: '>=16.0.0'} - '@smithy/core@2.5.1': - resolution: {integrity: sha512-DujtuDA7BGEKExJ05W5OdxCoyekcKT3Rhg1ZGeiUWaz2BJIWXjZmsG/DIP4W48GHno7AQwRsaCb8NcBgH3QZpg==} + '@smithy/core@2.5.3': + resolution: {integrity: sha512-96uW8maifUSmehaeW7uydWn7wBc98NEeNI3zN8vqakGpyCQgzyJaA64Z4FCOUmAdCJkhppd/7SZ798Fo4Xx37g==} engines: {node: '>=16.0.0'} - '@smithy/credential-provider-imds@3.2.5': - resolution: {integrity: sha512-4FTQGAsuwqTzVMmiRVTn0RR9GrbRfkP0wfu/tXWVHd2LgNpTY0uglQpIScXK4NaEyXbB3JmZt8gfVqO50lP8wg==} + '@smithy/credential-provider-imds@3.2.7': + resolution: {integrity: sha512-cEfbau+rrWF8ylkmmVAObOmjbTIzKyUC5TkBL58SbLywD0RCBC4JAUKbmtSm2w5KUJNRPGgpGFMvE2FKnuNlWQ==} engines: {node: '>=16.0.0'} - '@smithy/fetch-http-handler@4.0.0': - resolution: {integrity: sha512-MLb1f5tbBO2X6K4lMEKJvxeLooyg7guq48C2zKr4qM7F2Gpkz4dc+hdSgu77pCJ76jVqFBjZczHYAs6dp15N+g==} + '@smithy/fetch-http-handler@4.1.1': + resolution: {integrity: sha512-bH7QW0+JdX0bPBadXt8GwMof/jz0H28I84hU1Uet9ISpzUqXqRQ3fEZJ+ANPOhzSEczYvANNl3uDQDYArSFDtA==} - '@smithy/hash-node@3.0.8': - resolution: {integrity: sha512-tlNQYbfpWXHimHqrvgo14DrMAgUBua/cNoz9fMYcDmYej7MAmUcjav/QKQbFc3NrcPxeJ7QClER4tWZmfwoPng==} + '@smithy/hash-node@3.0.10': + resolution: {integrity: sha512-3zWGWCHI+FlJ5WJwx73Mw2llYR8aflVyZN5JhoqLxbdPZi6UyKSdCeXAWJw9ja22m6S6Tzz1KZ+kAaSwvydi0g==} engines: {node: '>=16.0.0'} - '@smithy/invalid-dependency@3.0.8': - resolution: {integrity: sha512-7Qynk6NWtTQhnGTTZwks++nJhQ1O54Mzi7fz4PqZOiYXb4Z1Flpb2yRvdALoggTS8xjtohWUM+RygOtB30YL3Q==} + '@smithy/invalid-dependency@3.0.10': + resolution: {integrity: sha512-Lp2L65vFi+cj0vFMu2obpPW69DU+6O5g3086lmI4XcnRCG8PxvpWC7XyaVwJCxsZFzueHjXnrOH/E0pl0zikfA==} '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} @@ -2384,72 +2384,72 @@ packages: resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} engines: {node: '>=16.0.0'} - '@smithy/middleware-content-length@3.0.10': - resolution: {integrity: sha512-T4dIdCs1d/+/qMpwhJ1DzOhxCZjZHbHazEPJWdB4GDi2HjIZllVzeBEcdJUN0fomV8DURsgOyrbEUzg3vzTaOg==} + '@smithy/middleware-content-length@3.0.12': + resolution: {integrity: sha512-1mDEXqzM20yywaMDuf5o9ue8OkJ373lSPbaSjyEvkWdqELhFMyNNgKGWL/rCSf4KME8B+HlHKuR8u9kRj8HzEQ==} engines: {node: '>=16.0.0'} - '@smithy/middleware-endpoint@3.2.1': - resolution: {integrity: sha512-wWO3xYmFm6WRW8VsEJ5oU6h7aosFXfszlz3Dj176pTij6o21oZnzkCLzShfmRaaCHDkBXWBdO0c4sQAvLFP6zA==} + '@smithy/middleware-endpoint@3.2.3': + resolution: {integrity: sha512-Hdl9296i/EMptaX7agrSzJZDiz5Y8XPUeBbctTmMtnCguGpqfU3jVsTUan0VLaOhsnquqWLL8Bl5HrlbVGT1og==} engines: {node: '>=16.0.0'} - '@smithy/middleware-retry@3.0.25': - resolution: {integrity: sha512-m1F70cPaMBML4HiTgCw5I+jFNtjgz5z5UdGnUbG37vw6kh4UvizFYjqJGHvicfgKMkDL6mXwyPp5mhZg02g5sg==} + '@smithy/middleware-retry@3.0.27': + resolution: {integrity: sha512-H3J/PjJpLL7Tt+fxDKiOD25sMc94YetlQhCnYeNmina2LZscAdu0ZEZPas/kwePHABaEtqp7hqa5S4UJgMs1Tg==} engines: {node: '>=16.0.0'} - '@smithy/middleware-serde@3.0.8': - resolution: {integrity: sha512-Xg2jK9Wc/1g/MBMP/EUn2DLspN8LNt+GMe7cgF+Ty3vl+Zvu+VeZU5nmhveU+H8pxyTsjrAkci8NqY6OuvZnjA==} + '@smithy/middleware-serde@3.0.10': + resolution: {integrity: sha512-MnAuhh+dD14F428ubSJuRnmRsfOpxSzvRhaGVTvd/lrUDE3kxzCCmH8lnVTvoNQnV2BbJ4c15QwZ3UdQBtFNZA==} engines: {node: '>=16.0.0'} - '@smithy/middleware-stack@3.0.8': - resolution: {integrity: sha512-d7ZuwvYgp1+3682Nx0MD3D/HtkmZd49N3JUndYWQXfRZrYEnCWYc8BHcNmVsPAp9gKvlurdg/mubE6b/rPS9MA==} + '@smithy/middleware-stack@3.0.10': + resolution: {integrity: sha512-grCHyoiARDBBGPyw2BeicpjgpsDFWZZxptbVKb3CRd/ZA15F/T6rZjCCuBUjJwdck1nwUuIxYtsS4H9DDpbP5w==} engines: {node: '>=16.0.0'} - '@smithy/node-config-provider@3.1.9': - resolution: {integrity: sha512-qRHoah49QJ71eemjuS/WhUXB+mpNtwHRWQr77J/m40ewBVVwvo52kYAmb7iuaECgGTTcYxHS4Wmewfwy++ueew==} + '@smithy/node-config-provider@3.1.11': + resolution: {integrity: sha512-URq3gT3RpDikh/8MBJUB+QGZzfS7Bm6TQTqoh4CqE8NBuyPkWa5eUXj0XFcFfeZVgg3WMh1u19iaXn8FvvXxZw==} engines: {node: '>=16.0.0'} - '@smithy/node-http-handler@3.2.5': - resolution: {integrity: sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==} + '@smithy/node-http-handler@3.3.1': + resolution: {integrity: sha512-fr+UAOMGWh6bn4YSEezBCpJn9Ukp9oR4D32sCjCo7U81evE11YePOQ58ogzyfgmjIO79YeOdfXXqr0jyhPQeMg==} engines: {node: '>=16.0.0'} - '@smithy/property-provider@3.1.8': - resolution: {integrity: sha512-ukNUyo6rHmusG64lmkjFeXemwYuKge1BJ8CtpVKmrxQxc6rhUX0vebcptFA9MmrGsnLhwnnqeH83VTU9hwOpjA==} + '@smithy/property-provider@3.1.10': + resolution: {integrity: sha512-n1MJZGTorTH2DvyTVj+3wXnd4CzjJxyXeOgnTlgNVFxaaMeT4OteEp4QrzF8p9ee2yg42nvyVK6R/awLCakjeQ==} engines: {node: '>=16.0.0'} - '@smithy/protocol-http@4.1.5': - resolution: {integrity: sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==} + '@smithy/protocol-http@4.1.7': + resolution: {integrity: sha512-FP2LepWD0eJeOTm0SjssPcgqAlDFzOmRXqXmGhfIM52G7Lrox/pcpQf6RP4F21k0+O12zaqQt5fCDOeBtqY6Cg==} engines: {node: '>=16.0.0'} - '@smithy/querystring-builder@3.0.8': - resolution: {integrity: sha512-btYxGVqFUARbUrN6VhL9c3dnSviIwBYD9Rz1jHuN1hgh28Fpv2xjU1HeCeDJX68xctz7r4l1PBnFhGg1WBBPuA==} + '@smithy/querystring-builder@3.0.10': + resolution: {integrity: sha512-nT9CQF3EIJtIUepXQuBFb8dxJi3WVZS3XfuDksxSCSn+/CzZowRLdhDn+2acbBv8R6eaJqPupoI/aRFIImNVPQ==} engines: {node: '>=16.0.0'} - '@smithy/querystring-parser@3.0.8': - resolution: {integrity: sha512-BtEk3FG7Ks64GAbt+JnKqwuobJNX8VmFLBsKIwWr1D60T426fGrV2L3YS5siOcUhhp6/Y6yhBw1PSPxA5p7qGg==} + '@smithy/querystring-parser@3.0.10': + resolution: {integrity: sha512-Oa0XDcpo9SmjhiDD9ua2UyM3uU01ZTuIrNdZvzwUTykW1PM8o2yJvMh1Do1rY5sUQg4NDV70dMi0JhDx4GyxuQ==} engines: {node: '>=16.0.0'} - '@smithy/service-error-classification@3.0.8': - resolution: {integrity: sha512-uEC/kCCFto83bz5ZzapcrgGqHOh/0r69sZ2ZuHlgoD5kYgXJEThCoTuw/y1Ub3cE7aaKdznb+jD9xRPIfIwD7g==} + '@smithy/service-error-classification@3.0.10': + resolution: {integrity: sha512-zHe642KCqDxXLuhs6xmHVgRwy078RfqxP2wRDpIyiF8EmsWXptMwnMwbVa50lw+WOGNrYm9zbaEg0oDe3PTtvQ==} engines: {node: '>=16.0.0'} - '@smithy/shared-ini-file-loader@3.1.9': - resolution: {integrity: sha512-/+OsJRNtoRbtsX0UpSgWVxFZLsJHo/4sTr+kBg/J78sr7iC+tHeOvOJrS5hCpVQ6sWBbhWLp1UNiuMyZhE6pmA==} + '@smithy/shared-ini-file-loader@3.1.11': + resolution: {integrity: sha512-AUdrIZHFtUgmfSN4Gq9nHu3IkHMa1YDcN+s061Nfm+6pQ0mJy85YQDB0tZBCmls0Vuj22pLwDPmL92+Hvfwwlg==} engines: {node: '>=16.0.0'} - '@smithy/signature-v4@4.2.0': - resolution: {integrity: sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==} + '@smithy/signature-v4@4.2.3': + resolution: {integrity: sha512-pPSQQ2v2vu9vc8iew7sszLd0O09I5TRc5zhY71KA+Ao0xYazIG+uLeHbTJfIWGO3BGVLiXjUr3EEeCcEQLjpWQ==} engines: {node: '>=16.0.0'} - '@smithy/smithy-client@3.4.2': - resolution: {integrity: sha512-dxw1BDxJiY9/zI3cBqfVrInij6ShjpV4fmGHesGZZUiP9OSE/EVfdwdRz0PgvkEvrZHpsj2htRaHJfftE8giBA==} + '@smithy/smithy-client@3.4.4': + resolution: {integrity: sha512-dPGoJuSZqvirBq+yROapBcHHvFjChoAQT8YPWJ820aPHHiowBlB3RL1Q4kPT1hx0qKgJuf+HhyzKi5Gbof4fNA==} engines: {node: '>=16.0.0'} - '@smithy/types@3.6.0': - resolution: {integrity: sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w==} + '@smithy/types@3.7.1': + resolution: {integrity: sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==} engines: {node: '>=16.0.0'} - '@smithy/url-parser@3.0.8': - resolution: {integrity: sha512-4FdOhwpTW7jtSFWm7SpfLGKIBC9ZaTKG5nBF0wK24aoQKQyDIKUw3+KFWCQ9maMzrgTJIuOvOnsV2lLGW5XjTg==} + '@smithy/url-parser@3.0.10': + resolution: {integrity: sha512-j90NUalTSBR2NaZTuruEgavSdh8MLirf58LoGSk4AtQfyIymogIhgnGUU2Mga2bkMkpSoC9gxb74xBXL5afKAQ==} '@smithy/util-base64@3.0.0': resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} @@ -2474,32 +2474,32 @@ packages: resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} engines: {node: '>=16.0.0'} - '@smithy/util-defaults-mode-browser@3.0.25': - resolution: {integrity: sha512-fRw7zymjIDt6XxIsLwfJfYUfbGoO9CmCJk6rjJ/X5cd20+d2Is7xjU5Kt/AiDt6hX8DAf5dztmfP5O82gR9emA==} + '@smithy/util-defaults-mode-browser@3.0.27': + resolution: {integrity: sha512-GV8NvPy1vAGp7u5iD/xNKUxCorE4nQzlyl057qRac+KwpH5zq8wVq6rE3lPPeuFLyQXofPN6JwxL1N9ojGapiQ==} engines: {node: '>= 10.0.0'} - '@smithy/util-defaults-mode-node@3.0.25': - resolution: {integrity: sha512-H3BSZdBDiVZGzt8TG51Pd2FvFO0PAx/A0mJ0EH8a13KJ6iUCdYnw/Dk/MdC1kTd0eUuUGisDFaxXVXo4HHFL1g==} + '@smithy/util-defaults-mode-node@3.0.27': + resolution: {integrity: sha512-7+4wjWfZqZxZVJvDutO+i1GvL6bgOajEkop4FuR6wudFlqBiqwxw3HoH6M9NgeCd37km8ga8NPp2JacQEtAMPg==} engines: {node: '>= 10.0.0'} - '@smithy/util-endpoints@2.1.4': - resolution: {integrity: sha512-kPt8j4emm7rdMWQyL0F89o92q10gvCUa6sBkBtDJ7nV2+P7wpXczzOfoDJ49CKXe5CCqb8dc1W+ZdLlrKzSAnQ==} + '@smithy/util-endpoints@2.1.6': + resolution: {integrity: sha512-mFV1t3ndBh0yZOJgWxO9J/4cHZVn5UG1D8DeCc6/echfNkeEJWu9LD7mgGH5fHrEdR7LDoWw7PQO6QiGpHXhgA==} engines: {node: '>=16.0.0'} '@smithy/util-hex-encoding@3.0.0': resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} engines: {node: '>=16.0.0'} - '@smithy/util-middleware@3.0.8': - resolution: {integrity: sha512-p7iYAPaQjoeM+AKABpYWeDdtwQNxasr4aXQEA/OmbOaug9V0odRVDy3Wx4ci8soljE/JXQo+abV0qZpW8NX0yA==} + '@smithy/util-middleware@3.0.10': + resolution: {integrity: sha512-eJO+/+RsrG2RpmY68jZdwQtnfsxjmPxzMlQpnHKjFPwrYqvlcT+fHdT+ZVwcjlWSrByOhGr9Ff2GG17efc192A==} engines: {node: '>=16.0.0'} - '@smithy/util-retry@3.0.8': - resolution: {integrity: sha512-TCEhLnY581YJ+g1x0hapPz13JFqzmh/pMWL2KEFASC51qCfw3+Y47MrTmea4bUE5vsdxQ4F6/KFbUeSz22Q1ow==} + '@smithy/util-retry@3.0.10': + resolution: {integrity: sha512-1l4qatFp4PiU6j7UsbasUHL2VU023NRB/gfaa1M0rDqVrRN4g3mCArLRyH3OuktApA4ye+yjWQHjdziunw2eWA==} engines: {node: '>=16.0.0'} - '@smithy/util-stream@3.2.1': - resolution: {integrity: sha512-R3ufuzJRxSJbE58K9AEnL/uSZyVdHzud9wLS8tIbXclxKzoe09CRohj2xV8wpx5tj7ZbiJaKYcutMm1eYgz/0A==} + '@smithy/util-stream@3.3.1': + resolution: {integrity: sha512-Ff68R5lJh2zj+AUTvbAU/4yx+6QPRzg7+pI7M1FbtQHcRIp7xvguxVsQBKyB3fwiOwhAKu0lnNyYBaQfSW6TNw==} engines: {node: '>=16.0.0'} '@smithy/util-uri-escape@3.0.0': @@ -2725,11 +2725,11 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tanstack/query-core@5.59.17': - resolution: {integrity: sha512-jWdDiif8kaqnRGHNXAa9CnudtxY5v9DUxXhodgqX2Rwzj+1UwStDHEbBd9IA5C7VYAaJ2s+BxFR6PUBs8ERorA==} + '@tanstack/query-core@5.59.20': + resolution: {integrity: sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg==} - '@tanstack/react-query@5.59.19': - resolution: {integrity: sha512-xLRfyFyQOFcLltKCds0LijfC6/HQJrrTTnZB8ciyn74LIkVAm++vZJ6eUVG20RmJtdP8REdy7vSOYW4M3//XLA==} + '@tanstack/react-query@5.59.20': + resolution: {integrity: sha512-Zly0egsK0tFdfSbh5/mapSa+Zfc3Et0Zkar7Wo5sQkFzWyB3p3uZWOHR2wrlAEEV2L953eLuDBtbgFvMYiLvUw==} peerDependencies: react: ^18 || ^19 @@ -2898,8 +2898,8 @@ packages: '@vitest/utils@2.1.5': resolution: {integrity: sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==} - '@wagmi/core@2.14.1': - resolution: {integrity: sha512-Vl7VK5XdKxPfnYlp3E7U7AJSweBdfh+cd953hgAU2H+uNrekS9Nmt89l1b6WkwkYyqvccRDjsCtlcKRwvPtNAQ==} + '@wagmi/core@2.14.3': + resolution: {integrity: sha512-KpbejlQcXa5w6G9c0cXMspZJ/+ni3HzhybhoBCk9lWbQgGkI5o27Ay+FVR7TI6sMG8V5sG/XE51Rscyqg8xiNg==} peerDependencies: '@tanstack/query-core': '>=5.0.0' typescript: '>=5.0.4' @@ -2910,8 +2910,8 @@ packages: typescript: optional: true - '@wagmi/core@2.14.3': - resolution: {integrity: sha512-KpbejlQcXa5w6G9c0cXMspZJ/+ni3HzhybhoBCk9lWbQgGkI5o27Ay+FVR7TI6sMG8V5sG/XE51Rscyqg8xiNg==} + '@wagmi/core@2.14.6': + resolution: {integrity: sha512-YoDtMt/RofrB3geEXGzV/xJYsMMN3U6x6cyWrScHwLF32NtlfQAtOUvRpJ5Q0FmQteRLiupVAOu+WB2aDLzCiA==} peerDependencies: '@tanstack/query-core': '>=5.0.0' typescript: '>=5.0.4' @@ -4388,8 +4388,8 @@ packages: humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - husky@9.1.6: - resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} hasBin: true @@ -4721,8 +4721,8 @@ packages: keyvaluestorage-interface@1.0.0: resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} - knip@5.36.6: - resolution: {integrity: sha512-9Id0az4KDqdiSWEkzGh9qPXs84gvp+4fPeYF8k3ogiJK98EjAgPGAVWcdtrcIj1fgs4OSiGe/e7UOdy3wXhbTA==} + knip@5.37.1: + resolution: {integrity: sha512-69gjKj5lLsLXcIPXlHyFfX5AOHgRdh/iXH8gUqvmsHtjqoWhOATeXZDjvvemmgw7KxbWbUzxBNbpjhtJWzgqGA==} engines: {node: '>=18.6.0'} hasBin: true peerDependencies: @@ -5251,6 +5251,22 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + ox@0.1.2: + resolution: {integrity: sha512-ak/8K0Rtphg9vnRJlbOdaX9R7cmxD2MiSthjWGaQdMk3D7hrAlDoM+6Lxn7hN52Za3vrXfZ7enfke/5WjolDww==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + ox@0.1.3: + resolution: {integrity: sha512-i3gh5TSO1B4W0qlg8s672w3b13xZndouqNATG0NdMyyVJRhMVR+nj+BWYLOwkA6cu4uJ4EODQhUJez6dMg+1ig==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -6048,9 +6064,6 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - std-env@3.8.0: resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} @@ -6187,8 +6200,8 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' - tailwindcss@3.4.14: - resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==} + tailwindcss@3.4.15: + resolution: {integrity: sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==} engines: {node: '>=14.0.0'} hasBin: true @@ -6218,8 +6231,8 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thirdweb@5.67.0: - resolution: {integrity: sha512-2geMbjmL9isG1cTkPvzEhVWWZTunPJEFzP3mUxhaovU97z+2zTBaBj6wnR2XcKSk18tAL7+mD7kI3zOseaHtGg==} + thirdweb@5.68.0: + resolution: {integrity: sha512-hTg/YuQEbzBgHPJ+dxXolnow1qtUE0iNU8yfF+aTzHy58ooZnoIbpJWMLtqPPe5QlLOkPxr9h8bIH9uv1NeZbA==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -6606,8 +6619,8 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - uuid@11.0.2: - resolution: {integrity: sha512-14FfcOJmqdjbBPdDjFQyk/SdT4NySW4eM0zcG+HqbHP5jzuH56xO3J1DGhgs/cEMCfwYi3HQI1gnTO62iaG+tQ==} + uuid@11.0.3: + resolution: {integrity: sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==} hasBin: true uuid@9.0.1: @@ -6634,8 +6647,8 @@ packages: resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} engines: {node: '>=0.6.0'} - viem@2.21.41: - resolution: {integrity: sha512-FxDALzW6I9lGSISbGKqGLfsc4GCtALrgm3mpQcOi7gpyTBkKkl39IWgRjAK1KGNOOvqneQmUKSxWsApkUYSn5w==} + viem@2.21.44: + resolution: {integrity: sha512-oyLTCt7OQUetQN2m9KPNgSA//MzpnQLABAyglPKh+fAypU8cTT/hC5UyLQvaYt4WPg6dkbKOxfsahV4739pu9w==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -6962,7 +6975,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.686.0 + '@aws-sdk/types': 3.692.0 '@aws-sdk/util-locate-window': 3.568.0 '@smithy/util-utf8': 2.3.0 tslib: 2.7.0 @@ -6970,7 +6983,7 @@ snapshots: '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.686.0 + '@aws-sdk/types': 3.692.0 tslib: 2.7.0 '@aws-crypto/supports-web-crypto@5.2.0': @@ -6979,97 +6992,97 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.686.0 + '@aws-sdk/types': 3.692.0 '@smithy/util-utf8': 2.3.0 tslib: 2.7.0 - '@aws-sdk/client-kms@3.687.0': + '@aws-sdk/client-kms@3.693.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.687.0(@aws-sdk/client-sts@3.687.0) - '@aws-sdk/client-sts': 3.687.0 - '@aws-sdk/core': 3.686.0 - '@aws-sdk/credential-provider-node': 3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0))(@aws-sdk/client-sts@3.687.0) - '@aws-sdk/middleware-host-header': 3.686.0 - '@aws-sdk/middleware-logger': 3.686.0 - '@aws-sdk/middleware-recursion-detection': 3.686.0 - '@aws-sdk/middleware-user-agent': 3.687.0 - '@aws-sdk/region-config-resolver': 3.686.0 - '@aws-sdk/types': 3.686.0 - '@aws-sdk/util-endpoints': 3.686.0 - '@aws-sdk/util-user-agent-browser': 3.686.0 - '@aws-sdk/util-user-agent-node': 3.687.0 - '@smithy/config-resolver': 3.0.10 - '@smithy/core': 2.5.1 - '@smithy/fetch-http-handler': 4.0.0 - '@smithy/hash-node': 3.0.8 - '@smithy/invalid-dependency': 3.0.8 - '@smithy/middleware-content-length': 3.0.10 - '@smithy/middleware-endpoint': 3.2.1 - '@smithy/middleware-retry': 3.0.25 - '@smithy/middleware-serde': 3.0.8 - '@smithy/middleware-stack': 3.0.8 - '@smithy/node-config-provider': 3.1.9 - '@smithy/node-http-handler': 3.2.5 - '@smithy/protocol-http': 4.1.5 - '@smithy/smithy-client': 3.4.2 - '@smithy/types': 3.6.0 - '@smithy/url-parser': 3.0.8 + '@aws-sdk/client-sso-oidc': 3.693.0(@aws-sdk/client-sts@3.693.0) + '@aws-sdk/client-sts': 3.693.0 + '@aws-sdk/core': 3.693.0 + '@aws-sdk/credential-provider-node': 3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0))(@aws-sdk/client-sts@3.693.0) + '@aws-sdk/middleware-host-header': 3.693.0 + '@aws-sdk/middleware-logger': 3.693.0 + '@aws-sdk/middleware-recursion-detection': 3.693.0 + '@aws-sdk/middleware-user-agent': 3.693.0 + '@aws-sdk/region-config-resolver': 3.693.0 + '@aws-sdk/types': 3.692.0 + '@aws-sdk/util-endpoints': 3.693.0 + '@aws-sdk/util-user-agent-browser': 3.693.0 + '@aws-sdk/util-user-agent-node': 3.693.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.3 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.3 + '@smithy/middleware-retry': 3.0.27 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.4 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.25 - '@smithy/util-defaults-mode-node': 3.0.25 - '@smithy/util-endpoints': 2.1.4 - '@smithy/util-middleware': 3.0.8 - '@smithy/util-retry': 3.0.8 + '@smithy/util-defaults-mode-browser': 3.0.27 + '@smithy/util-defaults-mode-node': 3.0.27 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-secrets-manager@3.687.0': + '@aws-sdk/client-secrets-manager@3.693.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.687.0(@aws-sdk/client-sts@3.687.0) - '@aws-sdk/client-sts': 3.687.0 - '@aws-sdk/core': 3.686.0 - '@aws-sdk/credential-provider-node': 3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0))(@aws-sdk/client-sts@3.687.0) - '@aws-sdk/middleware-host-header': 3.686.0 - '@aws-sdk/middleware-logger': 3.686.0 - '@aws-sdk/middleware-recursion-detection': 3.686.0 - '@aws-sdk/middleware-user-agent': 3.687.0 - '@aws-sdk/region-config-resolver': 3.686.0 - '@aws-sdk/types': 3.686.0 - '@aws-sdk/util-endpoints': 3.686.0 - '@aws-sdk/util-user-agent-browser': 3.686.0 - '@aws-sdk/util-user-agent-node': 3.687.0 - '@smithy/config-resolver': 3.0.10 - '@smithy/core': 2.5.1 - '@smithy/fetch-http-handler': 4.0.0 - '@smithy/hash-node': 3.0.8 - '@smithy/invalid-dependency': 3.0.8 - '@smithy/middleware-content-length': 3.0.10 - '@smithy/middleware-endpoint': 3.2.1 - '@smithy/middleware-retry': 3.0.25 - '@smithy/middleware-serde': 3.0.8 - '@smithy/middleware-stack': 3.0.8 - '@smithy/node-config-provider': 3.1.9 - '@smithy/node-http-handler': 3.2.5 - '@smithy/protocol-http': 4.1.5 - '@smithy/smithy-client': 3.4.2 - '@smithy/types': 3.6.0 - '@smithy/url-parser': 3.0.8 + '@aws-sdk/client-sso-oidc': 3.693.0(@aws-sdk/client-sts@3.693.0) + '@aws-sdk/client-sts': 3.693.0 + '@aws-sdk/core': 3.693.0 + '@aws-sdk/credential-provider-node': 3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0))(@aws-sdk/client-sts@3.693.0) + '@aws-sdk/middleware-host-header': 3.693.0 + '@aws-sdk/middleware-logger': 3.693.0 + '@aws-sdk/middleware-recursion-detection': 3.693.0 + '@aws-sdk/middleware-user-agent': 3.693.0 + '@aws-sdk/region-config-resolver': 3.693.0 + '@aws-sdk/types': 3.692.0 + '@aws-sdk/util-endpoints': 3.693.0 + '@aws-sdk/util-user-agent-browser': 3.693.0 + '@aws-sdk/util-user-agent-node': 3.693.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.3 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.3 + '@smithy/middleware-retry': 3.0.27 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.4 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.25 - '@smithy/util-defaults-mode-node': 3.0.25 - '@smithy/util-endpoints': 2.1.4 - '@smithy/util-middleware': 3.0.8 - '@smithy/util-retry': 3.0.8 + '@smithy/util-defaults-mode-browser': 3.0.27 + '@smithy/util-defaults-mode-node': 3.0.27 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 '@smithy/util-utf8': 3.0.0 '@types/uuid': 9.0.8 tslib: 2.7.0 @@ -7077,321 +7090,321 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0)': + '@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.687.0 - '@aws-sdk/core': 3.686.0 - '@aws-sdk/credential-provider-node': 3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0))(@aws-sdk/client-sts@3.687.0) - '@aws-sdk/middleware-host-header': 3.686.0 - '@aws-sdk/middleware-logger': 3.686.0 - '@aws-sdk/middleware-recursion-detection': 3.686.0 - '@aws-sdk/middleware-user-agent': 3.687.0 - '@aws-sdk/region-config-resolver': 3.686.0 - '@aws-sdk/types': 3.686.0 - '@aws-sdk/util-endpoints': 3.686.0 - '@aws-sdk/util-user-agent-browser': 3.686.0 - '@aws-sdk/util-user-agent-node': 3.687.0 - '@smithy/config-resolver': 3.0.10 - '@smithy/core': 2.5.1 - '@smithy/fetch-http-handler': 4.0.0 - '@smithy/hash-node': 3.0.8 - '@smithy/invalid-dependency': 3.0.8 - '@smithy/middleware-content-length': 3.0.10 - '@smithy/middleware-endpoint': 3.2.1 - '@smithy/middleware-retry': 3.0.25 - '@smithy/middleware-serde': 3.0.8 - '@smithy/middleware-stack': 3.0.8 - '@smithy/node-config-provider': 3.1.9 - '@smithy/node-http-handler': 3.2.5 - '@smithy/protocol-http': 4.1.5 - '@smithy/smithy-client': 3.4.2 - '@smithy/types': 3.6.0 - '@smithy/url-parser': 3.0.8 + '@aws-sdk/client-sts': 3.693.0 + '@aws-sdk/core': 3.693.0 + '@aws-sdk/credential-provider-node': 3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0))(@aws-sdk/client-sts@3.693.0) + '@aws-sdk/middleware-host-header': 3.693.0 + '@aws-sdk/middleware-logger': 3.693.0 + '@aws-sdk/middleware-recursion-detection': 3.693.0 + '@aws-sdk/middleware-user-agent': 3.693.0 + '@aws-sdk/region-config-resolver': 3.693.0 + '@aws-sdk/types': 3.692.0 + '@aws-sdk/util-endpoints': 3.693.0 + '@aws-sdk/util-user-agent-browser': 3.693.0 + '@aws-sdk/util-user-agent-node': 3.693.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.3 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.3 + '@smithy/middleware-retry': 3.0.27 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.4 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.25 - '@smithy/util-defaults-mode-node': 3.0.25 - '@smithy/util-endpoints': 2.1.4 - '@smithy/util-middleware': 3.0.8 - '@smithy/util-retry': 3.0.8 + '@smithy/util-defaults-mode-browser': 3.0.27 + '@smithy/util-defaults-mode-node': 3.0.27 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.687.0': + '@aws-sdk/client-sso@3.693.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.686.0 - '@aws-sdk/middleware-host-header': 3.686.0 - '@aws-sdk/middleware-logger': 3.686.0 - '@aws-sdk/middleware-recursion-detection': 3.686.0 - '@aws-sdk/middleware-user-agent': 3.687.0 - '@aws-sdk/region-config-resolver': 3.686.0 - '@aws-sdk/types': 3.686.0 - '@aws-sdk/util-endpoints': 3.686.0 - '@aws-sdk/util-user-agent-browser': 3.686.0 - '@aws-sdk/util-user-agent-node': 3.687.0 - '@smithy/config-resolver': 3.0.10 - '@smithy/core': 2.5.1 - '@smithy/fetch-http-handler': 4.0.0 - '@smithy/hash-node': 3.0.8 - '@smithy/invalid-dependency': 3.0.8 - '@smithy/middleware-content-length': 3.0.10 - '@smithy/middleware-endpoint': 3.2.1 - '@smithy/middleware-retry': 3.0.25 - '@smithy/middleware-serde': 3.0.8 - '@smithy/middleware-stack': 3.0.8 - '@smithy/node-config-provider': 3.1.9 - '@smithy/node-http-handler': 3.2.5 - '@smithy/protocol-http': 4.1.5 - '@smithy/smithy-client': 3.4.2 - '@smithy/types': 3.6.0 - '@smithy/url-parser': 3.0.8 + '@aws-sdk/core': 3.693.0 + '@aws-sdk/middleware-host-header': 3.693.0 + '@aws-sdk/middleware-logger': 3.693.0 + '@aws-sdk/middleware-recursion-detection': 3.693.0 + '@aws-sdk/middleware-user-agent': 3.693.0 + '@aws-sdk/region-config-resolver': 3.693.0 + '@aws-sdk/types': 3.692.0 + '@aws-sdk/util-endpoints': 3.693.0 + '@aws-sdk/util-user-agent-browser': 3.693.0 + '@aws-sdk/util-user-agent-node': 3.693.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.3 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.3 + '@smithy/middleware-retry': 3.0.27 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.4 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.25 - '@smithy/util-defaults-mode-node': 3.0.25 - '@smithy/util-endpoints': 2.1.4 - '@smithy/util-middleware': 3.0.8 - '@smithy/util-retry': 3.0.8 + '@smithy/util-defaults-mode-browser': 3.0.27 + '@smithy/util-defaults-mode-node': 3.0.27 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.687.0': + '@aws-sdk/client-sts@3.693.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.687.0(@aws-sdk/client-sts@3.687.0) - '@aws-sdk/core': 3.686.0 - '@aws-sdk/credential-provider-node': 3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0))(@aws-sdk/client-sts@3.687.0) - '@aws-sdk/middleware-host-header': 3.686.0 - '@aws-sdk/middleware-logger': 3.686.0 - '@aws-sdk/middleware-recursion-detection': 3.686.0 - '@aws-sdk/middleware-user-agent': 3.687.0 - '@aws-sdk/region-config-resolver': 3.686.0 - '@aws-sdk/types': 3.686.0 - '@aws-sdk/util-endpoints': 3.686.0 - '@aws-sdk/util-user-agent-browser': 3.686.0 - '@aws-sdk/util-user-agent-node': 3.687.0 - '@smithy/config-resolver': 3.0.10 - '@smithy/core': 2.5.1 - '@smithy/fetch-http-handler': 4.0.0 - '@smithy/hash-node': 3.0.8 - '@smithy/invalid-dependency': 3.0.8 - '@smithy/middleware-content-length': 3.0.10 - '@smithy/middleware-endpoint': 3.2.1 - '@smithy/middleware-retry': 3.0.25 - '@smithy/middleware-serde': 3.0.8 - '@smithy/middleware-stack': 3.0.8 - '@smithy/node-config-provider': 3.1.9 - '@smithy/node-http-handler': 3.2.5 - '@smithy/protocol-http': 4.1.5 - '@smithy/smithy-client': 3.4.2 - '@smithy/types': 3.6.0 - '@smithy/url-parser': 3.0.8 + '@aws-sdk/client-sso-oidc': 3.693.0(@aws-sdk/client-sts@3.693.0) + '@aws-sdk/core': 3.693.0 + '@aws-sdk/credential-provider-node': 3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0))(@aws-sdk/client-sts@3.693.0) + '@aws-sdk/middleware-host-header': 3.693.0 + '@aws-sdk/middleware-logger': 3.693.0 + '@aws-sdk/middleware-recursion-detection': 3.693.0 + '@aws-sdk/middleware-user-agent': 3.693.0 + '@aws-sdk/region-config-resolver': 3.693.0 + '@aws-sdk/types': 3.692.0 + '@aws-sdk/util-endpoints': 3.693.0 + '@aws-sdk/util-user-agent-browser': 3.693.0 + '@aws-sdk/util-user-agent-node': 3.693.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.3 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.3 + '@smithy/middleware-retry': 3.0.27 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.4 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 '@smithy/util-base64': 3.0.0 '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.25 - '@smithy/util-defaults-mode-node': 3.0.25 - '@smithy/util-endpoints': 2.1.4 - '@smithy/util-middleware': 3.0.8 - '@smithy/util-retry': 3.0.8 + '@smithy/util-defaults-mode-browser': 3.0.27 + '@smithy/util-defaults-mode-node': 3.0.27 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.686.0': - dependencies: - '@aws-sdk/types': 3.686.0 - '@smithy/core': 2.5.1 - '@smithy/node-config-provider': 3.1.9 - '@smithy/property-provider': 3.1.8 - '@smithy/protocol-http': 4.1.5 - '@smithy/signature-v4': 4.2.0 - '@smithy/smithy-client': 3.4.2 - '@smithy/types': 3.6.0 - '@smithy/util-middleware': 3.0.8 + '@aws-sdk/core@3.693.0': + dependencies: + '@aws-sdk/types': 3.692.0 + '@smithy/core': 2.5.3 + '@smithy/node-config-provider': 3.1.11 + '@smithy/property-provider': 3.1.10 + '@smithy/protocol-http': 4.1.7 + '@smithy/signature-v4': 4.2.3 + '@smithy/smithy-client': 3.4.4 + '@smithy/types': 3.7.1 + '@smithy/util-middleware': 3.0.10 fast-xml-parser: 4.4.1 tslib: 2.7.0 - '@aws-sdk/credential-provider-env@3.686.0': + '@aws-sdk/credential-provider-env@3.693.0': dependencies: - '@aws-sdk/core': 3.686.0 - '@aws-sdk/types': 3.686.0 - '@smithy/property-provider': 3.1.8 - '@smithy/types': 3.6.0 + '@aws-sdk/core': 3.693.0 + '@aws-sdk/types': 3.692.0 + '@smithy/property-provider': 3.1.10 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@aws-sdk/credential-provider-http@3.686.0': - dependencies: - '@aws-sdk/core': 3.686.0 - '@aws-sdk/types': 3.686.0 - '@smithy/fetch-http-handler': 4.0.0 - '@smithy/node-http-handler': 3.2.5 - '@smithy/property-provider': 3.1.8 - '@smithy/protocol-http': 4.1.5 - '@smithy/smithy-client': 3.4.2 - '@smithy/types': 3.6.0 - '@smithy/util-stream': 3.2.1 + '@aws-sdk/credential-provider-http@3.693.0': + dependencies: + '@aws-sdk/core': 3.693.0 + '@aws-sdk/types': 3.692.0 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/node-http-handler': 3.3.1 + '@smithy/property-provider': 3.1.10 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.4 + '@smithy/types': 3.7.1 + '@smithy/util-stream': 3.3.1 tslib: 2.7.0 - '@aws-sdk/credential-provider-ini@3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0))(@aws-sdk/client-sts@3.687.0)': - dependencies: - '@aws-sdk/client-sts': 3.687.0 - '@aws-sdk/core': 3.686.0 - '@aws-sdk/credential-provider-env': 3.686.0 - '@aws-sdk/credential-provider-http': 3.686.0 - '@aws-sdk/credential-provider-process': 3.686.0 - '@aws-sdk/credential-provider-sso': 3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0)) - '@aws-sdk/credential-provider-web-identity': 3.686.0(@aws-sdk/client-sts@3.687.0) - '@aws-sdk/types': 3.686.0 - '@smithy/credential-provider-imds': 3.2.5 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 + '@aws-sdk/credential-provider-ini@3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0))(@aws-sdk/client-sts@3.693.0)': + dependencies: + '@aws-sdk/client-sts': 3.693.0 + '@aws-sdk/core': 3.693.0 + '@aws-sdk/credential-provider-env': 3.693.0 + '@aws-sdk/credential-provider-http': 3.693.0 + '@aws-sdk/credential-provider-process': 3.693.0 + '@aws-sdk/credential-provider-sso': 3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0)) + '@aws-sdk/credential-provider-web-identity': 3.693.0(@aws-sdk/client-sts@3.693.0) + '@aws-sdk/types': 3.692.0 + '@smithy/credential-provider-imds': 3.2.7 + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 tslib: 2.7.0 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0))(@aws-sdk/client-sts@3.687.0)': - dependencies: - '@aws-sdk/credential-provider-env': 3.686.0 - '@aws-sdk/credential-provider-http': 3.686.0 - '@aws-sdk/credential-provider-ini': 3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0))(@aws-sdk/client-sts@3.687.0) - '@aws-sdk/credential-provider-process': 3.686.0 - '@aws-sdk/credential-provider-sso': 3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0)) - '@aws-sdk/credential-provider-web-identity': 3.686.0(@aws-sdk/client-sts@3.687.0) - '@aws-sdk/types': 3.686.0 - '@smithy/credential-provider-imds': 3.2.5 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 + '@aws-sdk/credential-provider-node@3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0))(@aws-sdk/client-sts@3.693.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.693.0 + '@aws-sdk/credential-provider-http': 3.693.0 + '@aws-sdk/credential-provider-ini': 3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0))(@aws-sdk/client-sts@3.693.0) + '@aws-sdk/credential-provider-process': 3.693.0 + '@aws-sdk/credential-provider-sso': 3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0)) + '@aws-sdk/credential-provider-web-identity': 3.693.0(@aws-sdk/client-sts@3.693.0) + '@aws-sdk/types': 3.692.0 + '@smithy/credential-provider-imds': 3.2.7 + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 tslib: 2.7.0 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-process@3.686.0': + '@aws-sdk/credential-provider-process@3.693.0': dependencies: - '@aws-sdk/core': 3.686.0 - '@aws-sdk/types': 3.686.0 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 + '@aws-sdk/core': 3.693.0 + '@aws-sdk/types': 3.692.0 + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@aws-sdk/credential-provider-sso@3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0))': + '@aws-sdk/credential-provider-sso@3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0))': dependencies: - '@aws-sdk/client-sso': 3.687.0 - '@aws-sdk/core': 3.686.0 - '@aws-sdk/token-providers': 3.686.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0)) - '@aws-sdk/types': 3.686.0 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 + '@aws-sdk/client-sso': 3.693.0 + '@aws-sdk/core': 3.693.0 + '@aws-sdk/token-providers': 3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0)) + '@aws-sdk/types': 3.692.0 + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 tslib: 2.7.0 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.686.0(@aws-sdk/client-sts@3.687.0)': + '@aws-sdk/credential-provider-web-identity@3.693.0(@aws-sdk/client-sts@3.693.0)': dependencies: - '@aws-sdk/client-sts': 3.687.0 - '@aws-sdk/core': 3.686.0 - '@aws-sdk/types': 3.686.0 - '@smithy/property-provider': 3.1.8 - '@smithy/types': 3.6.0 + '@aws-sdk/client-sts': 3.693.0 + '@aws-sdk/core': 3.693.0 + '@aws-sdk/types': 3.692.0 + '@smithy/property-provider': 3.1.10 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@aws-sdk/middleware-host-header@3.686.0': + '@aws-sdk/middleware-host-header@3.693.0': dependencies: - '@aws-sdk/types': 3.686.0 - '@smithy/protocol-http': 4.1.5 - '@smithy/types': 3.6.0 + '@aws-sdk/types': 3.692.0 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@aws-sdk/middleware-logger@3.686.0': + '@aws-sdk/middleware-logger@3.693.0': dependencies: - '@aws-sdk/types': 3.686.0 - '@smithy/types': 3.6.0 + '@aws-sdk/types': 3.692.0 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@aws-sdk/middleware-recursion-detection@3.686.0': + '@aws-sdk/middleware-recursion-detection@3.693.0': dependencies: - '@aws-sdk/types': 3.686.0 - '@smithy/protocol-http': 4.1.5 - '@smithy/types': 3.6.0 + '@aws-sdk/types': 3.692.0 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@aws-sdk/middleware-user-agent@3.687.0': + '@aws-sdk/middleware-user-agent@3.693.0': dependencies: - '@aws-sdk/core': 3.686.0 - '@aws-sdk/types': 3.686.0 - '@aws-sdk/util-endpoints': 3.686.0 - '@smithy/core': 2.5.1 - '@smithy/protocol-http': 4.1.5 - '@smithy/types': 3.6.0 + '@aws-sdk/core': 3.693.0 + '@aws-sdk/types': 3.692.0 + '@aws-sdk/util-endpoints': 3.693.0 + '@smithy/core': 2.5.3 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@aws-sdk/region-config-resolver@3.686.0': + '@aws-sdk/region-config-resolver@3.693.0': dependencies: - '@aws-sdk/types': 3.686.0 - '@smithy/node-config-provider': 3.1.9 - '@smithy/types': 3.6.0 + '@aws-sdk/types': 3.692.0 + '@smithy/node-config-provider': 3.1.11 + '@smithy/types': 3.7.1 '@smithy/util-config-provider': 3.0.0 - '@smithy/util-middleware': 3.0.8 + '@smithy/util-middleware': 3.0.10 tslib: 2.7.0 - '@aws-sdk/token-providers@3.686.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0))': + '@aws-sdk/token-providers@3.693.0(@aws-sdk/client-sso-oidc@3.693.0(@aws-sdk/client-sts@3.693.0))': dependencies: - '@aws-sdk/client-sso-oidc': 3.687.0(@aws-sdk/client-sts@3.687.0) - '@aws-sdk/types': 3.686.0 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 + '@aws-sdk/client-sso-oidc': 3.693.0(@aws-sdk/client-sts@3.693.0) + '@aws-sdk/types': 3.692.0 + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@aws-sdk/types@3.686.0': + '@aws-sdk/types@3.692.0': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@aws-sdk/util-endpoints@3.686.0': + '@aws-sdk/util-endpoints@3.693.0': dependencies: - '@aws-sdk/types': 3.686.0 - '@smithy/types': 3.6.0 - '@smithy/util-endpoints': 2.1.4 + '@aws-sdk/types': 3.692.0 + '@smithy/types': 3.7.1 + '@smithy/util-endpoints': 2.1.6 tslib: 2.7.0 '@aws-sdk/util-locate-window@3.568.0': dependencies: tslib: 2.7.0 - '@aws-sdk/util-user-agent-browser@3.686.0': + '@aws-sdk/util-user-agent-browser@3.693.0': dependencies: - '@aws-sdk/types': 3.686.0 - '@smithy/types': 3.6.0 + '@aws-sdk/types': 3.692.0 + '@smithy/types': 3.7.1 bowser: 2.11.0 tslib: 2.7.0 - '@aws-sdk/util-user-agent-node@3.687.0': + '@aws-sdk/util-user-agent-node@3.693.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.687.0 - '@aws-sdk/types': 3.686.0 - '@smithy/node-config-provider': 3.1.9 - '@smithy/types': 3.6.0 + '@aws-sdk/middleware-user-agent': 3.693.0 + '@aws-sdk/types': 3.692.0 + '@smithy/node-config-provider': 3.1.11 + '@smithy/types': 3.7.1 tslib: 2.7.0 '@babel/code-frame@7.25.7': @@ -7704,7 +7717,7 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 - '@coinbase/wallet-sdk@4.2.0(@types/node@22.9.0)(jsdom@25.0.1)': + '@coinbase/wallet-sdk@4.2.2(@types/node@22.9.0)(jsdom@25.0.1)': dependencies: '@noble/hashes': 1.5.0 clsx: 1.2.1 @@ -8234,7 +8247,7 @@ snapshots: rfdc: 1.4.1 yaml: 2.5.1 - '@fastify/swagger@9.2.0': + '@fastify/swagger@9.3.0': dependencies: fastify-plugin: 5.0.1 json-schema-resolver: 2.0.0 @@ -8244,9 +8257,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@fastify/type-provider-typebox@5.0.1(@sinclair/typebox@0.34.0)': + '@fastify/type-provider-typebox@5.0.1(@sinclair/typebox@0.34.3)': dependencies: - '@sinclair/typebox': 0.34.0 + '@sinclair/typebox': 0.34.3 '@floating-ui/core@1.6.8': dependencies: @@ -9174,60 +9187,60 @@ snapshots: dependencies: '@sentry/types': 8.38.0 - '@sinclair/typebox@0.34.0': {} + '@sinclair/typebox@0.34.3': {} '@sindresorhus/is@4.6.0': {} - '@smithy/abort-controller@3.1.6': + '@smithy/abort-controller@3.1.8': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/config-resolver@3.0.10': + '@smithy/config-resolver@3.0.12': dependencies: - '@smithy/node-config-provider': 3.1.9 - '@smithy/types': 3.6.0 + '@smithy/node-config-provider': 3.1.11 + '@smithy/types': 3.7.1 '@smithy/util-config-provider': 3.0.0 - '@smithy/util-middleware': 3.0.8 + '@smithy/util-middleware': 3.0.10 tslib: 2.7.0 - '@smithy/core@2.5.1': + '@smithy/core@2.5.3': dependencies: - '@smithy/middleware-serde': 3.0.8 - '@smithy/protocol-http': 4.1.5 - '@smithy/types': 3.6.0 + '@smithy/middleware-serde': 3.0.10 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-middleware': 3.0.8 - '@smithy/util-stream': 3.2.1 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-stream': 3.3.1 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 - '@smithy/credential-provider-imds@3.2.5': + '@smithy/credential-provider-imds@3.2.7': dependencies: - '@smithy/node-config-provider': 3.1.9 - '@smithy/property-provider': 3.1.8 - '@smithy/types': 3.6.0 - '@smithy/url-parser': 3.0.8 + '@smithy/node-config-provider': 3.1.11 + '@smithy/property-provider': 3.1.10 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 tslib: 2.7.0 - '@smithy/fetch-http-handler@4.0.0': + '@smithy/fetch-http-handler@4.1.1': dependencies: - '@smithy/protocol-http': 4.1.5 - '@smithy/querystring-builder': 3.0.8 - '@smithy/types': 3.6.0 + '@smithy/protocol-http': 4.1.7 + '@smithy/querystring-builder': 3.0.10 + '@smithy/types': 3.7.1 '@smithy/util-base64': 3.0.0 tslib: 2.7.0 - '@smithy/hash-node@3.0.8': + '@smithy/hash-node@3.0.10': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 '@smithy/util-buffer-from': 3.0.0 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 - '@smithy/invalid-dependency@3.0.8': + '@smithy/invalid-dependency@3.0.10': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 tslib: 2.7.0 '@smithy/is-array-buffer@2.2.0': @@ -9238,119 +9251,119 @@ snapshots: dependencies: tslib: 2.7.0 - '@smithy/middleware-content-length@3.0.10': + '@smithy/middleware-content-length@3.0.12': dependencies: - '@smithy/protocol-http': 4.1.5 - '@smithy/types': 3.6.0 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/middleware-endpoint@3.2.1': + '@smithy/middleware-endpoint@3.2.3': dependencies: - '@smithy/core': 2.5.1 - '@smithy/middleware-serde': 3.0.8 - '@smithy/node-config-provider': 3.1.9 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 - '@smithy/url-parser': 3.0.8 - '@smithy/util-middleware': 3.0.8 + '@smithy/core': 2.5.3 + '@smithy/middleware-serde': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 + '@smithy/util-middleware': 3.0.10 tslib: 2.7.0 - '@smithy/middleware-retry@3.0.25': + '@smithy/middleware-retry@3.0.27': dependencies: - '@smithy/node-config-provider': 3.1.9 - '@smithy/protocol-http': 4.1.5 - '@smithy/service-error-classification': 3.0.8 - '@smithy/smithy-client': 3.4.2 - '@smithy/types': 3.6.0 - '@smithy/util-middleware': 3.0.8 - '@smithy/util-retry': 3.0.8 + '@smithy/node-config-provider': 3.1.11 + '@smithy/protocol-http': 4.1.7 + '@smithy/service-error-classification': 3.0.10 + '@smithy/smithy-client': 3.4.4 + '@smithy/types': 3.7.1 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 tslib: 2.7.0 uuid: 9.0.1 - '@smithy/middleware-serde@3.0.8': + '@smithy/middleware-serde@3.0.10': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/middleware-stack@3.0.8': + '@smithy/middleware-stack@3.0.10': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/node-config-provider@3.1.9': + '@smithy/node-config-provider@3.1.11': dependencies: - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/node-http-handler@3.2.5': + '@smithy/node-http-handler@3.3.1': dependencies: - '@smithy/abort-controller': 3.1.6 - '@smithy/protocol-http': 4.1.5 - '@smithy/querystring-builder': 3.0.8 - '@smithy/types': 3.6.0 + '@smithy/abort-controller': 3.1.8 + '@smithy/protocol-http': 4.1.7 + '@smithy/querystring-builder': 3.0.10 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/property-provider@3.1.8': + '@smithy/property-provider@3.1.10': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/protocol-http@4.1.5': + '@smithy/protocol-http@4.1.7': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/querystring-builder@3.0.8': + '@smithy/querystring-builder@3.0.10': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 '@smithy/util-uri-escape': 3.0.0 tslib: 2.7.0 - '@smithy/querystring-parser@3.0.8': + '@smithy/querystring-parser@3.0.10': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/service-error-classification@3.0.8': + '@smithy/service-error-classification@3.0.10': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 - '@smithy/shared-ini-file-loader@3.1.9': + '@smithy/shared-ini-file-loader@3.1.11': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/signature-v4@4.2.0': + '@smithy/signature-v4@4.2.3': dependencies: '@smithy/is-array-buffer': 3.0.0 - '@smithy/protocol-http': 4.1.5 - '@smithy/types': 3.6.0 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 '@smithy/util-hex-encoding': 3.0.0 - '@smithy/util-middleware': 3.0.8 + '@smithy/util-middleware': 3.0.10 '@smithy/util-uri-escape': 3.0.0 '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 - '@smithy/smithy-client@3.4.2': + '@smithy/smithy-client@3.4.4': dependencies: - '@smithy/core': 2.5.1 - '@smithy/middleware-endpoint': 3.2.1 - '@smithy/middleware-stack': 3.0.8 - '@smithy/protocol-http': 4.1.5 - '@smithy/types': 3.6.0 - '@smithy/util-stream': 3.2.1 + '@smithy/core': 2.5.3 + '@smithy/middleware-endpoint': 3.2.3 + '@smithy/middleware-stack': 3.0.10 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 + '@smithy/util-stream': 3.3.1 tslib: 2.7.0 - '@smithy/types@3.6.0': + '@smithy/types@3.7.1': dependencies: tslib: 2.7.0 - '@smithy/url-parser@3.0.8': + '@smithy/url-parser@3.0.10': dependencies: - '@smithy/querystring-parser': 3.0.8 - '@smithy/types': 3.6.0 + '@smithy/querystring-parser': 3.0.10 + '@smithy/types': 3.7.1 tslib: 2.7.0 '@smithy/util-base64@3.0.0': @@ -9381,50 +9394,50 @@ snapshots: dependencies: tslib: 2.7.0 - '@smithy/util-defaults-mode-browser@3.0.25': + '@smithy/util-defaults-mode-browser@3.0.27': dependencies: - '@smithy/property-provider': 3.1.8 - '@smithy/smithy-client': 3.4.2 - '@smithy/types': 3.6.0 + '@smithy/property-provider': 3.1.10 + '@smithy/smithy-client': 3.4.4 + '@smithy/types': 3.7.1 bowser: 2.11.0 tslib: 2.7.0 - '@smithy/util-defaults-mode-node@3.0.25': + '@smithy/util-defaults-mode-node@3.0.27': dependencies: - '@smithy/config-resolver': 3.0.10 - '@smithy/credential-provider-imds': 3.2.5 - '@smithy/node-config-provider': 3.1.9 - '@smithy/property-provider': 3.1.8 - '@smithy/smithy-client': 3.4.2 - '@smithy/types': 3.6.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/credential-provider-imds': 3.2.7 + '@smithy/node-config-provider': 3.1.11 + '@smithy/property-provider': 3.1.10 + '@smithy/smithy-client': 3.4.4 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/util-endpoints@2.1.4': + '@smithy/util-endpoints@2.1.6': dependencies: - '@smithy/node-config-provider': 3.1.9 - '@smithy/types': 3.6.0 + '@smithy/node-config-provider': 3.1.11 + '@smithy/types': 3.7.1 tslib: 2.7.0 '@smithy/util-hex-encoding@3.0.0': dependencies: tslib: 2.7.0 - '@smithy/util-middleware@3.0.8': + '@smithy/util-middleware@3.0.10': dependencies: - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/util-retry@3.0.8': + '@smithy/util-retry@3.0.10': dependencies: - '@smithy/service-error-classification': 3.0.8 - '@smithy/types': 3.6.0 + '@smithy/service-error-classification': 3.0.10 + '@smithy/types': 3.7.1 tslib: 2.7.0 - '@smithy/util-stream@3.2.1': + '@smithy/util-stream@3.3.1': dependencies: - '@smithy/fetch-http-handler': 4.0.0 - '@smithy/node-http-handler': 3.2.5 - '@smithy/types': 3.6.0 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/node-http-handler': 3.3.1 + '@smithy/types': 3.7.1 '@smithy/util-base64': 3.0.0 '@smithy/util-buffer-from': 3.0.0 '@smithy/util-hex-encoding': 3.0.0 @@ -9727,10 +9740,10 @@ snapshots: dependencies: storybook: 8.4.4(prettier@2.8.8) - '@sushiswap/tines@1.0.11(viem@2.21.41(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8)': + '@sushiswap/tines@1.0.11(viem@2.21.44(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8)': dependencies: seedrandom: 3.0.5 - sushi: 3.0.0(viem@2.21.41(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8) + sushi: 3.0.0(viem@2.21.44(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8) transitivePeerDependencies: - viem - zod @@ -9739,25 +9752,25 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tanstack/query-core@5.59.17': {} + '@tanstack/query-core@5.59.20': {} - '@tanstack/react-query@5.59.19(react@18.3.1)': + '@tanstack/react-query@5.59.20(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.59.17 + '@tanstack/query-core': 5.59.20 react: 18.3.1 '@thirdweb-dev/engine@0.0.16': {} '@tootallnate/once@2.0.0': {} - '@treasure-dev/tdk-core@2.7.1(@tanstack/query-core@5.59.17)(@types/react@18.3.12)(react@18.3.1)(thirdweb@5.67.0(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8))(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(zod@3.23.8)': + '@treasure-dev/tdk-core@2.7.1(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(thirdweb@5.68.0(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8))(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(zod@3.23.8)': dependencies: - '@sushiswap/tines': 1.0.11(viem@2.21.41(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8) - '@wagmi/core': 2.14.1(@tanstack/query-core@5.59.17)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.41(typescript@5.6.3)(zod@3.23.8)) + '@sushiswap/tines': 1.0.11(viem@2.21.44(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8) + '@wagmi/core': 2.14.3(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.44(typescript@5.6.3)(zod@3.23.8)) abitype: 1.0.6(typescript@5.6.3)(zod@3.23.8) jwt-decode: 4.0.0 - thirdweb: 5.67.0(@aws-sdk/client-kms@3.687.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) - viem: 2.21.41(typescript@5.6.3)(zod@3.23.8) + thirdweb: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + viem: 2.21.44(typescript@5.6.3)(zod@3.23.8) transitivePeerDependencies: - '@tanstack/query-core' - '@types/react' @@ -9962,14 +9975,14 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 - '@wagmi/core@2.14.1(@tanstack/query-core@5.59.17)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.41(typescript@5.6.3)(zod@3.23.8))': + '@wagmi/core@2.14.3(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.44(typescript@5.6.3)(zod@3.23.8))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.6.3) - viem: 2.21.41(typescript@5.6.3)(zod@3.23.8) + viem: 2.21.44(typescript@5.6.3)(zod@3.23.8) zustand: 5.0.0(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.0(react@18.3.1)) optionalDependencies: - '@tanstack/query-core': 5.59.17 + '@tanstack/query-core': 5.59.20 typescript: 5.6.3 transitivePeerDependencies: - '@types/react' @@ -9977,14 +9990,14 @@ snapshots: - react - use-sync-external-store - '@wagmi/core@2.14.3(@tanstack/query-core@5.59.17)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.41(typescript@5.6.3)(zod@3.23.8))': + '@wagmi/core@2.14.6(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.44(typescript@5.6.3)(zod@3.23.8))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.6.3) - viem: 2.21.41(typescript@5.6.3)(zod@3.23.8) + viem: 2.21.44(typescript@5.6.3)(zod@3.23.8) zustand: 5.0.0(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.0(react@18.3.1)) optionalDependencies: - '@tanstack/query-core': 5.59.17 + '@tanstack/query-core': 5.59.20 typescript: 5.6.3 transitivePeerDependencies: - '@types/react' @@ -10593,7 +10606,7 @@ snapshots: aws-kms-signer@0.5.3: dependencies: - '@aws-sdk/client-kms': 3.687.0 + '@aws-sdk/client-kms': 3.693.0 asn1js: 3.0.5 bn.js: 5.2.1 keccak: 3.0.4 @@ -12018,7 +12031,7 @@ snapshots: dependencies: ms: 2.1.3 - husky@9.1.6: {} + husky@9.1.7: {} i18next-browser-languagedetector@8.0.0: dependencies: @@ -12335,7 +12348,7 @@ snapshots: keyvaluestorage-interface@1.0.0: {} - knip@5.36.6(@types/node@22.9.0)(typescript@5.6.3): + knip@5.37.1(@types/node@22.9.0)(typescript@5.6.3): dependencies: '@nodelib/fs.walk': 1.2.8 '@snyk/github-codeowners': 1.1.0 @@ -12455,7 +12468,7 @@ snapshots: mlly: 1.7.1 node-forge: 1.3.1 pathe: 1.1.2 - std-env: 3.7.0 + std-env: 3.8.0 ufo: 1.5.4 untun: 0.1.3 uqr: 0.1.2 @@ -12907,6 +12920,34 @@ snapshots: outdent@0.5.0: {} + ox@0.1.2(typescript@5.6.3)(zod@3.23.8): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/bip32': 1.5.0 + '@scure/bip39': 1.4.0 + abitype: 1.0.6(typescript@5.6.3)(zod@3.23.8) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - zod + + ox@0.1.3(typescript@5.6.3)(zod@3.23.8): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/bip32': 1.5.0 + '@scure/bip39': 1.4.0 + abitype: 1.0.6(typescript@5.6.3)(zod@3.23.8) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - zod + p-cancelable@2.1.1: {} p-filter@2.1.0: @@ -13706,8 +13747,6 @@ snapshots: statuses@2.0.1: {} - std-env@3.7.0: {} - std-env@3.8.0: {} storybook@8.4.4(prettier@2.8.8): @@ -13806,7 +13845,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - sushi@3.0.0(viem@2.21.41(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8): + sushi@3.0.0(viem@2.21.44(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8): dependencies: big.js: 6.1.1 decimal.js-light: 2.5.1 @@ -13814,14 +13853,14 @@ snapshots: tiny-invariant: 1.3.1 toformat: 2.0.0 optionalDependencies: - viem: 2.21.41(typescript@5.6.3)(zod@3.23.8) + viem: 2.21.44(typescript@5.6.3)(zod@3.23.8) zod: 3.23.8 symbol-tree@3.2.4: {} system-architecture@0.1.0: {} - tailwind-config-viewer@2.0.4(tailwindcss@3.4.14): + tailwind-config-viewer@2.0.4(tailwindcss@3.4.15): dependencies: '@koa/router': 12.0.2 commander: 6.2.1 @@ -13831,17 +13870,17 @@ snapshots: open: 7.4.2 portfinder: 1.0.32 replace-in-file: 6.3.5 - tailwindcss: 3.4.14 + tailwindcss: 3.4.15 transitivePeerDependencies: - supports-color tailwind-merge@2.5.4: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.14): + tailwindcss-animate@1.0.7(tailwindcss@3.4.15): dependencies: - tailwindcss: 3.4.14 + tailwindcss: 3.4.15 - tailwindcss@3.4.14: + tailwindcss@3.4.15: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -13902,9 +13941,9 @@ snapshots: dependencies: any-promise: 1.3.0 - thirdweb@5.67.0(@aws-sdk/client-kms@3.687.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8): + thirdweb@5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8): dependencies: - '@coinbase/wallet-sdk': 4.2.0(@types/node@22.9.0)(jsdom@25.0.1) + '@coinbase/wallet-sdk': 4.2.2(@types/node@22.9.0)(jsdom@25.0.1) '@emotion/react': 11.13.3(@types/react@18.3.12)(react@18.3.1) '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@google/model-viewer': 2.1.1 @@ -13915,17 +13954,18 @@ snapshots: '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-icons': 1.3.1(react@18.3.1) '@radix-ui/react-tooltip': 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-query': 5.59.19(react@18.3.1) + '@tanstack/react-query': 5.59.20(react@18.3.1) '@walletconnect/ethereum-provider': 2.17.2(@types/react@18.3.12)(encoding@0.1.13)(react@18.3.1) '@walletconnect/sign-client': 2.17.2 abitype: 1.0.6(typescript@5.6.3)(zod@3.23.8) fuse.js: 7.0.0 input-otp: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) mipd: 0.0.7(typescript@5.6.3) + ox: 0.1.3(typescript@5.6.3)(zod@3.23.8) uqr: 0.1.2 - viem: 2.21.41(typescript@5.6.3)(zod@3.23.8) + viem: 2.21.44(typescript@5.6.3)(zod@3.23.8) optionalDependencies: - '@aws-sdk/client-kms': 3.687.0 + '@aws-sdk/client-kms': 3.693.0 react: 18.3.1 typescript: 5.6.3 transitivePeerDependencies: @@ -14234,7 +14274,7 @@ snapshots: utils-merge@1.0.1: {} - uuid@11.0.2: {} + uuid@11.0.3: {} uuid@9.0.1: {} @@ -14255,15 +14295,15 @@ snapshots: extsprintf: 1.4.1 optional: true - viem@2.21.41(typescript@5.6.3)(zod@3.23.8): + viem@2.21.44(typescript@5.6.3)(zod@3.23.8): dependencies: - '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.6.0 '@noble/hashes': 1.5.0 '@scure/bip32': 1.5.0 '@scure/bip39': 1.4.0 abitype: 1.0.6(typescript@5.6.3)(zod@3.23.8) isows: 1.0.6(ws@8.18.0) + ox: 0.1.2(typescript@5.6.3)(zod@3.23.8) webauthn-p256: 0.0.10 ws: 8.18.0 optionalDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1ea64469..45cfa52d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,8 +4,8 @@ packages: - "examples/*" catalog: - "@aws-sdk/client-kms": ^3.687.0 - "@aws-sdk/client-secrets-manager": ^3.687.0 + "@aws-sdk/client-kms": ^3.693.0 + "@aws-sdk/client-secrets-manager": ^3.693.0 "@biomejs/biome": ^1.9.4 "@biomejs/cli-linux-x64": ^1.9.4 "@changesets/cli": ^2.27.9 @@ -14,7 +14,7 @@ catalog: "@electron-toolkit/utils": ^3.0.0 "@esbuild/linux-x64": ^0.24.0 "@fastify/cors": ^10.0.0 - "@fastify/swagger": ^9.2.0 + "@fastify/swagger": ^9.3.0 "@fastify/swagger-ui": ^5.1.0 "@fastify/type-provider-typebox": ^5.0.1 "@prisma/client": ^5.22.0 @@ -22,7 +22,7 @@ catalog: "@radix-ui/react-visually-hidden": ^1.1.0 "@rollup/rollup-linux-x64-gnu": ^4.24.0 "@sentry/node": ^8.38.0 - "@sinclair/typebox": ^0.34.0 + "@sinclair/typebox": ^0.34.3 "@storybook/addon-essentials": ^8.4.4 "@storybook/react": ^8.4.4 "@storybook/react-vite": ^8.4.4 @@ -34,7 +34,7 @@ catalog: "@types/react-dom": ^18.3.1 "@types/uuid": "^10.0.0" "@vitejs/plugin-react": ^4.3.3 - "@wagmi/core": ^2.14.3 + "@wagmi/core": ^2.14.6 abitype: ^1.0.6 autoprefixer: ^10.4.20 "aws-kms-signer": ^0.5.3 @@ -46,14 +46,14 @@ catalog: "electron-vite": ^2.3.0 express: ^4.21.0 fastify: ^5.1.0 - husky: ^9.1.6 + husky: ^9.1.7 i18next: ^23.16.5 "i18next-browser-languagedetector": ^8.0.0 "input-otp": ^1.4.1 jsdom: ^25.0.1 jsonwebtoken: ^9.0.2 "jwt-decode": ^4.0.0 - knip: ^5.36.6 + knip: ^5.37.1 lint-staged: ^15.2.10 pino: ^9.5.0 pino-pretty: ^13.0.0 @@ -63,15 +63,15 @@ catalog: "react-dom": ^18.2.0 "react-i18next": ^15.1.1 storybook: ^8.4.4 - tailwindcss: ^3.4.14 + tailwindcss: ^3.4.15 "tailwind-config-viewer": ^2.0.4 "tailwindcss-animate": ^1.0.7 "tailwind-merge": ^2.5.4 - thirdweb: ^5.67.0 + thirdweb: ^5.68.0 tsup: 8.3.0 # --watch mode broken with Fastify in later versions turbo: ^2.3.0 typescript: ^5.6.3 - uuid: ^11.0.2 - viem: 2.21.41 # matches Thirdweb version to satisfy getAwsKmsAccount types + uuid: ^11.0.3 + viem: 2.21.44 # matches Thirdweb version to satisfy getAwsKmsAccount types vite: ^5.4.11 vitest: ^2.1.5 From 79cab996c7276463906610e44147bf620f9f2cea Mon Sep 17 00:00:00 2001 From: Antlion12 Date: Mon, 18 Nov 2024 15:02:26 -0800 Subject: [PATCH 11/20] Index the user_smart_account.address field. --- .../migration.sql | 2 ++ apps/api/prisma/schema.prisma | 1 + 2 files changed, 3 insertions(+) create mode 100644 apps/api/prisma/migrations/20241118225941_smart_account_index_address_only/migration.sql diff --git a/apps/api/prisma/migrations/20241118225941_smart_account_index_address_only/migration.sql b/apps/api/prisma/migrations/20241118225941_smart_account_index_address_only/migration.sql new file mode 100644 index 00000000..b58abc21 --- /dev/null +++ b/apps/api/prisma/migrations/20241118225941_smart_account_index_address_only/migration.sql @@ -0,0 +1,2 @@ +-- CreateIndex +CREATE INDEX "user_smart_account_address_idx" ON "public"."user_smart_account"("address"); diff --git a/apps/api/prisma/schema.prisma b/apps/api/prisma/schema.prisma index 8eeebab6..28e5da5f 100644 --- a/apps/api/prisma/schema.prisma +++ b/apps/api/prisma/schema.prisma @@ -58,6 +58,7 @@ model UserSmartAccount { updatedAt DateTime @updatedAt @map("updated_at") @@unique([chainId, address]) + @@index([address]) @@index([userId]) @@map("user_smart_account") @@schema("public") From 2fecaf2c3c7036396529cb7e328b41fa28a7072b Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Mon, 18 Nov 2024 15:33:30 -0800 Subject: [PATCH 12/20] handle user migration --- packages/core/src/api.ts | 7 ++++ .../connect/ConnectMigrateUserView.tsx | 10 ++++-- .../src/components/connect/ConnectModal.tsx | 36 ++++++++++++++++--- packages/react/src/contexts/treasure.tsx | 2 ++ packages/react/src/types.ts | 1 + 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/packages/core/src/api.ts b/packages/core/src/api.ts index b68b8fde..32575a52 100644 --- a/packages/core/src/api.ts +++ b/packages/core/src/api.ts @@ -39,6 +39,8 @@ import type { ReadUserTransactionsReply, RouteReply, UpdateCurrentUserBody, + UpdateCurrentUserMigrationBody, + UpdateCurrentUserMigrationReply, UpdateCurrentUserReply, } from "../../../apps/api/src/schema"; import type { @@ -215,6 +217,11 @@ export class TDKAPI { "/users/me", params, ), + migrate: (params: UpdateCurrentUserMigrationBody) => + this.put( + "/users/me/migrate", + params, + ), getSessions: (params: ReadCurrentUserSessionsQuerystring) => this.get("/users/me/sessions", params), getPublicProfile: (id: string) => diff --git a/packages/react/src/components/connect/ConnectMigrateUserView.tsx b/packages/react/src/components/connect/ConnectMigrateUserView.tsx index 394a561b..8b7be42c 100644 --- a/packages/react/src/components/connect/ConnectMigrateUserView.tsx +++ b/packages/react/src/components/connect/ConnectMigrateUserView.tsx @@ -13,7 +13,7 @@ type Props = { isLoading?: boolean; error?: string; onApprove: (id: string) => void; - onReject: () => void; + onReject: (id: string) => void; }; export const ConnectMigrateUserView = ({ @@ -111,7 +111,13 @@ export const ConnectMigrateUserView = ({ > {t("connect.migrate.approve")} -
diff --git a/packages/react/src/components/connect/ConnectModal.tsx b/packages/react/src/components/connect/ConnectModal.tsx index 8d764aba..92c4d3be 100644 --- a/packages/react/src/components/connect/ConnectModal.tsx +++ b/packages/react/src/components/connect/ConnectModal.tsx @@ -71,9 +71,11 @@ export const ConnectModal = ({ ecosystemId, ecosystemPartnerId, chain, + tdk, contractAddresses, logIn, logOut, + updateUser, } = useTreasure(); const accountAbstraction = { chain, @@ -139,9 +141,10 @@ export const ConnectModal = ({ setState((curr) => ({ ...curr, legacyProfiles })); } else { // Nothing to migrate, close the connect modal - onConnected?.("email", wallet, user); onOpenChange(false); } + + onConnected?.("email", wallet, user); } catch (err) { console.error("Error logging in wallet with email:", err); setError(err, true); @@ -269,9 +272,10 @@ export const ConnectModal = ({ setState((curr) => ({ ...curr, legacyProfiles })); } else { // Nothing to migrate, close the connect modal - onConnected?.(method, wallet, user); onOpenChange(false); } + + onConnected?.(method, wallet, user); } catch (err) { console.error("Error logging in wallet:", err); setError(err); @@ -298,6 +302,26 @@ export const ConnectModal = ({ } }; + const handleMigrateUser = async ({ + legacyProfileId, + rejected = false, + }: { legacyProfileId: string; rejected?: boolean }) => { + try { + const updatedUser = await tdk.user.migrate({ + id: legacyProfileId, + rejected, + }); + updateUser(updatedUser); + } catch (err) { + console.error("Error migrating user:", err); + setError(err); + return; + } + + // Migration complete, close the connect modal + onOpenChange(false); + }; + // Reset modal state when it's opened useEffect(() => { if (open) { @@ -336,8 +360,12 @@ export const ConnectModal = ({ legacyProfiles={legacyProfiles} isLoading={isLoading} error={error} - onApprove={() => {}} - onReject={() => {}} + onApprove={(legacyProfileId) => + handleMigrateUser({ legacyProfileId }) + } + onReject={(legacyProfileId) => + handleMigrateUser({ legacyProfileId, rejected: true }) + } /> ) : email ? ( + setUser((curr) => (curr ? { ...curr, ...partialUser } : undefined)), startUserSession: (options: SessionOptions) => isUsingTreasureLauncher ? startUserSessionViaLauncher(options) diff --git a/packages/react/src/types.ts b/packages/react/src/types.ts index 21af456e..8e023782 100644 --- a/packages/react/src/types.ts +++ b/packages/react/src/types.ts @@ -67,6 +67,7 @@ export type ContextValues = { chainId?: number, ) => Promise<{ user: User | undefined; legacyProfiles: LegacyProfile[] }>; logOut: () => void; + updateUser: (user: Partial) => void; startUserSession: (options: SessionOptions) => void; switchChain: (chainId: number) => void; setRootElement: (el: ReactNode) => void; From d6f94e94c6efa01c7045959cfb559391fb7ad2f4 Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Mon, 18 Nov 2024 15:45:39 -0800 Subject: [PATCH 13/20] fix user migrate action --- apps/api/src/utils/user.ts | 2 +- packages/core/src/api.ts | 8 ++++---- packages/react/src/components/connect/ConnectModal.tsx | 4 ++-- packages/react/src/translations/en.ts | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/api/src/utils/user.ts b/apps/api/src/utils/user.ts index 6707ea36..035a341f 100644 --- a/apps/api/src/utils/user.ts +++ b/apps/api/src/utils/user.ts @@ -106,7 +106,7 @@ export const migrateLegacyUser = async ({ >; // Merge data if user has existing profile or connect legacy profile if not - if (userProfileId) { + if (userProfileId && userProfileId !== legacyProfile.id) { const [updateResult] = await db.$transaction([ db.userProfile.update({ where: { diff --git a/packages/core/src/api.ts b/packages/core/src/api.ts index 32575a52..88c81994 100644 --- a/packages/core/src/api.ts +++ b/packages/core/src/api.ts @@ -218,10 +218,10 @@ export class TDKAPI { params, ), migrate: (params: UpdateCurrentUserMigrationBody) => - this.put( - "/users/me/migrate", - params, - ), + this.post< + UpdateCurrentUserMigrationBody, + UpdateCurrentUserMigrationReply + >("/users/me/migrate", params), getSessions: (params: ReadCurrentUserSessionsQuerystring) => this.get("/users/me/sessions", params), getPublicProfile: (id: string) => diff --git a/packages/react/src/components/connect/ConnectModal.tsx b/packages/react/src/components/connect/ConnectModal.tsx index 92c4d3be..cdb8da4f 100644 --- a/packages/react/src/components/connect/ConnectModal.tsx +++ b/packages/react/src/components/connect/ConnectModal.tsx @@ -138,7 +138,7 @@ export const ConnectModal = ({ const { user, legacyProfiles } = await logIn(wallet); if (legacyProfiles.length > 1) { // User has a legacy profile migration choice - setState((curr) => ({ ...curr, legacyProfiles })); + setState((curr) => ({ ...curr, isLoading: false, legacyProfiles })); } else { // Nothing to migrate, close the connect modal onOpenChange(false); @@ -269,7 +269,7 @@ export const ConnectModal = ({ const { user, legacyProfiles } = await logIn(wallet); if (legacyProfiles.length > 1) { // User has a legacy profile migration choice - setState((curr) => ({ ...curr, legacyProfiles })); + setState((curr) => ({ ...curr, isLoading: false, legacyProfiles })); } else { // Nothing to migrate, close the connect modal onOpenChange(false); diff --git a/packages/react/src/translations/en.ts b/packages/react/src/translations/en.ts index 131cb23a..fe16fb66 100644 --- a/packages/react/src/translations/en.ts +++ b/packages/react/src/translations/en.ts @@ -31,7 +31,7 @@ export const en = { }, }, migrate: { - header: "Migrate existing accounts", + header: "Migrate existing account", description: "It looks like you have several existing Treasure profiles. Please choose one you would like to use moving forward as your identity across the Treasure ecosystem.", approve: "Use this account", From 7ab65660c8e23b8c3967e942eeca70cdc336aa00 Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Mon, 18 Nov 2024 18:38:03 -0800 Subject: [PATCH 14/20] move migrate check logic to separate util --- apps/api/src/routes/users.ts | 64 +++--------------------------------- apps/api/src/utils/user.ts | 64 ++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 60 deletions(-) diff --git a/apps/api/src/routes/users.ts b/apps/api/src/routes/users.ts index 630e7f39..04a94430 100644 --- a/apps/api/src/routes/users.ts +++ b/apps/api/src/routes/users.ts @@ -47,6 +47,7 @@ import { throwUserNotFoundError, } from "../utils/error"; import { + checkCanMigrateLegacyUser, clearLegacyUser, migrateLegacyUser, transformUserProfileResponseFields, @@ -251,66 +252,9 @@ export const usersRoutes = return; } - const [user, profile, legacyProfile] = await Promise.all([ - db.user.findUnique({ - where: { - id: userId, - }, - select: { - externalWalletAddress: true, - smartAccounts: { - select: { - initialEmail: true, - initialWalletAddress: true, - }, - }, - }, - }), - db.userProfile.findUnique({ - where: { userId }, - select: { id: true }, - }), - db.userProfile.findUnique({ - where: { - id: legacyProfileId, - }, - }), - ]); - - if (!user || !legacyProfile) { - throwUserNotFoundError(); - return; - } - - let canMigrate = false; - - // Check if the current user is linked to this legacy profile via wallet address - if (legacyProfile.legacyAddress) { - const walletAddresses = user.smartAccounts - .map((smartAccount) => - smartAccount.initialWalletAddress.toLowerCase(), - ) - .filter((walletAddress) => Boolean(walletAddress)); - canMigrate = walletAddresses.includes( - legacyProfile.legacyAddress.toLowerCase(), - ); - } - - // Check if the current user is linked to this legacy profile via email address - if ( - !canMigrate && - legacyProfile.legacyEmail && - legacyProfile.legacyEmailVerifiedAt - ) { - const emailAddresses = user.smartAccounts - .map((smartAccount) => smartAccount.initialEmail?.toLowerCase()) - .filter((emailAddress) => Boolean(emailAddress)) as string[]; - canMigrate = emailAddresses.includes( - legacyProfile.legacyEmail.toLowerCase(), - ); - } - - if (!canMigrate) { + const { canMigrate, profile, legacyProfile } = + await checkCanMigrateLegacyUser({ db, userId, legacyProfileId }); + if (!canMigrate || !profile || !legacyProfile) { // User selected an unlinked profile and cannot migrate throw new TdkError({ name: TDK_ERROR_NAMES.UserError, diff --git a/apps/api/src/utils/user.ts b/apps/api/src/utils/user.ts index 035a341f..9ad6e30e 100644 --- a/apps/api/src/utils/user.ts +++ b/apps/api/src/utils/user.ts @@ -89,6 +89,70 @@ export const parseThirdwebUserEmail = (user: GetUserResult) => { return undefined; }; +export const checkCanMigrateLegacyUser = async ({ + db, + userId, + legacyProfileId, +}: { + db: PrismaClient; + userId: string; + legacyProfileId: string; +}) => { + const [user, profile, legacyProfile] = await Promise.all([ + db.user.findUnique({ + where: { + id: userId, + }, + select: { + externalWalletAddress: true, + smartAccounts: { + select: { + initialEmail: true, + initialWalletAddress: true, + }, + }, + }, + }), + db.userProfile.findUnique({ + where: { userId }, + select: { id: true }, + }), + db.userProfile.findUnique({ + where: { + id: legacyProfileId, + }, + }), + ]); + + if (!user || !legacyProfile) { + return { canMigrate: false }; + } + + let canMigrate = false; + + // Check if the current user is linked to this legacy profile via wallet address + if (legacyProfile.legacyAddress) { + const walletAddresses = user.smartAccounts + .map((smartAccount) => smartAccount.initialWalletAddress.toLowerCase()) + .filter((walletAddress) => Boolean(walletAddress)); + canMigrate = walletAddresses.includes( + legacyProfile.legacyAddress.toLowerCase(), + ); + } + + // Check if the current user is linked to this legacy profile via email address + if (legacyProfile.legacyEmail && legacyProfile.legacyEmailVerifiedAt) { + const emailAddresses = user.smartAccounts + .map((smartAccount) => smartAccount.initialEmail?.toLowerCase()) + .filter((emailAddress) => Boolean(emailAddress)) as string[]; + canMigrate = emailAddresses.includes( + legacyProfile.legacyEmail.toLowerCase(), + ); + } + + return { canMigrate, profile, legacyProfile }; +}; + export const migrateLegacyUser = async ({ db, userId, From 47e8e5931da087500cd1e308b39ddd6cf2751e47 Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:56:42 -0800 Subject: [PATCH 15/20] remove commented code --- apps/api/src/utils/user.ts | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/apps/api/src/utils/user.ts b/apps/api/src/utils/user.ts index 9ad6e30e..c582d80b 100644 --- a/apps/api/src/utils/user.ts +++ b/apps/api/src/utils/user.ts @@ -298,27 +298,6 @@ export const migrateLegacyUser = async ({ ]), ]); - // Transfer rewards from legacy profile to new profile. - // if (legacyProfile.legacyAddress !== user.externalWalletAddress) { - // const response = await fetch( - // `${env.TROVE_API_URL}/admin/transfer-rewards`, - // { - // method: "POST", - // headers: { "X-API-Key": env.TROVE_API_KEY }, - // body: JSON.stringify({ - // oldAddress: legacyProfile.legacyAddress, - // newAddress: user.externalWalletAddress, - // }), - // }, - // ); - // const { status } = await response.json(); - // if (status !== "ok") { - // log.warn( - // `Failed to transfer rewards from ${legacyProfile.legacyAddress} to ${user.externalWalletAddress}.`, - // ); - // } - // } - return { updatedProfile, updatedSocialAccounts, From 6af261bc965076e00625ac0221e661eb881317de Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:58:32 -0800 Subject: [PATCH 16/20] add changesets --- .changeset/curvy-starfishes-change.md | 5 +++++ .changeset/ninety-shirts-pay.md | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 .changeset/curvy-starfishes-change.md create mode 100644 .changeset/ninety-shirts-pay.md diff --git a/.changeset/curvy-starfishes-change.md b/.changeset/curvy-starfishes-change.md new file mode 100644 index 00000000..0aba000a --- /dev/null +++ b/.changeset/curvy-starfishes-change.md @@ -0,0 +1,5 @@ +--- +"@treasure-dev/tdk-core": patch +--- + +Added API client helper for legacy user migration diff --git a/.changeset/ninety-shirts-pay.md b/.changeset/ninety-shirts-pay.md new file mode 100644 index 00000000..2ebceb5c --- /dev/null +++ b/.changeset/ninety-shirts-pay.md @@ -0,0 +1,5 @@ +--- +"@treasure-dev/tdk-react": minor +--- + +Added legacy user migration flow to connect modal From b76904e25df1c39aa701b978dfcdcc0d8f3fdb7b Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:23:41 -0800 Subject: [PATCH 17/20] fix legacy profile deletions not cascading --- .../migration.sql | 5 + apps/api/prisma/schema.prisma | 12 +- apps/api/src/utils/user.ts | 150 +++++++++--------- 3 files changed, 89 insertions(+), 78 deletions(-) create mode 100644 apps/api/prisma/migrations/20241119215629_user_profile_delete_cascade/migration.sql diff --git a/apps/api/prisma/migrations/20241119215629_user_profile_delete_cascade/migration.sql b/apps/api/prisma/migrations/20241119215629_user_profile_delete_cascade/migration.sql new file mode 100644 index 00000000..822b3505 --- /dev/null +++ b/apps/api/prisma/migrations/20241119215629_user_profile_delete_cascade/migration.sql @@ -0,0 +1,5 @@ +-- AddForeignKey +ALTER TABLE "public"."user_social_account" ADD CONSTRAINT "user_social_account_legacy_user_profile_id_fkey" FOREIGN KEY ("legacy_user_profile_id") REFERENCES "public"."user_profile"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "public"."user_notification_settings" ADD CONSTRAINT "user_notification_settings_legacy_user_profile_id_fkey" FOREIGN KEY ("legacy_user_profile_id") REFERENCES "public"."user_profile"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/apps/api/prisma/schema.prisma b/apps/api/prisma/schema.prisma index 28e5da5f..1fca4d42 100644 --- a/apps/api/prisma/schema.prisma +++ b/apps/api/prisma/schema.prisma @@ -103,8 +103,10 @@ model UserProfile { testnetFaucetLastUsedAt DateTime? @map("testnet_faucet_last_used_at") // Relations - userId String? @unique @map("user_id") - user User? @relation(fields: [userId], references: [id]) + userId String? @unique @map("user_id") + user User? @relation(fields: [userId], references: [id]) + legacySocialAccounts UserSocialAccount[] + legacyNotificationSettings UserNotificationSettings[] // Computed createdAt DateTime @default(now()) @map("created_at") @@ -139,7 +141,8 @@ model UserSocialAccount { isPublic Boolean @default(false) @map("is_public") // Migration - legacyUserProfileId String? @map("legacy_user_profile_id") + legacyUserProfileId String? @map("legacy_user_profile_id") + legacyUserProfile UserProfile? @relation(fields: [legacyUserProfileId], references: [id], onDelete: Cascade) // Relations userId String? @map("user_id") @@ -177,7 +180,8 @@ model UserNotificationSettings { isEnabledInApp Boolean @default(true) @map("is_enabled_in_app") // Migration - legacyUserProfileId String? @map("legacy_user_profile_id") + legacyUserProfileId String? @map("legacy_user_profile_id") + legacyUserProfile UserProfile? @relation(fields: [legacyUserProfileId], references: [id], onDelete: Cascade) // Relations userId String? @map("user_id") diff --git a/apps/api/src/utils/user.ts b/apps/api/src/utils/user.ts index c582d80b..2a118b02 100644 --- a/apps/api/src/utils/user.ts +++ b/apps/api/src/utils/user.ts @@ -164,6 +164,65 @@ export const migrateLegacyUser = async ({ userProfileId?: string; legacyProfile: UserProfile; }) => { + // Migrate supporting data + const [[, , updatedSocialAccounts], [, , updatedNotificationSettings]] = + await Promise.all([ + // Migrate social accounts + db.$transaction([ + // Delete current social accounts + db.userSocialAccount.deleteMany({ + where: { + userId, + }, + }), + // Connect social accounts to user + db.userSocialAccount.updateMany({ + where: { + legacyUserProfileId: legacyProfile.id, + }, + data: { + userId, + // Clear legacy profile data so migration is not triggered again + legacyUserProfileId: null, + }, + }), + // Select migrated social accounts + db.userSocialAccount.findMany({ + where: { + userId, + }, + select: USER_SOCIAL_ACCOUNT_SELECT_FIELDS, + }), + ]), + // Migrate notification settings + db.$transaction([ + // Delete current notification settings + db.userNotificationSettings.deleteMany({ + where: { + userId, + }, + }), + // Connect notification settings to user + db.userNotificationSettings.updateMany({ + where: { + legacyUserProfileId: legacyProfile.id, + }, + data: { + userId, + // Clear legacy profile data so migration is not triggered again + legacyUserProfileId: null, + }, + }), + // Select migrated notification settings + db.userNotificationSettings.findMany({ + where: { + userId, + }, + select: USER_NOTIFICATION_SETTINGS_SELECT_FIELDS, + }), + ]), + ]); + let updatedProfile: Pick< UserProfile, keyof typeof USER_PROFILE_SELECT_FIELDS @@ -223,80 +282,23 @@ export const migrateLegacyUser = async ({ }); } - const [[, , updatedSocialAccounts], [, , updatedNotificationSettings]] = - await Promise.all([ - // Migrate social accounts - db.$transaction([ - // Delete current social accounts - db.userSocialAccount.deleteMany({ - where: { - userId, - }, - }), - // Connect social accounts to user - db.userSocialAccount.updateMany({ - where: { - legacyUserProfileId: legacyProfile.id, - }, - data: { - userId, - // Clear legacy profile data so migration is not triggered again - legacyUserProfileId: null, - }, - }), - // Select migrated social accounts - db.userSocialAccount.findMany({ - where: { - userId, - }, - select: USER_SOCIAL_ACCOUNT_SELECT_FIELDS, - }), - ]), - // Migrate notification settings - db.$transaction([ - // Delete current notification settings - db.userNotificationSettings.deleteMany({ - where: { - userId, - }, - }), - // Connect notification settings to user - db.userNotificationSettings.updateMany({ - where: { - legacyUserProfileId: legacyProfile.id, - }, - data: { - userId, - // Clear legacy profile data so migration is not triggered again - legacyUserProfileId: null, - }, - }), - // Select migrated notification settings - db.userNotificationSettings.findMany({ - where: { - userId, - }, - select: USER_NOTIFICATION_SETTINGS_SELECT_FIELDS, - }), - ]), - // Delete any other legacy records that weren't migrated - db.$transaction([ - db.userProfile.deleteMany({ - where: { - legacyAddress: legacyProfile.legacyAddress, - }, - }), - ...(legacyProfile.email - ? [] - : [ - db.userProfile.deleteMany({ - where: { - legacyEmail: legacyProfile.legacyEmail, - }, - }), - ]), - ]), - ]); + // Delete any other legacy records that weren't migrated + await db.$transaction([ + db.userProfile.deleteMany({ + where: { + legacyAddress: legacyProfile.legacyAddress, + }, + }), + ...(legacyProfile.email + ? [] + : [ + db.userProfile.deleteMany({ + where: { + legacyEmail: legacyProfile.legacyEmail, + }, + }), + ]), + ]); return { updatedProfile, From 569189650d8e9489b4243e627da2200ff207af12 Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:30:27 -0800 Subject: [PATCH 18/20] fix types --- .../react/src/components/connect/ConnectMigrateUserView.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/react/src/components/connect/ConnectMigrateUserView.tsx b/packages/react/src/components/connect/ConnectMigrateUserView.tsx index 8b7be42c..d9ffe287 100644 --- a/packages/react/src/components/connect/ConnectMigrateUserView.tsx +++ b/packages/react/src/components/connect/ConnectMigrateUserView.tsx @@ -9,7 +9,10 @@ import { cn } from "../../utils/classnames"; import { Button } from "../ui/Button"; type Props = { - legacyProfiles: LegacyProfile[]; + legacyProfiles: Pick< + LegacyProfile, + "id" | "tag" | "discriminant" | "pfp" | "banner" | "legacyAddress" + >[]; isLoading?: boolean; error?: string; onApprove: (id: string) => void; From 54df91d5b0e3fbcc7e762ba0eacaf2bbf668f1da Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:35:53 -0800 Subject: [PATCH 19/20] upgrade dependencies --- pnpm-lock.yaml | 252 ++++++++++++++++++++++---------------------- pnpm-workspace.yaml | 10 +- 2 files changed, 131 insertions(+), 131 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6ed23784..c33b98ba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,11 +58,11 @@ catalogs: specifier: ^4.24.0 version: 4.24.0 '@sentry/node': - specifier: ^8.38.0 - version: 8.38.0 + specifier: ^8.39.0 + version: 8.39.0 '@sinclair/typebox': - specifier: ^0.34.3 - version: 0.34.3 + specifier: ^0.34.4 + version: 0.34.4 '@storybook/addon-essentials': specifier: ^8.4.4 version: 8.4.4 @@ -82,8 +82,8 @@ catalogs: specifier: ^9.0.7 version: 9.0.7 '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 '@types/react': specifier: ^18.3.12 version: 18.3.12 @@ -115,8 +115,8 @@ catalogs: specifier: ^16.3.1 version: 16.4.5 dotenv-cli: - specifier: ^7.4.1 - version: 7.4.2 + specifier: ^7.4.3 + version: 7.4.3 electron: specifier: ^31.1.2 version: 31.6.0 @@ -136,8 +136,8 @@ catalogs: specifier: ^9.1.7 version: 9.1.7 i18next: - specifier: ^23.16.5 - version: 23.16.5 + specifier: ^23.16.6 + version: 23.16.6 i18next-browser-languagedetector: specifier: ^8.0.0 version: 8.0.0 @@ -242,7 +242,7 @@ importers: version: 2.27.9 '@types/node': specifier: 'catalog:' - version: 22.9.0 + version: 22.9.1 husky: specifier: 'catalog:' version: 9.1.7 @@ -251,7 +251,7 @@ importers: version: 25.0.1 knip: specifier: 'catalog:' - version: 5.37.1(@types/node@22.9.0)(typescript@5.6.3) + version: 5.37.1(@types/node@22.9.1)(typescript@5.6.3) lint-staged: specifier: 'catalog:' version: 15.2.10 @@ -263,7 +263,7 @@ importers: version: 5.6.3 vite: specifier: 'catalog:' - version: 5.4.11(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.1) apps/api: dependencies: @@ -281,16 +281,16 @@ importers: version: 5.1.0 '@fastify/type-provider-typebox': specifier: 'catalog:' - version: 5.0.1(@sinclair/typebox@0.34.3) + version: 5.0.1(@sinclair/typebox@0.34.4) '@prisma/client': specifier: 'catalog:' version: 5.22.0(prisma@5.22.0) '@sentry/node': specifier: 'catalog:' - version: 8.38.0 + version: 8.39.0 '@sinclair/typebox': specifier: 'catalog:' - version: 0.34.3 + version: 0.34.4 '@thirdweb-dev/engine': specifier: 'catalog:' version: 0.0.16 @@ -320,7 +320,7 @@ importers: version: 13.0.0 thirdweb: specifier: 'catalog:' - version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.1)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) viem: specifier: 'catalog:' version: 2.21.44(typescript@5.6.3)(zod@3.23.8) @@ -333,7 +333,7 @@ importers: version: 8.3.0(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.5.1) vitest: specifier: 'catalog:' - version: 2.1.5(@types/node@22.9.0)(jsdom@25.0.1) + version: 2.1.5(@types/node@22.9.1)(jsdom@25.0.1) examples/connect-core: dependencies: @@ -346,7 +346,7 @@ importers: version: 5.6.3 vite: specifier: 'catalog:' - version: 5.4.11(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.1) examples/connect-electron: dependencies: @@ -367,11 +367,11 @@ importers: version: 4.21.0 thirdweb: specifier: 'catalog:' - version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.1)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) devDependencies: '@electron-toolkit/tsconfig': specifier: 'catalog:' - version: 1.0.1(@types/node@22.9.0) + version: 1.0.1(@types/node@22.9.1) '@types/react': specifier: 'catalog:' version: 18.3.12 @@ -380,10 +380,10 @@ importers: version: 18.3.1 '@vitejs/plugin-react': specifier: 'catalog:' - version: 4.3.3(vite@5.4.11(@types/node@22.9.0)) + version: 4.3.3(vite@5.4.11(@types/node@22.9.1)) dotenv-cli: specifier: 'catalog:' - version: 7.4.2 + version: 7.4.3 electron: specifier: 'catalog:' version: 31.6.0 @@ -392,7 +392,7 @@ importers: version: 25.1.7(electron-builder-squirrel-windows@24.13.3) electron-vite: specifier: 'catalog:' - version: 2.3.0(vite@5.4.11(@types/node@22.9.0)) + version: 2.3.0(vite@5.4.11(@types/node@22.9.1)) react: specifier: 'catalog:' version: 18.3.1 @@ -404,7 +404,7 @@ importers: version: 5.6.3 vite: specifier: 'catalog:' - version: 5.4.11(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.1) examples/connect-react: dependencies: @@ -422,7 +422,7 @@ importers: version: 18.3.1(react@18.3.1) thirdweb: specifier: 'catalog:' - version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.1)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) devDependencies: '@treasure-dev/tailwind-config': specifier: workspace:* @@ -435,7 +435,7 @@ importers: version: 18.3.1 '@vitejs/plugin-react': specifier: 'catalog:' - version: 4.3.3(vite@5.4.11(@types/node@22.9.0)) + version: 4.3.3(vite@5.4.11(@types/node@22.9.1)) autoprefixer: specifier: 'catalog:' version: 10.4.20(postcss@8.4.49) @@ -447,7 +447,7 @@ importers: version: 3.4.15 vite: specifier: 'catalog:' - version: 5.4.11(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.1) examples/magicswap: dependencies: @@ -465,7 +465,7 @@ importers: version: 18.3.1(react@18.3.1) thirdweb: specifier: 'catalog:' - version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.1)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) devDependencies: '@treasure-dev/tailwind-config': specifier: workspace:* @@ -478,7 +478,7 @@ importers: version: 18.3.1 '@vitejs/plugin-react': specifier: 'catalog:' - version: 4.3.3(vite@5.4.11(@types/node@22.9.0)) + version: 4.3.3(vite@5.4.11(@types/node@22.9.1)) autoprefixer: specifier: 'catalog:' version: 10.4.20(postcss@8.4.49) @@ -490,7 +490,7 @@ importers: version: 3.4.15 vite: specifier: 'catalog:' - version: 5.4.11(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.1) packages/auth: dependencies: @@ -512,7 +512,7 @@ importers: version: 5.6.3 vitest: specifier: 'catalog:' - version: 2.1.5(@types/node@22.9.0)(jsdom@25.0.1) + version: 2.1.5(@types/node@22.9.1)(jsdom@25.0.1) packages/core: dependencies: @@ -536,7 +536,7 @@ importers: version: 4.0.0 thirdweb: specifier: 'catalog:' - version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.1)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) uuid: specifier: 'catalog:' version: 11.0.3 @@ -555,13 +555,13 @@ importers: version: 5.6.3 vitest: specifier: 'catalog:' - version: 2.1.5(@types/node@22.9.0)(jsdom@25.0.1) + version: 2.1.5(@types/node@22.9.1)(jsdom@25.0.1) packages/launcher: dependencies: '@treasure-dev/tdk-core': specifier: '*' - version: 2.7.1(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(thirdweb@5.68.0(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8))(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(zod@3.23.8) + version: 2.7.1(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(thirdweb@5.68.0(@types/node@22.9.1)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8))(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(zod@3.23.8) devDependencies: tsup: specifier: 'catalog:' @@ -589,7 +589,7 @@ importers: version: 2.1.1 i18next: specifier: 'catalog:' - version: 23.16.5 + version: 23.16.6 i18next-browser-languagedetector: specifier: 'catalog:' version: 8.0.0 @@ -601,13 +601,13 @@ importers: version: 18.3.1 react-i18next: specifier: 'catalog:' - version: 15.1.1(i18next@23.16.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.1.1(i18next@23.16.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: specifier: 'catalog:' version: 2.5.4 thirdweb: specifier: 'catalog:' - version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + version: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.1)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) devDependencies: '@storybook/addon-essentials': specifier: 'catalog:' @@ -617,7 +617,7 @@ importers: version: 8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.4(prettier@2.8.8))(typescript@5.6.3) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.4(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)) + version: 8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.4(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.1)) '@treasure-dev/tailwind-config': specifier: workspace:* version: link:../tailwind-config @@ -647,10 +647,10 @@ importers: version: 5.6.3 vite: specifier: 'catalog:' - version: 5.4.11(@types/node@22.9.0) + version: 5.4.11(@types/node@22.9.1) vitest: specifier: 'catalog:' - version: 2.1.5(@types/node@22.9.0)(jsdom@25.0.1) + version: 2.1.5(@types/node@22.9.1)(jsdom@25.0.1) packages/tailwind-config: devDependencies: @@ -2317,16 +2317,16 @@ packages: '@scure/bip39@1.4.0': resolution: {integrity: sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==} - '@sentry/core@8.38.0': - resolution: {integrity: sha512-sGD+5TEHU9G7X7zpyaoJxpOtwjTjvOd1f/MKBrWW2vf9UbYK+GUJrOzLhMoSWp/pHSYgvObkJkDb/HwieQjvhQ==} + '@sentry/core@8.39.0': + resolution: {integrity: sha512-rg2mHtwdCaedqub7bd+ht08vZgtwPO7el5m5sPNeb7V75GcQwSziu6G02vGxCBCsAHpoFn1A+0JLEajaYzZI7w==} engines: {node: '>=14.18'} - '@sentry/node@8.38.0': - resolution: {integrity: sha512-nwW0XqZFQseXYn0i6i6nKPkbjgHMBEFSF9TnK6mHHqJHHObHIZ6qu5CfvGKgxATia8JPIg9NN8XcyYOnQMi07w==} + '@sentry/node@8.39.0': + resolution: {integrity: sha512-poQBV1OG5XdESQQNT/qQzrcPBEsQIuK3kz7cE7MVOcdTqjfWGC+gVYMMjvfBrZ+A1jdLolepMLnEG80OzvHoNA==} engines: {node: '>=14.18'} - '@sentry/opentelemetry@8.38.0': - resolution: {integrity: sha512-AfjmIf/v7+x2WplhkX66LyGKvrzzPeSgff9uJ0cFCC2s0yd1qA2VPuIwEyr5i/FOJOP5bvFr8tu/hz3LA4+F5Q==} + '@sentry/opentelemetry@8.39.0': + resolution: {integrity: sha512-ZnZ6zpyRPOUR6LwmvXqXK6XXDfjIXIRoX1ZVy44ZqN3XQL1Cg5n5sp0W/8T0qpKVyyEkE+AphLI/EGyp/gQLfQ==} engines: {node: '>=14.18'} peerDependencies: '@opentelemetry/api': ^1.9.0 @@ -2335,16 +2335,16 @@ packages: '@opentelemetry/sdk-trace-base': ^1.26.0 '@opentelemetry/semantic-conventions': ^1.27.0 - '@sentry/types@8.38.0': - resolution: {integrity: sha512-fP5H9ZX01W4Z/EYctk3mkSHi7d06cLcX2/UWqwdWbyPWI+pL2QpUPICeO/C+8SnmYx//wFj3qWDhyPCh1PdFAA==} + '@sentry/types@8.39.0': + resolution: {integrity: sha512-/n1bGkbJcSLZQpzd1Oksi8LFAMbcO8j/d+N8mcXS74GuhGgkxQiEwHF2CKTz6SHt8J4hrlyzqIwVzCevUOxZ2Q==} engines: {node: '>=14.18'} - '@sentry/utils@8.38.0': - resolution: {integrity: sha512-3X7MgIKIx+2q5Al7QkhaRB4wV6DvzYsaeIwdqKUzGLuRjXmNgJrLoU87TAwQRmZ6Wr3IoEpThZZMNrzYPXxArw==} + '@sentry/utils@8.39.0': + resolution: {integrity: sha512-pIBnr/cROds92CcYWBW3z1zFH4uJkMPL2AxEv/ZcLg/NTb1Okz/ZaDP+NMzUfzriYvFBOFk0wPk0h5sYx6Umqw==} engines: {node: '>=14.18'} - '@sinclair/typebox@0.34.3': - resolution: {integrity: sha512-fEgncmnqn6WGibPn34deH5PwmMTuNCZ2clwlwevgFn8rP0l38zzWRg3KVYhoOZwkZ2Ew3yhZ/STdGDuMig66oQ==} + '@sinclair/typebox@0.34.4': + resolution: {integrity: sha512-ZUV1+nYQHjkDy/L5YMy5BxUjSFX8PElhBzNjI4gyeN23XJa7PZbmj5eDWzLAK3oxVs99EQWc/h1qFYkxpM+AwQ==} '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} @@ -2809,12 +2809,12 @@ packages: '@types/node@22.7.4': resolution: {integrity: sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==} - '@types/node@22.7.8': - resolution: {integrity: sha512-a922jJy31vqR5sk+kAdIENJjHblqcZ4RmERviFsER4WJcEONqxKcjNOlk0q7OUfrF5sddT+vng070cdfMlrPLg==} - '@types/node@22.9.0': resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + '@types/node@22.9.1': + resolution: {integrity: sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -3776,8 +3776,8 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - dotenv-cli@7.4.2: - resolution: {integrity: sha512-SbUj8l61zIbzyhIbg0FwPJq6+wjbzdn9oEtozQpZ6kW2ihCcapKVZj49oCT3oPM+mgQm+itgvUQcG5szxVrZTA==} + dotenv-cli@7.4.3: + resolution: {integrity: sha512-lf1E+TL1xFeoOHy2hSO3kLkx3KX8CDi17ccn5z5dVCnk2PuWqUKAnBVgQmhfS0BPuzFbptTEHVcIKFsGF0NAcg==} hasBin: true dotenv-expand@10.0.0: @@ -4396,8 +4396,8 @@ packages: i18next-browser-languagedetector@8.0.0: resolution: {integrity: sha512-zhXdJXTTCoG39QsrOCiOabnWj2jecouOqbchu3EfhtSHxIB5Uugnm9JaizenOy39h7ne3+fLikIjeW88+rgszw==} - i18next@23.16.5: - resolution: {integrity: sha512-KTlhE3EP9x6pPTAW7dy0WKIhoCpfOGhRQlO+jttQLgzVaoOjWwBWramu7Pp0i+8wDNduuzXfe3kkVbzrKyrbTA==} + i18next@23.16.6: + resolution: {integrity: sha512-wGdE5rUfkZtrL5k6MCptxbpjmgwku4rBRVU/YOJ7Xfd841fgaZjlxHpVJ5NIz8sfSvAJhEhJrvJ8qE7AWXE4Xg==} iconv-corefoundation@1.1.7: resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} @@ -7717,13 +7717,13 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 - '@coinbase/wallet-sdk@4.2.2(@types/node@22.9.0)(jsdom@25.0.1)': + '@coinbase/wallet-sdk@4.2.2(@types/node@22.9.1)(jsdom@25.0.1)': dependencies: '@noble/hashes': 1.5.0 clsx: 1.2.1 eventemitter3: 5.0.1 preact: 10.24.2 - vitest: 2.1.5(@types/node@22.9.0)(jsdom@25.0.1) + vitest: 2.1.5(@types/node@22.9.1)(jsdom@25.0.1) transitivePeerDependencies: - '@edge-runtime/vm' - '@types/node' @@ -7750,9 +7750,9 @@ snapshots: dependencies: electron: 31.6.0 - '@electron-toolkit/tsconfig@1.0.1(@types/node@22.9.0)': + '@electron-toolkit/tsconfig@1.0.1(@types/node@22.9.1)': dependencies: - '@types/node': 22.9.0 + '@types/node': 22.9.1 '@electron-toolkit/utils@3.0.0(electron@31.6.0)': dependencies: @@ -8257,9 +8257,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@fastify/type-provider-typebox@5.0.1(@sinclair/typebox@0.34.3)': + '@fastify/type-provider-typebox@5.0.1(@sinclair/typebox@0.34.4)': dependencies: - '@sinclair/typebox': 0.34.3 + '@sinclair/typebox': 0.34.4 '@floating-ui/core@1.6.8': dependencies: @@ -8294,13 +8294,13 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.1))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.6.3) - vite: 5.4.11(@types/node@22.9.0) + vite: 5.4.11(@types/node@22.9.1) optionalDependencies: typescript: 5.6.3 @@ -9123,12 +9123,12 @@ snapshots: '@noble/hashes': 1.5.0 '@scure/base': 1.1.9 - '@sentry/core@8.38.0': + '@sentry/core@8.39.0': dependencies: - '@sentry/types': 8.38.0 - '@sentry/utils': 8.38.0 + '@sentry/types': 8.39.0 + '@sentry/utils': 8.39.0 - '@sentry/node@8.38.0': + '@sentry/node@8.39.0': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 1.26.0(@opentelemetry/api@1.9.0) @@ -9162,32 +9162,32 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.26.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 '@prisma/instrumentation': 5.19.1 - '@sentry/core': 8.38.0 - '@sentry/opentelemetry': 8.38.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0) - '@sentry/types': 8.38.0 - '@sentry/utils': 8.38.0 + '@sentry/core': 8.39.0 + '@sentry/opentelemetry': 8.39.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0) + '@sentry/types': 8.39.0 + '@sentry/utils': 8.39.0 import-in-the-middle: 1.11.2 transitivePeerDependencies: - supports-color - '@sentry/opentelemetry@8.38.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0)': + '@sentry/opentelemetry@8.39.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.26.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 - '@sentry/core': 8.38.0 - '@sentry/types': 8.38.0 - '@sentry/utils': 8.38.0 + '@sentry/core': 8.39.0 + '@sentry/types': 8.39.0 + '@sentry/utils': 8.39.0 - '@sentry/types@8.38.0': {} + '@sentry/types@8.39.0': {} - '@sentry/utils@8.38.0': + '@sentry/utils@8.39.0': dependencies: - '@sentry/types': 8.38.0 + '@sentry/types': 8.39.0 - '@sinclair/typebox@0.34.3': {} + '@sinclair/typebox@0.34.4': {} '@sindresorhus/is@4.6.0': {} @@ -9634,13 +9634,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.4.4(storybook@8.4.4(prettier@2.8.8))(vite@5.4.11(@types/node@22.9.0))': + '@storybook/builder-vite@8.4.4(storybook@8.4.4(prettier@2.8.8))(vite@5.4.11(@types/node@22.9.1))': dependencies: '@storybook/csf-plugin': 8.4.4(storybook@8.4.4(prettier@2.8.8)) browser-assert: 1.2.1 storybook: 8.4.4(prettier@2.8.8) ts-dedent: 2.2.0 - vite: 5.4.11(@types/node@22.9.0) + vite: 5.4.11(@types/node@22.9.1) transitivePeerDependencies: - webpack-sources @@ -9700,11 +9700,11 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 8.4.4(prettier@2.8.8) - '@storybook/react-vite@8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.4(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0))': + '@storybook/react-vite@8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.4(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.1))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.1)) '@rollup/pluginutils': 5.1.2(rollup@4.24.0) - '@storybook/builder-vite': 8.4.4(storybook@8.4.4(prettier@2.8.8))(vite@5.4.11(@types/node@22.9.0)) + '@storybook/builder-vite': 8.4.4(storybook@8.4.4(prettier@2.8.8))(vite@5.4.11(@types/node@22.9.1)) '@storybook/react': 8.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.4(prettier@2.8.8))(typescript@5.6.3) find-up: 5.0.0 magic-string: 0.30.12 @@ -9714,7 +9714,7 @@ snapshots: resolve: 1.22.8 storybook: 8.4.4(prettier@2.8.8) tsconfig-paths: 4.2.0 - vite: 5.4.11(@types/node@22.9.0) + vite: 5.4.11(@types/node@22.9.1) transitivePeerDependencies: - '@storybook/test' - rollup @@ -9763,13 +9763,13 @@ snapshots: '@tootallnate/once@2.0.0': {} - '@treasure-dev/tdk-core@2.7.1(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(thirdweb@5.68.0(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8))(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(zod@3.23.8)': + '@treasure-dev/tdk-core@2.7.1(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(thirdweb@5.68.0(@types/node@22.9.1)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8))(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(zod@3.23.8)': dependencies: '@sushiswap/tines': 1.0.11(viem@2.21.44(typescript@5.6.3)(zod@3.23.8))(zod@3.23.8) '@wagmi/core': 2.14.3(@tanstack/query-core@5.59.20)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.44(typescript@5.6.3)(zod@3.23.8)) abitype: 1.0.6(typescript@5.6.3)(zod@3.23.8) jwt-decode: 4.0.0 - thirdweb: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) + thirdweb: 5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.1)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8) viem: 2.21.44(typescript@5.6.3)(zod@3.23.8) transitivePeerDependencies: - '@tanstack/query-core' @@ -9807,7 +9807,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.7.8 + '@types/node': 22.9.0 '@types/responselike': 1.0.3 '@types/connect@3.4.36': @@ -9824,12 +9824,12 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 22.7.8 + '@types/node': 22.9.0 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.7.8 + '@types/node': 22.9.0 '@types/http-cache-semantics@4.0.4': {} @@ -9839,7 +9839,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 22.7.8 + '@types/node': 22.9.0 '@types/mdx@2.0.13': {} @@ -9861,11 +9861,11 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/node@22.7.8': + '@types/node@22.9.0': dependencies: undici-types: 6.19.8 - '@types/node@22.9.0': + '@types/node@22.9.1': dependencies: undici-types: 6.19.8 @@ -9883,7 +9883,7 @@ snapshots: '@types/plist@3.0.5': dependencies: - '@types/node': 22.7.8 + '@types/node': 22.9.0 xmlbuilder: 15.1.1 optional: true @@ -9902,7 +9902,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 22.7.8 + '@types/node': 22.9.0 '@types/shimmer@1.2.0': {} @@ -9921,17 +9921,17 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.7.8 + '@types/node': 22.9.0 optional: true - '@vitejs/plugin-react@4.3.3(vite@5.4.11(@types/node@22.9.0))': + '@vitejs/plugin-react@4.3.3(vite@5.4.11(@types/node@22.9.1))': dependencies: '@babel/core': 7.25.7 '@babel/plugin-transform-react-jsx-self': 7.25.7(@babel/core@7.25.7) '@babel/plugin-transform-react-jsx-source': 7.25.7(@babel/core@7.25.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.11(@types/node@22.9.0) + vite: 5.4.11(@types/node@22.9.1) transitivePeerDependencies: - supports-color @@ -9942,13 +9942,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.5(vite@5.4.10(@types/node@22.9.0))': + '@vitest/mocker@2.1.5(vite@5.4.10(@types/node@22.9.1))': dependencies: '@vitest/spy': 2.1.5 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.10(@types/node@22.9.1) '@vitest/pretty-format@2.1.5': dependencies: @@ -11201,7 +11201,7 @@ snapshots: dependencies: esutils: 2.0.3 - dotenv-cli@7.4.2: + dotenv-cli@7.4.3: dependencies: cross-spawn: 7.0.3 dotenv: 16.4.5 @@ -11298,7 +11298,7 @@ snapshots: electron-to-chromium@1.5.32: {} - electron-vite@2.3.0(vite@5.4.11(@types/node@22.9.0)): + electron-vite@2.3.0(vite@5.4.11(@types/node@22.9.1)): dependencies: '@babel/core': 7.25.7 '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.25.7) @@ -11306,7 +11306,7 @@ snapshots: esbuild: 0.21.5 magic-string: 0.30.11 picocolors: 1.1.0 - vite: 5.4.11(@types/node@22.9.0) + vite: 5.4.11(@types/node@22.9.1) transitivePeerDependencies: - supports-color @@ -12037,7 +12037,7 @@ snapshots: dependencies: '@babel/runtime': 7.25.7 - i18next@23.16.5: + i18next@23.16.6: dependencies: '@babel/runtime': 7.25.7 @@ -12348,11 +12348,11 @@ snapshots: keyvaluestorage-interface@1.0.0: {} - knip@5.37.1(@types/node@22.9.0)(typescript@5.6.3): + knip@5.37.1(@types/node@22.9.1)(typescript@5.6.3): dependencies: '@nodelib/fs.walk': 1.2.8 '@snyk/github-codeowners': 1.1.0 - '@types/node': 22.9.0 + '@types/node': 22.9.1 easy-table: 1.2.0 enhanced-resolve: 5.17.1 fast-glob: 3.3.2 @@ -13323,11 +13323,11 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-i18next@15.1.1(i18next@23.16.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-i18next@15.1.1(i18next@23.16.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.25.7 html-parse-stringify: 3.0.1 - i18next: 23.16.5 + i18next: 23.16.6 react: 18.3.1 optionalDependencies: react-dom: 18.3.1(react@18.3.1) @@ -13941,9 +13941,9 @@ snapshots: dependencies: any-promise: 1.3.0 - thirdweb@5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8): + thirdweb@5.68.0(@aws-sdk/client-kms@3.693.0)(@types/node@22.9.1)(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(jsdom@25.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)(zod@3.23.8): dependencies: - '@coinbase/wallet-sdk': 4.2.2(@types/node@22.9.0)(jsdom@25.0.1) + '@coinbase/wallet-sdk': 4.2.2(@types/node@22.9.1)(jsdom@25.0.1) '@emotion/react': 11.13.3(@types/react@18.3.12)(react@18.3.1) '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@google/model-viewer': 2.1.1 @@ -14313,13 +14313,13 @@ snapshots: - utf-8-validate - zod - vite-node@2.1.5(@types/node@22.9.0): + vite-node@2.1.5(@types/node@22.9.1): dependencies: cac: 6.7.14 debug: 4.3.7 es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.4.10(@types/node@22.9.0) + vite: 5.4.10(@types/node@22.9.1) transitivePeerDependencies: - '@types/node' - less @@ -14331,28 +14331,28 @@ snapshots: - supports-color - terser - vite@5.4.10(@types/node@22.9.0): + vite@5.4.10(@types/node@22.9.1): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.24.0 optionalDependencies: - '@types/node': 22.9.0 + '@types/node': 22.9.1 fsevents: 2.3.3 - vite@5.4.11(@types/node@22.9.0): + vite@5.4.11(@types/node@22.9.1): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.24.0 optionalDependencies: - '@types/node': 22.9.0 + '@types/node': 22.9.1 fsevents: 2.3.3 - vitest@2.1.5(@types/node@22.9.0)(jsdom@25.0.1): + vitest@2.1.5(@types/node@22.9.1)(jsdom@25.0.1): dependencies: '@vitest/expect': 2.1.5 - '@vitest/mocker': 2.1.5(vite@5.4.10(@types/node@22.9.0)) + '@vitest/mocker': 2.1.5(vite@5.4.10(@types/node@22.9.1)) '@vitest/pretty-format': 2.1.5 '@vitest/runner': 2.1.5 '@vitest/snapshot': 2.1.5 @@ -14368,11 +14368,11 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.10(@types/node@22.9.0) - vite-node: 2.1.5(@types/node@22.9.0) + vite: 5.4.10(@types/node@22.9.1) + vite-node: 2.1.5(@types/node@22.9.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.9.0 + '@types/node': 22.9.1 jsdom: 25.0.1 transitivePeerDependencies: - less diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 45cfa52d..a9c22a9b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -21,15 +21,15 @@ catalog: "@radix-ui/react-dialog": ^1.1.2 "@radix-ui/react-visually-hidden": ^1.1.0 "@rollup/rollup-linux-x64-gnu": ^4.24.0 - "@sentry/node": ^8.38.0 - "@sinclair/typebox": ^0.34.3 + "@sentry/node": ^8.39.0 + "@sinclair/typebox": ^0.34.4 "@storybook/addon-essentials": ^8.4.4 "@storybook/react": ^8.4.4 "@storybook/react-vite": ^8.4.4 "@sushiswap/tines": ^1.0.11 "@thirdweb-dev/engine": ^0.0.16 "@types/jsonwebtoken": ^9.0.7 - "@types/node": ^22.9.0 + "@types/node": ^22.9.1 "@types/react": ^18.3.12 "@types/react-dom": ^18.3.1 "@types/uuid": "^10.0.0" @@ -40,14 +40,14 @@ catalog: "aws-kms-signer": ^0.5.3 clsx: ^2.1.1 dotenv: ^16.3.1 - "dotenv-cli": ^7.4.1 + "dotenv-cli": ^7.4.3 electron: ^31.1.2 "electron-builder": ^25.1.7 "electron-vite": ^2.3.0 express: ^4.21.0 fastify: ^5.1.0 husky: ^9.1.7 - i18next: ^23.16.5 + i18next: ^23.16.6 "i18next-browser-languagedetector": ^8.0.0 "input-otp": ^1.4.1 jsdom: ^25.0.1 From b7471589adf4f91fb4af4460f1eb92026014356f Mon Sep 17 00:00:00 2001 From: Alec Ananian <1013230+alecananian@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:53:46 -0800 Subject: [PATCH 20/20] add env feature flag for user migration --- apps/api/src/routes/auth.ts | 25 +++++++++++++++---------- apps/api/src/routes/users.ts | 4 ++-- apps/api/src/utils/env.ts | 1 + 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/apps/api/src/routes/auth.ts b/apps/api/src/routes/auth.ts index 18da9a21..dd490931 100644 --- a/apps/api/src/routes/auth.ts +++ b/apps/api/src/routes/auth.ts @@ -265,15 +265,17 @@ export const authRoutes = let updatedProfile: typeof profile | undefined; - // Automatically migrate legacy profile if only one exists - if (legacyProfiles.length === 1 && !!legacyProfiles[0]) { - const result = await migrateLegacyUser({ - db, - userId: user.id, - userProfileId: profile.id, - legacyProfile: legacyProfiles[0], - }); - updatedProfile = result.updatedProfile; + if (env.USER_MIGRATION_ENABLED) { + // Automatically migrate legacy profile if only one exists + if (legacyProfiles.length === 1 && !!legacyProfiles[0]) { + const result = await migrateLegacyUser({ + db, + userId: user.id, + userProfileId: profile.id, + legacyProfile: legacyProfiles[0], + }); + updatedProfile = result.updatedProfile; + } } const finalProfile = updatedProfile ?? profile; @@ -286,7 +288,10 @@ export const authRoutes = address, sessions, }, - legacyProfiles: legacyProfiles.length > 1 ? legacyProfiles : [], + legacyProfiles: + env.USER_MIGRATION_ENABLED && legacyProfiles.length > 1 + ? legacyProfiles + : [], }); }, ); diff --git a/apps/api/src/routes/users.ts b/apps/api/src/routes/users.ts index 04a94430..88faafa9 100644 --- a/apps/api/src/routes/users.ts +++ b/apps/api/src/routes/users.ts @@ -54,7 +54,7 @@ import { } from "../utils/user"; export const usersRoutes = - ({ db, client }: TdkApiContext): FastifyPluginAsync => + ({ db, env, client }: TdkApiContext): FastifyPluginAsync => async (app) => { app.get<{ Reply: ReadCurrentUserReply; @@ -247,7 +247,7 @@ export const usersRoutes = authError, body: { id: legacyProfileId, rejected = false }, } = req; - if (!userId) { + if (!userId || !env.USER_MIGRATION_ENABLED) { throwUnauthorizedError(authError); return; } diff --git a/apps/api/src/utils/env.ts b/apps/api/src/utils/env.ts index 558b3449..89f5ccb1 100644 --- a/apps/api/src/utils/env.ts +++ b/apps/api/src/utils/env.ts @@ -41,6 +41,7 @@ const envSchema = Type.Object({ TROVE_API_KEY: Type.String(), ENGINE_MAINTENANCE_MODE_ENABLED: Type.Boolean({ default: false }), ENGINE_TRANSACTION_SIMULATION_ENABLED: Type.Boolean({ default: false }), + USER_MIGRATION_ENABLED: Type.Boolean({ default: false }), }); export type TdkApiEnv = Static;