From e76c87caf685b7a484a87c16c2c8ab08969b39a7 Mon Sep 17 00:00:00 2001 From: Stanislav Lysak Date: Tue, 10 Sep 2024 17:06:02 +0300 Subject: [PATCH 1/7] fet-1613: Wrong NFTs being listed for Avatar selection --- public/locales/en/transactionFlow.json | 4 + .../ProfileEditor/Avatar/AvatarNFT.test.tsx | 3 +- .../ProfileEditor/Avatar/AvatarNFT.tsx | 175 ++++++++++++------ 3 files changed, 127 insertions(+), 55 deletions(-) diff --git a/public/locales/en/transactionFlow.json b/public/locales/en/transactionFlow.json index d61128554..16718f444 100644 --- a/public/locales/en/transactionFlow.json +++ b/public/locales/en/transactionFlow.json @@ -14,6 +14,10 @@ "unknown": "Unknown NFT", "loadError": "NFT cannot be loaded", "noNFTs": "No NFTs found for this address.", + "address": { + "owned": "Owned", + "other": "Other" + }, "selected": { "title": "Selected NFT", "subtitle": "Are you sure you want to use this NFT?" diff --git a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx index 1c1af4f03..5742d1b1d 100644 --- a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx +++ b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx @@ -6,8 +6,8 @@ import { useAccount, useClient } from 'wagmi' import * as ThorinComponents from '@ensdomains/thorin' -import { AvatarNFT } from './AvatarNFT' import { makeMockIntersectionObserver } from '../../../../../test/mock/makeMockIntersectionObserver' +import { AvatarNFT } from './AvatarNFT' vi.mock('wagmi') @@ -24,6 +24,7 @@ const mockHandleCancel = vi.fn() makeMockIntersectionObserver() const props = { + name: 'test', handleSubmit: mockHandleSubmit, handleCancel: mockHandleCancel, } diff --git a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx index 822ed4c2e..2be24d529 100644 --- a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx +++ b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx @@ -17,6 +17,7 @@ import { import { SpinnerRow } from '@app/components/@molecules/ScrollBoxWithSpinner' import { useChainName } from '@app/hooks/chain/useChainName' +import { useNameDetails } from '@app/hooks/useNameDetails' import { getSupportedChainContractAddress } from '@app/utils/getSupportedChainContractAddress' import { useInfiniteQuery } from '@app/utils/query/useInfiniteQuery' @@ -61,8 +62,65 @@ type NFTResponse = { totalCount: number } -const makeBaseURL = (network: string) => - `https://ens-nft-worker.ens-cf.workers.dev/v1/${network}/getNfts/` +async function getNfts({ + network, + owner, + pageKey, +}: { + network: string + owner: string + pageKey: string +}) { + const baseURL = `https://ens-nft-worker.ens-cf.workers.dev/v1/${network}/getNfts/` + + const urlParams = new URLSearchParams() + + urlParams.append('owner', owner) + urlParams.append('filters[]', 'SPAM') + + if (pageKey) { + urlParams.append('pageKey', pageKey) + } + + const res = await fetch(`${baseURL}?${urlParams.toString()}`, { + method: 'GET', + redirect: 'follow', + }) + + return (await res.json()) as NFTResponse +} + +function useNtfs(chain: string, address: string) { + const client = useClient() + + return useInfiniteQuery({ + queryKey: [chain, address, 'NFTs'], + queryFn: async ({ pageParam }) => { + const response = await getNfts({ network: chain, owner: address, pageKey: pageParam }) + + return { + ...response, + ownedNfts: response.ownedNfts.filter( + (nft) => + (nft.media?.[0]?.thumbnail || nft.media?.[0]?.gateway) && + nft.contract.address !== + getSupportedChainContractAddress({ + client, + contract: 'ensBaseRegistrarImplementation', + }) && + nft.contract.address !== + getSupportedChainContractAddress({ + client, + contract: 'ensNameWrapper', + }), + ), + } + }, + initialPageParam: '', + placeholderData: keepPreviousData, + getNextPageParam: (lastPage) => lastPage.pageKey, + }) +} const ScrollBoxContent = styled.div( ({ theme }) => css` @@ -174,6 +232,28 @@ const SelectedNFTImage = styled.img( `, ) +const FilterContainer = styled.div( + ({ theme }) => css` + width: 100%; + display: flex; + align-items: center; + gap: ${theme.space['4']}; + margin-bottom: ${theme.space['4']}; + + ${mq.sm.min(css` + margin-bottom: ${theme.space['6']}; + `)} + + & > button { + flex-basis: 100px; + margin-bottom: -${theme.space['4']}; + ${mq.sm.min(css` + margin-bottom: -${theme.space['6']}; + `)} + } + `, +) + const LoadingContainer = styled.div(({ theme }) => [ css` width: ${theme.space.full}; @@ -260,64 +340,31 @@ const NftItem = ({ } export const AvatarNFT = ({ + name, handleCancel, handleSubmit, }: { + name: string handleCancel: () => void handleSubmit: (type: 'nft', uri: string, display: string) => void }) => { - const chain = useChainName() const { t } = useTranslation('transactionFlow') + const chain = useChainName() const { address: _address } = useAccount() const address = _address! - const client = useClient() + const { profile } = useNameDetails({ name }) - const { - data: NFTPages, - fetchNextPage, - isLoading, - } = useInfiniteQuery({ - queryKey: [chain, address, 'NFTs'], - queryFn: async ({ pageParam }) => { - const urlParams = new URLSearchParams() - urlParams.append('owner', address) - urlParams.append('filters[]', 'SPAM') - if (pageParam) { - urlParams.append('pageKey', pageParam) - } - const response = (await fetch(`${makeBaseURL(chain)}?${urlParams.toString()}`, { - method: 'GET', - redirect: 'follow', - }).then((res) => res.json())) as NFTResponse - - return { - ...response, - ownedNfts: response.ownedNfts.filter( - (nft) => - (nft.media?.[0]?.thumbnail || nft.media?.[0]?.gateway) && - nft.contract.address !== - getSupportedChainContractAddress({ - client, - contract: 'ensBaseRegistrarImplementation', - }) && - nft.contract.address !== - getSupportedChainContractAddress({ - client, - contract: 'ensNameWrapper', - }), - ), - } - }, - initialPageParam: '', - placeholderData: keepPreviousData, - getNextPageParam: (lastPage) => lastPage.pageKey, - }) + const addresses = (profile?.coins ?? []).filter((x) => ['eth'].includes(x.name.toLowerCase())) + const ethAddress = addresses[0]?.value const [searchedInput, setSearchedInput] = useState('') + const [selectedAddress, setSelectedAddress] = useState(address) const [selectedNFT, setSelectedNFT] = useState(null) + const { data: NFTPages, fetchNextPage, isLoading } = useNtfs(chain, selectedAddress) + const NFTs = NFTPages?.pages .reduce((prev, curr) => [...prev, ...curr.ownedNfts], [] as OwnedNFT[]) .filter((nft) => nft.title.toLowerCase().includes(searchedInput)) @@ -326,6 +373,12 @@ export const AvatarNFT = ({ const hasNextPage = !!NFTPages?.pages[NFTPages.pages.length - 1].pageKey const fetchPage = useCallback(() => fetchNextPage(), [fetchNextPage]) + const handleSelectAddress = () => { + if (!ethAddress) return + + setSelectedAddress((prev) => (prev === address ? ethAddress : address)) + } + if (selectedNFT !== null) { const nftReference = NFTs?.[selectedNFT]! @@ -369,6 +422,16 @@ export const AvatarNFT = ({ let innerContent: ReactNode + const toggleButton = address !== ethAddress && ( + + ) + if (isLoading) { innerContent = ( @@ -381,16 +444,19 @@ export const AvatarNFT = ({ } else if (hasNFTs) { innerContent = ( <> - } - hideLabel - label="search" - value={searchedInput} - onChange={(e) => setSearchedInput(e.target.value)} - placeholder={t('input.profileEditor.tabs.avatar.nft.searchPlaceholder')} - data-testid="avatar-search-input" - clearable - /> + + {toggleButton} + } + hideLabel + label="search" + value={searchedInput} + onChange={(e) => setSearchedInput(e.target.value)} + placeholder={t('input.profileEditor.tabs.avatar.nft.searchPlaceholder')} + data-testid="avatar-search-input" + clearable + /> + {NFTs.length > 0 ? ( + {toggleButton} {t('input.profileEditor.tabs.avatar.nft.noNFTs')} From b191bac9f4e18887a41b5251343b72a45d23654f Mon Sep 17 00:00:00 2001 From: Stanislav Lysak Date: Tue, 10 Sep 2024 22:42:27 +0300 Subject: [PATCH 2/7] fix tests --- .../ProfileEditor/Avatar/AvatarNFT.test.tsx | 37 ++++++++--- .../ProfileEditor/Avatar/AvatarNFT.tsx | 65 +++++++++++-------- 2 files changed, 67 insertions(+), 35 deletions(-) diff --git a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx index 5742d1b1d..b0949f82e 100644 --- a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx +++ b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx @@ -10,7 +10,9 @@ import { makeMockIntersectionObserver } from '../../../../../test/mock/makeMockI import { AvatarNFT } from './AvatarNFT' vi.mock('wagmi') - +vi.mock('@app/hooks/chain/useCurrentBlockTimestamp', () => ({ + default: () => new Date(), +})) vi.mock('@app/hooks/chain/useChainName', () => ({ useChainName: () => 'mainnet', })) @@ -65,7 +67,7 @@ const generateNFT = (withMedia: boolean, contractAddress?: string) => (_: any, i }, }) -const mockFetch = vi.fn().mockImplementation(() => +let mockFetch = vi.fn().mockImplementation(() => Promise.resolve({ ownedNfts: Array.from({ length: 5 }, generateNFT(true)), totalCount: 5, @@ -76,6 +78,7 @@ global.fetch = vi.fn(() => Promise.resolve({ json: mockFetch })) beforeEach(() => { mockFetch.mockClear() + mockFetch = vi.fn() mockUseAccount.mockReturnValue({ address: `0x${Date.now()}` }) mockUseClient.mockReturnValue({ chain: { @@ -98,6 +101,12 @@ describe('', () => { address: '0x0000000000000000000000000000000000000001', }) it('should show detail on click', async () => { + mockFetch.mockImplementation(() => + Promise.resolve({ + ownedNfts: Array.from({ length: 5 }, generateNFT(true)), + totalCount: 5, + }), + ) render() await waitFor(() => expect(screen.getByTestId('nft-0-0x0')).toBeVisible()) @@ -109,6 +118,12 @@ describe('', () => { }) }) it('should correctly call submit callback', async () => { + mockFetch.mockImplementation(() => + Promise.resolve({ + ownedNfts: Array.from({ length: 5 }, generateNFT(true)), + totalCount: 5, + }), + ) render() await waitFor(() => expect(screen.getByTestId('nft-0-0x0')).toBeVisible()) @@ -126,9 +141,15 @@ describe('', () => { ) }) it('should display all NFTs', async () => { + mockFetch.mockImplementation(() => + Promise.resolve({ + ownedNfts: Array.from({ length: 5 }, generateNFT(true)), + totalCount: 5, + }), + ) render() - await waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(1)) + await waitFor(() => expect(mockFetch).toHaveBeenCalled()) await waitFor(() => expect(screen.getByTestId('nft-0-0x0')).toBeVisible()) expect(screen.getByText('NFT 0')).toBeVisible() expect(screen.getByTestId('nft-1-0x1')).toBeVisible() @@ -149,7 +170,7 @@ describe('', () => { render() - await waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(1)) + await waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(2)) await waitFor(() => expect( screen.queryByTestId('nft-0-0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85'), @@ -165,7 +186,7 @@ describe('', () => { ) render() - await waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(1)) + await waitFor(() => expect(mockFetch).toHaveBeenCalled()) await waitFor(() => expect(screen.queryByTestId('nft-0-0x0')).not.toBeInTheDocument()) }) it.skip('show load more data on page load trigger', async () => { @@ -186,7 +207,7 @@ describe('', () => { render() - await waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(2)) + await waitFor(() => expect(mockFetch).toHaveBeenCalledOnce()) await waitFor( () => // @ts-ignore @@ -223,7 +244,7 @@ describe('', () => { render() - await waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(1)) + await waitFor(() => expect(mockFetch).toHaveBeenCalled()) }) it('should show message if search returns no results', async () => { @@ -242,7 +263,7 @@ describe('', () => { ) render() - await waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(1)) + await waitFor(() => expect(mockFetch).toHaveBeenCalled()) const searchInput = screen.getByTestId('avatar-search-input') await userEvent.type(searchInput, 'blahblahblah') await waitFor(() => diff --git a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx index 2be24d529..cc51e2517 100644 --- a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx +++ b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx @@ -339,6 +339,18 @@ const NftItem = ({ ) } +function useProfileAddresses(name: string) { + const { profile } = useNameDetails({ name }) + + const addresses = (profile?.coins ?? []).filter((x) => ['eth'].includes(x.name.toLowerCase())) + + const ethAddress = addresses[0]?.value + + return { + ethAddress, + } +} + export const AvatarNFT = ({ name, handleCancel, @@ -354,10 +366,7 @@ export const AvatarNFT = ({ const { address: _address } = useAccount() const address = _address! - const { profile } = useNameDetails({ name }) - - const addresses = (profile?.coins ?? []).filter((x) => ['eth'].includes(x.name.toLowerCase())) - const ethAddress = addresses[0]?.value + const { ethAddress } = useProfileAddresses(name) const [searchedInput, setSearchedInput] = useState('') const [selectedAddress, setSelectedAddress] = useState(address) @@ -365,7 +374,7 @@ export const AvatarNFT = ({ const { data: NFTPages, fetchNextPage, isLoading } = useNtfs(chain, selectedAddress) - const NFTs = NFTPages?.pages + const NFTs = (NFTPages?.pages ?? []) .reduce((prev, curr) => [...prev, ...curr.ownedNfts], [] as OwnedNFT[]) .filter((nft) => nft.title.toLowerCase().includes(searchedInput)) @@ -422,14 +431,28 @@ export const AvatarNFT = ({ let innerContent: ReactNode - const toggleButton = address !== ethAddress && ( - )} - + } + hideLabel + label="search" + value={searchedInput} + onChange={(e) => setSearchedInput(e.target.value)} + placeholder={t('input.profileEditor.tabs.avatar.nft.searchPlaceholder')} + data-testid="avatar-search-input" + clearable + /> + ) if (isLoading) { @@ -444,19 +467,7 @@ export const AvatarNFT = ({ } else if (hasNFTs) { innerContent = ( <> - - {toggleButton} - } - hideLabel - label="search" - value={searchedInput} - onChange={(e) => setSearchedInput(e.target.value)} - placeholder={t('input.profileEditor.tabs.avatar.nft.searchPlaceholder')} - data-testid="avatar-search-input" - clearable - /> - + {searchBox} {NFTs.length > 0 ? ( - {NFTs?.map((NFT, i) => ( + {NFTs.map((NFT, i) => ( - {toggleButton} + {searchBox} {t('input.profileEditor.tabs.avatar.nft.noNFTs')} From a549d2515c5744817454dc82aab55fc184d87d9d Mon Sep 17 00:00:00 2001 From: Stanislav Lysak Date: Wed, 11 Sep 2024 17:23:37 +0300 Subject: [PATCH 3/7] hide button if no eth address --- .../ProfileEditor/Avatar/AvatarNFT.tsx | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx index cc51e2517..118034268 100644 --- a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx +++ b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.tsx @@ -433,15 +433,16 @@ export const AvatarNFT = ({ const searchBox = ( - {address !== ethAddress && ( - - )} + {!ethAddress || + (address !== ethAddress && ( + + ))} } hideLabel From b53e1f7d5d219a3f5f277787a5df31188ad1649a Mon Sep 17 00:00:00 2001 From: v1rtl Date: Fri, 20 Sep 2024 16:14:10 +0300 Subject: [PATCH 4/7] remove a bunch of unused deps, replace glob with tinyglobby --- .github/workflows/knip.yaml | 2 +- deploy/00_deploy_multicall.ts | 1 - package.json | 14 +- pnpm-lock.yaml | 284 +++++++++++++++------------------- scripts/generate-site-map.mjs | 1 - src/pages/legal/[slug].tsx | 4 +- 6 files changed, 127 insertions(+), 179 deletions(-) diff --git a/.github/workflows/knip.yaml b/.github/workflows/knip.yaml index 50fe208ac..77e388cec 100644 --- a/.github/workflows/knip.yaml +++ b/.github/workflows/knip.yaml @@ -14,7 +14,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@v3 with: - node-version: 18 + node-version: 20 cache: 'pnpm' - run: pnpm install --frozen-lockfile diff --git a/deploy/00_deploy_multicall.ts b/deploy/00_deploy_multicall.ts index 2df06ca0b..215ce7431 100644 --- a/deploy/00_deploy_multicall.ts +++ b/deploy/00_deploy_multicall.ts @@ -3,7 +3,6 @@ import { existsSync, mkdirSync } from 'fs' import { readFile, writeFile } from 'fs/promises' import { DeployFunction } from 'hardhat-deploy/types' import { HardhatRuntimeEnvironment } from 'hardhat/types' -import fetch from 'node-fetch-commonjs' import { resolve } from 'path' const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { diff --git a/package.json b/package.json index 4067cf45b..aebf4071b 100644 --- a/package.json +++ b/package.json @@ -45,8 +45,8 @@ "generate:coinMapper": "ts-node ./scripts/coin-mapper.ts", "compose": "cp ./node_modules/@ensdomains/ens-test-env/src/docker-compose.yml ./docker-compose.yml", "subgraph:update": "ens-test-env subgraph --var NEXT_PUBLIC_DEPLOYMENT_ADDRESSES", - "knip": "npx knip", - "knip:fix": "npx knip --fix --allow-remove-files" + "knip": "knip", + "knip:fix": "knip --fix --allow-remove-files" }, "dependencies": { "@ensdomains/address-encoder": "1.1.1", @@ -54,7 +54,6 @@ "@ensdomains/ens-contracts": "1.2.0-beta.0", "@ensdomains/ensjs": "4.0.0", "@ensdomains/thorin": "0.6.50", - "@metamask/mobile-provider": "^2.1.0", "@metamask/post-message-stream": "^6.1.2", "@metamask/providers": "^14.0.2", "@noble/hashes": "^1.3.2", @@ -70,7 +69,6 @@ "@walletconnect/modal": "^2.6.2", "calendar-link": "^2.2.0", "dns-packet": "^5.4.0", - "glob": "^8.0.3", "graphql-request": "5.1.0", "i18next": "^21.9.1", "i18next-browser-languagedetector": "^6.1.5", @@ -85,7 +83,6 @@ "react": "^18.2.0", "react-confetti": "^6.1.0", "react-dom": "^18.2.0", - "react-ga": "^3.3.1", "react-hook-form": "7.51.0", "react-i18next": "^11.18.5", "react-is": "^17.0.2", @@ -104,13 +101,11 @@ "react-dom": "*" }, "devDependencies": { - "@adraffy/ens-normalize": "^1.10.1", "@cloudflare/workers-types": "^3.14.1", "@ensdomains/buffer": "^0.1.1", "@ensdomains/ens-test-env": "^0.5.0-beta.1", "@ensdomains/headless-web3-provider": "^1.0.8", "@ethersproject/abi": "^5.4.0", - "@ethersproject/contracts": "^5.4.0", "@ianvs/prettier-plugin-sort-imports": "^4.1.0", "@next/bundle-analyzer": "^13.4.19", "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", @@ -121,7 +116,6 @@ "@testing-library/react": "^14.0.0", "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^14.5.2", - "@types/glob": "^7.2.0", "@types/lodash": "^4.14.184", "@types/node": "^18.7.13", "@types/pako": "^2.0.0", @@ -169,10 +163,7 @@ "next-dev-https": "^0.1.2", "next-router-mock": "^0.9.10", "next-transpile-modules": "^9.1.0", - "node-fetch": "2.6.1", - "node-fetch-commonjs": "^3.1.1", "pako": "^2.1.0", - "polyfill-crypto.getrandomvalues": "^1.0.0", "postcss-scss": "^4.0.4", "prettier": "3.0.3", "sitemap": "^7.1.1", @@ -183,6 +174,7 @@ "stylelint-processor-styled-components": "^1.10.0", "stylelint-webpack-plugin": "^3.3.0", "svgo": "latest", + "tinyglobby": "^0.2.6", "ts-node": "^10.9.1", "typescript": "^5.1.6", "typescript-styled-plugin": "^0.18.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 820b63458..55e8bc4bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,9 +41,6 @@ importers: '@ensdomains/thorin': specifier: 0.6.50 version: 0.6.50(react-dom@18.3.1(react@18.3.1))(react-transition-state@1.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react-is@17.0.2)(react@18.3.1)) - '@metamask/mobile-provider': - specifier: ^2.1.0 - version: 2.1.0 '@metamask/post-message-stream': specifier: ^6.1.2 version: 6.2.0 @@ -55,7 +52,7 @@ importers: version: 1.4.0 '@rainbow-me/rainbowkit': specifier: 2.1.2 - version: 2.1.2(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.12.4(@tanstack/query-core@5.22.2)(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)) + version: 2.1.2(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.12.4(@tanstack/query-core@5.22.2)(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)) '@sentry/nextjs': specifier: 7.43.x version: 7.43.0(encoding@0.1.13)(next@13.5.6(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.91.0(esbuild@0.17.19)) @@ -89,9 +86,6 @@ importers: dns-packet: specifier: ^5.4.0 version: 5.6.1 - glob: - specifier: ^8.0.3 - version: 8.1.0 graphql-request: specifier: 5.1.0 version: 5.1.0(encoding@0.1.13)(graphql@16.8.1) @@ -134,15 +128,12 @@ importers: react-dom: specifier: ^18.2.0 version: 18.3.1(react@18.3.1) - react-ga: - specifier: ^3.3.1 - version: 3.3.1(prop-types@15.8.1)(react@18.3.1) react-hook-form: specifier: 7.51.0 version: 7.51.0(react@18.3.1) react-i18next: specifier: ^11.18.5 - version: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + version: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) react-is: specifier: ^17.0.2 version: 17.0.2 @@ -172,11 +163,8 @@ importers: version: 2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) wagmi: specifier: 2.12.4 - version: 2.12.4(@tanstack/query-core@5.22.2)(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + version: 2.12.4(@tanstack/query-core@5.22.2)(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) devDependencies: - '@adraffy/ens-normalize': - specifier: ^1.10.1 - version: 1.10.1 '@cloudflare/workers-types': specifier: ^3.14.1 version: 3.19.0 @@ -192,9 +180,6 @@ importers: '@ethersproject/abi': specifier: ^5.4.0 version: 5.7.0 - '@ethersproject/contracts': - specifier: ^5.4.0 - version: 5.7.0 '@ianvs/prettier-plugin-sort-imports': specifier: ^4.1.0 version: 4.2.1(prettier@3.0.3) @@ -225,9 +210,6 @@ importers: '@testing-library/user-event': specifier: ^14.5.2 version: 14.5.2(@testing-library/dom@9.3.4) - '@types/glob': - specifier: ^7.2.0 - version: 7.2.0 '@types/lodash': specifier: ^4.14.184 version: 4.17.4 @@ -369,18 +351,9 @@ importers: next-transpile-modules: specifier: ^9.1.0 version: 9.1.0 - node-fetch: - specifier: 2.6.1 - version: 2.6.1 - node-fetch-commonjs: - specifier: ^3.1.1 - version: 3.3.2 pako: specifier: ^2.1.0 version: 2.1.0 - polyfill-crypto.getrandomvalues: - specifier: ^1.0.0 - version: 1.0.0 postcss-scss: specifier: ^4.0.4 version: 4.0.9(postcss@8.4.38) @@ -411,6 +384,9 @@ importers: svgo: specifier: latest version: 3.3.2 + tinyglobby: + specifier: ^0.2.6 + version: 0.2.6 ts-node: specifier: ^10.9.1 version: 10.9.2(@types/node@18.19.33)(typescript@5.4.5) @@ -2155,10 +2131,6 @@ packages: resolution: {integrity: sha512-yUdzsJK04Ev98Ck4D7lmRNQ8FPioXYhEUZOMS01LXW8qTvPGiRVXmVltj2p4wrLkh0vW7u6nv0mNl5xzC5Qmfg==} engines: {node: '>=16.0.0'} - '@metamask/mobile-provider@2.1.0': - resolution: {integrity: sha512-VuVUIZ5jEQmLaU8SJC8692crxtNncsxyR9q5j1J6epyMHUU75WTtQdq7VSsu1ghkmP9NXNAz3inlWOGsbT8lLA==} - engines: {node: '>=12.0.0'} - '@metamask/object-multiplex@2.0.0': resolution: {integrity: sha512-+ItrieVZie3j2LfYE0QkdW3dsEMfMEp419IGx1zyeLqjRZ14iQUPRO0H6CGgfAAoC0x6k2PfCAGRwJUA9BMrqA==} engines: {node: ^16.20 || ^18.16 || >=20} @@ -3298,9 +3270,6 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - '@types/glob@7.2.0': - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - '@types/hoist-non-react-statics@3.3.5': resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} @@ -3340,9 +3309,6 @@ packages: '@types/lru-cache@5.1.1': resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} - '@types/minimatch@5.1.2': - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} @@ -5636,6 +5602,14 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.3.0: + resolution: {integrity: sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -7038,9 +7012,6 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - mersenne-twister@1.1.0: - resolution: {integrity: sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA==} - methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -7440,14 +7411,6 @@ packages: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} engines: {node: '>= 0.10.5'} - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - - node-fetch-commonjs@3.3.2: - resolution: {integrity: sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-fetch-native@1.6.4: resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} @@ -7929,9 +7892,6 @@ packages: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} - polyfill-crypto.getrandomvalues@1.0.0: - resolution: {integrity: sha512-GIkU6bg4auRnDFOqUNit7eLn9hzznrJU1CGFuivQzDeVp4Ys8cY4OY6GhAdndJwo4jryz5cJyjg9ELhvQjdrtw==} - pony-cause@2.1.11: resolution: {integrity: sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==} engines: {node: '>=12.0.0'} @@ -8190,12 +8150,6 @@ packages: peerDependencies: react: ^18.2.0 - react-ga@3.3.1: - resolution: {integrity: sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ==} - peerDependencies: - prop-types: ^15.6.0 - react: ^18.2.0 - react-hook-form@7.51.0: resolution: {integrity: sha512-BggOy5j58RdhdMzzRUHGOYhSz1oeylFAv6jUSG86OvCIvlAvS7KvnRY7yoAf2pfEiPN7BesnR0xx73nEk3qIiw==} engines: {node: '>=12.22.0'} @@ -9262,6 +9216,10 @@ packages: tinybench@2.8.0: resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} + tinyglobby@0.2.6: + resolution: {integrity: sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g==} + engines: {node: '>=12.0.0'} + tinypool@1.0.1: resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -9851,10 +9809,6 @@ packages: web-encoding@1.1.5: resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - web3-bzz@1.10.0: resolution: {integrity: sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==} engines: {node: '>=8.0.0'} @@ -12525,8 +12479,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@metamask/mobile-provider@2.1.0': {} - '@metamask/object-multiplex@2.0.0': dependencies: once: 1.4.0 @@ -12610,21 +12562,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@metamask/sdk-install-modal-web@0.26.5(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': + '@metamask/sdk-install-modal-web@0.26.5(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: i18next: 23.11.5 qr-code-styling: 1.6.0-rc.1 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-native: 0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10) - '@metamask/sdk@0.27.0(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.27.0(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(utf-8-validate@5.0.10)': dependencies: '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 '@metamask/sdk-communication-layer': 0.27.0(cross-fetch@4.0.0(encoding@0.1.13))(eciesjs@0.3.18)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.7.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@metamask/sdk-install-modal-web': 0.26.5(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + '@metamask/sdk-install-modal-web': 0.26.5(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) '@types/dom-screen-wake-lock': 1.0.3 bowser: 2.11.0 cross-fetch: 4.0.0(encoding@0.1.13) @@ -12637,7 +12589,7 @@ snapshots: obj-multiplex: 1.0.0 pump: 3.0.0 qrcode-terminal-nooctal: 0.12.1 - react-native-webview: 11.26.1(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + react-native-webview: 11.26.1(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) readable-stream: 3.6.2 rollup-plugin-visualizer: 5.12.0(rollup@2.78.0) socket.io-client: 4.7.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -13030,7 +12982,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@rainbow-me/rainbowkit@2.1.2(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.12.4(@tanstack/query-core@5.22.2)(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8))': + '@rainbow-me/rainbowkit@2.1.2(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.12.4(@tanstack/query-core@5.22.2)(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8))': dependencies: '@tanstack/react-query': 5.22.2(react@18.3.1) '@vanilla-extract/css': 1.14.0 @@ -13043,25 +12995,29 @@ snapshots: react-remove-scroll: 2.5.7(@types/react@18.2.21)(react@18.3.1) ua-parser-js: 1.0.37 viem: 2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) - wagmi: 2.12.4(@tanstack/query-core@5.22.2)(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + wagmi: 2.12.4(@tanstack/query-core@5.22.2)(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) transitivePeerDependencies: - '@types/react' - '@react-native-community/cli-clean@13.6.6': + '@react-native-community/cli-clean@13.6.6(encoding@0.1.13)': dependencies: - '@react-native-community/cli-tools': 13.6.6 + '@react-native-community/cli-tools': 13.6.6(encoding@0.1.13) chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 + transitivePeerDependencies: + - encoding - '@react-native-community/cli-config@13.6.6': + '@react-native-community/cli-config@13.6.6(encoding@0.1.13)': dependencies: - '@react-native-community/cli-tools': 13.6.6 + '@react-native-community/cli-tools': 13.6.6(encoding@0.1.13) chalk: 4.1.2 cosmiconfig: 5.2.1 deepmerge: 4.3.1 fast-glob: 3.3.2 joi: 17.13.3 + transitivePeerDependencies: + - encoding '@react-native-community/cli-debugger-ui@13.6.6': dependencies: @@ -13069,13 +13025,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native-community/cli-doctor@13.6.6': + '@react-native-community/cli-doctor@13.6.6(encoding@0.1.13)': dependencies: - '@react-native-community/cli-config': 13.6.6 - '@react-native-community/cli-platform-android': 13.6.6 - '@react-native-community/cli-platform-apple': 13.6.6 - '@react-native-community/cli-platform-ios': 13.6.6 - '@react-native-community/cli-tools': 13.6.6 + '@react-native-community/cli-config': 13.6.6(encoding@0.1.13) + '@react-native-community/cli-platform-android': 13.6.6(encoding@0.1.13) + '@react-native-community/cli-platform-apple': 13.6.6(encoding@0.1.13) + '@react-native-community/cli-platform-ios': 13.6.6(encoding@0.1.13) + '@react-native-community/cli-tools': 13.6.6(encoding@0.1.13) chalk: 4.1.2 command-exists: 1.2.9 deepmerge: 4.3.1 @@ -13088,40 +13044,50 @@ snapshots: strip-ansi: 5.2.0 wcwidth: 1.0.1 yaml: 2.5.0 + transitivePeerDependencies: + - encoding - '@react-native-community/cli-hermes@13.6.6': + '@react-native-community/cli-hermes@13.6.6(encoding@0.1.13)': dependencies: - '@react-native-community/cli-platform-android': 13.6.6 - '@react-native-community/cli-tools': 13.6.6 + '@react-native-community/cli-platform-android': 13.6.6(encoding@0.1.13) + '@react-native-community/cli-tools': 13.6.6(encoding@0.1.13) chalk: 4.1.2 hermes-profile-transformer: 0.0.6 + transitivePeerDependencies: + - encoding - '@react-native-community/cli-platform-android@13.6.6': + '@react-native-community/cli-platform-android@13.6.6(encoding@0.1.13)': dependencies: - '@react-native-community/cli-tools': 13.6.6 + '@react-native-community/cli-tools': 13.6.6(encoding@0.1.13) chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 fast-xml-parser: 4.4.1 logkitty: 0.7.1 + transitivePeerDependencies: + - encoding - '@react-native-community/cli-platform-apple@13.6.6': + '@react-native-community/cli-platform-apple@13.6.6(encoding@0.1.13)': dependencies: - '@react-native-community/cli-tools': 13.6.6 + '@react-native-community/cli-tools': 13.6.6(encoding@0.1.13) chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 fast-xml-parser: 4.4.1 ora: 5.4.1 + transitivePeerDependencies: + - encoding - '@react-native-community/cli-platform-ios@13.6.6': + '@react-native-community/cli-platform-ios@13.6.6(encoding@0.1.13)': dependencies: - '@react-native-community/cli-platform-apple': 13.6.6 + '@react-native-community/cli-platform-apple': 13.6.6(encoding@0.1.13) + transitivePeerDependencies: + - encoding - '@react-native-community/cli-server-api@13.6.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@react-native-community/cli-server-api@13.6.6(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@react-native-community/cli-debugger-ui': 13.6.6 - '@react-native-community/cli-tools': 13.6.6 + '@react-native-community/cli-tools': 13.6.6(encoding@0.1.13) compression: 1.7.4 connect: 3.7.0 errorhandler: 1.5.1 @@ -13131,36 +13097,39 @@ snapshots: ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil + - encoding - supports-color - utf-8-validate - '@react-native-community/cli-tools@13.6.6': + '@react-native-community/cli-tools@13.6.6(encoding@0.1.13)': dependencies: appdirsjs: 1.2.7 chalk: 4.1.2 execa: 5.1.1 find-up: 5.0.0 mime: 2.6.0 - node-fetch: 2.6.1 + node-fetch: 2.7.0(encoding@0.1.13) open: 6.4.0 ora: 5.4.1 semver: 7.6.3 shell-quote: 1.8.1 sudo-prompt: 9.2.1 + transitivePeerDependencies: + - encoding '@react-native-community/cli-types@13.6.6': dependencies: joi: 17.13.3 - '@react-native-community/cli@13.6.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@react-native-community/cli@13.6.6(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: - '@react-native-community/cli-clean': 13.6.6 - '@react-native-community/cli-config': 13.6.6 + '@react-native-community/cli-clean': 13.6.6(encoding@0.1.13) + '@react-native-community/cli-config': 13.6.6(encoding@0.1.13) '@react-native-community/cli-debugger-ui': 13.6.6 - '@react-native-community/cli-doctor': 13.6.6 - '@react-native-community/cli-hermes': 13.6.6 - '@react-native-community/cli-server-api': 13.6.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@react-native-community/cli-tools': 13.6.6 + '@react-native-community/cli-doctor': 13.6.6(encoding@0.1.13) + '@react-native-community/cli-hermes': 13.6.6(encoding@0.1.13) + '@react-native-community/cli-server-api': 13.6.6(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@react-native-community/cli-tools': 13.6.6(encoding@0.1.13) '@react-native-community/cli-types': 13.6.6 chalk: 4.1.2 commander: 9.5.0 @@ -13173,6 +13142,7 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - bufferutil + - encoding - supports-color - utf-8-validate @@ -13247,30 +13217,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/community-cli-plugin@0.74.83(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@react-native/community-cli-plugin@0.74.83(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: - '@react-native-community/cli-server-api': 13.6.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@react-native-community/cli-tools': 13.6.6 - '@react-native/dev-middleware': 0.74.83(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@react-native-community/cli-server-api': 13.6.6(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@react-native-community/cli-tools': 13.6.6(encoding@0.1.13) + '@react-native/dev-middleware': 0.74.83(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) '@react-native/metro-babel-transformer': 0.74.83(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6)) chalk: 4.1.2 execa: 5.1.1 - metro: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) - metro-config: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro: 0.80.10(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + metro-config: 0.80.10(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) metro-core: 0.80.10 - node-fetch: 2.6.1 + node-fetch: 2.7.0(encoding@0.1.13) querystring: 0.2.1 readline: 1.3.0 transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' - bufferutil + - encoding - supports-color - utf-8-validate '@react-native/debugger-frontend@0.74.83': {} - '@react-native/dev-middleware@0.74.83(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@react-native/dev-middleware@0.74.83(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@isaacs/ttlcache': 1.4.1 '@react-native/debugger-frontend': 0.74.83 @@ -13278,7 +13249,7 @@ snapshots: chrome-launcher: 0.15.2 connect: 3.7.0 debug: 2.6.9 - node-fetch: 2.6.1 + node-fetch: 2.7.0(encoding@0.1.13) nullthrows: 1.1.1 open: 7.4.2 selfsigned: 2.4.1 @@ -13287,6 +13258,7 @@ snapshots: ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil + - encoding - supports-color - utf-8-validate @@ -13306,12 +13278,12 @@ snapshots: '@react-native/normalize-colors@0.74.83': {} - '@react-native/virtualized-lists@0.74.83(@types/react@18.2.21)(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': + '@react-native/virtualized-lists@0.74.83(@types/react@18.2.21)(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10) optionalDependencies: '@types/react': 18.2.21 @@ -14049,11 +14021,6 @@ snapshots: '@types/estree@1.0.5': {} - '@types/glob@7.2.0': - dependencies: - '@types/minimatch': 5.1.2 - '@types/node': 18.19.33 - '@types/hoist-non-react-statics@3.3.5': dependencies: '@types/react': 18.2.21 @@ -14093,8 +14060,6 @@ snapshots: '@types/lru-cache@5.1.1': {} - '@types/minimatch@5.1.2': {} - '@types/minimist@1.2.5': {} '@types/ms@0.7.34': {} @@ -14471,10 +14436,10 @@ snapshots: loupe: 3.1.1 tinyrainbow: 1.2.0 - '@wagmi/connectors@5.1.4(@types/react@18.2.21)(@wagmi/core@2.13.3(@tanstack/query-core@5.22.2)(@types/react@18.2.21)(immer@9.0.21)(react@18.3.1)(typescript@5.4.5)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': + '@wagmi/connectors@5.1.4(@types/react@18.2.21)(@wagmi/core@2.13.3(@tanstack/query-core@5.22.2)(@types/react@18.2.21)(immer@9.0.21)(react@18.3.1)(typescript@5.4.5)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': dependencies: '@coinbase/wallet-sdk': 4.0.4 - '@metamask/sdk': 0.27.0(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(utf-8-validate@5.0.10) + '@metamask/sdk': 0.27.0(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.3(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) '@wagmi/core': 2.13.3(@tanstack/query-core@5.22.2)(@types/react@18.2.21)(immer@9.0.21)(react@18.3.1)(typescript@5.4.5)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8)) @@ -17272,6 +17237,10 @@ snapshots: dependencies: pend: 1.2.0 + fdir@6.3.0(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -18918,8 +18887,6 @@ snapshots: merge2@1.4.1: {} - mersenne-twister@1.1.0: {} - methods@1.1.2: {} metro-babel-transformer@0.80.10: @@ -18941,18 +18908,19 @@ snapshots: flow-enums-runtime: 0.0.6 metro-core: 0.80.10 - metro-config@0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): + metro-config@0.80.10(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10): dependencies: connect: 3.7.0 cosmiconfig: 5.2.1 flow-enums-runtime: 0.0.6 jest-validate: 29.7.0 - metro: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro: 0.80.10(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) metro-cache: 0.80.10 metro-core: 0.80.10 metro-runtime: 0.80.10 transitivePeerDependencies: - bufferutil + - encoding - supports-color - utf-8-validate @@ -19031,14 +18999,14 @@ snapshots: transitivePeerDependencies: - supports-color - metro-transform-worker@0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): + metro-transform-worker@0.80.10(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.24.6 '@babel/generator': 7.25.0 '@babel/parser': 7.25.3 '@babel/types': 7.25.2 flow-enums-runtime: 0.0.6 - metro: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro: 0.80.10(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) metro-babel-transformer: 0.80.10 metro-cache: 0.80.10 metro-cache-key: 0.80.10 @@ -19048,10 +19016,11 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - bufferutil + - encoding - supports-color - utf-8-validate - metro@0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): + metro@0.80.10(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10): dependencies: '@babel/code-frame': 7.24.7 '@babel/core': 7.24.6 @@ -19078,7 +19047,7 @@ snapshots: metro-babel-transformer: 0.80.10 metro-cache: 0.80.10 metro-cache-key: 0.80.10 - metro-config: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-config: 0.80.10(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) metro-core: 0.80.10 metro-file-map: 0.80.10 metro-resolver: 0.80.10 @@ -19086,9 +19055,9 @@ snapshots: metro-source-map: 0.80.10 metro-symbolicate: 0.80.10 metro-transform-plugins: 0.80.10 - metro-transform-worker: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-transform-worker: 0.80.10(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) mime-types: 2.1.35 - node-fetch: 2.6.1 + node-fetch: 2.7.0(encoding@0.1.13) nullthrows: 1.1.1 serialize-error: 2.1.0 source-map: 0.5.7 @@ -19098,6 +19067,7 @@ snapshots: yargs: 17.7.2 transitivePeerDependencies: - bufferutil + - encoding - supports-color - utf-8-validate @@ -19457,13 +19427,6 @@ snapshots: dependencies: minimatch: 3.1.2 - node-domexception@1.0.0: {} - - node-fetch-commonjs@3.3.2: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - node-fetch-native@1.6.4: {} node-fetch@2.6.1: {} @@ -19934,10 +19897,6 @@ snapshots: pngjs@5.0.0: {} - polyfill-crypto.getrandomvalues@1.0.0: - dependencies: - mersenne-twister: 1.1.0 - pony-cause@2.1.11: {} possible-typed-array-names@1.0.0: {} @@ -20208,16 +20167,11 @@ snapshots: '@babel/runtime': 7.24.6 react: 18.3.1 - react-ga@3.3.1(prop-types@15.8.1)(react@18.3.1): - dependencies: - prop-types: 15.8.1 - react: 18.3.1 - react-hook-form@7.51.0(react@18.3.1): dependencies: react: 18.3.1 - react-i18next@11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): + react-i18next@11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: '@babel/runtime': 7.24.6 html-parse-stringify: 3.0.1 @@ -20225,7 +20179,7 @@ snapshots: react: 18.3.1 optionalDependencies: react-dom: 18.3.1(react@18.3.1) - react-native: 0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10) react-is@16.13.1: {} @@ -20233,26 +20187,26 @@ snapshots: react-is@18.3.1: {} - react-native-webview@11.26.1(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-webview@11.26.1(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: escape-string-regexp: 2.0.0 invariant: 2.2.4 react: 18.3.1 - react-native: 0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10) - react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10): + react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10): dependencies: '@jest/create-cache-key-function': 29.7.0 - '@react-native-community/cli': 13.6.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@react-native-community/cli-platform-android': 13.6.6 - '@react-native-community/cli-platform-ios': 13.6.6 + '@react-native-community/cli': 13.6.6(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@react-native-community/cli-platform-android': 13.6.6(encoding@0.1.13) + '@react-native-community/cli-platform-ios': 13.6.6(encoding@0.1.13) '@react-native/assets-registry': 0.74.83 '@react-native/codegen': 0.74.83(@babel/preset-env@7.24.6(@babel/core@7.24.6)) - '@react-native/community-cli-plugin': 0.74.83(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@react-native/community-cli-plugin': 0.74.83(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) '@react-native/gradle-plugin': 0.74.83 '@react-native/js-polyfills': 0.74.83 '@react-native/normalize-colors': 0.74.83 - '@react-native/virtualized-lists': 0.74.83(@types/react@18.2.21)(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + '@react-native/virtualized-lists': 0.74.83(@types/react@18.2.21)(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -20286,6 +20240,7 @@ snapshots: - '@babel/core' - '@babel/preset-env' - bufferutil + - encoding - supports-color - utf-8-validate @@ -21527,6 +21482,11 @@ snapshots: tinybench@2.8.0: {} + tinyglobby@0.2.6: + dependencies: + fdir: 6.3.0(picomatch@4.0.2) + picomatch: 4.0.2 + tinypool@1.0.1: {} tinyrainbow@1.2.0: {} @@ -22031,10 +21991,10 @@ snapshots: dependencies: xml-name-validator: 5.0.0 - wagmi@2.12.4(@tanstack/query-core@5.22.2)(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): + wagmi@2.12.4(@tanstack/query-core@5.22.2)(@tanstack/react-query@5.22.2(react@18.3.1))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): dependencies: '@tanstack/react-query': 5.22.2(react@18.3.1) - '@wagmi/connectors': 5.1.4(@types/react@18.2.21)(@wagmi/core@2.13.3(@tanstack/query-core@5.22.2)(@types/react@18.2.21)(immer@9.0.21)(react@18.3.1)(typescript@5.4.5)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + '@wagmi/connectors': 5.1.4(@types/react@18.2.21)(@wagmi/core@2.13.3(@tanstack/query-core@5.22.2)(@types/react@18.2.21)(immer@9.0.21)(react@18.3.1)(typescript@5.4.5)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.1(@babel/core@7.24.6)(@babel/preset-env@7.24.6(@babel/core@7.24.6))(@types/react@18.2.21)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@2.78.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) '@wagmi/core': 2.13.3(@tanstack/query-core@5.22.2)(@types/react@18.2.21)(immer@9.0.21)(react@18.3.1)(typescript@5.4.5)(viem@2.19.4(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) @@ -22102,8 +22062,6 @@ snapshots: optionalDependencies: '@zxing/text-encoding': 0.9.0 - web-streams-polyfill@3.3.3: {} - web3-bzz@1.10.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@types/node': 12.20.55 diff --git a/scripts/generate-site-map.mjs b/scripts/generate-site-map.mjs index 7352ec0bc..2665263ee 100644 --- a/scripts/generate-site-map.mjs +++ b/scripts/generate-site-map.mjs @@ -2,7 +2,6 @@ import { createReadStream, createWriteStream, existsSync } from 'fs' import { Transform } from 'stream' import { gql, request } from 'graphql-request' -import fetch from 'node-fetch' import { parseSitemap, parseSitemapIndex, diff --git a/src/pages/legal/[slug].tsx b/src/pages/legal/[slug].tsx index b5b94b230..5edf2d44a 100644 --- a/src/pages/legal/[slug].tsx +++ b/src/pages/legal/[slug].tsx @@ -2,7 +2,7 @@ import { readFileSync } from 'fs' import path from 'path' -import { glob } from 'glob' +import { globSync } from 'tinyglobby' import Markdown from 'markdown-to-jsx' import { GetStaticPropsContext } from 'next' import { ReactElement } from 'react' @@ -99,7 +99,7 @@ Page.getLayout = function getLayout(page: ReactElement) { } const getFilePaths = () => - glob.sync('./src/assets/legal/*.md', { cwd: process.cwd(), absolute: true }) + globSync(['./src/assets/legal/*.md'], { cwd: process.cwd(), absolute: true }) const getPageName = (pathname: string) => { const pageName = path.basename(pathname, '.md') From e74f31a72fdc07eb71c05264cb349c9703c92d93 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Fri, 20 Sep 2024 16:18:06 +0300 Subject: [PATCH 5/7] fix lint errors --- package.json | 2 +- pnpm-lock.yaml | 6 +++--- src/pages/legal/[slug].tsx | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index aebf4071b..73603ba94 100644 --- a/package.json +++ b/package.json @@ -91,6 +91,7 @@ "react-use-error-boundary": "^3.0.0", "react-use-intercom": "^5.1.4", "styled-components": "^5.3.5", + "tinyglobby": "^0.2.6", "ts-pattern": "^4.2.2", "use-immer": "^0.7.0", "viem": "2.19.4", @@ -174,7 +175,6 @@ "stylelint-processor-styled-components": "^1.10.0", "stylelint-webpack-plugin": "^3.3.0", "svgo": "latest", - "tinyglobby": "^0.2.6", "ts-node": "^10.9.1", "typescript": "^5.1.6", "typescript-styled-plugin": "^0.18.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 55e8bc4bd..54663a57a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -152,6 +152,9 @@ importers: styled-components: specifier: ^5.3.5 version: 5.3.11(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react-is@17.0.2)(react@18.3.1) + tinyglobby: + specifier: ^0.2.6 + version: 0.2.6 ts-pattern: specifier: ^4.2.2 version: 4.3.0 @@ -384,9 +387,6 @@ importers: svgo: specifier: latest version: 3.3.2 - tinyglobby: - specifier: ^0.2.6 - version: 0.2.6 ts-node: specifier: ^10.9.1 version: 10.9.2(@types/node@18.19.33)(typescript@5.4.5) diff --git a/src/pages/legal/[slug].tsx b/src/pages/legal/[slug].tsx index 5edf2d44a..6ac68c598 100644 --- a/src/pages/legal/[slug].tsx +++ b/src/pages/legal/[slug].tsx @@ -2,11 +2,11 @@ import { readFileSync } from 'fs' import path from 'path' -import { globSync } from 'tinyglobby' import Markdown from 'markdown-to-jsx' import { GetStaticPropsContext } from 'next' import { ReactElement } from 'react' import styled, { css } from 'styled-components' +import { globSync } from 'tinyglobby' import { Content } from '@app/layouts/Content' import { ContentGrid } from '@app/layouts/ContentGrid' From 1be67091d36ec2aef0b86fec8f94ce6e34d633f7 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Sat, 21 Sep 2024 15:22:56 +0300 Subject: [PATCH 6/7] fix: sitemap deploy script --- scripts/generate-site-map.mjs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/generate-site-map.mjs b/scripts/generate-site-map.mjs index 7352ec0bc..3445b9fe1 100644 --- a/scripts/generate-site-map.mjs +++ b/scripts/generate-site-map.mjs @@ -114,12 +114,13 @@ const main = async () => { ? sitemapIndex.url : sitemapIndex.url.replace(`${baseURL}/`, `${baseURL}/sitemaps/`) const res = await fetch(url) - // only allow normalised names from backlog - res.body.pipe(new XMLToSitemapItemStream()).pipe(normaliseTransform).pipe(sitemap, { - end: false, + + await res.body.pipeThrough(normaliseTransform).pipeTo(sitemap, { + preventClose: true, }) + await new Promise((resolve) => { - normaliseTransform.on('end', resolve) + normaliseTransform.readable.getReader().closed.then(resolve) }) } } From 4db64b09fd9127f3ddd6777dedb74a0000b023de Mon Sep 17 00:00:00 2001 From: sugh01 <19183308+sugh01@users.noreply.github.com> Date: Sun, 22 Sep 2024 19:55:12 +0200 Subject: [PATCH 7/7] fix test --- .../ProfileEditor/Avatar/AvatarNFT.test.tsx | 61 +++++++++++-------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx index b0949f82e..33e58a23c 100644 --- a/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx +++ b/src/components/@molecules/ProfileEditor/Avatar/AvatarNFT.test.tsx @@ -1,11 +1,14 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { fireEvent, mockFunction, render, screen, userEvent, waitFor } from '@app/test-utils' +import * as ReactQuery from '@tanstack/react-query' import { beforeEach, describe, expect, it, Mock, vi } from 'vitest' import { useAccount, useClient } from 'wagmi' import * as ThorinComponents from '@ensdomains/thorin' +import * as UseInfiniteQuery from '@app/utils/query/useInfiniteQuery' + import { makeMockIntersectionObserver } from '../../../../../test/mock/makeMockIntersectionObserver' import { AvatarNFT } from './AvatarNFT' @@ -189,15 +192,23 @@ describe('', () => { await waitFor(() => expect(mockFetch).toHaveBeenCalled()) await waitFor(() => expect(screen.queryByTestId('nft-0-0x0')).not.toBeInTheDocument()) }) - it.skip('show load more data on page load trigger', async () => { - mockFetch.mockImplementationOnce(() => - Promise.resolve({ - ownedNfts: Array.from({ length: 5 }, generateNFT(true)), - totalCount: 10, - pageKey: 'test123', - }), - ) - + it('show load more data on page load trigger', async () => { + const useInfiniteQuerySpy = vi.spyOn(UseInfiniteQuery, 'useInfiniteQuery') + mockFetch + .mockImplementationOnce(() => + Promise.resolve({ + ownedNfts: Array.from({ length: 5 }, generateNFT(true)), + totalCount: 5, + pageKey: 'test123', + }), + ) + .mockImplementation(() => + Promise.resolve({ + ownedNfts: Array.from({ length: 5 }, generateNFT(true)), + totalCount: 5, + pageKey: 'test456', + }), + ) vi.spyOn(ThorinComponents, 'ScrollBox').mockImplementationOnce( ({ children, onReachedBottom }) => { onReachedBottom!() @@ -206,23 +217,23 @@ describe('', () => { ) render() + await waitFor(() => expect(mockFetch).toHaveBeenCalled()) + expect(useInfiniteQuerySpy).toHaveBeenCalledTimes(2) - await waitFor(() => expect(mockFetch).toHaveBeenCalledOnce()) - await waitFor( - () => - // @ts-ignore - expect(fetch.mock.lastCall[1]).toEqual({ - method: 'GET', - redirect: 'follow', - }), - // expect(mockedFetch.mock.lastCall).toEqual([ - // `https://ens-nft-worker.ens-cf.workers.dev/v1/mainnet/getNfts/?owner=0x0000000000000000000000000000000000000001&filters%5B%5D=SPAM&pageKey=test123`, - // { - // method: 'GET', - // redirect: 'follow', - // }, - // ]), - ) + const lastCall = useInfiniteQuerySpy.mock.lastCall + if (!lastCall) { + throw new Error('useInfiniteQuery was not called as expected') + } + const options = lastCall[0] + if (typeof options !== 'object' || !options || !('queryFn' in options)) { + throw new Error('useInfiniteQuery options do not contain queryFn') + } + const { queryFn } = options as { queryFn: ReactQuery.QueryFunction } + const mockContext = { + pageParam: 'test123', + } + await queryFn(mockContext as any) + await waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(3)) // @ts-ignore expect(fetch.mock.lastCall[0]).toMatch(/pageKey=test123/) })