diff --git a/examples/browser-file-management/.env.simple b/examples/browser-file-management/.env.simple new file mode 100644 index 00000000..511c3eea --- /dev/null +++ b/examples/browser-file-management/.env.simple @@ -0,0 +1,8 @@ +NEXT_PUBLIC_GRPC_URL=https://gnfd-testnet-fullnode-tendermint-ap.bnbchain.org + +NEXT_PUBLIC_GREENFIELD_RPC_URL=https://gnfd-testnet-fullnode-tendermint-ap.bnbchain.org +NEXT_PUBLIC_GREEN_CHAIN_ID=5600 + +# BSC End POINT +NEXT_PUBLIC_BSC_RPC_URL=https://data-seed-prebsc-1-s1.binance.org:8545 +NEXT_PUBLIC_BSC_CHAIN_ID=97 diff --git a/examples/browser-file-management/.gitignore b/examples/browser-file-management/.gitignore new file mode 100644 index 00000000..8f322f0d --- /dev/null +++ b/examples/browser-file-management/.gitignore @@ -0,0 +1,35 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/browser-file-management/README.md b/examples/browser-file-management/README.md new file mode 100644 index 00000000..e49c6586 --- /dev/null +++ b/examples/browser-file-management/README.md @@ -0,0 +1,7 @@ +# Browser File Management + +```bash +> cp .env.simple .env +``` + +And then fill your account info in `.env`. diff --git a/examples/browser-file-management/next.config.js b/examples/browser-file-management/next.config.js new file mode 100644 index 00000000..06281ede --- /dev/null +++ b/examples/browser-file-management/next.config.js @@ -0,0 +1,37 @@ +const _getPublicEnv = (prefix) => { + const envs = process.env; + const res = {}; + + Object.keys(envs).forEach((k) => { + if (k.startsWith(prefix)) { + res[k] = envs[k]; + } + }); + + return res; +}; + +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: false, + trailingSlash: true, + publicRuntimeConfig: { + ..._getPublicEnv('NEXT_PUBLIC_'), + }, + eslint: { + // Warning: This allows production builds to successfully complete even if + // your project has ESLint errors. + ignoreDuringBuilds: true, + }, + webpack: (config) => { + config.resolve.fallback = { + fs: false, + net: false, + tls: false, + }; + + return config; + }, +}; + +module.exports = nextConfig; diff --git a/examples/browser-file-management/package.json b/examples/browser-file-management/package.json new file mode 100644 index 00000000..fc80acc5 --- /dev/null +++ b/examples/browser-file-management/package.json @@ -0,0 +1,25 @@ +{ + "name": "browser-file-management", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@bnb-chain/greenfield-js-sdk": "latest", + "@bnb-chain/reed-solomon": "latest", + "@rainbow-me/rainbowkit": "^1.3.0", + "@types/node": "20.6.0", + "@types/react": "18.2.21", + "@types/react-dom": "18.2.7", + "next": "13.4.19", + "react": "18.2.0", + "react-dom": "18.2.0", + "typescript": "5.2.2", + "viem": "^1.19.11", + "wagmi": "^1.4.8" + } +} diff --git a/examples/browser-file-management/src/client/index.ts b/examples/browser-file-management/src/client/index.ts new file mode 100644 index 00000000..5fee6955 --- /dev/null +++ b/examples/browser-file-management/src/client/index.ts @@ -0,0 +1,45 @@ +import { GREEN_CHAIN_ID, GRPC_URL } from '@/config/env'; +import { Client } from '@bnb-chain/greenfield-js-sdk'; + +export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID), { + zkCryptoUrl: 'https://unpkg.com/@bnb-chain/greenfield-zk-crypto@0.0.3/dist/node/zk-crypto.wasm', +}); + +export const getSps = async () => { + const sps = await client.sp.getStorageProviders(); + const finalSps = (sps ?? []).filter((v: any) => v.endpoint.includes('nodereal')); + + return finalSps; +}; + +export const getAllSps = async () => { + const sps = await getSps(); + + return sps.map((sp) => { + return { + address: sp.operatorAddress, + endpoint: sp.endpoint, + name: sp.description?.moniker, + }; + }); +}; + +export const selectSp = async () => { + const finalSps = await getSps(); + + const selectIndex = Math.floor(Math.random() * finalSps.length); + + const secondarySpAddresses = [ + ...finalSps.slice(0, selectIndex), + ...finalSps.slice(selectIndex + 1), + ].map((item) => item.operatorAddress); + const selectSpInfo = { + id: finalSps[selectIndex].id, + endpoint: finalSps[selectIndex].endpoint, + primarySpAddress: finalSps[selectIndex]?.operatorAddress, + sealAddress: finalSps[selectIndex].sealAddress, + secondarySpAddresses, + }; + + return selectSpInfo; +}; diff --git a/examples/browser-file-management/src/components/demo/index.tsx b/examples/browser-file-management/src/components/demo/index.tsx new file mode 100644 index 00000000..9e261edc --- /dev/null +++ b/examples/browser-file-management/src/components/demo/index.tsx @@ -0,0 +1,473 @@ +import { client, selectSp } from '@/client'; +import { getOffchainAuthKeys } from '@/utils/offchainAuth'; +import { useState } from 'react'; +import { useAccount } from 'wagmi'; +import { ReedSolomon } from '@bnb-chain/reed-solomon'; + +export const Demo = () => { + const { address, connector } = useAccount(); + const [info, setInfo] = useState<{ + bucketName: string; + objectName: string; + file: File | null; + }>({ + bucketName: '', + objectName: '', + file: null, + }); + const [txnHash, setTxnHash] = useState(''); + + return ( + <> +
+
+

Greenfield Storage Demo

+

Create Bucket / Create Object / Upload File / Download File

+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+ +
+
+
+
+ { + setInfo({ ...info, bucketName: e.target.value }); + }} + /> +
+
+
+
+ +
+ +
+
+ +
+
+
+ +
+
+
+
+ { + setInfo({ ...info, objectName: e.target.value }); + }} + /> +
+
+
+
+ +
+
+ +
+
+ + {/* create object */} +
+ +
+ + {/* upload */} +
+ +
+ + {/* Download */} +
+ +
+ + {/* Update Object Info */} +
+ +
+ + {/* Delete object */} +
+ +
+
+ + ); +}; diff --git a/examples/browser-file-management/src/components/wallet/index.tsx b/examples/browser-file-management/src/components/wallet/index.tsx new file mode 100644 index 00000000..bdd94f39 --- /dev/null +++ b/examples/browser-file-management/src/components/wallet/index.tsx @@ -0,0 +1,9 @@ +import { ConnectButton } from '@rainbow-me/rainbowkit'; + +export const Wallet = () => { + return ( +
+ +
+ ); +}; diff --git a/examples/browser-file-management/src/config/env.ts b/examples/browser-file-management/src/config/env.ts new file mode 100644 index 00000000..9f465e2c --- /dev/null +++ b/examples/browser-file-management/src/config/env.ts @@ -0,0 +1,16 @@ +import getConfig from 'next/config'; + +const { publicRuntimeConfig } = getConfig(); +const { + NEXT_PUBLIC_GRPC_URL, + NEXT_PUBLIC_GREENFIELD_RPC_URL, + NEXT_PUBLIC_GREEN_CHAIN_ID, + NEXT_PUBLIC_BSC_RPC_URL, + NEXT_PUBLIC_BSC_CHAIN_ID, +} = publicRuntimeConfig || {}; + +export const GRPC_URL = NEXT_PUBLIC_GRPC_URL; +export const GREENFIELD_RPC_URL = NEXT_PUBLIC_GREENFIELD_RPC_URL; +export const GREEN_CHAIN_ID = parseInt(NEXT_PUBLIC_GREEN_CHAIN_ID); +export const BSC_RPC_URL = NEXT_PUBLIC_BSC_RPC_URL; +export const BSC_CHAIN_ID = parseInt(NEXT_PUBLIC_BSC_CHAIN_ID); diff --git a/examples/browser-file-management/src/config/wallet.ts b/examples/browser-file-management/src/config/wallet.ts new file mode 100644 index 00000000..714ee508 --- /dev/null +++ b/examples/browser-file-management/src/config/wallet.ts @@ -0,0 +1,114 @@ +import { Wallet } from '@rainbow-me/rainbowkit'; +import { Chain, configureChains, mainnet } from 'wagmi'; +import { CoinbaseWalletConnector } from 'wagmi/connectors/coinbaseWallet'; +import { InjectedConnector } from 'wagmi/connectors/injected'; +import { MetaMaskConnector } from 'wagmi/connectors/metaMask'; +import { publicProvider } from 'wagmi/providers/public'; +import { BSC_CHAIN_ID, BSC_RPC_URL, GREEN_CHAIN_ID, GREENFIELD_RPC_URL } from './env'; + +const greenFieldChain: Chain = { + id: GREEN_CHAIN_ID, + network: 'greenfield', + rpcUrls: { + default: { + http: [GREENFIELD_RPC_URL], + }, + public: { + http: [GREENFIELD_RPC_URL], + }, + }, + name: 'greenfield', + nativeCurrency: { + name: 'BNB', + symbol: 'BNB', + decimals: 18, + }, +}; + +const bscChain: Chain = { + id: BSC_CHAIN_ID, + name: 'BSC', + network: 'QA - bsc smart chain', + rpcUrls: { + default: { + http: [BSC_RPC_URL], + }, + public: { + http: [BSC_RPC_URL], + }, + }, + nativeCurrency: { + name: 'BNB', + symbol: 'BNB', + decimals: 18, + }, + // blockExplorers: { + // default: { name: '', url: 'https://testnet.bscscan.com/' }, + // }, + // testnet: true, +}; + +const { chains, publicClient, webSocketPublicClient } = configureChains( + [ + mainnet, + { + ...greenFieldChain, + iconUrl: + 'https://github.com/wagmi-dev/wagmi/assets/5653652/44446c8c-5c72-4e89-b8eb-3042ef618eed', + }, + bscChain, + ], + [publicProvider()], +); + +const coinbaseWalletConnector = new CoinbaseWalletConnector({ + chains, + options: { + appName: 'wagmi', + }, +}); + +const trustWalletConnector = new InjectedConnector({ + chains, + options: { + name: 'GN', + shimDisconnect: true, + // TODO: rainbowkit conflict + getProvider: () => (typeof window !== 'undefined' ? (window as any).trustwallet : undefined), + }, +}); + +const metaMaskWalletConnector = new MetaMaskConnector({ chains }); + +export interface MyWalletOptions { + projectId: string; + chains: Chain[]; +} + +const RainbowTrustWalletConnector = ({ chains, projectId }: MyWalletOptions): Wallet => ({ + id: '_trust-wallet', + name: 'Trust Wallet', + iconUrl: 'https://my-image.xyz', + iconBackground: '#0c2f78', + downloadUrls: { + android: 'https://play.google.com/store/apps/details?id=my.wallet', + ios: 'https://apps.apple.com/us/app/my-wallet', + chrome: 'https://chrome.google.com/webstore/detail/my-wallet', + qrCode: 'https://my-wallet/qr', + }, + createConnector: () => { + return { + connector: trustWalletConnector, + }; + }, +}); + +export { + chains, + coinbaseWalletConnector, + metaMaskWalletConnector, + publicClient, + RainbowTrustWalletConnector, + trustWalletConnector, + webSocketPublicClient, +}; diff --git a/examples/browser-file-management/src/hooks/useIsMounted.ts b/examples/browser-file-management/src/hooks/useIsMounted.ts new file mode 100644 index 00000000..83a674cf --- /dev/null +++ b/examples/browser-file-management/src/hooks/useIsMounted.ts @@ -0,0 +1,9 @@ +import React from 'react'; + +export const useIsMounted = () => { + const [mounted, setMounted] = React.useState(false); + + React.useEffect(() => setMounted(true), []); + + return mounted; +}; diff --git a/examples/browser-file-management/src/pages/_app.tsx b/examples/browser-file-management/src/pages/_app.tsx new file mode 100644 index 00000000..e16b1544 --- /dev/null +++ b/examples/browser-file-management/src/pages/_app.tsx @@ -0,0 +1,36 @@ +import { chains, publicClient, webSocketPublicClient } from '@/config/wallet'; +import '@/styles/globals.css'; +import { + RainbowKitProvider, + connectorsForWallets, + getDefaultWallets, +} from '@rainbow-me/rainbowkit'; +import type { AppProps } from 'next/app'; +import { WagmiConfig, createConfig } from 'wagmi'; +import '@rainbow-me/rainbowkit/styles.css'; + +const projectId = '9bf3510aab08be54d5181a126967ee71'; +const { wallets } = getDefaultWallets({ + projectId, + appName: 'greenfield js sdk demo', + chains, +}); + +const connectors = connectorsForWallets([...wallets]); + +const wagmiConfig = createConfig({ + autoConnect: true, + connectors, + webSocketPublicClient, + publicClient, +}); + +export default function App({ Component, pageProps }: AppProps) { + return ( + + + + + + ); +} diff --git a/examples/browser-file-management/src/pages/_document.tsx b/examples/browser-file-management/src/pages/_document.tsx new file mode 100644 index 00000000..2905cafd --- /dev/null +++ b/examples/browser-file-management/src/pages/_document.tsx @@ -0,0 +1,15 @@ +import { Html, Head, Main, NextScript } from 'next/document'; + +export default function Document() { + return ( + + + + + +
+ + + + ); +} diff --git a/examples/browser-file-management/src/pages/api/hello.ts b/examples/browser-file-management/src/pages/api/hello.ts new file mode 100644 index 00000000..eb4cc665 --- /dev/null +++ b/examples/browser-file-management/src/pages/api/hello.ts @@ -0,0 +1,10 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next'; + +type Data = { + name: string; +}; + +export default function handler(req: NextApiRequest, res: NextApiResponse) { + res.status(200).json({ name: 'John Doe' }); +} diff --git a/examples/browser-file-management/src/pages/index.tsx b/examples/browser-file-management/src/pages/index.tsx new file mode 100644 index 00000000..69701cbe --- /dev/null +++ b/examples/browser-file-management/src/pages/index.tsx @@ -0,0 +1,34 @@ +import { Demo } from '@/components/demo'; +import { Wallet } from '@/components/wallet'; +import { useIsMounted } from '@/hooks/useIsMounted'; +import styles from '@/styles/Home.module.css'; +import { Inter } from 'next/font/google'; +import Head from 'next/head'; +import { useAccount } from 'wagmi'; + +const inter = Inter({ subsets: ['latin'] }); + +export default function Home() { + const isMounted = useIsMounted(); + const { isConnected } = useAccount(); + + if (!isMounted) return null; + + return ( + <> + + Create Greenfield App + + + +
+ + {isConnected && ( + <> + + + )} +
+ + ); +} diff --git a/examples/browser-file-management/src/styles/Home.module.css b/examples/browser-file-management/src/styles/Home.module.css new file mode 100644 index 00000000..c0b65447 --- /dev/null +++ b/examples/browser-file-management/src/styles/Home.module.css @@ -0,0 +1,228 @@ +.main { + display: flex; + flex-direction: column; + align-items: center; + padding: 6rem; + min-height: 100vh; +} + +.description { + display: inherit; + justify-content: inherit; + align-items: inherit; + font-size: 0.85rem; + max-width: var(--max-width); + width: 100%; + z-index: 2; + font-family: var(--font-mono); +} + +.description a { + display: flex; + justify-content: center; + align-items: center; + gap: 0.5rem; +} + +.description p { + position: relative; + margin: 0; + padding: 1rem; + background-color: rgba(var(--callout-rgb), 0.5); + border: 1px solid rgba(var(--callout-border-rgb), 0.3); + border-radius: var(--border-radius); +} + +.code { + font-weight: 700; + font-family: var(--font-mono); +} + +.grid { + display: grid; + grid-template-columns: repeat(4, minmax(25%, auto)); + max-width: 100%; + width: var(--max-width); +} + +.card { + padding: 1rem 1.2rem; + border-radius: var(--border-radius); + background: rgba(var(--card-rgb), 0); + border: 1px solid rgba(var(--card-border-rgb), 0); + transition: background 200ms, border 200ms; +} + +.card span { + display: inline-block; + transition: transform 200ms; +} + +.card h2 { + font-weight: 600; + margin-bottom: 0.7rem; +} + +.card p { + margin: 0; + opacity: 0.6; + font-size: 0.9rem; + line-height: 1.5; + max-width: 30ch; +} + +.center { + display: flex; + justify-content: center; + align-items: center; + position: relative; + padding: 4rem 0; +} + +.center::before { + background: var(--secondary-glow); + border-radius: 50%; + width: 480px; + height: 360px; + margin-left: -400px; +} + +.center::after { + background: var(--primary-glow); + width: 240px; + height: 180px; + z-index: -1; +} + +.center::before, +.center::after { + content: ''; + left: 50%; + position: absolute; + filter: blur(45px); + transform: translateZ(0); +} + +.logo { + position: relative; +} +/* Enable hover only on non-touch devices */ +@media (hover: hover) and (pointer: fine) { + .card:hover { + background: rgba(var(--card-rgb), 0.1); + border: 1px solid rgba(var(--card-border-rgb), 0.15); + } + + .card:hover span { + transform: translateX(4px); + } +} + +@media (prefers-reduced-motion) { + .card:hover span { + transform: none; + } +} + +/* Mobile */ +@media (max-width: 700px) { + .content { + padding: 4rem; + } + + .grid { + grid-template-columns: 1fr; + margin-bottom: 120px; + max-width: 320px; + text-align: center; + } + + .card { + padding: 1rem 2.5rem; + } + + .card h2 { + margin-bottom: 0.5rem; + } + + .center { + padding: 8rem 0 6rem; + } + + .center::before { + transform: none; + height: 300px; + } + + .description { + font-size: 0.8rem; + } + + .description a { + padding: 1rem; + } + + .description p, + .description div { + display: flex; + justify-content: center; + position: fixed; + width: 100%; + } + + .description p { + align-items: center; + inset: 0 0 auto; + padding: 2rem 1rem 1.4rem; + border-radius: 0; + border: none; + border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); + background: linear-gradient( + to bottom, + rgba(var(--background-start-rgb), 1), + rgba(var(--callout-rgb), 0.5) + ); + background-clip: padding-box; + backdrop-filter: blur(24px); + } + + .description div { + align-items: flex-end; + pointer-events: none; + inset: auto 0 0; + padding: 2rem; + height: 200px; + background: linear-gradient( + to bottom, + transparent 0%, + rgb(var(--background-end-rgb)) 40% + ); + z-index: 1; + } +} + +/* Tablet and Smaller Desktop */ +@media (min-width: 701px) and (max-width: 1120px) { + .grid { + grid-template-columns: repeat(2, 50%); + } +} + +@media (prefers-color-scheme: dark) { + .vercelLogo { + filter: invert(1); + } + + .logo { + filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); + } +} + +@keyframes rotate { + from { + transform: rotate(360deg); + } + to { + transform: rotate(0deg); + } +} diff --git a/examples/browser-file-management/src/styles/globals.css b/examples/browser-file-management/src/styles/globals.css new file mode 100644 index 00000000..d4f491e1 --- /dev/null +++ b/examples/browser-file-management/src/styles/globals.css @@ -0,0 +1,107 @@ +:root { + --max-width: 1100px; + --border-radius: 12px; + --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono', + 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro', + 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace; + + --foreground-rgb: 0, 0, 0; + --background-start-rgb: 214, 219, 220; + --background-end-rgb: 255, 255, 255; + + --primary-glow: conic-gradient( + from 180deg at 50% 50%, + #16abff33 0deg, + #0885ff33 55deg, + #54d6ff33 120deg, + #0071ff33 160deg, + transparent 360deg + ); + --secondary-glow: radial-gradient( + rgba(255, 255, 255, 1), + rgba(255, 255, 255, 0) + ); + + --tile-start-rgb: 239, 245, 249; + --tile-end-rgb: 228, 232, 233; + --tile-border: conic-gradient( + #00000080, + #00000040, + #00000030, + #00000020, + #00000010, + #00000010, + #00000080 + ); + + --callout-rgb: 238, 240, 241; + --callout-border-rgb: 172, 175, 176; + --card-rgb: 180, 185, 188; + --card-border-rgb: 131, 134, 135; +} + +@media (prefers-color-scheme: dark) { + :root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; + + --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); + --secondary-glow: linear-gradient( + to bottom right, + rgba(1, 65, 255, 0), + rgba(1, 65, 255, 0), + rgba(1, 65, 255, 0.3) + ); + + --tile-start-rgb: 2, 13, 46; + --tile-end-rgb: 2, 5, 19; + --tile-border: conic-gradient( + #ffffff80, + #ffffff40, + #ffffff30, + #ffffff20, + #ffffff10, + #ffffff10, + #ffffff80 + ); + + --callout-rgb: 20, 20, 20; + --callout-border-rgb: 108, 108, 108; + --card-rgb: 100, 100, 100; + --card-border-rgb: 200, 200, 200; + } +} + +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} + +html, +body { + max-width: 100vw; + overflow-x: hidden; +} + +body { + color: rgb(var(--foreground-rgb)); + background: linear-gradient( + to bottom, + transparent, + rgb(var(--background-end-rgb)) + ) + rgb(var(--background-start-rgb)); +} + +a { + color: inherit; + text-decoration: none; +} + +@media (prefers-color-scheme: dark) { + html { + color-scheme: dark; + } +} diff --git a/examples/browser-file-management/src/utils/offchainAuth.ts b/examples/browser-file-management/src/utils/offchainAuth.ts new file mode 100644 index 00000000..2401bf74 --- /dev/null +++ b/examples/browser-file-management/src/utils/offchainAuth.ts @@ -0,0 +1,41 @@ +import { client, getAllSps } from '@/client'; +import { GREEN_CHAIN_ID } from '@/config/env'; +import { IReturnOffChainAuthKeyPairAndUpload } from '@bnb-chain/greenfield-js-sdk'; + +/** + * generate off-chain auth key pair and upload public key to sp + */ +export const getOffchainAuthKeys = async (address: string, provider: any) => { + const storageResStr = localStorage.getItem(address); + + if (storageResStr) { + const storageRes = JSON.parse(storageResStr) as IReturnOffChainAuthKeyPairAndUpload; + if (storageRes.expirationTime < Date.now()) { + alert('Your auth key has expired, please generate a new one'); + localStorage.removeItem(address); + return; + } + + return storageRes; + } + + const allSps = await getAllSps(); + const offchainAuthRes = await client.offchainauth.genOffChainAuthKeyPairAndUpload( + { + sps: allSps, + chainId: GREEN_CHAIN_ID, + expirationMs: 5 * 24 * 60 * 60 * 1000, + domain: window.location.origin, + address, + }, + provider, + ); + + const { code, body: offChainData } = offchainAuthRes; + if (code !== 0 || !offChainData) { + throw offchainAuthRes; + } + + localStorage.setItem(address, JSON.stringify(offChainData)); + return offChainData; +}; diff --git a/examples/browser-file-management/tsconfig.json b/examples/browser-file-management/tsconfig.json new file mode 100644 index 00000000..3206756d --- /dev/null +++ b/examples/browser-file-management/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad21358c..bc8ece0b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -115,10 +115,10 @@ importers: version: 3.0.1(eslint@8.48.0)(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) '@docusaurus/preset-classic': specifier: 3.0.1 - version: 3.0.1(@algolia/client-search@4.20.0)(@types/react@18.2.41)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0)(typescript@4.9.5) + version: 3.0.1(@algolia/client-search@4.20.0)(@types/react@18.2.21)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0)(typescript@4.9.5) '@mdx-js/react': specifier: ^3.0.0 - version: 3.0.0(@types/react@18.2.41)(react@18.2.0) + version: 3.0.0(@types/react@18.2.21)(react@18.2.0) clsx: specifier: ^1.2.1 version: 1.2.1 @@ -136,6 +136,45 @@ importers: specifier: 3.0.0 version: 3.0.0(react-dom@18.2.0)(react@18.2.0) + examples/browser-file-management: + dependencies: + '@bnb-chain/greenfield-js-sdk': + specifier: latest + version: link:../../packages/js-sdk + '@bnb-chain/reed-solomon': + specifier: latest + version: link:../../packages/reed-solomon + '@rainbow-me/rainbowkit': + specifier: ^1.3.0 + version: 1.3.0(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0)(viem@1.20.3)(wagmi@1.4.12) + '@types/node': + specifier: 20.6.0 + version: 20.6.0 + '@types/react': + specifier: 18.2.21 + version: 18.2.21 + '@types/react-dom': + specifier: 18.2.7 + version: 18.2.7 + next: + specifier: 13.4.19 + version: 13.4.19(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0) + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + typescript: + specifier: 5.2.2 + version: 5.2.2 + viem: + specifier: ^1.19.11 + version: 1.20.3(typescript@5.2.2) + wagmi: + specifier: ^1.4.8 + version: 1.4.12(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.20.3) + examples/nextjs: dependencies: '@bnb-chain/greenfield-cosmos-types': @@ -498,6 +537,10 @@ packages: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + dev: false + /@adraffy/ens-normalize@1.9.0: resolution: {integrity: sha512-iowxq3U30sghZotgl4s/oJRci6WPBfNO5YYgk2cIOMCHr3LeGPcsZjCEr+33Q4N+oV3OABDAtA+pyvWjbvBifQ==} dev: false @@ -4027,7 +4070,7 @@ packages: resolution: {integrity: sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==} dev: false - /@docsearch/react@3.5.2(@algolia/client-search@4.20.0)(@types/react@18.2.41)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0): + /@docsearch/react@3.5.2(@algolia/client-search@4.20.0)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0): resolution: {integrity: sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' @@ -4047,7 +4090,7 @@ packages: '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.11.0) '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) '@docsearch/css': 3.5.2 - '@types/react': 18.2.41 + '@types/react': 18.2.21 algoliasearch: 4.20.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4261,7 +4304,7 @@ packages: '@docusaurus/react-loadable': 5.5.2(react@18.2.0) '@docusaurus/types': 3.0.1(react-dom@18.2.0)(react@18.2.0) '@types/history': 4.7.11 - '@types/react': 18.2.41 + '@types/react': 18.2.21 '@types/react-router-config': 5.0.10 '@types/react-router-dom': 5.3.3 react: 18.2.0 @@ -4602,7 +4645,7 @@ packages: - webpack-cli dev: false - /@docusaurus/preset-classic@3.0.1(@algolia/client-search@4.20.0)(@types/react@18.2.41)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0)(typescript@4.9.5): + /@docusaurus/preset-classic@3.0.1(@algolia/client-search@4.20.0)(@types/react@18.2.21)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0)(typescript@4.9.5): resolution: {integrity: sha512-il9m9xZKKjoXn6h0cRcdnt6wce0Pv1y5t4xk2Wx7zBGhKG1idu4IFHtikHlD0QPuZ9fizpXspXcTzjL5FXc1Gw==} engines: {node: '>=18.0'} peerDependencies: @@ -4618,9 +4661,9 @@ packages: '@docusaurus/plugin-google-gtag': 3.0.1(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) '@docusaurus/plugin-google-tag-manager': 3.0.1(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) '@docusaurus/plugin-sitemap': 3.0.1(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) - '@docusaurus/theme-classic': 3.0.1(@types/react@18.2.41)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) + '@docusaurus/theme-classic': 3.0.1(@types/react@18.2.21)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) '@docusaurus/theme-common': 3.0.1(@docusaurus/types@3.0.1)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) - '@docusaurus/theme-search-algolia': 3.0.1(@algolia/client-search@4.20.0)(@docusaurus/types@3.0.1)(@types/react@18.2.41)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0)(typescript@4.9.5) + '@docusaurus/theme-search-algolia': 3.0.1(@algolia/client-search@4.20.0)(@docusaurus/types@3.0.1)(@types/react@18.2.21)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0)(typescript@4.9.5) '@docusaurus/types': 3.0.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4650,7 +4693,7 @@ packages: peerDependencies: react: '*' dependencies: - '@types/react': 18.2.41 + '@types/react': 18.2.21 prop-types: 15.8.1 react: 18.2.0 @@ -4670,7 +4713,7 @@ packages: sharp: 0.32.6 dev: false - /@docusaurus/theme-classic@3.0.1(@types/react@18.2.41)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5): + /@docusaurus/theme-classic@3.0.1(@types/react@18.2.21)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5): resolution: {integrity: sha512-XD1FRXaJiDlmYaiHHdm27PNhhPboUah9rqIH0lMpBt5kYtsGjJzhqa27KuZvHLzOP2OEpqd2+GZ5b6YPq7Q05Q==} engines: {node: '>=18.0'} peerDependencies: @@ -4689,7 +4732,7 @@ packages: '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1) '@docusaurus/utils-common': 3.0.1(@docusaurus/types@3.0.1) '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1) - '@mdx-js/react': 3.0.0(@types/react@18.2.41)(react@18.2.0) + '@mdx-js/react': 3.0.0(@types/react@18.2.21)(react@18.2.0) clsx: 2.0.0 copy-text-to-clipboard: 3.2.0 infima: 0.2.0-alpha.43 @@ -4738,7 +4781,7 @@ packages: '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1) '@docusaurus/utils-common': 3.0.1(@docusaurus/types@3.0.1) '@types/history': 4.7.11 - '@types/react': 18.2.41 + '@types/react': 18.2.21 '@types/react-router-config': 5.0.10 clsx: 2.0.0 parse-numeric-range: 1.3.0 @@ -4766,14 +4809,14 @@ packages: - webpack-cli dev: false - /@docusaurus/theme-search-algolia@3.0.1(@algolia/client-search@4.20.0)(@docusaurus/types@3.0.1)(@types/react@18.2.41)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0)(typescript@4.9.5): + /@docusaurus/theme-search-algolia@3.0.1(@algolia/client-search@4.20.0)(@docusaurus/types@3.0.1)(@types/react@18.2.21)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0)(typescript@4.9.5): resolution: {integrity: sha512-DDiPc0/xmKSEdwFkXNf1/vH1SzJPzuJBar8kMcBbDAZk/SAmo/4lf6GU2drou4Ae60lN2waix+jYWTWcJRahSA==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@docsearch/react': 3.5.2(@algolia/client-search@4.20.0)(@types/react@18.2.41)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0) + '@docsearch/react': 3.5.2(@algolia/client-search@4.20.0)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.11.0) '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) '@docusaurus/logger': 3.0.1 '@docusaurus/plugin-content-docs': 3.0.1(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) @@ -4828,7 +4871,7 @@ packages: react-dom: ^18.0.0 dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.37 + '@types/react': 18.2.21 commander: 5.1.0 joi: 17.11.0 react: 18.2.0 @@ -4851,7 +4894,7 @@ packages: react-dom: ^18.0.0 dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.41 + '@types/react': 18.2.21 commander: 5.1.0 joi: 17.11.0 react: 18.2.0 @@ -5789,14 +5832,14 @@ packages: - supports-color dev: false - /@mdx-js/react@3.0.0(@types/react@18.2.41)(react@18.2.0): + /@mdx-js/react@3.0.0(@types/react@18.2.21)(react@18.2.0): resolution: {integrity: sha512-nDctevR9KyYFyV+m+/+S4cpzCWHqj+iHDHq3QrsWezcC+B17uZdIWgCguESUkwFhM3n/56KxWVE3V6EokrmONQ==} peerDependencies: '@types/react': '>=16' react: '>=16' dependencies: '@types/mdx': 2.0.10 - '@types/react': 18.2.41 + '@types/react': 18.2.21 react: 18.2.0 dev: false @@ -5900,6 +5943,10 @@ packages: tslib: 2.6.2 dev: false + /@next/env@13.4.19: + resolution: {integrity: sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==} + dev: false + /@next/env@14.0.3: resolution: {integrity: sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA==} dev: false @@ -5914,6 +5961,15 @@ packages: resolution: {integrity: sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ==} dev: false + /@next/swc-darwin-arm64@13.4.19: + resolution: {integrity: sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@next/swc-darwin-arm64@14.0.3: resolution: {integrity: sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==} engines: {node: '>= 10'} @@ -5923,6 +5979,15 @@ packages: dev: false optional: true + /@next/swc-darwin-x64@13.4.19: + resolution: {integrity: sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@next/swc-darwin-x64@14.0.3: resolution: {integrity: sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==} engines: {node: '>= 10'} @@ -5932,6 +5997,15 @@ packages: dev: false optional: true + /@next/swc-linux-arm64-gnu@13.4.19: + resolution: {integrity: sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-arm64-gnu@14.0.3: resolution: {integrity: sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==} engines: {node: '>= 10'} @@ -5941,6 +6015,15 @@ packages: dev: false optional: true + /@next/swc-linux-arm64-musl@13.4.19: + resolution: {integrity: sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-arm64-musl@14.0.3: resolution: {integrity: sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==} engines: {node: '>= 10'} @@ -5950,6 +6033,15 @@ packages: dev: false optional: true + /@next/swc-linux-x64-gnu@13.4.19: + resolution: {integrity: sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-x64-gnu@14.0.3: resolution: {integrity: sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg==} engines: {node: '>= 10'} @@ -5959,6 +6051,15 @@ packages: dev: false optional: true + /@next/swc-linux-x64-musl@13.4.19: + resolution: {integrity: sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-x64-musl@14.0.3: resolution: {integrity: sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg==} engines: {node: '>= 10'} @@ -5968,6 +6069,15 @@ packages: dev: false optional: true + /@next/swc-win32-arm64-msvc@13.4.19: + resolution: {integrity: sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@next/swc-win32-arm64-msvc@14.0.3: resolution: {integrity: sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==} engines: {node: '>= 10'} @@ -5977,6 +6087,15 @@ packages: dev: false optional: true + /@next/swc-win32-ia32-msvc@13.4.19: + resolution: {integrity: sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@next/swc-win32-ia32-msvc@14.0.3: resolution: {integrity: sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==} engines: {node: '>= 10'} @@ -5986,6 +6105,15 @@ packages: dev: false optional: true + /@next/swc-win32-x64-msvc@13.4.19: + resolution: {integrity: sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@next/swc-win32-x64-msvc@14.0.3: resolution: {integrity: sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==} engines: {node: '>= 10'} @@ -6294,6 +6422,31 @@ packages: - '@types/react' dev: false + /@rainbow-me/rainbowkit@1.3.0(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0)(viem@1.20.3)(wagmi@1.4.12): + resolution: {integrity: sha512-y5/JZIdYjqc84QFqKc1AhOHctnFC7quaDE3K8bueGfa0TgyrXcA6XgN3Dko530b3sxJJiTgvu2LxWlNUg8Felg==} + engines: {node: '>=12.4'} + peerDependencies: + react: '>=17' + react-dom: '>=17' + viem: ~0.3.19 || ^1.0.0 + wagmi: ~1.0.1 || ~1.1.0 || ~1.2.0 || ~1.3.0 || ~1.4.0 + dependencies: + '@vanilla-extract/css': 1.9.1 + '@vanilla-extract/dynamic': 2.0.2 + '@vanilla-extract/sprinkles': 1.5.0(@vanilla-extract/css@1.9.1) + clsx: 1.1.1 + i18n-js: 4.3.2 + qrcode: 1.5.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.4(@types/react@18.2.21)(react@18.2.0) + ua-parser-js: 1.0.37 + viem: 1.20.3(typescript@5.2.2) + wagmi: 1.4.12(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.20.3) + transitivePeerDependencies: + - '@types/react' + dev: false + /@rollup/plugin-alias@4.0.4(rollup@2.79.1): resolution: {integrity: sha512-0CaAY238SMtYAWEXXptWSR8iz8NYZnH7zNBKuJ14xFJSGwLtPgjvXYsoApAHfzYXXH1ejxpVw7WlHss3zhh9SQ==} engines: {node: '>=14.0.0'} @@ -6467,11 +6620,23 @@ packages: - zod dev: false + /@safe-global/safe-apps-provider@0.18.1(typescript@5.2.2): + resolution: {integrity: sha512-V4a05A3EgJcriqtDoJklDz1BOinWhC6P0hjUSxshA4KOZM7rGPCTto/usXs09zr1vvL28evl/NldSTv97j2bmg==} + dependencies: + '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.2.2) + events: 3.3.0 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + /@safe-global/safe-apps-sdk@8.0.0(typescript@4.9.5): resolution: {integrity: sha512-gYw0ki/EAuV1oSyMxpqandHjnthZjYYy+YWpTAzf8BqfXM3ItcZLpjxfg+3+mXW8HIO+3jw6T9iiqEXsqHaMMw==} dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.13.2 - viem: 1.0.6(typescript@4.9.5) + viem: 1.20.3(typescript@4.9.5) transitivePeerDependencies: - bufferutil - typescript @@ -6483,7 +6648,19 @@ packages: resolution: {integrity: sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w==} dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.13.2 - viem: 1.0.6(typescript@4.9.5) + viem: 1.20.3(typescript@4.9.5) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@safe-global/safe-apps-sdk@8.1.0(typescript@5.2.2): + resolution: {integrity: sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w==} + dependencies: + '@safe-global/safe-gateway-typescript-sdk': 3.13.2 + viem: 1.20.3(typescript@5.2.2) transitivePeerDependencies: - bufferutil - typescript @@ -6500,6 +6677,10 @@ packages: resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} dev: false + /@scure/base@1.1.5: + resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} + dev: false + /@scure/bip32@1.1.5: resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} dependencies: @@ -6516,6 +6697,14 @@ packages: '@scure/base': 1.1.1 dev: false + /@scure/bip32@1.3.2: + resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.5 + dev: false + /@scure/bip39@1.1.1: resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} dependencies: @@ -6530,6 +6719,13 @@ packages: '@scure/base': 1.1.1 dev: false + /@scure/bip39@1.2.1: + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + dependencies: + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.5 + dev: false + /@sideway/address@4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: @@ -6906,6 +7102,12 @@ packages: - supports-color dev: false + /@swc/helpers@0.5.1: + resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} + dependencies: + tslib: 2.6.2 + dev: false + /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: @@ -7332,12 +7534,6 @@ packages: /@types/node@18.16.18: resolution: {integrity: sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==} - /@types/node@20.10.3: - resolution: {integrity: sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg==} - dependencies: - undici-types: 5.26.5 - dev: false - /@types/node@20.6.0: resolution: {integrity: sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==} dev: false @@ -7369,6 +7565,7 @@ packages: /@types/prop-types@15.7.10: resolution: {integrity: sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==} + dev: true /@types/prop-types@15.7.11: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} @@ -7387,27 +7584,33 @@ packages: /@types/react-dom@18.2.5: resolution: {integrity: sha512-sRQsOS/sCLnpQhR4DSKGTtWFE3FZjpQa86KPVbhUqdYMRZ9FEFcfAytKhR/vUG2rH1oFbOOej6cuD7MFSobDRQ==} dependencies: - '@types/react': 18.2.12 + '@types/react': 18.2.21 + + /@types/react-dom@18.2.7: + resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} + dependencies: + '@types/react': 18.2.21 + dev: false /@types/react-router-config@5.0.10: resolution: {integrity: sha512-Wn6c/tXdEgi9adCMtDwx8Q2vGty6TsPTc/wCQQ9kAlye8UqFxj0vGFWWuhywNfkwqth+SOgJxQTLTZukrqDQmQ==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.37 + '@types/react': 18.2.21 '@types/react-router': 5.1.20 /@types/react-router-dom@5.3.3: resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.37 + '@types/react': 18.2.21 '@types/react-router': 5.1.20 /@types/react-router@5.1.20: resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.41 + '@types/react': 18.2.21 /@types/react@18.2.12: resolution: {integrity: sha512-ndmBMLCgn38v3SntMeoJaIrO6tGHYKMEBohCUmw8HoLLQdRMOIGXfeYaBTLe2lsFaSB3MOK1VXscYFnmLtTSmw==} @@ -7416,19 +7619,20 @@ packages: '@types/scheduler': 0.16.3 csstype: 3.1.2 + /@types/react@18.2.21: + resolution: {integrity: sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==} + dependencies: + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 + csstype: 3.1.2 + /@types/react@18.2.37: resolution: {integrity: sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==} dependencies: '@types/prop-types': 15.7.10 '@types/scheduler': 0.16.6 csstype: 3.1.2 - - /@types/react@18.2.41: - resolution: {integrity: sha512-CwOGr/PiLiNBxEBqpJ7fO3kocP/2SSuC9fpH5K7tusrg4xPSRT/193rzolYwQnTN02We/ATXKnb6GqA5w4fRxw==} - dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.2 + dev: true /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} @@ -7457,6 +7661,7 @@ packages: /@types/scheduler@0.16.6: resolution: {integrity: sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==} + dev: true /@types/scheduler@0.16.8: resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} @@ -7811,6 +8016,48 @@ packages: typescript: 4.9.5 dev: false + /@wagmi/connectors@3.1.10(@types/react@18.2.21)(react@18.2.0)(typescript@5.2.2)(viem@1.20.3): + resolution: {integrity: sha512-ZLJC1QaeiZarkF07Cr9mOlVjPO1Lf5TBx+JKBms2y5fUIXlKrxCfQgO/gDCureboI+Us2X3IRI659+XacSGpbA==} + peerDependencies: + typescript: '>=5.0.4' + viem: '>=0.3.35' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@coinbase/wallet-sdk': 3.7.2 + '@safe-global/safe-apps-provider': 0.18.1(typescript@5.2.2) + '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.2.2) + '@walletconnect/ethereum-provider': 2.10.6(@types/react@18.2.21)(react@18.2.0) + '@walletconnect/legacy-provider': 2.0.0 + '@walletconnect/modal': 2.6.2(@types/react@18.2.21)(react@18.2.0) + '@walletconnect/utils': 2.10.2 + abitype: 0.8.7(typescript@5.2.2) + eventemitter3: 4.0.7 + typescript: 5.2.2 + viem: 1.20.3(typescript@5.2.2) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - react + - supports-color + - utf-8-validate + - zod + dev: false + /@wagmi/connectors@3.1.5(@types/react@18.2.12)(react@18.2.0)(typescript@4.9.5)(viem@1.0.6): resolution: {integrity: sha512-aE4rWZbivqWa9HqjiLDPtwROH2b1Az+lBVMeZ3o/aFxGNGNEkdrSAMOUG15/UFy3VnN6HqGOtTobOBZ10JhfNQ==} peerDependencies: @@ -7854,6 +8101,44 @@ packages: - zod dev: false + /@wagmi/core@1.4.12(@types/react@18.2.21)(react@18.2.0)(typescript@5.2.2)(viem@1.20.3): + resolution: {integrity: sha512-bLcYmmGgjtl3jAGo8X3Sm6oUwsdjbVxFMu9SWnwHdE4S9JdYeWM57dEhQgq8SYul2yQ7yY2/gimBf1Or0Ky3dQ==} + peerDependencies: + typescript: '>=5.0.4' + viem: '>=0.3.35' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@wagmi/connectors': 3.1.10(@types/react@18.2.21)(react@18.2.0)(typescript@5.2.2)(viem@1.20.3) + abitype: 0.8.7(typescript@5.2.2) + eventemitter3: 4.0.7 + typescript: 5.2.2 + viem: 1.20.3(typescript@5.2.2) + zustand: 4.4.6(@types/react@18.2.21)(react@18.2.0) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - immer + - react + - supports-color + - utf-8-validate + - zod + dev: false + /@wagmi/core@1.4.7(@types/react@18.2.12)(react@18.2.0)(typescript@4.9.5)(viem@1.0.6): resolution: {integrity: sha512-PiOIGni8ArQoPmuDylHX38zMt2nPnTYRIluIqiduKyGCM61X/tf10a0rafUMOOphDPudZu1TacNDhCSeoh/LEA==} peerDependencies: @@ -7929,6 +8214,43 @@ packages: - utf-8-validate dev: false + /@walletconnect/core@2.10.6: + resolution: {integrity: sha512-Z4vh4ZdfcoQjgPEOxeuF9HUZCVLtV3MgRbS/awLIj/omDrFnOwlBhxi5Syr4Y8muVGC0ocRetQYHae0/gX5crQ==} + dependencies: + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.14 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.0.1 + '@walletconnect/relay-api': 1.0.9 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.10.6 + '@walletconnect/utils': 2.10.6 + events: 3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - supports-color + - utf-8-validate + dev: false + /@walletconnect/crypto@1.0.3: resolution: {integrity: sha512-+2jdORD7XQs76I2Odgr3wwrtyuLUXD/kprNVsjWRhhhdO9Mt6WqVzOPu0/t7OHSmgal8k7SoBQzUc5hu/8zL/g==} dependencies: @@ -7991,6 +8313,40 @@ packages: - utf-8-validate dev: false + /@walletconnect/ethereum-provider@2.10.6(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-bBQ+yUfxLv8VxNttgNKY7nED35gSVayO/BnLHbNKvyV1gpvSCla5mWB9MsXuQs70MK0g+/qtgRVSrOtdSubaNQ==} + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.7 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/modal': 2.6.2(@types/react@18.2.21)(react@18.2.0) + '@walletconnect/sign-client': 2.10.6 + '@walletconnect/types': 2.10.6 + '@walletconnect/universal-provider': 2.10.6 + '@walletconnect/utils': 2.10.6 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - react + - supports-color + - utf-8-validate + dev: false + /@walletconnect/events@1.0.1: resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} dependencies: @@ -8053,6 +8409,18 @@ packages: - utf-8-validate dev: false + /@walletconnect/jsonrpc-ws-connection@1.0.14: + resolution: {integrity: sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /@walletconnect/keyvaluestorage@1.1.1: resolution: {integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==} peerDependencies: @@ -8152,6 +8520,15 @@ packages: - react dev: false + /@walletconnect/modal-core@2.6.2(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA==} + dependencies: + valtio: 1.11.2(@types/react@18.2.21)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + dev: false + /@walletconnect/modal-ui@2.6.2(@types/react@18.2.12)(react@18.2.0): resolution: {integrity: sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA==} dependencies: @@ -8164,6 +8541,18 @@ packages: - react dev: false + /@walletconnect/modal-ui@2.6.2(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA==} + dependencies: + '@walletconnect/modal-core': 2.6.2(@types/react@18.2.21)(react@18.2.0) + lit: 2.8.0 + motion: 10.16.2 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@types/react' + - react + dev: false + /@walletconnect/modal@2.6.2(@types/react@18.2.12)(react@18.2.0): resolution: {integrity: sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA==} dependencies: @@ -8174,6 +8563,16 @@ packages: - react dev: false + /@walletconnect/modal@2.6.2(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA==} + dependencies: + '@walletconnect/modal-core': 2.6.2(@types/react@18.2.21)(react@18.2.0) + '@walletconnect/modal-ui': 2.6.2(@types/react@18.2.21)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + dev: false + /@walletconnect/randombytes@1.0.3: resolution: {integrity: sha512-35lpzxcHFbTN3ABefC9W+uBpNZl1GC4Wpx0ed30gibfO/y9oLdy1NznbV96HARQKSBV9J9M/rrtIvf6a23jfYw==} dependencies: @@ -8237,6 +8636,36 @@ packages: - utf-8-validate dev: false + /@walletconnect/sign-client@2.10.6: + resolution: {integrity: sha512-EvUWjaZBQu2yKnH5/5F2qzbuiIuUN9ZgrNKgvXkw5z1Dq5RJCks0S9/MFlKH/ZSGqXnLl7uAzBXtoX4sMgbCMA==} + dependencies: + '@walletconnect/core': 2.10.6 + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.0.1 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.10.6 + '@walletconnect/utils': 2.10.6 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - supports-color + - utf-8-validate + dev: false + /@walletconnect/time@1.0.2: resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} dependencies: @@ -8268,6 +8697,31 @@ packages: - supports-color dev: false + /@walletconnect/types@2.10.6: + resolution: {integrity: sha512-WgHfiTG1yakmxheaBRiXhUdEmgxwrvsAdOIWaMf/spvrzVKYh6sHI3oyEEky5qj5jjiMiyQBeB57QamzCotbcQ==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.0.1 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - supports-color + dev: false + /@walletconnect/universal-provider@2.10.2: resolution: {integrity: sha512-wFgI0LbQ3D56sgaUMsgOHCM5m8WLxiC71BGuCKQfApgsbNMVKugYVy2zWHyUyi8sqTQHI+uSaVpDev4UHq9LEw==} dependencies: @@ -8299,6 +8753,37 @@ packages: - utf-8-validate dev: false + /@walletconnect/universal-provider@2.10.6: + resolution: {integrity: sha512-CEivusqqoD31BhCTKp08DnrccfGjwD9MFjZs5BNRorDteRFE8zVm9LmP6DSiNJCw82ZajGlZThggLQ/BAATfwA==} + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.7 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.0.1 + '@walletconnect/sign-client': 2.10.6 + '@walletconnect/types': 2.10.6 + '@walletconnect/utils': 2.10.6 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + /@walletconnect/utils@2.10.2: resolution: {integrity: sha512-syxXRpc2yhSknMu3IfiBGobxOY7fLfLTJuw+ppKaeO6WUdZpIit3wfuGOcc0Ms3ZPFCrGfyGOoZsCvgdXtptRg==} dependencies: @@ -8310,7 +8795,40 @@ packages: '@walletconnect/relay-api': 1.0.9 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.10.2 + '@walletconnect/types': 2.10.2 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - supports-color + dev: false + + /@walletconnect/utils@2.10.6: + resolution: {integrity: sha512-oRsWWhN2+hi3aiDXrQEOfysz6FHQJGXLsNQPVt+WIBJplO6Szmdau9dbleD88u1iiT4GKPqE0R9FOYvvPm1H/w==} + dependencies: + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@walletconnect/relay-api': 1.0.9 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.10.6 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 detect-browser: 5.3.0 @@ -8498,6 +9016,46 @@ packages: typescript: 4.9.5 dev: false + /abitype@0.8.7(typescript@5.2.2): + resolution: {integrity: sha512-wQ7hV8Yg/yKmGyFpqrNZufCxbszDe5es4AZGYPBitocfSqXtjrTG9JMWFcc4N30ukl2ve48aBTwt7NJxVQdU3w==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + dependencies: + typescript: 5.2.2 + dev: false + + /abitype@0.9.8(typescript@4.9.5): + resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 4.9.5 + dev: false + + /abitype@0.9.8(typescript@5.2.2): + resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.2.2 + dev: false + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -13775,6 +14333,14 @@ packages: ws: 8.12.0 dev: false + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: false + /istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} @@ -15828,6 +16394,46 @@ packages: /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + /next@13.4.19(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==} + engines: {node: '>=16.8.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true + dependencies: + '@next/env': 13.4.19 + '@swc/helpers': 0.5.1 + busboy: 1.6.0 + caniuse-lite: 1.0.30001563 + postcss: 8.4.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.23.3)(react@18.2.0) + watchpack: 2.4.0 + zod: 3.21.4 + optionalDependencies: + '@next/swc-darwin-arm64': 13.4.19 + '@next/swc-darwin-x64': 13.4.19 + '@next/swc-linux-arm64-gnu': 13.4.19 + '@next/swc-linux-arm64-musl': 13.4.19 + '@next/swc-linux-x64-gnu': 13.4.19 + '@next/swc-linux-x64-musl': 13.4.19 + '@next/swc-win32-arm64-msvc': 13.4.19 + '@next/swc-win32-ia32-msvc': 13.4.19 + '@next/swc-win32-x64-msvc': 13.4.19 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + /next@14.0.3(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==} engines: {node: '>=18.17.0'} @@ -16973,6 +17579,15 @@ packages: postcss: 8.4.31 dev: false + /postcss@8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + /postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -17129,7 +17744,7 @@ packages: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 20.10.3 + '@types/node': 18.16.18 long: 4.0.0 dev: false @@ -17430,6 +18045,22 @@ packages: tslib: 2.6.2 dev: false + /react-remove-scroll-bar@2.3.4(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.21 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.2.21)(react@18.2.0) + tslib: 2.6.2 + dev: false + /react-remove-scroll@2.5.4(@types/react@18.2.12)(react@18.2.0): resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} engines: {node: '>=10'} @@ -17449,6 +18080,25 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.12)(react@18.2.0) dev: false + /react-remove-scroll@2.5.4(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.21 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.2.21)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.21)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.0(@types/react@18.2.21)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.21)(react@18.2.0) + dev: false + /react-router-config@5.1.1(react-router@5.3.4)(react@18.2.0): resolution: {integrity: sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==} peerDependencies: @@ -17509,6 +18159,23 @@ packages: tslib: 2.6.2 dev: false + /react-style-singleton@2.2.1(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.21 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.6.2 + dev: false + /react-waypoint@10.3.0(react@18.2.0): resolution: {integrity: sha512-iF1y2c1BsoXuEGz08NoahaLFIGI9gTUAAOKip96HUmylRT6DUtpgoBPjk/Y8dfcFVmfVDvUzWjNXpZyKTOV0SQ==} peerDependencies: @@ -19426,7 +20093,6 @@ packages: resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} engines: {node: '>=14.17'} hasBin: true - dev: true /ua-parser-js@1.0.37: resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} @@ -19469,10 +20135,6 @@ packages: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} dev: false - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: false - /unenv@1.8.0: resolution: {integrity: sha512-uIGbdCWZfhRRmyKj1UioCepQ0jpq638j/Cf0xFTn4zD1nGJ2lSdzYHLzfdXN791oo/0juUiSWW1fBklXMTsuqg==} dependencies: @@ -19750,6 +20412,21 @@ packages: tslib: 2.6.2 dev: false + /use-callback-ref@1.3.0(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.21 + react: 18.2.0 + tslib: 2.6.2 + dev: false + /use-sidecar@1.1.2(@types/react@18.2.12)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} @@ -19766,6 +20443,22 @@ packages: tslib: 2.6.2 dev: false + /use-sidecar@1.1.2(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.21 + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.6.2 + dev: false + /use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: @@ -19858,6 +20551,24 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false + /valtio@1.11.2(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=16.8' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + dependencies: + '@types/react': 18.2.21 + proxy-compare: 2.5.1 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /value-equal@1.0.1: resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} dev: false @@ -19908,6 +20619,95 @@ packages: - zod dev: false + /viem@1.20.3(typescript@4.9.5): + resolution: {integrity: sha512-7CrmeCb2KYkeCgUmUyb1hsf+IX/PLwi+Np+Vm4YUTPeG82y3HRSgGHSaCOp3d0YtR2kXD3nv9y5kE7LBFE+wWw==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 0.9.8(typescript@4.9.5) + isows: 1.0.3(ws@8.13.0) + typescript: 4.9.5 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /viem@1.20.3(typescript@5.2.2): + resolution: {integrity: sha512-7CrmeCb2KYkeCgUmUyb1hsf+IX/PLwi+Np+Vm4YUTPeG82y3HRSgGHSaCOp3d0YtR2kXD3nv9y5kE7LBFE+wWw==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 0.9.8(typescript@5.2.2) + isows: 1.0.3(ws@8.13.0) + typescript: 5.2.2 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /wagmi@1.4.12(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.20.3): + resolution: {integrity: sha512-QRxpjhdMlZmbYTfn9VQkQMKq+l3kwA1O7tF10vaykPrjbGX+IIlyn72ib9oqW9BfQO7n/Sf/mnVz1zbxRhGPWA==} + peerDependencies: + react: '>=17.0.0' + typescript: '>=5.0.4' + viem: '>=0.3.35' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@tanstack/query-sync-storage-persister': 4.36.1 + '@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-query-persist-client': 4.36.1(@tanstack/react-query@4.36.1) + '@wagmi/core': 1.4.12(@types/react@18.2.21)(react@18.2.0)(typescript@5.2.2)(viem@1.20.3) + abitype: 0.8.7(typescript@5.2.2) + react: 18.2.0 + typescript: 5.2.2 + use-sync-external-store: 1.2.0(react@18.2.0) + viem: 1.20.3(typescript@5.2.2) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - immer + - react-dom + - react-native + - supports-color + - utf-8-validate + - zod + dev: false + /wagmi@1.4.7(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(viem@1.0.6): resolution: {integrity: sha512-/k8gA9S6RnwU6Qroxs630jAFvRIx+DSKpCP1owgAEGWc7D2bAJHljwRSCRTGENz48HyJ4V3R7KYV1yImxPvM3A==} peerDependencies: @@ -20389,6 +21189,19 @@ packages: optional: true dev: false + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /ws@8.14.2(bufferutil@4.0.8)(utf-8-validate@5.0.10): resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} engines: {node: '>=10.0.0'} @@ -20551,6 +21364,10 @@ packages: engines: {node: '>=12.20'} dev: false + /zod@3.21.4: + resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} + dev: false + /zustand@4.4.6(@types/react@18.2.12)(react@18.2.0): resolution: {integrity: sha512-Rb16eW55gqL4W2XZpJh0fnrATxYEG3Apl2gfHTyDSE965x/zxslTikpNch0JgNjJA9zK6gEFW8Fl6d1rTZaqgg==} engines: {node: '>=12.7.0'} @@ -20571,6 +21388,26 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false + /zustand@4.4.6(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-Rb16eW55gqL4W2XZpJh0fnrATxYEG3Apl2gfHTyDSE965x/zxslTikpNch0JgNjJA9zK6gEFW8Fl6d1rTZaqgg==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + dependencies: + '@types/react': 18.2.21 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false