diff --git a/package.json b/package.json index 02a6b1a940..fece70e744 100644 --- a/package.json +++ b/package.json @@ -43,11 +43,10 @@ "devDependencies": { "@biomejs/biome": "1.4.1", "@changesets/cli": "2.27.1", + "@tanstack/react-query": "^5.17.9", "@commitlint/cli": "^18.4.3", "@commitlint/config-conventional": "^18.4.3", "@lavamoat/preinstall-always-fail": "^2.0.0", - "@tanstack/query-core": "^4.28.0", - "@tanstack/react-query": "^4.28.0", "@testing-library/jest-dom": "^6.2.0", "@testing-library/react": "^14.1.2", "@testing-library/user-event": "^14.5.2", @@ -72,14 +71,14 @@ "react-dom": "^18.2.0", "recursive-readdir-files": "^2.3.1", "typescript": "^5.0.4", - "viem": "~1.21.4", + "viem": "^2.4.1", "vitest": "^0.33.0", - "wagmi": "~1.4.13" + "wagmi": "^2.3.1" }, - "packageManager": "pnpm@8.14.0", + "packageManager": "pnpm@8.14.1", "pnpm": { "onlyBuiltDependencies": [ "esbuild" ] } -} \ No newline at end of file +} diff --git a/packages/create-rainbowkit/generated-test-app/package.json b/packages/create-rainbowkit/generated-test-app/package.json index b42251d6e0..3efe9dbbe3 100644 --- a/packages/create-rainbowkit/generated-test-app/package.json +++ b/packages/create-rainbowkit/generated-test-app/package.json @@ -10,11 +10,12 @@ }, "dependencies": { "@rainbow-me/rainbowkit": "workspace:*", + "@tanstack/react-query": "^5.17.9", "next": "^14.0.4", "react": "^18.2.0", "react-dom": "^18.2.0", - "viem": "~1.21.4", - "wagmi": "~1.4.13" + "viem": "^2.4.1", + "wagmi": "^2.3.1" }, "devDependencies": { "@types/node": "^18.19.3", diff --git a/packages/create-rainbowkit/generated-test-app/pages/_app.tsx b/packages/create-rainbowkit/generated-test-app/pages/_app.tsx index 45930a428f..ef39adeffa 100644 --- a/packages/create-rainbowkit/generated-test-app/pages/_app.tsx +++ b/packages/create-rainbowkit/generated-test-app/pages/_app.tsx @@ -2,8 +2,8 @@ import '../styles/globals.css'; import '@rainbow-me/rainbowkit/styles.css'; import type { AppProps } from 'next/app'; -import { getDefaultConfig, RainbowKitProvider } from '@rainbow-me/rainbowkit'; -import { WagmiConfig } from 'wagmi'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { WagmiProvider } from 'wagmi'; import { arbitrum, base, @@ -13,30 +13,33 @@ import { sepolia, zora, } from 'wagmi/chains'; +import { getDefaultConfig, RainbowKitProvider } from '@rainbow-me/rainbowkit'; -const chains = [ - mainnet, - polygon, - optimism, - arbitrum, - base, - zora, - ...(process.env.NEXT_PUBLIC_ENABLE_TESTNETS === 'true' ? [sepolia] : []), -]; - -const wagmiConfig = getDefaultConfig({ +const config = getDefaultConfig({ appName: 'RainbowKit App', projectId: 'YOUR_PROJECT_ID', - chains, + chains: [ + mainnet, + polygon, + optimism, + arbitrum, + base, + zora, + ...(process.env.NEXT_PUBLIC_ENABLE_TESTNETS === 'true' ? [sepolia] : []), + ] }); +const client = new QueryClient(); + function MyApp({ Component, pageProps }: AppProps) { return ( - <WagmiConfig config={wagmiConfig}> - <RainbowKitProvider chains={chains}> - <Component {...pageProps} /> - </RainbowKitProvider> - </WagmiConfig> + <WagmiProvider config={config}> + <QueryClientProvider client={client}> + <RainbowKitProvider> + <Component {...pageProps} /> + </RainbowKitProvider> + </QueryClientProvider> + </WagmiProvider> ); } diff --git a/packages/create-rainbowkit/package.json b/packages/create-rainbowkit/package.json index 9bf1fdf869..c6f05557c9 100644 --- a/packages/create-rainbowkit/package.json +++ b/packages/create-rainbowkit/package.json @@ -1,7 +1,7 @@ { "name": "@rainbow-me/create-rainbowkit", "description": "Scaffold a new RainbowKit project", - "version": "0.3.0-beta.0", + "version": "0.3.0-beta.2", "files": [ "dist", "templates" diff --git a/packages/create-rainbowkit/templates/next-app/package.json b/packages/create-rainbowkit/templates/next-app/package.json index 9bd7978dac..5229e55ff3 100644 --- a/packages/create-rainbowkit/templates/next-app/package.json +++ b/packages/create-rainbowkit/templates/next-app/package.json @@ -10,11 +10,12 @@ }, "dependencies": { "@rainbow-me/rainbowkit": "workspace:*", + "@tanstack/react-query": "^5.17.9", "next": "^14.0.4", "react": "^18.2.0", "react-dom": "^18.2.0", - "viem": "~1.21.4", - "wagmi": "~1.4.13" + "viem": "^2.4.1", + "wagmi": "^2.3.1" }, "devDependencies": { "@types/node": "^18.19.3", @@ -23,4 +24,4 @@ "eslint-config-next": "^14.0.4", "typescript": "^5.0.4" } -} \ No newline at end of file +} diff --git a/packages/create-rainbowkit/templates/next-app/pages/_app.tsx b/packages/create-rainbowkit/templates/next-app/pages/_app.tsx index 45930a428f..ef39adeffa 100644 --- a/packages/create-rainbowkit/templates/next-app/pages/_app.tsx +++ b/packages/create-rainbowkit/templates/next-app/pages/_app.tsx @@ -2,8 +2,8 @@ import '../styles/globals.css'; import '@rainbow-me/rainbowkit/styles.css'; import type { AppProps } from 'next/app'; -import { getDefaultConfig, RainbowKitProvider } from '@rainbow-me/rainbowkit'; -import { WagmiConfig } from 'wagmi'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { WagmiProvider } from 'wagmi'; import { arbitrum, base, @@ -13,30 +13,33 @@ import { sepolia, zora, } from 'wagmi/chains'; +import { getDefaultConfig, RainbowKitProvider } from '@rainbow-me/rainbowkit'; -const chains = [ - mainnet, - polygon, - optimism, - arbitrum, - base, - zora, - ...(process.env.NEXT_PUBLIC_ENABLE_TESTNETS === 'true' ? [sepolia] : []), -]; - -const wagmiConfig = getDefaultConfig({ +const config = getDefaultConfig({ appName: 'RainbowKit App', projectId: 'YOUR_PROJECT_ID', - chains, + chains: [ + mainnet, + polygon, + optimism, + arbitrum, + base, + zora, + ...(process.env.NEXT_PUBLIC_ENABLE_TESTNETS === 'true' ? [sepolia] : []), + ] }); +const client = new QueryClient(); + function MyApp({ Component, pageProps }: AppProps) { return ( - <WagmiConfig config={wagmiConfig}> - <RainbowKitProvider chains={chains}> - <Component {...pageProps} /> - </RainbowKitProvider> - </WagmiConfig> + <WagmiProvider config={config}> + <QueryClientProvider client={client}> + <RainbowKitProvider> + <Component {...pageProps} /> + </RainbowKitProvider> + </QueryClientProvider> + </WagmiProvider> ); } diff --git a/packages/create-rainbowkit/tsconfig.json b/packages/create-rainbowkit/tsconfig.json index 916c2687d7..249b419276 100644 --- a/packages/create-rainbowkit/tsconfig.json +++ b/packages/create-rainbowkit/tsconfig.json @@ -1,10 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "preserveSymlinks": true, "target": "ES2020", + "preserveSymlinks": false, "outDir": "dist" }, "include": ["src", "templates"], "exclude": ["node_modules"], -} +} \ No newline at end of file diff --git a/packages/example/package.json b/packages/example/package.json index c9aa3d1279..43b968530d 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -8,14 +8,15 @@ "@rainbow-me/rainbowkit": "workspace:*", "@rainbow-me/rainbowkit-siwe-next-auth": "workspace:*", "@rainbow-me/rainbow-button": "workspace:*", + "@tanstack/react-query": "^5.17.9", "ethers": "^5.6.8", "next": "^14.0.4", "next-auth": "4.24.5", "react": "^18.2.0", "react-dom": "^18.2.0", "siwe": "^2.1.4", - "viem": "~1.21.4", - "wagmi": "~1.4.13" + "viem": "^2.4.1", + "wagmi": "^2.3.1" }, "scripts": { "dev": "next dev", @@ -25,4 +26,4 @@ "keywords": [], "author": "", "license": "ISC" -} \ No newline at end of file +} diff --git a/packages/example/pages/_app.tsx b/packages/example/pages/_app.tsx index edfa9458f7..789e5c5409 100644 --- a/packages/example/pages/_app.tsx +++ b/packages/example/pages/_app.tsx @@ -53,13 +53,14 @@ import { zerionWallet, } from '@rainbow-me/rainbowkit/wallets'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import type { Session } from 'next-auth'; import { SessionProvider, signOut } from 'next-auth/react'; import type { AppProps } from 'next/app'; import Head from 'next/head'; import { useRouter } from 'next/router'; import React, { useEffect, useState } from 'react'; -import { WagmiConfig, useDisconnect } from 'wagmi'; +import { WagmiProvider, useDisconnect } from 'wagmi'; import { arbitrum, arbitrumSepolia, @@ -85,78 +86,72 @@ const RAINBOW_TERMS = 'https://rainbow.me/terms-of-use'; const projectId = process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID ?? 'YOUR_PROJECT_ID'; -const chains = [ - mainnet, - polygon, - optimism, - arbitrum, - base, - zora, - bsc, - zkSync, - ...(process.env.NEXT_PUBLIC_ENABLE_TESTNETS === 'true' - ? [ - goerli, - sepolia, - holesky, - polygonMumbai, - optimismSepolia, - arbitrumSepolia, - baseSepolia, - zoraSepolia, - ] - : []), -]; - -const { wallets } = getDefaultWallets({ - appName: 'RainbowKit Demo', - projectId, - chains, -}); +const { wallets } = getDefaultWallets(); -const wagmiConfig = getDefaultConfig({ +const config = getDefaultConfig({ appName: 'RainbowKit Demo', projectId, - chains, + chains: [ + mainnet, + polygon, + optimism, + arbitrum, + base, + zora, + bsc, + zkSync, + ...(process.env.NEXT_PUBLIC_ENABLE_TESTNETS === 'true' + ? [ + goerli, + sepolia, + holesky, + polygonMumbai, + optimismSepolia, + arbitrumSepolia, + baseSepolia, + zoraSepolia, + ] + : []), + ], wallets: [ ...wallets, { groupName: 'Other', wallets: [ - argentWallet({ projectId, chains }), - bifrostWallet({ projectId, chains }), - bitgetWallet({ projectId, chains }), - bitskiWallet({ chains }), - clvWallet({ projectId, chains }), - coin98Wallet({ projectId, chains }), - coreWallet({ projectId, chains }), - dawnWallet({ chains }), - desigWallet({ chains }), - enkryptWallet({ chains }), - foxWallet({ projectId, chains }), - frameWallet({ chains }), - frontierWallet({ projectId, chains }), - imTokenWallet({ projectId, chains }), - ledgerWallet({ projectId, chains }), - mewWallet({ chains }), - oktoWallet({ projectId, chains }), - okxWallet({ projectId, chains }), - omniWallet({ projectId, chains }), - oneKeyWallet({ chains }), - phantomWallet({ chains }), - rabbyWallet({ chains }), - safeheronWallet({ chains }), - safepalWallet({ projectId, chains }), - subWallet({ projectId, chains }), - tahoWallet({ chains }), - talismanWallet({ chains }), - tokenPocketWallet({ projectId, chains }), - tokenaryWallet({ chains }), - trustWallet({ projectId, chains }), - uniswapWallet({ projectId, chains }), - xdefiWallet({ chains }), - zealWallet({ chains }), - zerionWallet({ projectId, chains }), + argentWallet, + bifrostWallet, + bitgetWallet, + bitskiWallet, + clvWallet, + coin98Wallet, + coreWallet, + dawnWallet, + desigWallet, + enkryptWallet, + foxWallet, + frameWallet, + frontierWallet, + imTokenWallet, + ledgerWallet, + mewWallet, + oktoWallet, + okxWallet, + omniWallet, + oneKeyWallet, + phantomWallet, + rabbyWallet, + safeheronWallet, + safepalWallet, + subWallet, + tahoWallet, + talismanWallet, + tokenPocketWallet, + tokenaryWallet, + trustWallet, + uniswapWallet, + xdefiWallet, + zealWallet, + zerionWallet, ], }, ], @@ -293,7 +288,6 @@ function RainbowKitApp({ ...(showDisclaimer && { disclaimer: DisclaimerDemo }), }} avatar={customAvatar ? CustomAvatar : undefined} - chains={chains} locale={locale} coolMode={coolModeEnabled} initialChain={selectedInitialChainId} @@ -464,7 +458,7 @@ function RainbowKitApp({ } value={selectedInitialChainId ?? 'default'} > - {[undefined, ...chains].map((chain) => ( + {[undefined, ...config.chains].map((chain) => ( <option key={chain?.id ?? ''} value={chain?.id ?? ''} @@ -643,6 +637,8 @@ function RainbowKitApp({ ); } +const queryClient = new QueryClient(); + export default function App( appProps: AppProps<{ session: Session; @@ -654,10 +650,13 @@ export default function App( <title>RainbowKit Example</title> <link href="/favicon.ico" rel="icon" /> </Head> + <SessionProvider refetchInterval={0} session={appProps.pageProps.session}> - <WagmiConfig config={wagmiConfig}> - <RainbowKitApp {...appProps} /> - </WagmiConfig> + <WagmiProvider config={config}> + <QueryClientProvider client={queryClient}> + <RainbowKitApp {...appProps} /> + </QueryClientProvider> + </WagmiProvider> </SessionProvider> </> ); diff --git a/packages/example/pages/index.tsx b/packages/example/pages/index.tsx index 12cd67e7df..ef012f47d9 100644 --- a/packages/example/pages/index.tsx +++ b/packages/example/pages/index.tsx @@ -11,10 +11,9 @@ import { GetServerSideProps } from 'next'; import { getServerSession } from 'next-auth'; import { useSession } from 'next-auth/react'; import React, { ComponentProps, useEffect, useState } from 'react'; +import { Address, parseEther } from 'viem'; import { useAccount, - useNetwork, - usePrepareSendTransaction, useSendTransaction, useSignMessage, useSignTypedData, @@ -61,63 +60,25 @@ const Example = ({ authEnabled }: AppContextProps) => { defaultProps.showBalance.largeScreen, ); - const { chain: activeChain } = useNetwork(); - - const { config: sendTransactionConfig } = usePrepareSendTransaction({ - enabled: !!address, - to: address, - value: 0n, - }); + const { chain: activeChain } = useAccount(); const { data: transactionData, error: transactionError, sendTransaction, - } = useSendTransaction(sendTransactionConfig); + } = useSendTransaction(); const { data: signingData, error: signingError, signMessage, - } = useSignMessage({ - message: 'wen token', - }); + } = useSignMessage(); const { data: typedData, error: typedError, signTypedData, - } = useSignTypedData({ - domain: { - chainId: 1, - name: 'Ether Mail', - verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', - version: '1', - }, - message: { - contents: 'Hello, Bob!', - from: { - name: 'Cow', - wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', - }, - to: { - name: 'Bob', - wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', - }, - }, - primaryType: 'Mail', - types: { - Mail: [ - { name: 'from', type: 'Person' }, - { name: 'to', type: 'Person' }, - { name: 'contents', type: 'string' }, - ], - Person: [ - { name: 'name', type: 'string' }, - { name: 'wallet', type: 'address' }, - ], - }, - }); + } = useSignTypedData(); const [mounted, setMounted] = useState(false); useEffect(() => setMounted(true), []); @@ -326,21 +287,59 @@ const Example = ({ authEnabled }: AppContextProps) => { <div style={{ display: 'flex', gap: 12, paddingBottom: 12 }}> <button disabled={!connected || !sendTransaction} - onClick={() => sendTransaction?.()} + onClick={() => + sendTransaction?.({ + to: address as Address, + value: parseEther('0.00001'), + }) + } type="button" > Send Transaction </button> <button disabled={!connected} - onClick={() => signMessage()} + onClick={() => signMessage({ message: 'wen token' })} type="button" > Sign Message </button> <button disabled={!connected || activeChain?.id !== 1} - onClick={() => signTypedData()} + onClick={() => + signTypedData({ + domain: { + chainId: 1, + name: 'Ether Mail', + verifyingContract: + '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + version: '1', + }, + message: { + contents: 'Hello, Bob!', + from: { + name: 'Cow', + wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + }, + to: { + name: 'Bob', + wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + }, + }, + primaryType: 'Mail', + types: { + Mail: [ + { name: 'from', type: 'Person' }, + { name: 'to', type: 'Person' }, + { name: 'contents', type: 'string' }, + ], + Person: [ + { name: 'name', type: 'string' }, + { name: 'wallet', type: 'address' }, + ], + }, + }) + } type="button" > Sign Typed Data diff --git a/packages/rainbow-button/package.json b/packages/rainbow-button/package.json index 635295bba2..5bedbbc4ec 100644 --- a/packages/rainbow-button/package.json +++ b/packages/rainbow-button/package.json @@ -1,7 +1,7 @@ { "name": "@rainbow-me/rainbow-button", "description": "Rainbow connector button", - "version": "0.2.0-beta.0", + "version": "0.2.0-beta.2", "files": [ "dist", "styles.css" @@ -39,8 +39,8 @@ "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" + "viem": "2.x", + "wagmi": "2.x" }, "repository": { "type": "git", diff --git a/packages/rainbow-button/src/components/RainbowButton.tsx b/packages/rainbow-button/src/components/RainbowButton.tsx index 260eabb725..c4db464a8d 100644 --- a/packages/rainbow-button/src/components/RainbowButton.tsx +++ b/packages/rainbow-button/src/components/RainbowButton.tsx @@ -9,12 +9,7 @@ export function RainbowButtonProvider({ RainbowKitProviderProps, 'chains' | 'avatar' | 'initialChain' | 'modalSize' | 'showRecentTransactions' >) { - return ( - // chains array is intentionally left empty - <RainbowKitProvider chains={[]} {...options}> - {children} - </RainbowKitProvider> - ); + return <RainbowKitProvider {...options}>{children}</RainbowKitProvider>; } export const RainbowButton = () => { diff --git a/packages/rainbow-button/src/connectors/rainbow.ts b/packages/rainbow-button/src/connectors/rainbow.ts index 9d56c332e1..8478809005 100644 --- a/packages/rainbow-button/src/connectors/rainbow.ts +++ b/packages/rainbow-button/src/connectors/rainbow.ts @@ -1,16 +1,35 @@ import { connectorsForWallets } from '@rainbow-me/rainbowkit'; import { rainbowWallet } from '@rainbow-me/rainbowkit/wallets'; -import { Connector } from 'wagmi'; +import type { CreateConnectorFn } from 'wagmi'; -export type RainbowConnectorOptions = Parameters<typeof rainbowWallet>[0]; +export type RainbowConnectorOptions = Parameters<typeof rainbowWallet>[0] & { + appName: string; + appDescription?: string; + appUrl?: string; + appIcon?: string; +}; -declare class RainbowConnector extends Connector { - constructor(options: RainbowConnectorOptions); -} +function rainbowConnector({ + projectId, + appName, + appDescription, + appUrl, + appIcon, + walletConnectParameters, +}: RainbowConnectorOptions): CreateConnectorFn { + const [connector] = connectorsForWallets( + [{ groupName: 'Popular', wallets: [rainbowWallet] }], + { + projectId, + appName, + appDescription, + appUrl, + appIcon, + walletConnectParameters, + }, + ); -function RainbowConnector(options: RainbowConnectorOptions) { - const [rainbowConnector] = connectorsForWallets([rainbowWallet(options)]); - return rainbowConnector; + return connector; } -export { RainbowConnector }; +export { rainbowConnector }; diff --git a/packages/rainbow-button/src/index.ts b/packages/rainbow-button/src/index.ts index 8c7e3d054c..2f537adfb3 100644 --- a/packages/rainbow-button/src/index.ts +++ b/packages/rainbow-button/src/index.ts @@ -1,3 +1,3 @@ export { RainbowButtonProvider } from './components/RainbowButton'; -export { RainbowConnector } from './connectors/rainbow'; +export { rainbowConnector } from './connectors/rainbow'; export { RainbowButton } from './components/RainbowButton'; diff --git a/packages/rainbowkit-siwe-next-auth/package.json b/packages/rainbowkit-siwe-next-auth/package.json index 56c4b5f021..ecdbd644ed 100644 --- a/packages/rainbowkit-siwe-next-auth/package.json +++ b/packages/rainbowkit-siwe-next-auth/package.json @@ -1,6 +1,6 @@ { "name": "@rainbow-me/rainbowkit-siwe-next-auth", - "version": "0.4.0-beta.0", + "version": "0.4.0-beta.2", "description": "RainbowKit authentication adapter for Sign-In with Ethereum and NextAuth.js", "files": [ "dist" diff --git a/packages/rainbowkit/package.json b/packages/rainbowkit/package.json index 0b4bbb5249..4364b21745 100644 --- a/packages/rainbowkit/package.json +++ b/packages/rainbowkit/package.json @@ -1,6 +1,6 @@ { "name": "@rainbow-me/rainbowkit", - "version": "2.0.0-beta.0", + "version": "2.0.0-beta.2", "description": "The best way to connect a wallet", "files": [ "dist", @@ -44,8 +44,8 @@ "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" + "viem": "2.x", + "wagmi": "2.x" }, "devDependencies": { "@testing-library/jest-dom": "^6.2.0", @@ -59,9 +59,7 @@ "nock": "^13.4.0", "postcss": "^8.4.32", "react": "^18.2.0", - "viem": "~1.21.4", "vitest": "^0.33.0", - "wagmi": "~1.4.13", "@types/i18n-js": "^3.8.9", "@types/ua-parser-js": "^0.7.39" }, @@ -80,4 +78,4 @@ "url": "git+https://github.com/rainbow-me/rainbowkit.git", "directory": "packages/rainbowkit" } -} \ No newline at end of file +} diff --git a/packages/rainbowkit/src/components/AsyncImage/AsyncImage.tsx b/packages/rainbowkit/src/components/AsyncImage/AsyncImage.tsx index f60c47e77c..e43c66ce33 100644 --- a/packages/rainbowkit/src/components/AsyncImage/AsyncImage.tsx +++ b/packages/rainbowkit/src/components/AsyncImage/AsyncImage.tsx @@ -12,6 +12,7 @@ interface AsyncImageProps { height: BoxProps['height'] | number; background?: string; borderRadius?: BoxProps['borderRadius']; + useAsImage?: boolean; borderColor?: BoxProps['borderColor'] | CustomBorderColor; boxShadow?: BoxProps['boxShadow']; testId?: string; @@ -22,6 +23,7 @@ export function AsyncImage({ background, borderColor, borderRadius, + useAsImage, boxShadow, height, src: srcProp, @@ -53,32 +55,36 @@ export function AsyncImage({ testId={testId} > <Box - {...(isRemoteImage - ? // biome-ignore format: design system keys - { - 'aria-hidden': true, - 'as': 'img', - 'onLoad': setRemoteImageLoaded, - 'src': src, + {...(useAsImage + ? { 'aria-hidden': true, as: 'img', src } + : isRemoteImage + ? // biome-ignore format: design system keys + { + "aria-hidden": true, + as: "img", + onLoad: setRemoteImageLoaded, + src, } - : { - backgroundSize: 'cover', - })} + : { + backgroundSize: 'cover', + })} height="full" position="absolute" style={{ - touchCallout: 'none', + WebkitTouchCallout: 'none', transition: 'opacity .15s linear', userSelect: 'none', - ...(isRemoteImage - ? { - opacity: isRemoteImageLoaded ? 1 : 0, - } - : { - backgroundImage: src ? `url(${src})` : undefined, - backgroundRepeat: 'no-repeat', - opacity: src ? 1 : 0, - }), + ...(!useAsImage + ? isRemoteImage + ? { + opacity: isRemoteImageLoaded ? 1 : 0, + } + : { + backgroundImage: src ? `url(${src})` : undefined, + backgroundRepeat: 'no-repeat', + opacity: src ? 1 : 0, + } + : {}), }} width="full" /> diff --git a/packages/rainbowkit/src/components/ChainModal/Chain.tsx b/packages/rainbowkit/src/components/ChainModal/Chain.tsx new file mode 100644 index 0000000000..7fa6ff72fd --- /dev/null +++ b/packages/rainbowkit/src/components/ChainModal/Chain.tsx @@ -0,0 +1,128 @@ +import React, { Fragment, useContext } from 'react'; +import { useSwitchChain } from 'wagmi'; +import { isMobile } from '../../utils/isMobile'; +import { AsyncImage } from '../AsyncImage/AsyncImage'; +import { AsyncImageSrc } from '../AsyncImage/useAsyncImage'; +import { Box, BoxProps } from '../Box/Box'; +import { MenuButton } from '../MenuButton/MenuButton'; +import { I18nContext } from '../RainbowKitProvider/I18nContext'; +import { useRainbowKitChains } from '../RainbowKitProvider/RainbowKitChainContext'; +import { Text } from '../Text/Text'; + +interface ChainProps { + chainId: number; + currentChainId: number; + switchChain: ReturnType<typeof useSwitchChain>['switchChain']; + chainIconSize: BoxProps['height']; + name: string | undefined; + isLoading: boolean; + iconBackground: string | undefined; + src: string | AsyncImageSrc | undefined | null; + idx: number; +} + +const Chain = ({ + chainId, + currentChainId, + switchChain, + chainIconSize, + isLoading, + src, + name, + iconBackground, + idx, +}: ChainProps) => { + const mobile = isMobile(); + const { i18n } = useContext(I18nContext); + const rainbowkitChains = useRainbowKitChains(); + + const isCurrentChain = currentChainId === chainId; + + return ( + <Fragment> + <MenuButton + currentlySelected={isCurrentChain} + onClick={isCurrentChain ? undefined : () => switchChain({ chainId })} + testId={`chain-option-${chainId}`} + > + <Box fontFamily="body" fontSize="16" fontWeight="bold"> + <Box + alignItems="center" + display="flex" + flexDirection="row" + justifyContent="space-between" + > + <Box + alignItems="center" + display="flex" + flexDirection="row" + gap="4" + height={chainIconSize} + > + {src && ( + <Box height="full" marginRight="8"> + <AsyncImage + alt={name} + background={iconBackground} + borderRadius="full" + height={chainIconSize} + src={src} + width={chainIconSize} + testId={`chain-option-${chainId}-icon`} + /> + </Box> + )} + <div>{name ?? name}</div> + </Box> + {isCurrentChain && ( + <Box + alignItems="center" + display="flex" + flexDirection="row" + marginRight="6" + > + <Text color="accentColorForeground" size="14" weight="medium"> + {i18n.t('chains.connected')} + </Text> + <Box + background="connectionIndicator" + borderColor="selectedOptionBorder" + borderRadius="full" + borderStyle="solid" + borderWidth="1" + height="8" + marginLeft="8" + width="8" + /> + </Box> + )} + {isLoading && ( + <Box + alignItems="center" + display="flex" + flexDirection="row" + marginRight="6" + > + <Text color="modalText" size="14" weight="medium"> + {i18n.t('chains.confirm')} + </Text> + <Box + background="standby" + borderRadius="full" + height="8" + marginLeft="8" + width="8" + /> + </Box> + )} + </Box> + </Box> + </MenuButton> + {mobile && idx < rainbowkitChains.length - 1 && ( + <Box background="generalBorderDim" height="1" marginX="8" /> + )} + </Fragment> + ); +}; + +export default Chain; diff --git a/packages/rainbowkit/src/components/ChainModal/ChainModal.test.tsx b/packages/rainbowkit/src/components/ChainModal/ChainModal.test.tsx index cb81fed36d..73cb3e368b 100644 --- a/packages/rainbowkit/src/components/ChainModal/ChainModal.test.tsx +++ b/packages/rainbowkit/src/components/ChainModal/ChainModal.test.tsx @@ -1,28 +1,11 @@ import user from '@testing-library/user-event'; import React from 'react'; import { describe, expect, it } from 'vitest'; -import { arbitrum, goerli, mainnet, optimism } from 'wagmi/chains'; +import { arbitrum, mainnet, optimism } from 'wagmi/chains'; import { renderWithProviders } from '../../../test/'; -import { Chain } from '../RainbowKitProvider/RainbowKitChainContext'; import { ChainModal } from './ChainModal'; describe('<ChainModal />', () => { - it('Unsupported chain', async () => { - const { findByText } = renderWithProviders( - <ChainModal onClose={() => {}} open />, - { - chains: [mainnet], // only supports mainnet - mock: true, - mockOptions: { chainId: goerli.id }, // is connected to goerli - }, - ); - expect( - await findByText( - 'Wrong network detected, switch or disconnect to continue.', - ), - ).toBeVisible(); - }); - it('Show current connected chain indicator', async () => { const modal = renderWithProviders(<ChainModal onClose={() => {}} open />, { mock: true, @@ -35,31 +18,28 @@ describe('<ChainModal />', () => { expect(mainnetOption).toBeDisabled(); }); - it('List chains provided in <RainbowKitProvider />', async () => { + it('List chains from <RainbowKitProvider />', async () => { const modal = renderWithProviders(<ChainModal onClose={() => {}} open />, { chains: [mainnet, arbitrum, optimism], mock: true, - props: { chains: [optimism] }, }); + const mainnetOption = await modal.findByTestId( + `rk-chain-option-${optimism.id}`, + ); + const arbitrumOption = await modal.findByTestId( + `rk-chain-option-${optimism.id}`, + ); const optimismOption = await modal.findByTestId( `rk-chain-option-${optimism.id}`, ); - // optimism SHOULD be displayed - // as it was the only passed to RainbowKitProvider + expect(mainnetOption).toBeInTheDocument(); + expect(arbitrumOption).toBeInTheDocument(); expect(optimismOption).toBeInTheDocument(); - - // mainnet & arb SHOULD NOT be displayed - // even tho they're supported they were not passed to RainbowKitProvider - expect( - modal.queryByTestId(`rk-chain-option-${mainnet.id}`), - ).not.toBeInTheDocument(); - expect( - modal.queryByTestId(`rk-chain-option-${arbitrum.id}`), - ).not.toBeInTheDocument(); }); + // Wagmi can also switch chains without having your wallet connected it('Can switch chains', async () => { let onCloseGotCalled = false; const modal = renderWithProviders( @@ -86,76 +66,21 @@ describe('<ChainModal />', () => { expect(onCloseGotCalled).toBe(true); }); - it('Just closes on switch error (user rejected, or other)', async () => { - let onCloseGotCalled = false; - const modal = renderWithProviders( - <ChainModal onClose={() => (onCloseGotCalled = true)} open />, - { - mock: true, - mockOptions: { - chainId: mainnet.id, - flags: { failSwitchChain: true, isAuthorized: true }, - }, - }, - ); - const mainnetOption = await modal.findByTestId( - `rk-chain-option-${mainnet.id}`, - ); - const arbitrumOption = await modal.findByTestId( - `rk-chain-option-${arbitrum.id}`, - ); - - expect(mainnetOption).toHaveTextContent('Connected'); - expect(arbitrumOption).not.toHaveTextContent('Connected'); - - await user.click(arbitrumOption); - - expect(mainnetOption).toHaveTextContent('Connected'); - expect(arbitrumOption).not.toHaveTextContent('Connected'); // keep not having it lmao - - expect(onCloseGotCalled).toBe(true); - }); - - it(`Handles wallets that don't support switching`, async () => { - const modal = renderWithProviders(<ChainModal onClose={() => {}} open />, { - mock: true, - mockOptions: { - flags: { isAuthorized: true, noSwitchChain: true }, - }, - }); - - expect(modal.baseElement).toHaveTextContent( - 'Your wallet does not support switching networks from', - ); - }); - it('Closes on close button press', async () => { let onCloseGotCalled = false; const modal = renderWithProviders( <ChainModal onClose={() => (onCloseGotCalled = true)} open />, - { - mock: true, - }, ); const closeButton = await modal.findByLabelText('Close'); + await user.click(closeButton); expect(onCloseGotCalled).toBe(true); }); - it('Custom chain metadata', async () => { - const customChains: Chain[] = [ - { - ...mainnet, - name: 'Custom Chain', - iconUrl: 'https://example.com/icon.svg', - iconBackground: '#fff', - }, - ]; - + it('Custom chain metadata passed from <RainbowKitProvider>', async () => { const modal = renderWithProviders(<ChainModal onClose={() => {}} open />, { - chains: customChains, - mock: true, + chains: [mainnet], }); const mainnetOption = await modal.findByTestId( `rk-chain-option-${mainnet.id}`, @@ -167,7 +92,7 @@ describe('<ChainModal />', () => { ); expect(mainnetOptionIcon).toHaveAttribute( 'style', - 'background: rgb(255, 255, 255);', + 'background: rgb(72, 76, 80);', ); }); }); diff --git a/packages/rainbowkit/src/components/ChainModal/ChainModal.tsx b/packages/rainbowkit/src/components/ChainModal/ChainModal.tsx index cfc703fd2f..be3af21fca 100644 --- a/packages/rainbowkit/src/components/ChainModal/ChainModal.tsx +++ b/packages/rainbowkit/src/components/ChainModal/ChainModal.tsx @@ -1,17 +1,17 @@ -import React, { Fragment, useContext } from 'react'; -import { useDisconnect, useNetwork, useSwitchNetwork } from 'wagmi'; +import React, { useContext, useState } from 'react'; +import { useChainId, useDisconnect, useSwitchChain } from 'wagmi'; +import { useConfig } from 'wagmi'; import { isMobile } from '../../utils/isMobile'; -import { AsyncImage } from '../AsyncImage/AsyncImage'; import { Box } from '../Box/Box'; import { CloseButton } from '../CloseButton/CloseButton'; import { Dialog } from '../Dialog/Dialog'; import { DialogContent } from '../Dialog/DialogContent'; import { DisconnectSqIcon } from '../Icons/DisconnectSq'; import { MenuButton } from '../MenuButton/MenuButton'; -import { AppContext } from '../RainbowKitProvider/AppContext'; import { I18nContext } from '../RainbowKitProvider/I18nContext'; import { useRainbowKitChains } from '../RainbowKitProvider/RainbowKitChainContext'; import { Text } from '../Text/Text'; +import Chain from './Chain'; import { DesktopScrollClassName, MobileScrollClassName, @@ -23,11 +23,23 @@ export interface ChainModalProps { } export function ChainModal({ onClose, open }: ChainModalProps) { - const { chain: activeChain } = useNetwork(); - const { chains, pendingChainId, reset, switchNetwork } = useSwitchNetwork({ - onSettled: () => { - reset(); // reset mutation variables (eg. pendingChainId, error) - onClose(); + const chainId = useChainId(); + const { chains } = useConfig(); + const [pendingChainId, setPendingChainId] = useState<number | null>(null); + const { switchChain } = useSwitchChain({ + mutation: { + onMutate: ({ chainId: _chainId }) => { + setPendingChainId(_chainId); + }, + onSuccess: () => { + if (pendingChainId) setPendingChainId(null); + }, + onError: () => { + if (pendingChainId) setPendingChainId(null); + }, + onSettled: () => { + onClose(); + }, }, }); @@ -36,14 +48,11 @@ export function ChainModal({ onClose, open }: ChainModalProps) { const { disconnect } = useDisconnect(); const titleId = 'rk_chain_modal_title'; const mobile = isMobile(); - const unsupportedChain = activeChain?.unsupported ?? false; + const isCurrentChainSupported = chains.some((chain) => chain.id === chainId); const chainIconSize = mobile ? '36' : '28'; - - const { appName } = useContext(AppContext); - const rainbowkitChains = useRainbowKitChains(); - if (!activeChain || !activeChain?.id) { + if (!chainId) { return null; } @@ -70,7 +79,7 @@ export function ChainModal({ onClose, open }: ChainModalProps) { </Box> <CloseButton onClose={onClose} /> </Box> - {unsupportedChain && ( + {!isCurrentChainSupported && ( <Box marginX="8" textAlign={mobile ? 'center' : 'left'}> <Text color="modalTextSecondary" size="14" weight="medium"> {i18n.t('chains.wrong_network')} @@ -85,136 +94,25 @@ export function ChainModal({ onClose, open }: ChainModalProps) { padding="2" paddingBottom="16" > - {switchNetwork ? ( - rainbowkitChains.map( - ({ iconBackground, iconUrl, id, name }, idx) => { - const chain = chains.find((c) => c.id === id); - if (!chain) return null; - - const isCurrentChain = chain.id === activeChain?.id; - const switching = - !isCurrentChain && chain.id === pendingChainId; - - return ( - <Fragment key={chain.id}> - <MenuButton - currentlySelected={isCurrentChain} - onClick={ - isCurrentChain - ? undefined - : () => switchNetwork(chain.id) - } - testId={`chain-option-${chain.id}`} - > - <Box fontFamily="body" fontSize="16" fontWeight="bold"> - <Box - alignItems="center" - display="flex" - flexDirection="row" - justifyContent="space-between" - > - <Box - alignItems="center" - display="flex" - flexDirection="row" - gap="4" - height={chainIconSize} - > - {iconUrl && ( - <Box height="full" marginRight="8"> - <AsyncImage - alt={name ?? chain.name} - background={iconBackground} - borderRadius="full" - height={chainIconSize} - src={iconUrl} - width={chainIconSize} - testId={`chain-option-${chain.id}-icon`} - /> - </Box> - )} - <div>{name ?? chain.name}</div> - </Box> - {isCurrentChain && ( - <Box - alignItems="center" - display="flex" - flexDirection="row" - marginRight="6" - > - <Text - color="accentColorForeground" - size="14" - weight="medium" - > - {i18n.t('chains.connected')} - </Text> - <Box - background="connectionIndicator" - borderColor="selectedOptionBorder" - borderRadius="full" - borderStyle="solid" - borderWidth="1" - height="8" - marginLeft="8" - width="8" - /> - </Box> - )} - {switching && ( - <Box - alignItems="center" - display="flex" - flexDirection="row" - marginRight="6" - > - <Text - color="modalText" - size="14" - weight="medium" - > - {i18n.t('chains.confirm')} - </Text> - <Box - background="standby" - borderRadius="full" - height="8" - marginLeft="8" - width="8" - /> - </Box> - )} - </Box> - </Box> - </MenuButton> - {mobile && idx < rainbowkitChains.length - 1 && ( - <Box - background="generalBorderDim" - height="1" - marginX="8" - /> - )} - </Fragment> - ); - }, - ) - ) : ( - <Box - background="generalBorder" - borderRadius="menuButton" - paddingX="18" - paddingY="12" - > - <Text color="modalText" size="14" weight="medium"> - {appName - ? i18n.t('chains.switching_not_supported', { - appName, - }) - : i18n.t('chains.switching_not_supported_fallback')} - </Text> - </Box> + {rainbowkitChains.map( + ({ iconBackground, iconUrl, id, name }, idx) => { + return ( + <Chain + key={id} + chainId={id} + currentChainId={chainId} + switchChain={switchChain} + chainIconSize={chainIconSize} + isLoading={pendingChainId === id} + src={iconUrl} + name={name} + iconBackground={iconBackground} + idx={idx} + /> + ); + }, )} - {unsupportedChain && ( + {!isCurrentChainSupported && ( <> <Box background="generalBorderDim" height="1" marginX="8" /> <MenuButton diff --git a/packages/rainbowkit/src/components/ConnectButton/ConnectButton.test.tsx b/packages/rainbowkit/src/components/ConnectButton/ConnectButton.test.tsx index 9742a02d04..99c5d29541 100644 --- a/packages/rainbowkit/src/components/ConnectButton/ConnectButton.test.tsx +++ b/packages/rainbowkit/src/components/ConnectButton/ConnectButton.test.tsx @@ -9,6 +9,7 @@ import { ConnectButton } from './ConnectButton'; describe('<ConnectButton />', () => { const renderTextButton = (locale?: Locale) => { const options = { + mock: true, props: { chains: [mainnet], ...(locale ? { locale } : {}), diff --git a/packages/rainbowkit/src/components/ConnectButton/ConnectButtonRenderer.tsx b/packages/rainbowkit/src/components/ConnectButton/ConnectButtonRenderer.tsx index 93c3cb2d0b..bb1ce038f0 100644 --- a/packages/rainbowkit/src/components/ConnectButton/ConnectButtonRenderer.tsx +++ b/packages/rainbowkit/src/components/ConnectButton/ConnectButtonRenderer.tsx @@ -1,5 +1,5 @@ import React, { ReactNode, useContext } from 'react'; -import { useAccount, useBalance, useNetwork } from 'wagmi'; +import { useAccount, useBalance, useConfig } from 'wagmi'; import { normalizeResponsiveValue } from '../../css/sprinkles.css'; import { useIsMounted } from '../../hooks/useIsMounted'; import { useMainnetEnsAvatar } from '../../hooks/useMainnetEnsAvatar'; @@ -66,17 +66,18 @@ export function ConnectButtonRenderer({ const ensName = useMainnetEnsName(address); const ensAvatar = useMainnetEnsAvatar(ensName); + const { chainId } = useAccount(); + const { chains: wagmiChains } = useConfig(); + const isCurrentChainSupported = wagmiChains.some( + (chain) => chain.id === chainId, + ); + const rainbowkitChainsById = useRainbowKitChainsById(); const authenticationStatus = useAuthenticationStatus() ?? undefined; - - const { chain: activeChain } = useNetwork(); - const rainbowKitChain = activeChain - ? rainbowkitChainsById[activeChain.id] - : undefined; + const rainbowKitChain = chainId ? rainbowkitChainsById[chainId] : undefined; const chainName = rainbowKitChain?.name ?? undefined; const chainIconUrl = rainbowKitChain?.iconUrl ?? undefined; const chainIconBackground = rainbowKitChain?.iconBackground ?? undefined; - const resolvedChainIconUrl = useAsyncImage(chainIconUrl); const showRecentTransactions = useContext(ShowRecentTransactionsContext); @@ -125,14 +126,14 @@ export function ConnectButtonRenderer({ : undefined, accountModalOpen, authenticationStatus, - chain: activeChain + chain: chainId ? { hasIcon: Boolean(chainIconUrl), iconBackground: chainIconBackground, iconUrl: resolvedChainIconUrl, - id: activeChain.id, - name: chainName ?? activeChain.name, - unsupported: activeChain.unsupported, + id: chainId, + name: chainName, + unsupported: !isCurrentChainSupported, } : undefined, chainModalOpen, diff --git a/packages/rainbowkit/src/components/ConnectButton/formatENS.ts b/packages/rainbowkit/src/components/ConnectButton/formatENS.ts index 8c19f91210..f6b7b7df89 100644 --- a/packages/rainbowkit/src/components/ConnectButton/formatENS.ts +++ b/packages/rainbowkit/src/components/ConnectButton/formatENS.ts @@ -1,4 +1,8 @@ -export function formatENS(name: string): string { +import { GetEnsNameReturnType } from 'viem'; + +export function formatENS(name: GetEnsNameReturnType): string { + if (!name) return ''; + const parts = name.split('.'); const last = parts.pop(); if (parts.join('.').length > 24) { diff --git a/packages/rainbowkit/src/components/ConnectModal/ConnectModal.test.tsx b/packages/rainbowkit/src/components/ConnectModal/ConnectModal.test.tsx index c26548d853..32d2d0c88c 100644 --- a/packages/rainbowkit/src/components/ConnectModal/ConnectModal.test.tsx +++ b/packages/rainbowkit/src/components/ConnectModal/ConnectModal.test.tsx @@ -9,6 +9,7 @@ import { ConnectModal } from './ConnectModal'; describe('<ConnectModal />', () => { const renderHeaderLabelModal = async (locale?: Locale) => { const options = { + mock: true, props: { chains: [mainnet], ...(locale ? { locale } : {}), diff --git a/packages/rainbowkit/src/components/ConnectModal/ConnectModal.tsx b/packages/rainbowkit/src/components/ConnectModal/ConnectModal.tsx index 8427a00ef5..45819ff383 100644 --- a/packages/rainbowkit/src/components/ConnectModal/ConnectModal.tsx +++ b/packages/rainbowkit/src/components/ConnectModal/ConnectModal.tsx @@ -15,9 +15,10 @@ export function ConnectModal({ onClose, open }: ConnectModalProps) { const titleId = 'rk_connect_title'; const connectionStatus = useConnectionStatus(); - // when a user cancels or dismisses the SignIn modal for SIWE, disconnect and call onClose const { disconnect } = useDisconnect(); const { isConnecting } = useAccount(); + + // when a user cancels or dismisses the SignIn modal for SIWE, disconnect and call onClose const onAuthCancel = React.useCallback(() => { onClose(); disconnect(); diff --git a/packages/rainbowkit/src/components/ConnectOptions/ConnectDetails.tsx b/packages/rainbowkit/src/components/ConnectOptions/ConnectDetails.tsx index 7cbfeab368..bb097552a6 100644 --- a/packages/rainbowkit/src/components/ConnectOptions/ConnectDetails.tsx +++ b/packages/rainbowkit/src/components/ConnectOptions/ConnectDetails.tsx @@ -71,7 +71,10 @@ export function GetDetail({ getWalletDownload: (walletId: string) => void; compactModeEnabled: boolean; }) { - const wallets = useWalletConnectors(); + const wallets = useWalletConnectors().filter( + (wallet) => wallet.isRainbowKitConnector, + ); + const shownWallets = wallets.splice(0, 5); const { i18n } = useContext(I18nContext); @@ -210,8 +213,9 @@ export function ConnectDetail({ qrCode, ready, showWalletConnectModal, + getDesktopUri, } = wallet; - const getDesktopDeepLink = wallet.desktop?.getUri; + const isDesktopDeepLinkAvailable = !!getDesktopUri; const safari = isSafari(); const { i18n } = useContext(I18nContext); @@ -222,6 +226,11 @@ export function ConnectDetail({ downloadUrls?.qrCode && !!wallet.desktopDownloadUrl; const hasQrCode = qrCode && qrCodeUri; + const onDesktopUri = async () => { + const uri = await getDesktopUri?.(); + window.open(uri, safari ? '_blank' : '_self'); + }; + const secondaryAction: { description: string; label: string; @@ -299,7 +308,12 @@ export function ConnectDetail({ gap="8" > <Box borderRadius="10" height={LOGO_SIZE} overflow="hidden"> - <AsyncImage height={LOGO_SIZE} src={iconUrl} width={LOGO_SIZE} /> + <AsyncImage + useAsImage={!wallet.isRainbowKitConnector} + height={LOGO_SIZE} + src={iconUrl} + width={LOGO_SIZE} + /> </Box> <Box alignItems="center" @@ -359,16 +373,10 @@ export function ConnectDetail({ {connectionError ? ( <ActionButton label={i18n.t('connect.secondary_action.retry.label')} - onClick={ - getDesktopDeepLink - ? async () => { - const uri = await getDesktopDeepLink(); - window.open(uri, safari ? '_blank' : '_self'); - } - : () => { - reconnect(wallet); - } - } + onClick={async () => { + if (isDesktopDeepLinkAvailable) onDesktopUri(); + reconnect(wallet); + }} /> ) : ( <Box color="modalTextSecondary"> diff --git a/packages/rainbowkit/src/components/ConnectOptions/DesktopOptions.tsx b/packages/rainbowkit/src/components/ConnectOptions/DesktopOptions.tsx index 27af2428b2..387aa38dae 100644 --- a/packages/rainbowkit/src/components/ConnectOptions/DesktopOptions.tsx +++ b/packages/rainbowkit/src/components/ConnectOptions/DesktopOptions.tsx @@ -8,7 +8,6 @@ import React, { import { touchableStyles } from '../../css/touchableStyles'; import { isSafari } from '../../utils/browsers'; import { groupBy } from '../../utils/groupBy'; -import { addLatestWalletId } from '../../wallets/latestWalletId'; import { WalletConnector, useWalletConnectors, @@ -29,6 +28,8 @@ import { } from '../RainbowKitProvider/ModalSizeContext'; import { WalletButtonContext } from '../RainbowKitProvider/WalletButtonContext'; import { Text } from '../Text/Text'; + +import { addLatestWalletId } from '../../wallets/latestWalletId'; import { ConnectDetail, DownloadDetail, @@ -58,7 +59,6 @@ export enum WalletStep { export function DesktopOptions({ onClose }: { onClose: () => void }) { const titleId = 'rk_connect_title'; - const safari = isSafari(); const [selectedOptionId, setSelectedOptionId] = useState< string | undefined >(); @@ -70,12 +70,15 @@ export function DesktopOptions({ onClose }: { onClose: () => void }) { const compactModeEnabled = modalSize === ModalSizeOptions.COMPACT; const { disclaimer: Disclaimer } = useContext(AppContext); const { i18n } = useContext(I18nContext); + const safari = isSafari(); const initialized = useRef(false); const { connector } = useContext(WalletButtonContext); - const wallets = useWalletConnectors() + const mergeEIP6963WithRkConnectors = true; + + const wallets = useWalletConnectors(mergeEIP6963WithRkConnectors) .filter((wallet) => wallet.ready || !!wallet.extensionDownloadUrl) .sort((a, b) => a.groupIndex - b.groupIndex); @@ -87,6 +90,7 @@ export function DesktopOptions({ onClose }: { onClose: () => void }) { 'Popular', 'More', 'Others', + 'Installed', ]; // If a user hasn't installed the extension we will get the @@ -105,70 +109,54 @@ export function DesktopOptions({ onClose }: { onClose: () => void }) { wallet?.connect?.()?.catch(() => { setConnectionError(true); }); - - const getDesktopDeepLink = wallet.desktop?.getUri; - if (getDesktopDeepLink) { - // if desktop deep link, wait for uri - setTimeout(async () => { - const uri = await getDesktopDeepLink(); - window.open(uri, safari ? '_blank' : '_self'); - }, 0); - } } }; - const selectWallet = (wallet: WalletConnector) => { - // We still want to get the latest wallet id to show connected - // green badge on our custom WalletButton API - addLatestWalletId(wallet.id); + const onDesktopUri = async (wallet: WalletConnector) => { + const sWallet = wallets.find((w) => wallet.id === w.id); - connectToWallet(wallet); - setSelectedOptionId(wallet.id); + if (!sWallet?.getDesktopUri) return; - if (wallet.ready) { - // We need to guard against "onConnecting" callbacks being fired - // multiple times since connector instances can be shared between - // wallets. Ideally wagmi would let us scope the callback to the - // specific "connect" call, but this will work in the meantime. - let callbackFired = false; + setTimeout(async () => { + const uri = await sWallet?.getDesktopUri?.(); + if (uri) window.open(uri, safari ? '_blank' : '_self'); + }, 0); + }; - wallet?.onConnecting?.(async () => { - if (callbackFired) return; - callbackFired = true; + const onQrCode = async (wallet: WalletConnector) => { + const sWallet = wallets.find((w) => wallet.id === w.id); - const sWallet = wallets.find((w) => wallet.id === w.id); - const uri = await sWallet?.qrCode?.getUri(); + const uri = await sWallet?.getQrCodeUri?.(); - setQrCodeUri(uri); + setQrCodeUri(uri); - // This timeout prevents the UI from flickering if connection is instant, - // otherwise users will see a flash of the "connecting" state. - setTimeout( - () => { - setSelectedWallet(sWallet); - changeWalletStep(WalletStep.Connect); - }, - uri ? 0 : 50, - ); + // This timeout prevents the UI from flickering if connection is instant, + // otherwise users will see a flash of the "connecting" state. + setTimeout( + () => { + setSelectedWallet(sWallet); + changeWalletStep(WalletStep.Connect); + }, + uri ? 0 : 50, + ); + }; - // If the WalletConnect request is rejected, restart the wallet - // selection flow to create a new connection with a new QR code - const provider = await sWallet?.connector.getProvider(); - const connection = provider?.signer?.connection; - if (connection?.on && connection?.off) { - const handleConnectionClose = () => { - removeHandlers(); - selectWallet(wallet); - }; - const removeHandlers = () => { - connection.off('close', handleConnectionClose); - connection.off('open', removeHandlers); - }; - connection.on('close', handleConnectionClose); - connection.on('open', removeHandlers); - } - }); - } else { + const selectWallet = async (wallet: WalletConnector) => { + // We still want to get the latest wallet id to show connected + // green badge on our custom WalletButton API + addLatestWalletId(wallet.id); + + // This ensures that we listen to the provider.once("display_uri") + // before connecting to the wallet + if (wallet.ready) { + onQrCode(wallet); + onDesktopUri(wallet); + } + + connectToWallet(wallet); + setSelectedOptionId(wallet.id); + + if (!wallet.ready) { setSelectedWallet(wallet); changeWalletStep( wallet?.extensionDownloadUrl @@ -426,7 +414,11 @@ export function DesktopOptions({ onClose }: { onClose: () => void }) { {groupName ? ( <Box marginBottom="8" marginTop="16" marginX="6"> <Text - color="modalTextSecondary" + color={ + groupName === 'Installed' + ? 'accentColor' + : 'modalTextSecondary' + } size="14" weight="bold" > @@ -451,6 +443,7 @@ export function DesktopOptions({ onClose }: { onClose: () => void }) { ready={wallet.ready} recent={wallet.recent} testId={`wallet-option-${wallet.id}`} + isRainbowKitConnector={wallet.isRainbowKitConnector} /> ); })} diff --git a/packages/rainbowkit/src/components/ConnectOptions/MobileOptions.css.ts b/packages/rainbowkit/src/components/ConnectOptions/MobileOptions.css.ts index 5be65281ea..a365981621 100644 --- a/packages/rainbowkit/src/components/ConnectOptions/MobileOptions.css.ts +++ b/packages/rainbowkit/src/components/ConnectOptions/MobileOptions.css.ts @@ -24,7 +24,7 @@ export const rotatingBorder = style({ animation: `${snakeBorder} 1s linear infinite`, strokeDasharray: '98 196', // Adjusted based on new perimeter calculation fill: 'none', - strokeLineCap: 'round', + strokeLinecap: 'round', strokeWidth: '4', // Reduced stroke width for better appearance on a smaller spinner }); diff --git a/packages/rainbowkit/src/components/ConnectOptions/MobileOptions.tsx b/packages/rainbowkit/src/components/ConnectOptions/MobileOptions.tsx index d82024b51f..276b3ba651 100644 --- a/packages/rainbowkit/src/components/ConnectOptions/MobileOptions.tsx +++ b/packages/rainbowkit/src/components/ConnectOptions/MobileOptions.tsx @@ -67,69 +67,62 @@ export function WalletButton({ }) { const { connect, - connector, iconBackground, iconUrl, id, - mobile, name, - onConnecting, + getMobileUri, ready, shortName, + showWalletConnectModal, } = wallet; - const getMobileUri = mobile?.getUri; + const coolModeRef = useCoolMode(iconUrl); const initialized = useRef(false); const { i18n } = useContext(I18nContext); const onConnect = useCallback(async () => { - if (id === 'walletConnect') onClose?.(); - connect?.()?.catch(() => {}); - - // We need to guard against "onConnecting" callbacks being fired - // multiple times since connector instances can be shared between - // wallets. Ideally wagmi would let us scope the callback to the - // specific "connect" call, but this will work in the meantime. - let callbackFired = false; - - onConnecting?.(async () => { - if (callbackFired) return; - callbackFired = true; - - if (getMobileUri) { - const mobileUri = await getMobileUri(); - - if (connector.id === 'walletConnect') { - // In Web3Modal, an equivalent setWalletConnectDeepLink routine gets called after - // successful connection and then the universal provider uses it on requests. We call - // it upon onConnecting; this now needs to be called for both v1 and v2 Wagmi connectors. - // The `connector` type refers to Wagmi connectors, as opposed to RainbowKit wallet connectors. - // https://github.com/WalletConnect/web3modal/blob/27f2b1fa2509130c5548061816c42d4596156e81/packages/core/src/utils/CoreUtil.ts#L72 - setWalletConnectDeepLink({ mobileUri, name }); - } + const onMobileUri = async () => { + const mobileUri = await getMobileUri?.(); - if (mobileUri.startsWith('http')) { - // Workaround for https://github.com/rainbow-me/rainbowkit/issues/524. - // Using 'window.open' causes issues on iOS in non-Safari browsers and - // WebViews where a blank tab is left behind after connecting. - // This is especially bad in some WebView scenarios (e.g. following a - // link from Twitter) where the user doesn't have any mechanism for - // closing the blank tab. - // For whatever reason, links with a target of "_blank" don't suffer - // from this problem, and programmatically clicking a detached link - // element with the same attributes also avoids the issue. - const link = document.createElement('a'); - link.href = mobileUri; - link.target = '_blank'; - link.rel = 'noreferrer noopener'; - link.click(); - } else { - window.location.href = mobileUri; - } + if (!mobileUri) return; + + if (mobileUri) { + setWalletConnectDeepLink({ mobileUri, name }); + } + + if (mobileUri.startsWith('http')) { + // Workaround for https://github.com/rainbow-me/rainbowkit/issues/524. + // Using 'window.open' causes issues on iOS in non-Safari browsers and + // WebViews where a blank tab is left behind after connecting. + // This is especially bad in some WebView scenarios (e.g. following a + // link from Twitter) where the user doesn't have any mechanism for + // closing the blank tab. + // For whatever reason, links with a target of "_blank" don't suffer + // from this problem, and programmatically clicking a detached link + // element with the same attributes also avoids the issue. + const link = document.createElement('a'); + link.href = mobileUri; + link.target = '_blank'; + link.rel = 'noreferrer noopener'; + link.click(); + } else { + window.location.href = mobileUri; } - }); - }, [connector, connect, getMobileUri, onConnecting, onClose, name, id]); + }; + + if (id !== 'walletConnect') onMobileUri(); + + // If the id is "walletConnect" then "showWalletConnectModal" will always be true + if (showWalletConnectModal) { + showWalletConnectModal(); + onClose?.(); + return; + } + + connect?.(); + }, [connect, getMobileUri, showWalletConnectModal, onClose, name, id]); useEffect(() => { // When using `reactStrictMode: true` in development mode the useEffect hook @@ -212,7 +205,9 @@ enum MobileWalletStep { export function MobileOptions({ onClose }: { onClose: () => void }) { const titleId = 'rk_connect_title'; - const wallets = useWalletConnectors(); + const wallets = useWalletConnectors().filter( + (wallet) => wallet.isRainbowKitConnector, + ); const { disclaimer: Disclaimer, learnMoreUrl } = useContext(AppContext); let headerLabel = null; diff --git a/packages/rainbowkit/src/components/ModalSelection/ModalSelection.tsx b/packages/rainbowkit/src/components/ModalSelection/ModalSelection.tsx index 13bde6ff17..034c093f4d 100644 --- a/packages/rainbowkit/src/components/ModalSelection/ModalSelection.tsx +++ b/packages/rainbowkit/src/components/ModalSelection/ModalSelection.tsx @@ -17,6 +17,7 @@ type Props = { iconUrl: string | (() => Promise<string>); iconBackground?: string; testId?: string; + isRainbowKitConnector?: boolean; }; export const ModalSelection = ({ @@ -29,6 +30,7 @@ export const ModalSelection = ({ ready, recent, testId, + isRainbowKitConnector, ...urlProps }: Props) => { const coolModeRef = useCoolMode(iconUrl); @@ -88,14 +90,25 @@ export const ModalSelection = ({ <Box alignItems="center" display="flex" flexDirection="row" gap="12"> <AsyncImage background={iconBackground} - {...(isMouseOver ? {} : { borderColor: 'actionButtonBorder' })} + {...(!isMouseOver && isRainbowKitConnector + ? { borderColor: 'actionButtonBorder' } + : {})} + // We want to use pure <img /> element + // to avoid bugs with eip6963 icons as sometimes + // background: url(...) does not work + useAsImage={!isRainbowKitConnector} borderRadius="6" height="28" src={iconUrl} width="28" /> <Box> - <Box style={{ marginTop: recent ? -2 : undefined }}>{name}</Box> + <Box + style={{ marginTop: recent ? -2 : undefined }} + maxWidth="200" + > + {name} + </Box> {recent && ( <Text color={ diff --git a/packages/rainbowkit/src/components/ProfileDetails/ProfileDetails.tsx b/packages/rainbowkit/src/components/ProfileDetails/ProfileDetails.tsx index 666203ba0d..086249159e 100644 --- a/packages/rainbowkit/src/components/ProfileDetails/ProfileDetails.tsx +++ b/packages/rainbowkit/src/components/ProfileDetails/ProfileDetails.tsx @@ -1,5 +1,7 @@ import React, { useCallback, useContext, useEffect, useState } from 'react'; -import { useAccount, useBalance, useEnsAvatar, useEnsName } from 'wagmi'; +import { GetEnsNameReturnType } from 'viem'; +import { GetEnsAvatarReturnType } from 'viem/actions'; +import { useAccount, useBalance } from 'wagmi'; import { isMobile } from '../../utils/isMobile'; import { Avatar } from '../Avatar/Avatar'; import { Box } from '../Box/Box'; @@ -18,8 +20,8 @@ import { ProfileDetailsAction } from './ProfileDetailsAction'; interface ProfileDetailsProps { address: ReturnType<typeof useAccount>['address']; - ensAvatar: ReturnType<typeof useEnsAvatar>['data']; - ensName: ReturnType<typeof useEnsName>['data']; + ensAvatar: GetEnsAvatarReturnType | undefined; + ensName: GetEnsNameReturnType | undefined; onClose: () => void; onDisconnect: () => void; } @@ -115,7 +117,7 @@ export function ProfileDetails({ {accountName} </Text> </Box> - {balanceData && ( + {!!balanceData && ( <Box textAlign="center"> <Text as="h1" diff --git a/packages/rainbowkit/src/components/RainbowKitProvider/AuthenticationContext.tsx b/packages/rainbowkit/src/components/RainbowKitProvider/AuthenticationContext.tsx index 31bff84279..dc306d8771 100644 --- a/packages/rainbowkit/src/components/RainbowKitProvider/AuthenticationContext.tsx +++ b/packages/rainbowkit/src/components/RainbowKitProvider/AuthenticationContext.tsx @@ -1,13 +1,12 @@ import React, { ReactNode, createContext, - useCallback, useContext, useEffect, useMemo, useRef, } from 'react'; -import { ConnectorData, useAccount } from 'wagmi'; +import { useAccount, useAccountEffect } from 'wagmi'; export type AuthenticationStatus = | 'loading' @@ -56,7 +55,9 @@ export function RainbowKitAuthenticationProvider<Message = unknown>({ }: RainbowKitAuthenticationProviderProps<Message>) { // When the wallet is disconnected, we want to tell the auth // adapter that the user session is no longer active. - const { connector } = useAccount({ + const { connector } = useAccount(); + + useAccountEffect({ onDisconnect: () => { adapter.signOut(); }, @@ -78,28 +79,30 @@ export function RainbowKitAuthenticationProvider<Message = unknown>({ } }, [status, adapter, isDisconnected]); - const handleChangedAccount = useCallback( - ({ account }: ConnectorData) => { - // Only if account is changed then signOut - if (account) adapter.signOut(); - }, - [adapter], - ); + const handleChangedAccount = () => { + adapter.signOut(); + }; // Wait for user authentication before listening to "change" event. // Avoid listening immediately after wallet connection due to potential SIWE authentication delay. // Ensure to turn off the "change" event listener for cleanup. + // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation> useEffect(() => { - if (connector && status === 'authenticated') { + // Wagmi renders emitter's partially on page load. We wanna make sure + // the event emitters gets updated before proceeding + if ( + typeof connector?.emitter?.on === 'function' && + status === 'authenticated' + ) { // Attach the event listener when status is 'authenticated' - connector.on('change', handleChangedAccount); + connector.emitter.on('change', handleChangedAccount); // Cleanup function to remove the event listener return () => { - connector?.off('change', handleChangedAccount); + connector.emitter.off('change', handleChangedAccount); }; } - }, [connector, status, handleChangedAccount]); + }, [connector?.emitter, status]); return ( <AuthenticationContext.Provider diff --git a/packages/rainbowkit/src/components/RainbowKitProvider/ModalContext.tsx b/packages/rainbowkit/src/components/RainbowKitProvider/ModalContext.tsx index 10c25ed59a..bb7916d826 100644 --- a/packages/rainbowkit/src/components/RainbowKitProvider/ModalContext.tsx +++ b/packages/rainbowkit/src/components/RainbowKitProvider/ModalContext.tsx @@ -6,7 +6,7 @@ import React, { useMemo, useState, } from 'react'; -import { useAccount, useNetwork } from 'wagmi'; +import { useAccount, useAccountEffect, useConfig } from 'wagmi'; import { useConnectionStatus } from '../../hooks/useConnectionStatus'; import { AccountModal } from '../AccountModal/AccountModal'; import { ChainModal } from '../ChainModal/ChainModal'; @@ -62,8 +62,11 @@ export function ModalProvider({ children }: ModalProviderProps) { } = useModalStateValue(); const connectionStatus = useConnectionStatus(); - const { chain } = useNetwork(); - const chainSupported = !chain?.unsupported; + + const { chainId } = useAccount(); + const { chains } = useConfig(); + + const isCurrentChainSupported = chains.some((chain) => chain.id === chainId); interface CloseModalsOptions { keepConnectModalOpen?: boolean; @@ -80,7 +83,8 @@ export function ModalProvider({ children }: ModalProviderProps) { } const isUnauthenticated = useAuthenticationStatus() === 'unauthenticated'; - useAccount({ + + useAccountEffect({ onConnect: () => closeModals({ keepConnectModalOpen: isUnauthenticated }), onDisconnect: () => closeModals(), }); @@ -93,7 +97,7 @@ export function ModalProvider({ children }: ModalProviderProps) { chainModalOpen, connectModalOpen, openAccountModal: - chainSupported && connectionStatus === 'connected' + isCurrentChainSupported && connectionStatus === 'connected' ? openAccountModal : undefined, openChainModal: @@ -106,13 +110,13 @@ export function ModalProvider({ children }: ModalProviderProps) { }), [ connectionStatus, - chainSupported, accountModalOpen, chainModalOpen, connectModalOpen, openAccountModal, openChainModal, openConnectModal, + isCurrentChainSupported, ], )} > diff --git a/packages/rainbowkit/src/components/RainbowKitProvider/RainbowKitChainContext.tsx b/packages/rainbowkit/src/components/RainbowKitProvider/RainbowKitChainContext.tsx index 34972ca28a..42e11a647c 100644 --- a/packages/rainbowkit/src/components/RainbowKitProvider/RainbowKitChainContext.tsx +++ b/packages/rainbowkit/src/components/RainbowKitProvider/RainbowKitChainContext.tsx @@ -1,18 +1,13 @@ import React, { ReactNode, createContext, useContext, useMemo } from 'react'; -import { Chain as WagmiChain } from 'wagmi'; +import { useConfig } from 'wagmi'; +import type { Chain } from 'wagmi/chains'; import { provideRainbowKitChains } from './provideRainbowKitChains'; -export interface RainbowKitChain { - id: number; - name?: string; +export interface RainbowKitChain extends Chain { iconUrl?: string | (() => Promise<string>) | null; iconBackground?: string; } -// This type is a combination of wagmi and RainbowKit chain types to make -// it easier for consumers to define their chain config in a single place. -export type Chain = WagmiChain & RainbowKitChain; - interface RainbowKitChainContextValue { chains: RainbowKitChain[]; initialChainId?: number; @@ -23,16 +18,16 @@ const RainbowKitChainContext = createContext<RainbowKitChainContextValue>({ }); interface RainbowKitChainProviderProps { - chains: RainbowKitChain[]; - initialChain?: RainbowKitChain | number; + initialChain?: Chain | number; children: ReactNode; } export function RainbowKitChainProvider({ - chains, children, initialChain, }: RainbowKitChainProviderProps) { + const { chains } = useConfig(); + return ( <RainbowKitChainContext.Provider value={useMemo( diff --git a/packages/rainbowkit/src/components/RainbowKitProvider/RainbowKitProvider.tsx b/packages/rainbowkit/src/components/RainbowKitProvider/RainbowKitProvider.tsx index 557e47d590..fde6e7d5b6 100644 --- a/packages/rainbowkit/src/components/RainbowKitProvider/RainbowKitProvider.tsx +++ b/packages/rainbowkit/src/components/RainbowKitProvider/RainbowKitProvider.tsx @@ -1,5 +1,6 @@ import React, { ReactNode, createContext, useContext } from 'react'; -import { useAccount } from 'wagmi'; +import { useAccountEffect } from 'wagmi'; +import type { Chain } from 'wagmi/chains'; import { cssStringFromTheme } from '../../css/cssStringFromTheme'; import { ThemeVars } from '../../css/sprinkles.css'; import { Locale } from '../../locales'; @@ -15,10 +16,7 @@ import { ModalSizeProvider, ModalSizes, } from './ModalSizeContext'; -import { - RainbowKitChain, - RainbowKitChainProvider, -} from './RainbowKitChainContext'; +import { RainbowKitChainProvider } from './RainbowKitChainContext'; import { ShowBalanceProvider } from './ShowBalanceContext'; import { ShowRecentTransactionsContext } from './ShowRecentTransactionsContext'; import { WalletButtonProvider } from './WalletButtonContext'; @@ -53,8 +51,7 @@ export type Theme = }; export interface RainbowKitProviderProps { - chains: RainbowKitChain[]; - initialChain?: RainbowKitChain | number; + initialChain?: Chain | number; id?: string; children: ReactNode; theme?: Theme | null; @@ -75,7 +72,6 @@ const defaultTheme = lightTheme(); export function RainbowKitProvider({ appInfo, avatar, - chains, children, coolMode = false, id, @@ -88,7 +84,7 @@ export function RainbowKitProvider({ usePreloadImages(); useFingerprint(); - useAccount({ onDisconnect: clearWalletConnectDeepLink }); + useAccountEffect({ onDisconnect: clearWalletConnectDeepLink }); if (typeof theme === 'function') { throw new Error( @@ -106,7 +102,7 @@ export function RainbowKitProvider({ const avatarContext = avatar ?? defaultAvatar; return ( - <RainbowKitChainProvider chains={chains} initialChain={initialChain}> + <RainbowKitChainProvider initialChain={initialChain}> <WalletButtonProvider> <I18nProvider locale={locale}> <CoolModeContext.Provider value={coolMode}> diff --git a/packages/rainbowkit/src/components/RainbowKitProvider/provideRainbowKitChains.ts b/packages/rainbowkit/src/components/RainbowKitProvider/provideRainbowKitChains.ts index c8b2cbfca3..aa3afb8a34 100644 --- a/packages/rainbowkit/src/components/RainbowKitProvider/provideRainbowKitChains.ts +++ b/packages/rainbowkit/src/components/RainbowKitProvider/provideRainbowKitChains.ts @@ -1,5 +1,6 @@ +import { Chain } from 'wagmi/chains'; import { isNotNullish } from '../../utils/isNotNullish'; -import type { RainbowKitChain } from './RainbowKitChainContext'; +import { RainbowKitChain } from './RainbowKitChainContext'; // Sourced from https://github.com/tmm/wagmi/blob/main/packages/core/src/constants/chains.ts // This is just so we can clearly see which of wagmi's first-class chains we provide metadata for @@ -152,16 +153,13 @@ const chainMetadataById = Object.fromEntries( .map(({ chainId, ...metadata }) => [chainId, metadata]), ); -/** @description Decorates an array of wagmi `Chain` objects with RainbowKitChain property overrides */ -export const provideRainbowKitChains = <Chain extends RainbowKitChain>( - chains: Chain[], -): Chain[] => +export const provideRainbowKitChains = (chains: readonly [Chain, ...Chain[]]) => chains.map((chain) => { const defaultMetadata = chainMetadataById[chain.id] ?? {}; return { ...chain, - name: defaultMetadata.name ?? chain.name, // favor colloquial names - iconUrl: chain.iconUrl ?? defaultMetadata.iconUrl, - iconBackground: chain.iconBackground ?? defaultMetadata.iconBackground, - } as Chain; + name: defaultMetadata.name ?? chain.name, // Favor colloquial names + iconUrl: defaultMetadata.iconUrl, + iconBackground: defaultMetadata.iconBackground, + } as RainbowKitChain; }); diff --git a/packages/rainbowkit/src/components/SignIn/SignIn.tsx b/packages/rainbowkit/src/components/SignIn/SignIn.tsx index 80597cf643..abcfa4cba5 100644 --- a/packages/rainbowkit/src/components/SignIn/SignIn.tsx +++ b/packages/rainbowkit/src/components/SignIn/SignIn.tsx @@ -1,6 +1,6 @@ import React, { useCallback, useContext, useRef } from 'react'; import { UserRejectedRequestError } from 'viem'; -import { useAccount, useNetwork, useSignMessage } from 'wagmi'; +import { useAccount, useSignMessage } from 'wagmi'; import { touchableStyles } from '../../css/touchableStyles'; import { isMobile } from '../../utils/isMobile'; import { AsyncImage } from '../AsyncImage/AsyncImage'; @@ -49,8 +49,7 @@ export function SignIn({ onClose }: { onClose: () => void }) { }, [getNonce]); const mobile = isMobile(); - const { address } = useAccount(); - const { chain: activeChain } = useNetwork(); + const { address, chain: activeChain } = useAccount(); const { signMessageAsync } = useSignMessage(); const signIn = async () => { diff --git a/packages/rainbowkit/src/components/Txs/TxItem.tsx b/packages/rainbowkit/src/components/Txs/TxItem.tsx index 89942bffd0..dc725a001c 100644 --- a/packages/rainbowkit/src/components/Txs/TxItem.tsx +++ b/packages/rainbowkit/src/components/Txs/TxItem.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { useNetwork } from 'wagmi'; +import { useAccount } from 'wagmi'; import { touchableStyles } from '../../css/touchableStyles'; import { Transaction } from '../../transactions/transactionStore'; import { chainToExplorerUrl } from '../../utils/chainToExplorerUrl'; @@ -32,7 +32,7 @@ export function TxItem({ tx }: TxProps) { const mobile = isMobile(); const Icon = getTxStatusIcon(tx.status); const color = tx.status === 'failed' ? 'error' : 'accentColor'; - const { chain: activeChain } = useNetwork(); + const { chain: activeChain } = useAccount(); const confirmationStatus = tx.status === 'confirmed' diff --git a/packages/rainbowkit/src/components/Txs/TxList.tsx b/packages/rainbowkit/src/components/Txs/TxList.tsx index c68b21beac..9a5c089610 100644 --- a/packages/rainbowkit/src/components/Txs/TxList.tsx +++ b/packages/rainbowkit/src/components/Txs/TxList.tsx @@ -1,5 +1,5 @@ import React, { useContext } from 'react'; -import { useAccount, useNetwork } from 'wagmi'; +import { useAccount } from 'wagmi'; import { touchableStyles } from '../../css/touchableStyles'; import { useClearRecentTransactions } from '../../transactions/useClearRecentTransactions'; import { useRecentTransactions } from '../../transactions/useRecentTransactions'; @@ -21,7 +21,7 @@ interface TxListProps { export function TxList({ address }: TxListProps) { const recentTransactions = useRecentTransactions(); const clearRecentTransactions = useClearRecentTransactions(); - const { chain: activeChain } = useNetwork(); + const { chain: activeChain } = useAccount(); const explorerLink = chainToExplorerUrl(activeChain); const visibleTxs = recentTransactions.slice(0, NUMBER_OF_VISIBLE_TXS); const hasTransactions = visibleTxs.length > 0; diff --git a/packages/rainbowkit/src/components/WalletButton/WalletButtonRenderer.tsx b/packages/rainbowkit/src/components/WalletButton/WalletButtonRenderer.tsx index 298a52569f..c3037d9c53 100644 --- a/packages/rainbowkit/src/components/WalletButton/WalletButtonRenderer.tsx +++ b/packages/rainbowkit/src/components/WalletButton/WalletButtonRenderer.tsx @@ -5,7 +5,7 @@ import React, { useMemo, useState, } from 'react'; -import { useAccount } from 'wagmi'; +import { useAccount, useAccountEffect } from 'wagmi'; import { useConnectionStatus } from '../../hooks/useConnectionStatus'; import { useIsMounted } from '../../hooks/useIsMounted'; import { isMobile } from '../../utils/isMobile'; @@ -48,12 +48,13 @@ export function WalletButtonRenderer({ const { connectModalOpen } = useModalState(); const { connector, setConnector } = useContext(WalletButtonContext); const [firstConnector] = useWalletConnectors() + .filter((wallet) => wallet.isRainbowKitConnector) // rainbowkit / wagmi connectors can uppercase some letters on the `id` field. // Id for metamask is `metaMask`, so instead we will make sure it's has lowercase comparison .filter((_wallet) => _wallet.id.toLowerCase() === wallet.toLowerCase()) .sort((a, b) => a.groupIndex - b.groupIndex); - if (!firstConnector) { + if (!firstConnector && isMounted()) { throw new Error('Connector not found'); } @@ -70,7 +71,9 @@ export function WalletButtonRenderer({ if (!connectModalOpen && connector) setConnector(null); }, [connectModalOpen, connector, setConnector]); - const { isConnected, isConnecting } = useAccount({ + const { isConnected, isConnecting } = useAccount(); + + useAccountEffect({ onConnect: () => { /* const lastClickedWalletName = getRecent */ // If you get error on desktop and thenswitch to mobile view diff --git a/packages/rainbowkit/src/config/getDefaultConfig.ts b/packages/rainbowkit/src/config/getDefaultConfig.ts index fc6d3a9c46..8286f8547b 100644 --- a/packages/rainbowkit/src/config/getDefaultConfig.ts +++ b/packages/rainbowkit/src/config/getDefaultConfig.ts @@ -1,8 +1,10 @@ -import { type Chain, configureChains, createConfig } from 'wagmi'; -import { publicProvider } from 'wagmi/providers/public'; +import { Transport } from 'viem'; +import { http } from 'wagmi'; +import { WagmiProviderProps, createConfig } from 'wagmi'; +import { type Chain } from 'wagmi/chains'; import type { WalletList } from '../wallets/Wallet'; +import { computeWalletConnectMetaData } from '../wallets/computeWalletConnectMetaData'; import { connectorsForWallets } from '../wallets/connectorsForWallets'; -import type { WalletConnectConnectorMetadata } from '../wallets/getWalletConnectConnector'; import { coinbaseWallet, metaMaskWallet, @@ -10,59 +12,82 @@ import { walletConnectWallet, } from '../wallets/walletConnectors'; -export const getDefaultConfig = ({ - appName, - appDescription, - appUrl, - appIcon, - chains, - wallets, - projectId, -}: { +export type _chains = readonly [Chain, ...Chain[]]; + +// Define the '_transports' type as a Record +// It maps each 'Chain' id to a 'Transport' +export type _transports = Record<_chains[number]['id'], Transport>; + +interface GetDefaultConfigParameters { appName: string; appDescription?: string; appUrl?: string; appIcon?: string; - chains: Chain[]; wallets?: WalletList; projectId: string; -}) => { - const { publicClient, webSocketPublicClient } = configureChains(chains, [ - publicProvider(), - ]); + chains: _chains; + transports?: _transports; + multiInjectedProviderDiscovery?: boolean; +} + +const createDefaultTransports = (chains: _chains): _transports => { + const transportsObject = chains.reduce((acc: _transports, chain) => { + const key = chain.id as keyof _transports; + acc[key] = http() as _transports[keyof _transports]; // Type assertion here + return acc; + }, {} as _transports); - const metadata: WalletConnectConnectorMetadata = { - name: appName, - description: appDescription, - url: appUrl, - }; + return transportsObject; +}; + +export const getDefaultConfig = ({ + appName, + appDescription, + appUrl, + appIcon, + wallets, + projectId, + chains, + multiInjectedProviderDiscovery = true, + transports, +}: GetDefaultConfigParameters): WagmiProviderProps['config'] => { + const metadata = computeWalletConnectMetaData({ + appName, + appDescription, + appUrl, + appIcon, + }); const connectors = connectorsForWallets( wallets || [ { groupName: 'Popular', wallets: [ - rainbowWallet({ - chains, - projectId, - walletConnectOptions: { metadata }, - }), - coinbaseWallet({ appName, appIcon, chains }), - metaMaskWallet({ - chains, - projectId, - walletConnectOptions: { metadata }, - }), - walletConnectWallet({ chains, projectId, options: { metadata } }), + rainbowWallet, + coinbaseWallet, + metaMaskWallet, + walletConnectWallet, ], }, ], + { + projectId, + appName, + appDescription, + appUrl, + appIcon, + walletConnectParameters: { metadata }, + }, ); + if (!transports) { + transports = createDefaultTransports(chains); + } + return createConfig({ - autoConnect: true, connectors, - publicClient, - webSocketPublicClient, + chains, + transports, + multiInjectedProviderDiscovery, }); }; diff --git a/packages/rainbowkit/src/hooks/useChainId.ts b/packages/rainbowkit/src/hooks/useChainId.ts deleted file mode 100644 index 3920dbd06f..0000000000 --- a/packages/rainbowkit/src/hooks/useChainId.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { useNetwork } from 'wagmi'; - -export function useChainId(): number | null { - const { chain: activeChain } = useNetwork(); - return activeChain?.id ?? null; -} diff --git a/packages/rainbowkit/src/hooks/useMainnet.ts b/packages/rainbowkit/src/hooks/useMainnet.ts deleted file mode 100644 index 83596a7d6e..0000000000 --- a/packages/rainbowkit/src/hooks/useMainnet.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { Chain } from 'wagmi'; -import { usePublicClient } from 'wagmi'; -import { mainnet } from 'wagmi/chains'; - -export function useMainnet() { - const chainId = mainnet.id; - - // Because the generic for 'useProvider' is defaulting to 'unknown' - // and the return type is being resolved as 'any', we're having to - // manually define the Provider type, so this code is more defensive - // than necessary in case the manual typing is ever incorrect. - // If we're unable to resolve a list of chains, or the chains are - // an invalid type, we'll silently bail out. - const provider = usePublicClient<{ chains?: Chain[] }>(); - const chains = Array.isArray(provider.chains) ? provider.chains : []; - const enabled = chains?.some((chain) => chain?.id === chainId); - - return { chainId, enabled }; -} diff --git a/packages/rainbowkit/src/hooks/useMainnetEnsAvatar.ts b/packages/rainbowkit/src/hooks/useMainnetEnsAvatar.ts index e30a9e94d6..601e9de7c4 100644 --- a/packages/rainbowkit/src/hooks/useMainnetEnsAvatar.ts +++ b/packages/rainbowkit/src/hooks/useMainnetEnsAvatar.ts @@ -1,13 +1,11 @@ +import { GetEnsNameReturnType, normalize } from 'viem/ens'; import { useEnsAvatar } from 'wagmi'; -import { useMainnet } from './useMainnet'; - -export function useMainnetEnsAvatar(name: string | null | undefined) { - const { chainId, enabled } = useMainnet(); +import { mainnet } from 'wagmi/chains'; +export function useMainnetEnsAvatar(name: GetEnsNameReturnType | undefined) { const { data: ensAvatar } = useEnsAvatar({ - chainId, - enabled, - name, + chainId: mainnet.id, + name: name ? normalize(name) : undefined, }); return ensAvatar; diff --git a/packages/rainbowkit/src/hooks/useMainnetEnsName.ts b/packages/rainbowkit/src/hooks/useMainnetEnsName.ts index 8a61c69397..14d642622e 100644 --- a/packages/rainbowkit/src/hooks/useMainnetEnsName.ts +++ b/packages/rainbowkit/src/hooks/useMainnetEnsName.ts @@ -1,13 +1,11 @@ +import { Address } from 'viem'; import { useEnsName } from 'wagmi'; -import { useMainnet } from './useMainnet'; - -export function useMainnetEnsName(address: string | undefined) { - const { chainId, enabled } = useMainnet(); +import { mainnet } from 'wagmi/chains'; +export function useMainnetEnsName(address: Address | undefined) { const { data: ensName } = useEnsName({ + chainId: mainnet.id, address, - chainId, - enabled, }); return ensName; diff --git a/packages/rainbowkit/src/index.ts b/packages/rainbowkit/src/index.ts index 8eed142444..174b4983bf 100644 --- a/packages/rainbowkit/src/index.ts +++ b/packages/rainbowkit/src/index.ts @@ -15,8 +15,12 @@ export { RainbowKitAuthenticationProvider, createAuthenticationAdapter, } from './components/RainbowKitProvider/AuthenticationContext'; -export type { Wallet, WalletList } from './wallets/Wallet'; -export type { Chain } from './components/RainbowKitProvider/RainbowKitChainContext'; +export type { + Wallet, + WalletList, + WalletDetailsParams, + RainbowKitWalletConnectParameters, +} from './wallets/Wallet'; export type { Theme } from './components/RainbowKitProvider/RainbowKitProvider'; export type { AuthenticationStatus, diff --git a/packages/rainbowkit/src/locales/en_US.json b/packages/rainbowkit/src/locales/en_US.json index 1d6c407172..a99fdf9010 100644 --- a/packages/rainbowkit/src/locales/en_US.json +++ b/packages/rainbowkit/src/locales/en_US.json @@ -91,6 +91,7 @@ }, "connector_group": { + "installed": "Installed", "recommended": "Recommended", "other": "Other", "popular": "Popular", diff --git a/packages/rainbowkit/src/transactions/TransactionStoreContext.tsx b/packages/rainbowkit/src/transactions/TransactionStoreContext.tsx index c13e4c0f5a..303d04557d 100644 --- a/packages/rainbowkit/src/transactions/TransactionStoreContext.tsx +++ b/packages/rainbowkit/src/transactions/TransactionStoreContext.tsx @@ -1,7 +1,7 @@ import React, { createContext, useContext, useEffect, useState } from 'react'; import { PublicClient } from 'viem'; import { useAccount, usePublicClient } from 'wagmi'; -import { useChainId } from '../hooks/useChainId'; +import { useChainId } from 'wagmi'; import { TransactionStore, createTransactionStore } from './transactionStore'; // Only allow a single instance of the store to exist at once @@ -46,7 +46,7 @@ export function TransactionStoreProvider({ ); } -export function useTransactionStore() { +export function useTransactionStore(): TransactionStore { const store = useContext(TransactionStoreContext); if (!store) { diff --git a/packages/rainbowkit/src/transactions/useAddRecentTransaction.ts b/packages/rainbowkit/src/transactions/useAddRecentTransaction.ts index d6988cd853..ff55e09ff6 100644 --- a/packages/rainbowkit/src/transactions/useAddRecentTransaction.ts +++ b/packages/rainbowkit/src/transactions/useAddRecentTransaction.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react'; import { useAccount } from 'wagmi'; -import { useChainId } from '../hooks/useChainId'; +import { useChainId } from 'wagmi'; import { useTransactionStore } from './TransactionStoreContext'; import { NewTransaction } from './transactionStore'; diff --git a/packages/rainbowkit/src/transactions/useClearRecentTransactions.ts b/packages/rainbowkit/src/transactions/useClearRecentTransactions.ts index a1d83f862c..3f62cd0f90 100644 --- a/packages/rainbowkit/src/transactions/useClearRecentTransactions.ts +++ b/packages/rainbowkit/src/transactions/useClearRecentTransactions.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react'; import { useAccount } from 'wagmi'; -import { useChainId } from '../hooks/useChainId'; +import { useChainId } from 'wagmi'; import { useTransactionStore } from './TransactionStoreContext'; export function useClearRecentTransactions(): () => void { diff --git a/packages/rainbowkit/src/transactions/useRecentTransactions.ts b/packages/rainbowkit/src/transactions/useRecentTransactions.ts index 88d620b2ba..532f4ce91d 100644 --- a/packages/rainbowkit/src/transactions/useRecentTransactions.ts +++ b/packages/rainbowkit/src/transactions/useRecentTransactions.ts @@ -1,6 +1,5 @@ import { useEffect, useState } from 'react'; -import { useAccount } from 'wagmi'; -import { useChainId } from '../hooks/useChainId'; +import { useAccount, useChainId } from 'wagmi'; import { useTransactionStore } from './TransactionStoreContext'; import type { Transaction } from './transactionStore'; diff --git a/packages/rainbowkit/src/utils/chainToExplorerUrl.ts b/packages/rainbowkit/src/utils/chainToExplorerUrl.ts index f7c21f7013..58e9eca3b0 100644 --- a/packages/rainbowkit/src/utils/chainToExplorerUrl.ts +++ b/packages/rainbowkit/src/utils/chainToExplorerUrl.ts @@ -1,4 +1,4 @@ -import { Chain } from '../components/RainbowKitProvider/RainbowKitChainContext'; +import type { Chain } from 'wagmi/chains'; export const chainToExplorerUrl = (chain?: Chain): string | undefined => chain?.blockExplorers?.default?.url; // using wagmi's built-in Chain.blockExplorers and grab the default URL diff --git a/packages/rainbowkit/src/utils/getWalletConnectUri.ts b/packages/rainbowkit/src/utils/getWalletConnectUri.ts deleted file mode 100644 index fc08cde40c..0000000000 --- a/packages/rainbowkit/src/utils/getWalletConnectUri.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { Connector } from 'wagmi/connectors'; - -export async function getWalletConnectUri( - connector: Connector, -): Promise<string> { - const provider = await connector.getProvider(); - return new Promise<string>((resolve) => - provider.once('display_uri', resolve), - ); -} diff --git a/packages/rainbowkit/src/wallets/Wallet.ts b/packages/rainbowkit/src/wallets/Wallet.ts index ee46333010..eaf6b7e30d 100644 --- a/packages/rainbowkit/src/wallets/Wallet.ts +++ b/packages/rainbowkit/src/wallets/Wallet.ts @@ -1,4 +1,7 @@ -import { Connector } from 'wagmi'; +import { Connector, CreateConnectorFn } from 'wagmi'; +import { WalletConnectParameters } from 'wagmi/connectors'; +import { CoinbaseWalletOptions } from './walletConnectors/coinbaseWallet/coinbaseWallet'; +import { WalletConnectWalletOptions } from './walletConnectors/walletConnectWallet/walletConnectWallet'; export type InstructionStepName = | 'install' @@ -7,13 +10,12 @@ export type InstructionStepName = | 'connect' | 'refresh'; -type RainbowKitConnector<C extends Connector = Connector> = { - connector: C; +type RainbowKitConnector = { mobile?: { - getUri?: () => Promise<string>; + getUri?: (uri: string) => string; }; desktop?: { - getUri?: () => Promise<string>; + getUri?: (uri: string) => string; instructions?: { learnMoreUrl: string; steps: { @@ -24,7 +26,7 @@ type RainbowKitConnector<C extends Connector = Connector> = { }; }; qrCode?: { - getUri: () => Promise<string>; + getUri: (uri: string) => string; instructions?: { learnMoreUrl: string; steps: { @@ -46,9 +48,10 @@ type RainbowKitConnector<C extends Connector = Connector> = { }; }; -export type Wallet<C extends Connector = Connector> = { +export type Wallet = { id: string; name: string; + rdns?: string; shortName?: string; iconUrl: string | (() => Promise<string>); iconAccent?: string; @@ -70,23 +73,62 @@ export type Wallet<C extends Connector = Connector> = { linux?: string; desktop?: string; }; - hidden?: (args: { - wallets: { - id: string; - connector: Connector; - installed?: boolean; - name: string; - }[]; - }) => boolean; - createConnector: () => RainbowKitConnector<C>; + hidden?: () => boolean; + createConnector: (walletDetails: WalletDetailsParams) => CreateConnectorFn; +} & RainbowKitConnector; + +export interface DefaultWalletOptions { + projectId: string; + walletConnectParameters?: RainbowKitWalletConnectParameters; +} + +export type CreateWalletFn = ( + // These parameters will be used when creating a wallet. If injected + // wallet doesn't have parameters it will just ignore these passed in parameters + createWalletParams: CoinbaseWalletOptions & + Omit<WalletConnectWalletOptions, 'projectId'> & + DefaultWalletOptions, +) => Wallet; + +export type WalletList = { + groupName: string; + wallets: CreateWalletFn[]; +}[]; + +// We don't want users to pass in `showQrModal` or `projectId`. +// Those two values are handled by rainbowkit. The rest of WalletConnect +// parameters can be passed with no issue +export type RainbowKitWalletConnectParameters = Omit< + WalletConnectParameters, + 'showQrModal' | 'projectId' +>; + +export type RainbowKitDetails = Omit<Wallet, 'createConnector' | 'hidden'> & { + index: number; + groupIndex: number; + groupName: string; + isWalletConnectModalConnector?: boolean; + isRainbowKitConnector: boolean; + walletConnectModalConnector?: Connector; + // Used specifically in `connectorsForWallets` logic + // to make sure we can also get WalletConnect modal in rainbowkit + showQrModal?: true; }; -export type WalletList = { groupName: string; wallets: Wallet[] }[]; +export type WalletDetailsParams = { rkDetails: RainbowKitDetails }; -export type WalletInstance = Omit<Wallet, 'createConnector' | 'hidden'> & - ReturnType<Wallet['createConnector']> & { - index: number; - groupIndex: number; - groupName: string; - walletConnectModalConnector?: Connector; - }; +export type CreateConnector = (walletDetails: { + rkDetails: RainbowKitDetails; +}) => CreateConnectorFn; + +// This is the default connector you get at first from wagmi +// "Connector" + rainbowkit details we inject into the connector +export type WagmiConnectorInstance = Connector & { + // this is optional since we only get + // rkDetails if we use rainbowkit connectors + rkDetails?: RainbowKitDetails; +}; + +// This will be the wallet instance we will return +// in the rainbowkit connect modal +export type WalletInstance = Connector & RainbowKitDetails; diff --git a/packages/rainbowkit/src/wallets/computeWalletConnectMetaData.ts b/packages/rainbowkit/src/wallets/computeWalletConnectMetaData.ts new file mode 100644 index 0000000000..da3e213b8e --- /dev/null +++ b/packages/rainbowkit/src/wallets/computeWalletConnectMetaData.ts @@ -0,0 +1,22 @@ +import { RainbowKitWalletConnectParameters } from './Wallet'; + +interface ComputeMetaDataParameters { + appName: string; + appDescription?: string; + appUrl?: string; + appIcon?: string; +} + +export const computeWalletConnectMetaData = ({ + appName, + appDescription, + appUrl, + appIcon, +}: ComputeMetaDataParameters): RainbowKitWalletConnectParameters['metadata'] => { + return { + name: appName, + description: appDescription ?? appName, + url: appUrl ?? (typeof window !== 'undefined' ? window.location.href : ''), + icons: [...(appIcon ? [appIcon] : [])], + }; +}; diff --git a/packages/rainbowkit/src/wallets/connectorsForWallets.test.ts b/packages/rainbowkit/src/wallets/connectorsForWallets.test.ts index b77662ad87..b2140219ee 100644 --- a/packages/rainbowkit/src/wallets/connectorsForWallets.test.ts +++ b/packages/rainbowkit/src/wallets/connectorsForWallets.test.ts @@ -1,247 +1,95 @@ import { describe, expect, it } from 'vitest'; -import { Connector } from 'wagmi'; -import { mainnet } from 'wagmi/chains'; -import { InjectedConnector } from 'wagmi/connectors/injected'; -import { WalletConnectConnector } from 'wagmi/connectors/walletConnect'; +import type { CreateConnectorFn } from 'wagmi'; +import { walletConnect } from 'wagmi/connectors'; import { connectorsForWallets } from '..'; -import { WalletInstance } from './Wallet'; -import { browserWallet } from './walletConnectors/browserWallet/browserWallet'; +import { CreateWalletFn } from './Wallet'; +import { injectedWallet } from './walletConnectors/injectedWallet/injectedWallet'; +import { walletConnectWallet } from './walletConnectors/walletConnectWallet/walletConnectWallet'; -const projectId = 'YOUR_PROJECT_ID'; - -const getWalletInstances = ( - connector: Connector & { _wallets?: WalletInstance[] }, -) => { - if (!connector._wallets) { - throw new Error('Wallet instances not found on connector'); +const isValidConnector = (connector: CreateConnectorFn): boolean => { + if (typeof connector !== 'function') { + throw new Error('Wallet instance is not a function'); } - return connector._wallets; + return !!connector; }; +const exampleProjectId = '21fef48091f12692cad574a6f7753643'; + describe('connectorsForWallets', () => { describe('injected fallback', () => { - it('includes injected fallback if no wallets using InjectedConnector were provided', () => { - const chains = [mainnet]; - const connectors = connectorsForWallets([ + it('should return wallet connect and injected wallet connectors', () => { + const customWallet: CreateWalletFn = (params) => ({ + createConnector: () => walletConnect({ projectId: params?.projectId! }), + iconBackground: '#fff', + iconUrl: '/test.png', + id: 'test-walletconnect-wallet', + name: 'Test WalletConnect Wallet', + }); + + const connectors = connectorsForWallets( + [ + { + groupName: 'Test Group 1', + wallets: [customWallet, injectedWallet], + }, + ], { - groupName: 'Test Group 1', - wallets: [ - { - createConnector: () => ({ - connector: new WalletConnectConnector({ - chains, - options: { - projectId, - }, - }), - }), - iconBackground: '#fff', - iconUrl: '/test.png', - id: 'test-walletconnect-wallet', - name: 'Test WalletConnect Wallet', - }, - browserWallet({ chains }), - ], + projectId: exampleProjectId, + appName: 'rainbowkit.com', }, - ])(); - - expect(connectors.length).toBe(2); - - expect(getWalletInstances(connectors[0]).length).toBe(1); - expect(getWalletInstances(connectors[0])[0].index).toBe(0); - expect(getWalletInstances(connectors[0])[0].name).toBe( - 'Test WalletConnect Wallet', ); - expect(getWalletInstances(connectors[1]).length).toBe(1); - expect(getWalletInstances(connectors[1])[0].index).toBe(1); - expect(getWalletInstances(connectors[1])[0].name).toBe('Browser Wallet'); - }); - - it('includes injected fallback if no wallets using InjectedConnector are installed', () => { - const chains = [mainnet]; - const connectors = connectorsForWallets([ - { - groupName: 'Test Group 1', - wallets: [ - { - createConnector: () => ({ - connector: new InjectedConnector(), - }), - iconBackground: '#fff', - iconUrl: '/test.png', - id: 'test-not-installed-wallet', - installed: false, - name: 'Test Not Installed Wallet', - }, - { - createConnector: () => ({ - connector: new WalletConnectConnector({ - chains, - options: { - projectId, - }, - }), - }), - iconBackground: '#fff', - iconUrl: '/test.png', - id: 'test-walletconnect-wallet', - name: 'Test WalletConnect Wallet', - }, - browserWallet({ chains }), - ], - }, - ])(); - - expect(connectors.length).toBe(3); - - expect(getWalletInstances(connectors[0]).length).toBe(1); - expect(getWalletInstances(connectors[0])[0].index).toBe(0); - expect(getWalletInstances(connectors[0])[0].name).toBe( - 'Test Not Installed Wallet', - ); + expect(connectors.length).toBe(2); - expect(getWalletInstances(connectors[1]).length).toBe(1); - expect(getWalletInstances(connectors[1])[0].index).toBe(1); - expect(getWalletInstances(connectors[1])[0].name).toBe( - 'Test WalletConnect Wallet', - ); + expect(isValidConnector(connectors[0])).toBe(true); + expect(isValidConnector(connectors[1])).toBe(true); - expect(getWalletInstances(connectors[2]).length).toBe(1); - expect(getWalletInstances(connectors[2])[0].index).toBe(2); - expect(getWalletInstances(connectors[2])[0].name).toBe('Browser Wallet'); + expect(connectors.length).toBe(2); }); - it('includes injected fallback in the same order it was defined if no wallets using InjectedConnector are installed', () => { - const chains = [mainnet]; - const connectors = connectorsForWallets([ - { - groupName: 'Test Group 1', - wallets: [ - browserWallet({ chains }), - { - createConnector: () => ({ - connector: new InjectedConnector(), - }), - iconBackground: '#fff', - iconUrl: '/test.png', - id: 'test-not-installed-wallet', - installed: false, - name: 'Test Not Installed Wallet', - }, - ], - }, + it("should not return connector if 'hidden' returns true", () => { + const customWallet: CreateWalletFn = (params) => ({ + createConnector: () => walletConnect({ projectId: params?.projectId! }), + hidden: () => true, + iconBackground: '#fff', + iconUrl: '/test.png', + id: 'test-not-installed-wallet', + installed: false, + name: 'Test Not Installed Wallet', + }); + + const connectors = connectorsForWallets( + [{ groupName: 'groupName: "Test Group 1"', wallets: [customWallet] }], { - groupName: 'Test Group 2', - wallets: [ - { - createConnector: () => ({ - connector: new WalletConnectConnector({ - chains, - options: { - projectId, - }, - }), - }), - iconBackground: '#fff', - iconUrl: '/test.png', - id: 'test-walletconnect-wallet', - name: 'Test WalletConnect Wallet', - }, - ], + projectId: exampleProjectId, + appName: 'rainbowkit.com', }, - ])(); - - expect(connectors.length).toBe(3); - - expect(getWalletInstances(connectors[0]).length).toBe(1); - expect(getWalletInstances(connectors[0])[0].index).toBe(1); - expect(getWalletInstances(connectors[0])[0].name).toBe( - 'Test Not Installed Wallet', - ); - expect(getWalletInstances(connectors[0])[0].groupName).toBe( - 'Test Group 1', - ); - - expect(getWalletInstances(connectors[1]).length).toBe(1); - expect(getWalletInstances(connectors[1])[0].index).toBe(2); - expect(getWalletInstances(connectors[1])[0].name).toBe( - 'Test WalletConnect Wallet', - ); - expect(getWalletInstances(connectors[1])[0].groupName).toBe( - 'Test Group 2', ); - expect(getWalletInstances(connectors[2]).length).toBe(1); - expect(getWalletInstances(connectors[2])[0].index).toBe(0); // Note this is now first in the list - expect(getWalletInstances(connectors[2])[0].name).toBe('Browser Wallet'); - expect(getWalletInstances(connectors[2])[0].groupName).toBe( - 'Test Group 1', - ); + expect(connectors.length).toBe(0); }); - it('excludes injected fallback if another wallet using InjectedConnector is installed', () => { - const chains = [mainnet]; - const connectors = connectorsForWallets([ - { - groupName: 'Test Group 1', - wallets: [ + it('should throw if projectId is invalid to wallet connect connector', () => { + // You can also check the specific error message part, for example: + expect(() => { + connectorsForWallets( + [ { - createConnector: () => ({ - connector: new InjectedConnector({ - chains, - options: { name: 'Test Wallet Installed' }, - }), - }), - iconBackground: '#fff', - iconUrl: '/test.png', - id: 'test-wallet-installed', - installed: true, - name: 'Test Wallet Installed', + groupName: 'Test Group 1', + wallets: [ + // @ts-expect-error + walletConnectWallet({ projectId: undefined }), + ], }, ], - }, - { - groupName: 'Test Group 2', - wallets: [ - browserWallet({ chains }), - { - createConnector: () => ({ - connector: new WalletConnectConnector({ - chains, - options: { - projectId, - }, - }), - }), - iconBackground: '#fff', - iconUrl: '/test.png', - id: 'test-walletconnect-wallet', - name: 'Test WalletConnect Wallet', - }, - ], - }, - ])(); - - expect(connectors.length).toBe(2); - - expect(getWalletInstances(connectors[0]).length).toBe(1); - expect(getWalletInstances(connectors[0])[0].index).toBe(0); - expect(getWalletInstances(connectors[0])[0].groupName).toBe( - 'Test Group 1', - ); - expect(getWalletInstances(connectors[0])[0].name).toBe( - 'Test Wallet Installed', - ); - - expect(getWalletInstances(connectors[1]).length).toBe(1); - expect(getWalletInstances(connectors[1])[0].index).toBe(2); - expect(getWalletInstances(connectors[1])[0].groupName).toBe( - 'Test Group 2', - ); - expect(getWalletInstances(connectors[1])[0].name).toBe( - 'Test WalletConnect Wallet', + { + projectId: exampleProjectId, + appName: 'rainbowkit.com', + }, + ); + }).toThrow( + 'No projectId found. Every dApp must now provide a WalletConnect Cloud projectId', ); }); }); diff --git a/packages/rainbowkit/src/wallets/connectorsForWallets.ts b/packages/rainbowkit/src/wallets/connectorsForWallets.ts index c1774cf79c..5cd3b9ab9d 100644 --- a/packages/rainbowkit/src/wallets/connectorsForWallets.ts +++ b/packages/rainbowkit/src/wallets/connectorsForWallets.ts @@ -1,9 +1,13 @@ -import { Connector } from 'wagmi'; -import { WalletConnectConnector } from 'wagmi/connectors/walletConnect'; +import type { CreateConnectorFn } from 'wagmi'; import { isHexString } from '../utils/colors'; -import { isMobile } from '../utils/isMobile'; import { omitUndefinedValues } from '../utils/omitUndefinedValues'; -import { Wallet, WalletInstance, WalletList } from './Wallet'; +import type { + RainbowKitWalletConnectParameters, + Wallet, + WalletDetailsParams, + WalletList, +} from './Wallet'; +import { computeWalletConnectMetaData } from './computeWalletConnectMetaData'; interface WalletListItem extends Wallet { index: number; @@ -11,175 +15,152 @@ interface WalletListItem extends Wallet { groupName: string; } -/* - Build your own list of wallets for the RainbowKit modal - with their necessary connectors. This way you have full - control over which wallets to display, and in which order. - Returns a `connectors` fn to pass directly to Wagmi's `createConfig`. -*/ -export function connectorsForWallets(walletList: WalletList): () => Connector[]; - -/* - Assemble a list of low-level connectors for use with the - `WalletButton` and `RainbowButton` components in custom implementations. -*/ -export function connectorsForWallets(wallets: Wallet[]): Connector[]; - -/* - Overload implementation for `connectorsForWallets`. - 1. Returns a `connectors` function that will then return a Connectors array - 2. Returns a prepared Connectors array stuffed with dummy WalletList data -*/ -export function connectorsForWallets(walletList: any): any { - if ('groupName' in walletList[0]) { - return _connectorsForWallets(walletList); - } - return _connectorsForWallets([ - { - groupName: '', - wallets: walletList as Wallet[], - }, - ])(); +export interface ConnectorsForWalletsParameters { + projectId: string; + appName: string; + appDescription?: string; + appUrl?: string; + appIcon?: string; + walletConnectParameters?: RainbowKitWalletConnectParameters; } -const _connectorsForWallets = (walletList: WalletList): (() => Connector[]) => { - return () => { - let index = -1; - - const connectors: Connector[] = []; - const visibleWallets: WalletListItem[] = []; - const potentiallyHiddenWallets: WalletListItem[] = []; - const walletInstances: WalletInstance[] = []; - - // First collect all list items in the correct order, but keep - // track of which ones have a `hidden` function so we can - // evaluate them after all the visible wallet instances have - // been created. This is because the potentially hidden wallets - // need access to the list of resolved wallet instances so that - // they can decide whether or not they should be hidden, - // e.g. the "Injected Wallet" option hides itself if another - // injected wallet is available. +export const connectorsForWallets = ( + walletList: WalletList, + { + projectId, + walletConnectParameters, + appName, + appDescription, + appUrl, + appIcon, + }: ConnectorsForWalletsParameters, +): CreateConnectorFn[] => { + // The 'connectorsForWallets' will run on server side. We wanna make sure we don't call + // the connectors at the time when we're rendering on server side otherwise we might + // expose too many event emitters at once + if (typeof window === 'undefined') return []; + + let index = -1; + + const connectors: CreateConnectorFn[] = []; + const visibleWallets: WalletListItem[] = []; + const potentiallyHiddenWallets: WalletListItem[] = []; + + const walletConnectMetaData = computeWalletConnectMetaData({ + appName, + appDescription, + appUrl, + appIcon, + }); + + // biome-ignore lint/complexity/noForEach: TODO + walletList.forEach(({ groupName, wallets }, groupIndex) => { // biome-ignore lint/complexity/noForEach: TODO - walletList.forEach(({ groupName, wallets }, groupIndex) => { - // biome-ignore lint/complexity/noForEach: TODO - wallets.forEach((wallet) => { - index++; - - // guard against non-hex values for `iconAccent` - if (wallet?.iconAccent && !isHexString(wallet?.iconAccent)) { - throw new Error( - `Property \`iconAccent\` is not a hex value for wallet: ${wallet.name}`, - ); - } - - const walletListItem = { - ...wallet, - groupIndex, - groupName, - index, - }; - - if (typeof wallet.hidden === 'function') { - potentiallyHiddenWallets.push(walletListItem); - } else { - visibleWallets.push(walletListItem); - } + wallets.forEach((createWallet) => { + index++; + + const wallet = createWallet({ + projectId, + appName, + appIcon, + // `option` is being used only for `walletConnectWallet` wallet + options: { + metadata: walletConnectMetaData, + ...walletConnectParameters, + }, + // Every other wallet that supports walletConnect flow and is not + // `walletConnectWallet` wallet will have `walletConnectParameters` property + walletConnectParameters: { + metadata: walletConnectMetaData, + ...walletConnectParameters, + }, }); - }); - // We process the known visible wallets first so that the potentially - // hidden wallets have access to the complete list of resolved wallets - const walletListItems: WalletListItem[] = [ - ...visibleWallets, - ...potentiallyHiddenWallets, - ]; + // guard against non-hex values for `iconAccent` + if (wallet?.iconAccent && !isHexString(wallet?.iconAccent)) { + throw new Error( + `Property \`iconAccent\` is not a hex value for wallet: ${wallet.name}`, + ); + } - // biome-ignore lint/complexity/noForEach: TODO - walletListItems.forEach( - ({ - createConnector, - groupIndex, + const walletListItem = { + ...wallet, + groupIndex: groupIndex + 1, groupName, - hidden, index, - ...walletMeta - }) => { - if (typeof hidden === 'function') { - // Run the function to check if the wallet needs to be hidden - const isHidden = hidden({ - wallets: [ - // Note: We only expose a subset of fields - // publicly to reduce API surface area - ...walletInstances.map(({ connector, id, installed, name }) => ({ - connector, - id, - installed, - name, - })), - ], - }); - - // If wallet is hidden, bail out and proceed to the next list item - if (isHidden) { - return; - } - } - - const { connector, ...connectionMethods } = omitUndefinedValues( - createConnector(), - ); + }; - let walletConnectModalConnector: Connector | undefined; - if ( - walletMeta.id === 'walletConnect' && - connectionMethods.qrCode && - !isMobile() - ) { - const { chains, options } = connector; - - walletConnectModalConnector = new WalletConnectConnector({ - chains, - options: { - ...options, - showQrModal: true, - }, - }); - - connectors.push(walletConnectModalConnector); - } - - const walletInstance: WalletInstance = { - connector, + if (typeof wallet.hidden === 'function') { + potentiallyHiddenWallets.push(walletListItem); + } else { + visibleWallets.push(walletListItem); + } + }); + }); + + // We process the known visible wallets first so that the potentially + // hidden wallets have access to the complete list of resolved wallets + const walletListItems: WalletListItem[] = [ + ...visibleWallets, + ...potentiallyHiddenWallets, + ]; + + for (const { + createConnector, + groupIndex, + groupName, + hidden, + ...walletMeta + } of walletListItems) { + if (typeof hidden === 'function') { + // Run the function to check if the wallet needs to be hidden + const isHidden = hidden(); + + // If wallet is hidden, bail out and proceed to the next list item + if (isHidden) { + continue; + } + } + + const walletMetaData = ( + // For now we should only use these as the additional parameters + additionalRkParams?: Pick< + WalletDetailsParams['rkDetails'], + 'isWalletConnectModalConnector' | 'showQrModal' + >, + ) => { + return { + rkDetails: omitUndefinedValues({ + ...walletMeta, groupIndex, groupName, - index, - walletConnectModalConnector, - ...walletMeta, - ...connectionMethods, - }; - - // We maintain an array of all wallet instances - // so they can be passed to the `hidden` function - // used by generic fallback wallets - walletInstances.push(walletInstance); - - if (!connectors.includes(connector)) { - connectors.push(connector); - - // Reset private wallet list the first time we see - // a connector to avoid duplicates after HMR, - // otherwise we'll keep pushing wallets into - // the old list. This is happening because we're - // re-using the WalletConnectConnector instance - // so the wallet list already exists after HMR. - connector._wallets = []; - } - - // Add wallet to connector's list of associated wallets - connector._wallets.push(walletInstance); - }, - ); - - return connectors; - }; + isRainbowKitConnector: true, + // These additional params will be used in rainbowkit react tree to + // merge `walletConnectWallet` and `walletConnect` connector from wagmi with + // showQrModal: true. This way we can let the user choose if they want to + // connect via QR code or open the official walletConnect modal instead + ...(additionalRkParams ? additionalRkParams : {}), + }), + }; + }; + + const isWalletConnectConnector = walletMeta.id === 'walletConnect'; + + if (isWalletConnectConnector) { + connectors.push( + createConnector( + walletMetaData({ + isWalletConnectModalConnector: true, + showQrModal: true, + }), + ), + ); + } + + const connector = createConnector(walletMetaData()); + + connectors.push(connector); + } + + return connectors; }; diff --git a/packages/rainbowkit/src/wallets/getDefaultWallets.ts b/packages/rainbowkit/src/wallets/getDefaultWallets.ts index 88f4bce925..ea04ad3a10 100644 --- a/packages/rainbowkit/src/wallets/getDefaultWallets.ts +++ b/packages/rainbowkit/src/wallets/getDefaultWallets.ts @@ -1,38 +1,42 @@ -import type { Connector } from 'wagmi'; -import type { Chain } from '../components/RainbowKitProvider/RainbowKitChainContext'; +import type { CreateConnectorFn } from 'wagmi'; import type { WalletList } from './Wallet'; -import { connectorsForWallets } from './connectorsForWallets'; +import { + ConnectorsForWalletsParameters, + connectorsForWallets, +} from './connectorsForWallets'; import { coinbaseWallet } from './walletConnectors/coinbaseWallet/coinbaseWallet'; import { metaMaskWallet } from './walletConnectors/metaMaskWallet/metaMaskWallet'; import { rainbowWallet } from './walletConnectors/rainbowWallet/rainbowWallet'; import { walletConnectWallet } from './walletConnectors/walletConnectWallet/walletConnectWallet'; -export const getDefaultWallets = ({ - appName, - chains, - projectId, -}: { - appName: string; - projectId: string; - chains: Chain[]; -}): { - connectors: () => Connector[]; +export function getDefaultWallets(parameters: ConnectorsForWalletsParameters): { + connectors: CreateConnectorFn[]; wallets: WalletList; -} => { +}; + +export function getDefaultWallets(): { wallets: WalletList }; + +export function getDefaultWallets(parameters?: ConnectorsForWalletsParameters) { const wallets: WalletList = [ { groupName: 'Popular', wallets: [ - rainbowWallet({ chains, projectId }), - coinbaseWallet({ appName, chains }), - metaMaskWallet({ chains, projectId }), - walletConnectWallet({ chains, projectId }), + rainbowWallet, + coinbaseWallet, + metaMaskWallet, + walletConnectWallet, ], }, ]; + if (parameters) { + return { + connectors: connectorsForWallets(wallets, parameters), + wallets, + }; + } + return { - connectors: connectorsForWallets(wallets), wallets, }; -}; +} diff --git a/packages/rainbowkit/src/wallets/getInjectedConnector.test.ts b/packages/rainbowkit/src/wallets/getInjectedConnector.test.ts index 6ca3cffbb3..82e32c23e4 100644 --- a/packages/rainbowkit/src/wallets/getInjectedConnector.test.ts +++ b/packages/rainbowkit/src/wallets/getInjectedConnector.test.ts @@ -1,90 +1,36 @@ import { describe, expect, it } from 'vitest'; -import type { WindowProvider } from 'wagmi'; -import { mainnet } from 'wagmi/chains'; import { getInjectedConnector, hasInjectedProvider, } from './getInjectedConnector'; describe('getInjectedConnector', () => { - const chains = [mainnet]; - it('only rainbow provider', () => { - window.ethereum = { isMetaMask: true, isRainbow: true } as WindowProvider; + window.ethereum = { isMetaMask: true, isRainbow: true }; const connector = getInjectedConnector({ flag: 'isRainbow', - chains, }); - expect(connector.name).toEqual('Rainbow'); + expect(!!connector).toEqual(true); }); it('only metamask provider', () => { - window.ethereum = { isMetaMask: true } as WindowProvider; + window.ethereum = { isMetaMask: true }; const connector = getInjectedConnector({ flag: 'isMetaMask', - chains, - }); - expect(connector.name).toEqual('MetaMask'); - }); - - describe('rainbow and metamask providers', () => { - it('rainbow default enabled', () => { - window.ethereum = { - isMetaMask: true, - isRainbow: true, - providers: [ - { isMetaMask: true, isRainbow: true }, - { isMetaMask: true }, - ], - } as WindowProvider; - const connector = getInjectedConnector({ - flag: 'isRainbow', - chains, - }); - expect(connector.name).toEqual('Rainbow'); - }); - - it('rainbow default disabled rainbow connector', () => { - window.ethereum = { - isMetaMask: true, - providers: [ - { isMetaMask: true }, - { isMetaMask: true, isRainbow: true }, - ], - } as WindowProvider; - const connector = getInjectedConnector({ - flag: 'isRainbow', - chains, - }); - expect(connector.name).toEqual('Rainbow'); - }); - - it('rainbow default disabled metamask connector', () => { - window.ethereum = { - isMetaMask: true, - providers: [ - { isMetaMask: true }, - { isMetaMask: true, isRainbow: true }, - ], - } as WindowProvider; - const connector = getInjectedConnector({ - flag: 'isMetaMask', - chains, - }); - expect(connector.name).toEqual('MetaMask'); }); + expect(!!connector).toEqual(true); }); }); describe('hasInjectedProvider', () => { it('only rainbow flag', () => { - window.ethereum = { isMetaMask: true, isRainbow: true } as WindowProvider; + window.ethereum = { isMetaMask: true, isRainbow: true }; const hasRainbow = hasInjectedProvider({ flag: 'isRainbow' }); expect(hasRainbow).toEqual(true); }); it('only metamask flag', () => { - window.ethereum = { isMetaMask: true } as WindowProvider; + window.ethereum = { isMetaMask: true }; const hasRainbow = hasInjectedProvider({ flag: 'isRainbow' }); expect(hasRainbow).toEqual(false); }); @@ -93,7 +39,7 @@ describe('hasInjectedProvider', () => { window.ethereum = { isMetaMask: true, isCoinbaseWallet: true, - } as WindowProvider; + }; const hasCoinbase = hasInjectedProvider({ flag: 'isCoinbaseWallet' }); expect(hasCoinbase).toEqual(true); }); @@ -104,7 +50,7 @@ describe('hasInjectedProvider', () => { providers: { ethereum: { isMetaMask: true }, }, - } as WindowProvider; + }; const hasEnkrypt = hasInjectedProvider({ namespace: 'enkrypt.providers.ethereum', }); @@ -116,7 +62,7 @@ describe('hasInjectedProvider', () => { window.avalanche = { isMetaMask: true, isAvalanche: true, - } as WindowProvider; + }; const hasCore = hasInjectedProvider({ namespace: 'avalanche', flag: 'isAvalanche', @@ -128,7 +74,7 @@ describe('hasInjectedProvider', () => { window.ethereum = { isMetaMask: true, isAvalanche: true, - } as WindowProvider; + }; const hasCore = hasInjectedProvider({ namespace: 'avalanche', flag: 'isAvalanche', @@ -144,7 +90,7 @@ describe('hasInjectedProvider', () => { { isMetaMask: true, isCoinbaseWallet: true }, { isMetaMask: true, isRainbow: true }, ], - } as WindowProvider; + }; const hasCoinbase = hasInjectedProvider({ flag: 'isCoinbaseWallet' }); expect(hasCoinbase).toEqual(true); @@ -162,7 +108,7 @@ describe('hasInjectedProvider', () => { { isMetaMask: true, isRainbow: true }, { isMetaMask: true }, ], - } as WindowProvider; + }; const hasCoinbase = hasInjectedProvider({ flag: 'isCoinbaseWallet' }); expect(hasCoinbase).toEqual(true); diff --git a/packages/rainbowkit/src/wallets/getInjectedConnector.ts b/packages/rainbowkit/src/wallets/getInjectedConnector.ts index 470d098ab6..c79d104668 100644 --- a/packages/rainbowkit/src/wallets/getInjectedConnector.ts +++ b/packages/rainbowkit/src/wallets/getInjectedConnector.ts @@ -1,21 +1,18 @@ -import { InjectedConnector } from 'wagmi/connectors/injected'; -import type { InjectedProviderFlags, WindowProvider } from 'wagmi/window'; -import type { Chain } from '../components/RainbowKitProvider/RainbowKitChainContext'; +import { createConnector } from 'wagmi'; +import { injected } from 'wagmi/connectors'; +import { CreateConnector, WalletDetailsParams } from './Wallet'; /* * Returns the explicit window provider that matches the flag and the flag is true */ -function getExplicitInjectedProvider( - flag: keyof InjectedProviderFlags | string, -): WindowProvider | undefined { +function getExplicitInjectedProvider(flag: string) { if (typeof window === 'undefined' || typeof window.ethereum === 'undefined') return; const providers = window.ethereum.providers; return providers ? // @ts-expect-error - some provider flags are not typed in `InjectedProviderFlags` providers.find((provider) => provider[flag]) - : // @ts-expect-error - some provider flags are not typed in `InjectedProviderFlags` - window.ethereum[flag] + : window.ethereum[flag] ? window.ethereum : undefined; } @@ -23,13 +20,8 @@ function getExplicitInjectedProvider( /* * Gets the `window.namespace` window provider if it exists */ -function getWindowProviderNamespace( - namespace: string, -): WindowProvider | undefined { - const providerSearch = ( - provider: any, - namespace: string, - ): WindowProvider | undefined => { +function getWindowProviderNamespace(namespace: string) { + const providerSearch = (provider: any, namespace: string): any => { const [property, ...path] = namespace.split('.'); const _provider = provider[property]; if (_provider) { @@ -47,7 +39,7 @@ export function hasInjectedProvider({ flag, namespace, }: { - flag?: keyof InjectedProviderFlags | string; + flag?: string; namespace?: string; }): boolean { if (namespace && typeof getWindowProviderNamespace(namespace) !== 'undefined') @@ -64,9 +56,9 @@ function getInjectedProvider({ flag, namespace, }: { - flag?: keyof InjectedProviderFlags | string; + flag?: string; namespace?: string; -}): WindowProvider | undefined { +}) { if (typeof window === 'undefined') return; if (namespace) { // prefer custom eip1193 namespaces @@ -83,23 +75,36 @@ function getInjectedProvider({ return window.ethereum; } +function createInjectedConnector(provider?: any): CreateConnector { + return (walletDetails: WalletDetailsParams) => { + // Create the injected configuration object conditionally based on the provider. + const injectedConfig = provider + ? { + target: () => ({ + id: walletDetails.rkDetails.id, + name: walletDetails.rkDetails.name, + provider, + }), + } + : {}; + + return createConnector((config) => ({ + // Spread the injectedConfig object, which may be empty or contain the target function + ...injected(injectedConfig)(config), + ...walletDetails, + })); + }; +} + export function getInjectedConnector({ - chains, flag, namespace, - getProvider, + target, }: { - flag?: keyof InjectedProviderFlags | string; + flag?: string; namespace?: string; - getProvider?: () => WindowProvider | undefined; - chains: Chain[]; -}): InjectedConnector { - return new InjectedConnector({ - chains, - options: getProvider - ? { getProvider } - : flag || namespace - ? { getProvider: () => getInjectedProvider({ flag, namespace }) } - : undefined, - }); + target?: any; +}): CreateConnector { + const provider = target ? target : getInjectedProvider({ flag, namespace }); + return createInjectedConnector(provider); } diff --git a/packages/rainbowkit/src/wallets/getWalletConnectConnector.test.ts b/packages/rainbowkit/src/wallets/getWalletConnectConnector.test.ts index ad3f4f947b..8cf897abe7 100644 --- a/packages/rainbowkit/src/wallets/getWalletConnectConnector.test.ts +++ b/packages/rainbowkit/src/wallets/getWalletConnectConnector.test.ts @@ -1,6 +1,5 @@ import { describe, expect, expectTypeOf, it } from 'vitest'; -import { mainnet } from 'wagmi/chains'; -import { WalletConnectConnector } from 'wagmi/connectors/walletConnect'; +import { CreateConnector } from './Wallet'; import { getWalletConnectConnector } from './getWalletConnectConnector'; /* @@ -9,50 +8,31 @@ import { getWalletConnectConnector } from './getWalletConnectConnector'; */ describe('getWalletConnectConnector', () => { - const chains = [mainnet]; const projectId = 'test-project-id'; describe('generic', () => { it('without projectId', () => { - expect(() => getWalletConnectConnector({ chains })).toThrowError(); + // @ts-expect-error + expect(() => getWalletConnectConnector()).toThrowError(); }); it('with projectId', () => { - const connector = getWalletConnectConnector({ chains, projectId }); - expect(connector.id).toBe('walletConnect'); - expectTypeOf(connector).toMatchTypeOf<WalletConnectConnector>(); - }); - it('qrcode defaults', () => { - const connector = getWalletConnectConnector({ chains, projectId }); - expect(connector.options.showQrModal).toBe(false); - }); - it('v2 qrcode defaults', () => { - const connector = getWalletConnectConnector({ - chains, - projectId, - }); - expect(connector.options.showQrModal).toBe(false); + const connector = getWalletConnectConnector({ projectId }); + expectTypeOf(connector).toMatchTypeOf<CreateConnector>(); }); }); describe("version '2'", () => { it('without options', () => { const connector = getWalletConnectConnector({ - chains, projectId, }); - expect(connector.id).toBe('walletConnect'); - expectTypeOf(connector).toMatchTypeOf<WalletConnectConnector>(); + expectTypeOf(connector).toMatchTypeOf<CreateConnector>(); }); it('with options', () => { const connector = getWalletConnectConnector({ - chains, projectId, - options: { - showQrModal: true, - }, }); - expect(connector.id).toBe('walletConnect'); - expectTypeOf(connector).toMatchTypeOf<WalletConnectConnector>(); + expectTypeOf(connector).toMatchTypeOf<CreateConnector>(); }); }); }); diff --git a/packages/rainbowkit/src/wallets/getWalletConnectConnector.ts b/packages/rainbowkit/src/wallets/getWalletConnectConnector.ts index 50d78f8aea..a4f31b473b 100644 --- a/packages/rainbowkit/src/wallets/getWalletConnectConnector.ts +++ b/packages/rainbowkit/src/wallets/getWalletConnectConnector.ts @@ -1,67 +1,114 @@ -import { WalletConnectConnector } from 'wagmi/connectors/walletConnect'; -import { Chain } from '../components/RainbowKitProvider/RainbowKitChainContext'; +import { createConnector } from 'wagmi'; +import type { CreateConnectorFn } from 'wagmi'; +import { WalletConnectParameters, walletConnect } from 'wagmi/connectors'; +import type { + CreateConnector, + RainbowKitDetails, + RainbowKitWalletConnectParameters, + WalletDetailsParams, +} from './Wallet'; -type SerializedOptions = string; -const sharedConnectors = new Map<SerializedOptions, WalletConnectConnector>(); +interface GetWalletConnectConnectorParams { + projectId: string; + walletConnectParameters?: RainbowKitWalletConnectParameters; +} -type WalletConnectConnectorConfig = ConstructorParameters< - typeof WalletConnectConnector ->[0]; +interface CreateWalletConnectConnectorParams { + projectId: string; + walletDetails: WalletDetailsParams; + walletConnectParameters?: RainbowKitWalletConnectParameters; +} -export type WalletConnectConnectorOptions = - // @ts-ignore - WalletConnectConnectorConfig['options']; +interface GetOrCreateWalletConnectInstanceParams { + projectId: string; + walletConnectParameters?: RainbowKitWalletConnectParameters; + rkDetailsShowQrModal?: RainbowKitDetails['showQrModal']; +} -export type WalletConnectConnectorMetadata = - WalletConnectConnectorOptions['metadata']; +const walletConnectInstances = new Map< + string, + ReturnType<typeof walletConnect> +>(); -function createConnector( - config: WalletConnectConnectorConfig, -): WalletConnectConnector { - const connector = new WalletConnectConnector(config); - sharedConnectors.set(JSON.stringify(config), connector); - return connector; -} +// Function to get or create a walletConnect instance +const getOrCreateWalletConnectInstance = ({ + projectId, + walletConnectParameters, + rkDetailsShowQrModal, +}: GetOrCreateWalletConnectInstanceParams): ReturnType< + typeof walletConnect +> => { + let config: WalletConnectParameters = { + ...(walletConnectParameters ? walletConnectParameters : {}), + projectId, + showQrModal: false, // Required. Otherwise WalletConnect modal (Web3Modal) will popup during time of connection for a wallet + }; -export function getWalletConnectConnector(config: { - projectId: string; - chains: Chain[]; - options?: WalletConnectConnectorOptions; -}): WalletConnectConnector; + // `rkDetailsShowQrModal` should always be `true` + if (rkDetailsShowQrModal) { + config = { ...config, showQrModal: true }; + } + + const serializedConfig = JSON.stringify(config); + + const sharedWalletConnector = walletConnectInstances.get(serializedConfig); + if (sharedWalletConnector) { + return sharedWalletConnector; + } + + // Create a new walletConnect instance and store it + const newWalletConnectInstance = walletConnect(config); + + walletConnectInstances.set(serializedConfig, newWalletConnectInstance); + + return newWalletConnectInstance; +}; + +// Creates a WalletConnect connector with the given project ID and additional options. +function createWalletConnectConnector({ + projectId, + walletDetails, + walletConnectParameters, +}: CreateWalletConnectConnectorParams): CreateConnectorFn { + // Create and configure the WalletConnect connector with project ID and options. + return createConnector((config) => ({ + ...getOrCreateWalletConnectInstance({ + projectId, + walletConnectParameters, + // Used in `connectorsForWallets` to add another + // walletConnect wallet into rainbowkit with modal popup option + rkDetailsShowQrModal: walletDetails.rkDetails.showQrModal, + })(config), + ...walletDetails, + })); +} + +// Factory function to obtain a configured WalletConnect connector. export function getWalletConnectConnector({ - chains, - options = {}, projectId, -}: { - chains: Chain[]; - projectId?: string; - options?: WalletConnectConnectorOptions; -}): WalletConnectConnector { + walletConnectParameters, +}: GetWalletConnectConnectorParams): CreateConnector { // We use this projectId in place of YOUR_PROJECT_ID for our examples. // This allows us our examples and templates to be functional with WalletConnect v2. // We warn developers against using this projectId in their dApp in production. const exampleProjectId = '21fef48091f12692cad574a6f7753643'; - if (!projectId || projectId === '') + + if (!projectId || projectId === '') { throw new Error( 'No projectId found. Every dApp must now provide a WalletConnect Cloud projectId to enable WalletConnect v2 https://www.rainbowkit.com/docs/installation#configure', ); - if (projectId === 'YOUR_PROJECT_ID' || projectId === exampleProjectId) - console.warn( - 'Invalid projectId. Please create a unique WalletConnect Cloud projectId for your dApp https://www.rainbowkit.com/docs/installation#configure', - ); + } - const config = { - chains, - options: { - projectId: projectId === 'YOUR_PROJECT_ID' ? exampleProjectId : projectId, - showQrModal: false, - ...options, - }, - }; - - const serializedConfig = JSON.stringify(config); - const sharedConnector = sharedConnectors.get(serializedConfig); + if (projectId === 'YOUR_PROJECT_ID') { + projectId = exampleProjectId; + } - return sharedConnector ?? createConnector(config); + // Return a function that merges additional wallet details with `CreateConnectorFn`. + return (walletDetails: WalletDetailsParams) => + createWalletConnectConnector({ + projectId, + walletDetails, + walletConnectParameters, + }); } diff --git a/packages/rainbowkit/src/wallets/groupedWallets.ts b/packages/rainbowkit/src/wallets/groupedWallets.ts new file mode 100644 index 0000000000..9bf6fd7317 --- /dev/null +++ b/packages/rainbowkit/src/wallets/groupedWallets.ts @@ -0,0 +1,62 @@ +import { WalletInstance } from './Wallet'; + +export const groupedWallets = ( + recentWallets: WalletInstance[], + walletInstances: WalletInstance[], +) => { + return [ + ...recentWallets, + ...walletInstances.filter( + (walletInstance) => + !recentWallets.some((wallet) => wallet.id === walletInstance.id), + ), + ]; +}; + +export const isRecentWallet = ( + recentWallets: WalletInstance[], + walletId: string, +) => { + return recentWallets.some((recentWallet) => recentWallet.id === walletId); +}; + +export const isRainbowKitConnector = (wallet: WalletInstance) => { + return !!wallet.isRainbowKitConnector; +}; + +export const isEIP6963Connector = (wallet: WalletInstance) => { + return !!( + !wallet.isRainbowKitConnector && + wallet.icon?.startsWith('data:image') && + wallet.uid && + wallet.name + ); +}; + +export const rainbowKitConnectorWithWalletConnect = ( + wallet: WalletInstance, + walletConnectModalConnector: WalletInstance, +) => { + // Check if we should use the walletConnectModalConnector for this instance + const shouldUseWalletConnectModal = + wallet.id === 'walletConnect' && walletConnectModalConnector; + + // Include the walletConnectModalConnector in the result + return shouldUseWalletConnectModal + ? { ...wallet, walletConnectModalConnector } + : wallet; +}; +interface ConnectorsWithWalletsParams { + wallets: WalletInstance[]; + recentWallets: WalletInstance[]; +} + +export const connectorsWithRecentWallets = ({ + wallets, + recentWallets, +}: ConnectorsWithWalletsParams) => { + return [ + ...recentWallets, + ...wallets.filter((wallet) => !isRecentWallet(recentWallets, wallet.id)), + ]; +}; diff --git a/packages/rainbowkit/src/wallets/useWalletConnectors.ts b/packages/rainbowkit/src/wallets/useWalletConnectors.ts index 4931b59332..fa12af79d5 100644 --- a/packages/rainbowkit/src/wallets/useWalletConnectors.ts +++ b/packages/rainbowkit/src/wallets/useWalletConnectors.ts @@ -1,37 +1,56 @@ -import { Connector, useConnect } from 'wagmi'; -import { flatten } from '../utils/flatten'; +import { Config, Connector, useConnect } from 'wagmi'; +import { ConnectMutateAsync } from 'wagmi/query'; import { indexBy } from '../utils/indexBy'; -import { isNotNullish } from '../utils/isNotNullish'; import { useInitialChainId, useRainbowKitChains, } from './../components/RainbowKitProvider/RainbowKitChainContext'; -import { WalletInstance } from './Wallet'; +import { WagmiConnectorInstance, WalletInstance } from './Wallet'; import { getDesktopDownloadUrl, getExtensionDownloadUrl, getMobileDownloadUrl, } from './downloadUrls'; +import { + connectorsWithRecentWallets, + isEIP6963Connector, + isRainbowKitConnector, + isRecentWallet, + rainbowKitConnectorWithWalletConnect, +} from './groupedWallets'; import { addRecentWalletId, getRecentWalletIds } from './recentWalletIds'; export interface WalletConnector extends WalletInstance { ready?: boolean; - connect?: ReturnType<typeof useConnect>['connectAsync']; - onConnecting?: (fn: () => void) => void; + connect: () => ReturnType<ConnectMutateAsync<Config, unknown>>; showWalletConnectModal?: () => void; recent: boolean; mobileDownloadUrl?: string; extensionDownloadUrl?: string; desktopDownloadUrl?: string; + getDesktopUri?: () => Promise<string>; + getQrCodeUri?: () => Promise<string>; + getMobileUri?: () => Promise<string>; } -export function useWalletConnectors(): WalletConnector[] { +export function useWalletConnectors( + mergeEIP6963WithRkConnectors = false, +): WalletConnector[] { const rainbowKitChains = useRainbowKitChains(); const intialChainId = useInitialChainId(); const { connectAsync, connectors: defaultConnectors_untyped } = useConnect(); - const defaultConnectors = defaultConnectors_untyped as Connector[]; + const defaultCreatedConnectors = + defaultConnectors_untyped as WagmiConnectorInstance[]; + + const defaultConnectors = defaultCreatedConnectors.map((connector) => ({ + ...connector, + // rkDetails is optional it does not exist in eip6963 connectors. + // We only inject `rkDetails` in `connectorsForWallets` when we + // want to have additional information in the connector. + ...(connector.rkDetails || {}), + })) as WalletInstance[]; - async function connectWallet(walletId: string, connector: Connector) { + async function connectWallet(connector: Connector) { const walletChainId = await connector.getChainId(); const result = await connectAsync({ chainId: @@ -46,18 +65,17 @@ export function useWalletConnectors(): WalletConnector[] { }); if (result) { - addRecentWalletId(walletId); + addRecentWalletId(connector.id); } return result; } async function connectToWalletConnectModal( - walletId: string, walletConnectModalConnector: Connector, ) { try { - return await connectWallet(walletId, walletConnectModalConnector!); + return await connectWallet(walletConnectModalConnector); } catch (err) { const isUserRejection = // @ts-expect-error - Web3Modal v1 error name @@ -71,62 +89,121 @@ export function useWalletConnectors(): WalletConnector[] { } } - const walletInstances = flatten( - defaultConnectors.map((connector) => { - return (connector._wallets as WalletInstance[]) ?? []; - }), - ).sort((a, b) => a.index - b.index); + const getWalletConnectUri = async ( + connector: Connector, + uriConverter: (uri: string) => string, + ): Promise<string> => { + const provider = await connector.getProvider(); + + if (connector.id === 'coinbase') { + // @ts-expect-error + return provider.qrUrl; + } + + return new Promise<string>((resolve) => + // Wagmi v2 doesn't have a return type for provider yet + // @ts-expect-error + provider.once('display_uri', (uri) => { + resolve(uriConverter(uri)); + }), + ); + }; + + const walletConnectModalConnector = defaultConnectors.find( + (connector) => + connector.id === 'walletConnect' && + connector.isWalletConnectModalConnector, + ); + + const eip6963Connectors = defaultConnectors + .filter(isEIP6963Connector) + .map((connector) => { + return { + ...connector, + groupIndex: 0, + }; + }); + + const rainbowKitConnectors = defaultConnectors + .filter(isRainbowKitConnector) + .filter((wallet) => !wallet.isWalletConnectModalConnector) + .filter((wallet) => { + if (!mergeEIP6963WithRkConnectors) return true; + + const existsInEIP6963Connectors = eip6963Connectors.some( + (eip6963) => eip6963.id === wallet.rdns, + ); + + return !existsInEIP6963Connectors; + }) + .map((wallet) => + rainbowKitConnectorWithWalletConnect( + wallet, + walletConnectModalConnector!, + ), + ); + + const combinedConnectors = [...eip6963Connectors, ...rainbowKitConnectors]; const walletInstanceById = indexBy( - walletInstances, + combinedConnectors, (walletInstance) => walletInstance.id, ); const MAX_RECENT_WALLETS = 3; + const recentWallets: WalletInstance[] = getRecentWalletIds() .map((walletId) => walletInstanceById[walletId]) - .filter(isNotNullish) + .filter(Boolean) .slice(0, MAX_RECENT_WALLETS); - const groupedWallets: WalletInstance[] = [ - ...recentWallets, - ...walletInstances.filter( - (walletInstance) => !recentWallets.includes(walletInstance), - ), - ]; - const walletConnectors: WalletConnector[] = []; - for (const wallet of groupedWallets) { - if (!wallet) { + const combinedConnectorsWithRecentWallets = connectorsWithRecentWallets({ + wallets: combinedConnectors, + recentWallets: recentWallets, + }); + + for (const wallet of combinedConnectorsWithRecentWallets) { + if (!wallet) continue; + + const eip6963 = isEIP6963Connector(wallet); + + const recent = isRecentWallet(recentWallets, wallet.id); + + if (eip6963) { + walletConnectors.push({ + ...wallet, + iconUrl: wallet.icon!, + ready: true, + connect: () => connectWallet(wallet), + groupName: 'Installed', + recent, + }); + continue; } - const recent = recentWallets.includes(wallet); - walletConnectors.push({ ...wallet, - // @ts-ignore - ignoring potential undefined return type - connect: () => - wallet.connector.showQrModal - ? connectToWalletConnectModal(wallet.id, wallet.connector) - : connectWallet(wallet.id, wallet.connector), + ready: wallet.installed ?? true, + connect: () => connectWallet(wallet), desktopDownloadUrl: getDesktopDownloadUrl(wallet), extensionDownloadUrl: getExtensionDownloadUrl(wallet), groupName: wallet.groupName, mobileDownloadUrl: getMobileDownloadUrl(wallet), - onConnecting: (fn: () => void) => - wallet.connector.on('message', ({ type }: { type: string }) => - type === 'connecting' ? fn() : undefined, - ), - ready: (wallet.installed ?? true) && wallet.connector.ready, + getQrCodeUri: wallet.qrCode?.getUri + ? () => getWalletConnectUri(wallet, wallet.qrCode!.getUri!) + : undefined, + getDesktopUri: wallet.desktop?.getUri + ? () => getWalletConnectUri(wallet, wallet.desktop!.getUri!) + : undefined, + getMobileUri: wallet.mobile?.getUri + ? () => getWalletConnectUri(wallet, wallet.mobile?.getUri!) + : undefined, recent, showWalletConnectModal: wallet.walletConnectModalConnector - ? () => - connectToWalletConnectModal( - wallet.id, - wallet.walletConnectModalConnector, - ) + ? () => connectToWalletConnectModal(wallet.walletConnectModalConnector!) : undefined, }); } diff --git a/packages/rainbowkit/src/wallets/walletConnectors/argentWallet/argentWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/argentWallet/argentWallet.ts index 547180307e..b0da58b046 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/argentWallet/argentWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/argentWallet/argentWallet.ts @@ -1,20 +1,12 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isAndroid } from '../../../utils/isMobile'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface ArgentWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type ArgentWalletOptions = DefaultWalletOptions; export const argentWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: ArgentWalletOptions): Wallet => ({ id: 'argent', name: 'Argent', @@ -27,46 +19,38 @@ export const argentWallet = ({ mobile: 'https://argent.xyz/download-argent', qrCode: 'https://argent.link/app', }, - createConnector: () => { - const connector = getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }); - - return { - connector, - mobile: { - getUri: async () => { - const uri = await getWalletConnectUri(connector); - return isAndroid() - ? uri - : `argent://app/wc?uri=${encodeURIComponent(uri)}`; + mobile: { + getUri: (uri: string) => { + return isAndroid() + ? uri + : `argent://app/wc?uri=${encodeURIComponent(uri)}`; + }, + }, + qrCode: { + getUri: (uri: string) => uri, + instructions: { + learnMoreUrl: 'https://argent.xyz/learn/what-is-a-crypto-wallet/', + steps: [ + { + description: 'wallet_connectors.argent.qr_code.step1.description', + step: 'install', + title: 'wallet_connectors.argent.qr_code.step1.title', + }, + { + description: 'wallet_connectors.argent.qr_code.step2.description', + step: 'create', + title: 'wallet_connectors.argent.qr_code.step2.title', }, - }, - qrCode: { - getUri: async () => getWalletConnectUri(connector), - instructions: { - learnMoreUrl: 'https://argent.xyz/learn/what-is-a-crypto-wallet/', - steps: [ - { - description: 'wallet_connectors.argent.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.argent.qr_code.step1.title', - }, - { - description: 'wallet_connectors.argent.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.argent.qr_code.step2.title', - }, - { - description: 'wallet_connectors.argent.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.argent.qr_code.step3.title', - }, - ], + { + description: 'wallet_connectors.argent.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.argent.qr_code.step3.title', }, - }, - }; + ], + }, }, + createConnector: getWalletConnectConnector({ + projectId, + walletConnectParameters, + }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/bifrostWallet/bifrostWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/bifrostWallet/bifrostWallet.ts index 1ef4dd9bed..12376f633e 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/bifrostWallet/bifrostWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/bifrostWallet/bifrostWallet.ts @@ -1,30 +1,28 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isAndroid } from '../../../utils/isMobile'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -import { - WalletConnectConnectorOptions, - getWalletConnectConnector, -} from '../../getWalletConnectConnector'; +import { getWalletConnectConnector } from '../../getWalletConnectConnector'; +import { DefaultWalletOptions } from './../../Wallet'; -export interface BifrostWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type BifrostWalletOptions = DefaultWalletOptions; export const bifrostWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: BifrostWalletOptions): Wallet => { const isBifrostInjected = hasInjectedProvider({ flag: 'isBifrost' }); + const shouldUseWalletConnect = !isBifrostInjected; + const getUri = (uri: string) => { + return isAndroid() + ? uri + : `https://app.bifrostwallet.com/wc?uri=${encodeURIComponent(uri)}`; + }; + return { id: 'bifrostWallet', name: 'Bifrost Wallet', @@ -37,61 +35,46 @@ export const bifrostWallet = ({ ios: 'https://apps.apple.com/us/app/bifrost-wallet/id1577198351', qrCode: 'https://bifrostwallet.com/#download-app', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - chains, - projectId, - options: walletConnectOptions, - }) - : getInjectedConnector({ - flag: 'isBifrost', - chains, - }); - - const getUri = async () => { - const uri = await getWalletConnectUri(connector); - - return isAndroid() - ? uri - : `https://app.bifrostwallet.com/wc?uri=${encodeURIComponent(uri)}`; - }; - - return { - connector, - mobile: { - getUri: shouldUseWalletConnect ? getUri : undefined, - }, - qrCode: shouldUseWalletConnect - ? { - getUri: async () => getWalletConnectUri(connector), - instructions: { - learnMoreUrl: - 'https://support.bifrostwallet.com/en/articles/6886814-how-to-use-walletconnect', - steps: [ - { - description: - 'wallet_connectors.bifrost.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.bifrost.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.bifrost.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.bifrost.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.bifrost.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.bifrost.qr_code.step3.title', - }, - ], - }, - } - : undefined, - }; + mobile: { + getUri: shouldUseWalletConnect ? getUri : undefined, }, + qrCode: shouldUseWalletConnect + ? { + getUri: (uri: string) => uri, + instructions: { + learnMoreUrl: + 'https://support.bifrostwallet.com/en/articles/6886814-how-to-use-walletconnect', + steps: [ + { + description: + 'wallet_connectors.bifrost.qr_code.step1.description', + step: 'install', + title: 'wallet_connectors.bifrost.qr_code.step1.title', + }, + { + description: + 'wallet_connectors.bifrost.qr_code.step2.description', + step: 'create', + title: 'wallet_connectors.bifrost.qr_code.step2.title', + }, + { + description: + 'wallet_connectors.bifrost.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.bifrost.qr_code.step3.title', + }, + ], + }, + } + : undefined, + + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ + flag: 'isBifrost', + }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/bitgetWallet/bitgetWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/bitgetWallet/bitgetWallet.ts index 38405a6450..74a965ebe0 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/bitgetWallet/bitgetWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/bitgetWallet/bitgetWallet.ts @@ -1,24 +1,16 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isAndroid } from '../../../utils/isMobile'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface BitgetWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type BitgetWalletOptions = DefaultWalletOptions; export const bitgetWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: BitgetWalletOptions): Wallet => { const isBitKeepInjected = hasInjectedProvider({ namespace: 'bitkeep.ethereum', @@ -43,87 +35,75 @@ export const bitgetWallet = ({ browserExtension: 'https://web3.bitget.com/en/wallet-download', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - chains, - options: walletConnectOptions, - projectId, - }) - : getInjectedConnector({ - chains, - namespace: 'bitkeep.ethereum', - flag: 'isBitKeep', - }); - - const getUri = async () => { - const uri = await getWalletConnectUri(connector); - - return isAndroid() - ? uri - : `bitkeep://wc?uri=${encodeURIComponent(uri)}`; - }; - - return { - connector, - extension: { + extension: { + instructions: { + learnMoreUrl: 'https://web3.bitget.com/en/academy', + steps: [ + { + description: 'wallet_connectors.bitget.extension.step1.description', + step: 'install', + title: 'wallet_connectors.bitget.extension.step1.title', + }, + { + description: 'wallet_connectors.bitget.extension.step2.description', + step: 'create', + title: 'wallet_connectors.bitget.extension.step2.title', + }, + { + description: 'wallet_connectors.bitget.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.bitget.extension.step3.description', + }, + ], + }, + }, + mobile: { + getUri: shouldUseWalletConnect + ? (uri: string) => { + return isAndroid() + ? uri + : `bitkeep://wc?uri=${encodeURIComponent(uri)}`; + } + : undefined, + }, + qrCode: shouldUseWalletConnect + ? { + getUri: (uri: string) => uri, instructions: { learnMoreUrl: 'https://web3.bitget.com/en/academy', steps: [ { description: - 'wallet_connectors.bitget.extension.step1.description', + 'wallet_connectors.bitget.qr_code.step1.description', step: 'install', - title: 'wallet_connectors.bitget.extension.step1.title', + title: 'wallet_connectors.bitget.qr_code.step1.title', }, { description: - 'wallet_connectors.bitget.extension.step2.description', + 'wallet_connectors.bitget.qr_code.step2.description', + step: 'create', - title: 'wallet_connectors.bitget.extension.step2.title', + title: 'wallet_connectors.bitget.qr_code.step2.title', }, { description: - 'wallet_connectors.bitget.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.bitget.extension.step3.description', + 'wallet_connectors.bitget.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.bitget.qr_code.step3.title', }, ], }, - }, - mobile: { - getUri: shouldUseWalletConnect ? getUri : undefined, - }, - qrCode: shouldUseWalletConnect - ? { - getUri: async () => getWalletConnectUri(connector), - instructions: { - learnMoreUrl: 'https://web3.bitget.com/en/academy', - steps: [ - { - description: - 'wallet_connectors.bitget.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.bitget.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.bitget.qr_code.step2.description', + } + : undefined, - step: 'create', - title: 'wallet_connectors.bitget.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.bitget.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.bitget.qr_code.step3.title', - }, - ], - }, - } - : undefined, - }; - }, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ + namespace: 'bitkeep.ethereum', + flag: 'isBitKeep', + }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/bitskiWallet/bitskiWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/bitskiWallet/bitskiWallet.ts index cc074cb077..13c88b47a9 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/bitskiWallet/bitskiWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/bitskiWallet/bitskiWallet.ts @@ -1,15 +1,10 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface BitskiWalletOptions { - chains: Chain[]; -} - -export const bitskiWallet = ({ chains }: BitskiWalletOptions): Wallet => ({ +export const bitskiWallet = (): Wallet => ({ id: 'bitski', name: 'Bitski', installed: hasInjectedProvider({ flag: 'isBitski' }), @@ -20,30 +15,28 @@ export const bitskiWallet = ({ chains }: BitskiWalletOptions): Wallet => ({ 'https://chrome.google.com/webstore/detail/bitski/feejiigddaafeojfddjjlmfkabimkell', browserExtension: 'https://bitski.com', }, - createConnector: () => ({ - connector: getInjectedConnector({ chains, flag: 'isBitski' }), - extension: { - instructions: { - learnMoreUrl: - 'https://bitski.zendesk.com/hc/articles/12803972818836-How-to-install-the-Bitski-browser-extension', - steps: [ - { - description: 'wallet_connectors.bitski.extension.step1.description', - step: 'install', - title: 'wallet_connectors.bitski.extension.step1.title', - }, - { - description: 'wallet_connectors.bitski.extension.step2.description', - step: 'create', - title: 'wallet_connectors.bitski.extension.step2.title', - }, - { - description: 'wallet_connectors.bitski.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.bitski.extension.step3.title', - }, - ], - }, + extension: { + instructions: { + learnMoreUrl: + 'https://bitski.zendesk.com/hc/articles/12803972818836-How-to-install-the-Bitski-browser-extension', + steps: [ + { + description: 'wallet_connectors.bitski.extension.step1.description', + step: 'install', + title: 'wallet_connectors.bitski.extension.step1.title', + }, + { + description: 'wallet_connectors.bitski.extension.step2.description', + step: 'create', + title: 'wallet_connectors.bitski.extension.step2.title', + }, + { + description: 'wallet_connectors.bitski.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.bitski.extension.step3.title', + }, + ], }, - }), + }, + createConnector: getInjectedConnector({ flag: 'isBitski' }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/braveWallet/braveWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/braveWallet/braveWallet.ts index 2b3ee5f9c1..426f9e054a 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/braveWallet/braveWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/braveWallet/braveWallet.ts @@ -1,23 +1,13 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -/** - * @protected `braveWallet` interface - */ -export interface BraveWalletOptions { - chains: Chain[]; -} - -/** - * @protected Brave Browser wallet connector - */ -export const braveWallet = ({ chains }: BraveWalletOptions): Wallet => ({ +export const braveWallet = (): Wallet => ({ id: 'brave', name: 'Brave Wallet', + rdns: 'com.brave.wallet', iconUrl: async () => (await import('./braveWallet.svg')).default, iconBackground: '#fff', installed: hasInjectedProvider({ flag: 'isBraveWallet' }), @@ -27,7 +17,5 @@ export const braveWallet = ({ chains }: BraveWalletOptions): Wallet => ({ // more of a convenience for users who are already using Brave rather than // an explicit wallet choice for users coming from other browsers. }, - createConnector: () => ({ - connector: getInjectedConnector({ chains, flag: 'isBraveWallet' }), - }), + createConnector: getInjectedConnector({ flag: 'isBraveWallet' }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/browserWallet/browserWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/browserWallet/browserWallet.ts deleted file mode 100644 index 98d11b581c..0000000000 --- a/packages/rainbowkit/src/wallets/walletConnectors/browserWallet/browserWallet.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { InjectedConnector } from 'wagmi/connectors/injected'; -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { Wallet } from '../../Wallet'; -import { getInjectedConnector } from '../../getInjectedConnector'; - -/** - * @protected `browserWallet` interface - */ -export interface BrowserWalletOptions { - chains: Chain[]; -} - -/** - * @protected eip-1193 wallet connector - */ -export const browserWallet = ({ chains }: BrowserWalletOptions): Wallet => ({ - id: 'browser', - name: 'Browser Wallet', - iconUrl: async () => (await import('./browserWallet.svg')).default, - iconBackground: '#fff', - hidden: ({ wallets }) => - wallets.some( - (wallet) => - wallet.installed && - wallet.name === wallet.connector.name && - (wallet.connector instanceof InjectedConnector || - wallet.id === 'coinbase'), - ), - createConnector: () => ({ - connector: getInjectedConnector({ chains }), - }), -}); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/clvWallet/clvWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/clvWallet/clvWallet.ts index af4e9384ff..2e910569db 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/clvWallet/clvWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/clvWallet/clvWallet.ts @@ -1,25 +1,15 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -import { - WalletConnectConnectorOptions, - getWalletConnectConnector, -} from '../../getWalletConnectConnector'; +import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -export interface CLVWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type CLVWalletOptions = DefaultWalletOptions; export const clvWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: CLVWalletOptions): Wallet => { const isCLVInjected = hasInjectedProvider({ namespace: 'clover' }); const shouldUseWalletConnect = !isCLVInjected; @@ -38,79 +28,61 @@ export const clvWallet = ({ mobile: 'https://apps.apple.com/app/clover-wallet/id1570072858', qrCode: 'https://clv.org/', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - chains, - options: walletConnectOptions, - projectId, - }) - : getInjectedConnector({ chains, namespace: 'clover' }); - - const getUri = async () => { - const uri = await getWalletConnectUri(connector); - return uri; - }; - - return { - connector, - extension: { + extension: { + instructions: { + learnMoreUrl: 'https://clv.org/', + steps: [ + { + description: 'wallet_connectors.clv.extension.step1.description', + step: 'install', + title: 'wallet_connectors.clv.extension.step1.title', + }, + { + description: 'wallet_connectors.clv.extension.step2.description', + step: 'create', + title: 'wallet_connectors.clv.extension.step2.title', + }, + { + description: 'wallet_connectors.clv.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.clv.extension.step3.title', + }, + ], + }, + }, + mobile: { + getUri: shouldUseWalletConnect ? (uri: string) => uri : undefined, + }, + qrCode: shouldUseWalletConnect + ? { + getUri: (uri: string) => uri, instructions: { learnMoreUrl: 'https://clv.org/', steps: [ { - description: - 'wallet_connectors.clv.extension.step1.description', + description: 'wallet_connectors.clv.qr_code.step1.description', step: 'install', - title: 'wallet_connectors.clv.extension.step1.title', + title: 'wallet_connectors.clv.qr_code.step1.title', }, { - description: - 'wallet_connectors.clv.extension.step2.description', + description: 'wallet_connectors.clv.qr_code.step2.description', step: 'create', - title: 'wallet_connectors.clv.extension.step2.title', + title: 'wallet_connectors.clv.qr_code.step2.title', }, { - description: - 'wallet_connectors.clv.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.clv.extension.step3.title', + description: 'wallet_connectors.clv.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.clv.qr_code.step3.title', }, ], }, - }, - mobile: { - getUri: shouldUseWalletConnect ? getUri : undefined, - }, - qrCode: shouldUseWalletConnect - ? { - getUri: async () => getWalletConnectUri(connector), - instructions: { - learnMoreUrl: 'https://clv.org/', - steps: [ - { - description: - 'wallet_connectors.clv.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.clv.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.clv.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.clv.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.clv.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.clv.qr_code.step3.title', - }, - ], - }, - } - : undefined, - }; - }, + } + : undefined, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ namespace: 'clover' }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/coin98Wallet/coin98Wallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/coin98Wallet/coin98Wallet.ts index 2d048c52c4..3d8bda0d50 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/coin98Wallet/coin98Wallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/coin98Wallet/coin98Wallet.ts @@ -1,25 +1,15 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -import { - WalletConnectConnectorOptions, - getWalletConnectConnector, -} from '../../getWalletConnectConnector'; +import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -export interface Coin98WalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type Coin98WalletOptions = DefaultWalletOptions; export const coin98Wallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: Coin98WalletOptions): Wallet => { const isCoin98WalletInjected = hasInjectedProvider({ namespace: 'coin98Wallet', @@ -43,80 +33,67 @@ export const coin98Wallet = ({ 'https://chrome.google.com/webstore/detail/coin98-wallet/aeachknmefphepccionboohckonoeemg', browserExtension: 'https://coin98.com/wallet', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }) - : getInjectedConnector({ - chains, - namespace: 'coin98Wallet', - flag: 'isCoin98', - }); - const getUri = async () => { - const uri = await getWalletConnectUri(connector); - return uri; - }; - - return { - connector, - mobile: { getUri: shouldUseWalletConnect ? getUri : undefined }, - qrCode: shouldUseWalletConnect - ? { - getUri, - instructions: { - learnMoreUrl: 'https://coin98.com/wallet', - steps: [ - { - description: - 'wallet_connectors.coin98.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.coin98.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.coin98.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.coin98.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.coin98.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.coin98.qr_code.step3.title', - }, - ], - }, - } - : undefined, - extension: { + mobile: { + getUri: shouldUseWalletConnect ? (uri: string) => uri : undefined, + }, + qrCode: shouldUseWalletConnect + ? { + getUri: (uri: string) => uri, instructions: { learnMoreUrl: 'https://coin98.com/wallet', steps: [ { description: - 'wallet_connectors.coin98.extension.step1.description', + 'wallet_connectors.coin98.qr_code.step1.description', step: 'install', - title: 'wallet_connectors.coin98.extension.step1.title', + title: 'wallet_connectors.coin98.qr_code.step1.title', }, { description: - 'wallet_connectors.coin98.extension.step2.description', + 'wallet_connectors.coin98.qr_code.step2.description', step: 'create', - title: 'wallet_connectors.coin98.extension.step2.title', + title: 'wallet_connectors.coin98.qr_code.step2.title', }, { description: - 'wallet_connectors.coin98.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.coin98.extension.step3.title', + 'wallet_connectors.coin98.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.coin98.qr_code.step3.title', }, ], }, - }, - }; + } + : undefined, + extension: { + instructions: { + learnMoreUrl: 'https://coin98.com/wallet', + steps: [ + { + description: 'wallet_connectors.coin98.extension.step1.description', + step: 'install', + title: 'wallet_connectors.coin98.extension.step1.title', + }, + { + description: 'wallet_connectors.coin98.extension.step2.description', + step: 'create', + title: 'wallet_connectors.coin98.extension.step2.title', + }, + { + description: 'wallet_connectors.coin98.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.coin98.extension.step3.title', + }, + ], + }, }, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ + namespace: 'coin98Wallet', + flag: 'isCoin98', + }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/coinbaseWallet/coinbaseWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/coinbaseWallet/coinbaseWallet.ts index da911c73f6..69b580efbc 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/coinbaseWallet/coinbaseWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/coinbaseWallet/coinbaseWallet.ts @@ -1,28 +1,30 @@ -import { CoinbaseWalletConnector } from 'wagmi/connectors/coinbaseWallet'; -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; +import { createConnector } from 'wagmi'; +import { coinbaseWallet as coinbaseWagmiWallet } from 'wagmi/connectors'; import { isIOS } from '../../../utils/isMobile'; -import { Wallet } from '../../Wallet'; +import { Wallet, WalletDetailsParams } from '../../Wallet'; import { hasInjectedProvider } from '../../getInjectedConnector'; export interface CoinbaseWalletOptions { appName: string; appIcon?: string; - chains: Chain[]; } export const coinbaseWallet = ({ appName, appIcon, - chains, }: CoinbaseWalletOptions): Wallet => { const isCoinbaseWalletInjected = hasInjectedProvider({ flag: 'isCoinbaseWallet', }); + const getUri = (uri: string) => uri; + const ios = isIOS(); + return { id: 'coinbase', name: 'Coinbase Wallet', shortName: 'Coinbase', + rdns: 'com.coinbase.wallet', iconUrl: async () => (await import('./coinbaseWallet.svg')).default, iconAccent: '#2c5ff6', iconBackground: '#2c5ff6', @@ -39,80 +41,71 @@ export const coinbaseWallet = ({ 'https://chrome.google.com/webstore/detail/coinbase-wallet-extension/hnfanknocfeofbddgcijnmhnfnkdnaad', browserExtension: 'https://coinbase.com/wallet', }, - createConnector: () => { - const ios = isIOS(); - - const connector = new CoinbaseWalletConnector({ - chains, - options: { + ...(ios + ? {} + : { + qrCode: { + getUri, + instructions: { + learnMoreUrl: + 'https://coinbase.com/wallet/articles/getting-started-mobile', + steps: [ + { + description: + 'wallet_connectors.coinbase.qr_code.step1.description', + step: 'install', + title: 'wallet_connectors.coinbase.qr_code.step1.title', + }, + { + description: + 'wallet_connectors.coinbase.qr_code.step2.description', + step: 'create', + title: 'wallet_connectors.coinbase.qr_code.step2.title', + }, + { + description: + 'wallet_connectors.coinbase.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.coinbase.qr_code.step3.title', + }, + ], + }, + }, + extension: { + instructions: { + learnMoreUrl: + 'https://coinbase.com/wallet/articles/getting-started-extension', + steps: [ + { + description: + 'wallet_connectors.coinbase.extension.step1.description', + step: 'install', + title: 'wallet_connectors.coinbase.extension.step1.title', + }, + { + description: + 'wallet_connectors.coinbase.extension.step2.description', + step: 'create', + title: 'wallet_connectors.coinbase.extension.step2.title', + }, + { + description: + 'wallet_connectors.coinbase.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.coinbase.extension.step3.title', + }, + ], + }, + }, + }), + createConnector: (walletDetails: WalletDetailsParams) => + createConnector((config) => ({ + ...coinbaseWagmiWallet({ appName, appLogoUrl: appIcon, headlessMode: true, - }, - }); - - const getUri = async () => (await connector.getProvider()).qrUrl; - - return { - connector, - ...(ios - ? {} - : { - qrCode: { - getUri, - instructions: { - learnMoreUrl: - 'https://coinbase.com/wallet/articles/getting-started-mobile', - steps: [ - { - description: - 'wallet_connectors.coinbase.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.coinbase.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.coinbase.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.coinbase.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.coinbase.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.coinbase.qr_code.step3.title', - }, - ], - }, - }, - extension: { - instructions: { - learnMoreUrl: - 'https://coinbase.com/wallet/articles/getting-started-extension', - steps: [ - { - description: - 'wallet_connectors.coinbase.extension.step1.description', - step: 'install', - title: 'wallet_connectors.coinbase.extension.step1.title', - }, - { - description: - 'wallet_connectors.coinbase.extension.step2.description', - step: 'create', - title: 'wallet_connectors.coinbase.extension.step2.title', - }, - { - description: - 'wallet_connectors.coinbase.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.coinbase.extension.step3.title', - }, - ], - }, - }, - }), - }; - }, + })(config), + ...walletDetails, + })), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/coreWallet/coreWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/coreWallet/coreWallet.ts index 01109e6ce6..226ee75b3a 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/coreWallet/coreWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/coreWallet/coreWallet.ts @@ -1,25 +1,15 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -import { - WalletConnectConnectorOptions, - getWalletConnectConnector, -} from '../../getWalletConnectConnector'; +import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -export interface CoreWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type CoreWalletOptions = DefaultWalletOptions; export const coreWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: CoreWalletOptions): Wallet => { const isCoreInjected = hasInjectedProvider({ namespace: 'avalanche', @@ -41,80 +31,65 @@ export const coreWallet = ({ 'https://chrome.google.com/webstore/detail/core-crypto-wallet-nft-ex/agoakfejjabomempkjlepdflaleeobhb', browserExtension: 'https://extension.core.app/', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }) - : getInjectedConnector({ - chains, - namespace: 'avalanche', - flag: 'isAvalanche', - }); - const getUri = async () => { - const uri = await getWalletConnectUri(connector); - return uri; - }; - return { - connector, - mobile: { getUri: shouldUseWalletConnect ? getUri : undefined }, - qrCode: shouldUseWalletConnect - ? { - getUri, - instructions: { - learnMoreUrl: - 'https://support.avax.network/en/articles/6115608-core-mobile-how-to-add-the-core-mobile-to-my-phone', - steps: [ - { - description: - 'wallet_connectors.core.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.core.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.core.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.core.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.core.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.core.qr_code.step3.title', - }, - ], - }, - } - : undefined, - extension: { + mobile: { + getUri: shouldUseWalletConnect ? (uri: string) => uri : undefined, + }, + qrCode: shouldUseWalletConnect + ? { + getUri: (uri: string) => uri, instructions: { - learnMoreUrl: 'https://extension.core.app/', + learnMoreUrl: + 'https://support.avax.network/en/articles/6115608-core-mobile-how-to-add-the-core-mobile-to-my-phone', steps: [ { - description: - 'wallet_connectors.core.extension.step1.description', + description: 'wallet_connectors.core.qr_code.step1.description', step: 'install', - title: 'wallet_connectors.core.extension.step1.title', + title: 'wallet_connectors.core.qr_code.step1.title', }, { - description: - 'wallet_connectors.core.extension.step2.description', + description: 'wallet_connectors.core.qr_code.step2.description', step: 'create', - title: 'wallet_connectors.core.extension.step2.title', + title: 'wallet_connectors.core.qr_code.step2.title', }, { - description: - 'wallet_connectors.core.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.core.extension.step3.title', + description: 'wallet_connectors.core.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.core.qr_code.step3.title', }, ], }, - }, - }; + } + : undefined, + extension: { + instructions: { + learnMoreUrl: 'https://extension.core.app/', + steps: [ + { + description: 'wallet_connectors.core.extension.step1.description', + step: 'install', + title: 'wallet_connectors.core.extension.step1.title', + }, + { + description: 'wallet_connectors.core.extension.step2.description', + step: 'create', + title: 'wallet_connectors.core.extension.step2.title', + }, + { + description: 'wallet_connectors.core.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.core.extension.step3.title', + }, + ], + }, }, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ + namespace: 'avalanche', + flag: 'isAvalanche', + }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/dawnWallet/dawnWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/dawnWallet/dawnWallet.ts index dad622b634..634d1b10a5 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/dawnWallet/dawnWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/dawnWallet/dawnWallet.ts @@ -1,4 +1,3 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { isIOS } from '../../../utils/isMobile'; import { Wallet } from '../../Wallet'; import { @@ -6,11 +5,7 @@ import { hasInjectedProvider, } from '../../getInjectedConnector'; -export interface DawnWalletOptions { - chains: Chain[]; -} - -export const dawnWallet = ({ chains }: DawnWalletOptions): Wallet => ({ +export const dawnWallet = (): Wallet => ({ id: 'dawn', name: 'Dawn', iconUrl: async () => (await import('./dawnWallet.svg')).default, @@ -21,7 +16,5 @@ export const dawnWallet = ({ chains }: DawnWalletOptions): Wallet => ({ ios: 'https://apps.apple.com/us/app/dawn-ethereum-wallet/id1673143782', mobile: 'https://dawnwallet.xyz', }, - createConnector: () => ({ - connector: getInjectedConnector({ chains, flag: 'isDawn' }), - }), + createConnector: getInjectedConnector({ flag: 'isDawn' }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/desigWallet/desigWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/desigWallet/desigWallet.ts index 6390120b41..d2f602cd9d 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/desigWallet/desigWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/desigWallet/desigWallet.ts @@ -1,62 +1,48 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface DesigWalletOptions { - chains: Chain[]; -} - -export const desigWallet = ({ chains }: DesigWalletOptions): Wallet => ({ - id: 'desig', - name: 'Desig Wallet', - iconUrl: async () => (await import('./desigWallet.svg')).default, - iconBackground: '#ffffff', - installed: hasInjectedProvider({ namespace: 'desig.ethereum' }), - downloadUrls: { - android: 'https://play.google.com/store/apps/details?id=io.desig.app', - ios: 'https://apps.apple.com/app/desig-wallet/id6450106028', - qrCode: 'https://desig.io', - mobile: 'https://desig.io', - browserExtension: - 'https://chrome.google.com/webstore/detail/desig-wallet/panpgppehdchfphcigocleabcmcgfoca', - }, - - createConnector: () => { - const connector = getInjectedConnector({ - chains, - namespace: 'desig.ethereum', - }); - - return { - connector, - extension: { - instructions: { - steps: [ - { - description: - 'wallet_connectors.desig.extension.step1.description', - step: 'install', - title: 'wallet_connectors.desig.extension.step1.title', - }, - { - description: - 'wallet_connectors.desig.extension.step2.description', - step: 'create', - title: 'wallet_connectors.desig.extension.step2.title', - }, - { - description: - 'wallet_connectors.desig.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.desig.extension.step3.title', - }, - ], - learnMoreUrl: 'https://desig.io', - }, +export const desigWallet = (): Wallet => { + return { + id: 'desig', + name: 'Desig Wallet', + iconUrl: async () => (await import('./desigWallet.svg')).default, + iconBackground: '#ffffff', + installed: hasInjectedProvider({ namespace: 'desig.ethereum' }), + downloadUrls: { + android: 'https://play.google.com/store/apps/details?id=io.desig.app', + ios: 'https://apps.apple.com/app/desig-wallet/id6450106028', + qrCode: 'https://desig.io', + mobile: 'https://desig.io', + browserExtension: + 'https://chrome.google.com/webstore/detail/desig-wallet/panpgppehdchfphcigocleabcmcgfoca', + }, + extension: { + instructions: { + steps: [ + { + description: 'wallet_connectors.desig.extension.step1.description', + step: 'install', + title: 'wallet_connectors.desig.extension.step1.title', + }, + { + description: 'wallet_connectors.desig.extension.step2.description', + step: 'create', + title: 'wallet_connectors.desig.extension.step2.title', + }, + { + description: 'wallet_connectors.desig.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.desig.extension.step3.title', + }, + ], + learnMoreUrl: 'https://desig.io', }, - }; - }, -}); + }, + createConnector: getInjectedConnector({ + namespace: 'desig.ethereum', + }), + }; +}; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/enkryptWallet/enkryptWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/enkryptWallet/enkryptWallet.ts index fad630b045..534aae01b3 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/enkryptWallet/enkryptWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/enkryptWallet/enkryptWallet.ts @@ -1,61 +1,54 @@ -import type { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import type { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface EnkryptWalletOptions { - chains: Chain[]; -} - -export const enkryptWallet = ({ chains }: EnkryptWalletOptions): Wallet => ({ - id: 'enkrypt', - name: 'Enkrypt Wallet', - installed: hasInjectedProvider({ namespace: 'enkrypt.providers.ethereum' }), - iconUrl: async () => (await import('./enkryptWallet.svg')).default, - iconBackground: '#FFFFFF', - downloadUrls: { - qrCode: 'https://www.enkrypt.com', - chrome: - 'https://chrome.google.com/webstore/detail/enkrypt-ethereum-polkadot/kkpllkodjeloidieedojogacfhpaihoh', - browserExtension: 'https://www.enkrypt.com/', - edge: 'https://microsoftedge.microsoft.com/addons/detail/enkrypt-ethereum-polkad/gfenajajnjjmmdojhdjmnngomkhlnfjl', - firefox: 'https://addons.mozilla.org/en-US/firefox/addon/enkrypt/', - opera: 'https://addons.opera.com/en/extensions/details/enkrypt/', - safari: 'https://apps.apple.com/app/enkrypt-web3-wallet/id1640164309', - }, - createConnector: () => { - return { - connector: getInjectedConnector({ - chains, - namespace: 'enkrypt.providers.ethereum', - }), - extension: { - instructions: { - learnMoreUrl: 'https://blog.enkrypt.com/what-is-a-web3-wallet/', - steps: [ - { - description: - 'wallet_connectors.enkrypt.extension.step1.description', - step: 'install', - title: 'wallet_connectors.enkrypt.extension.step1.title', - }, - { - description: - 'wallet_connectors.enkrypt.extension.step2.description', - step: 'create', - title: 'wallet_connectors.enkrypt.extension.step2.title', - }, - { - description: - 'wallet_connectors.enkrypt.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.enkrypt.extension.step3.title', - }, - ], - }, +export const enkryptWallet = (): Wallet => { + return { + id: 'enkrypt', + name: 'Enkrypt Wallet', + rdns: 'com.enkrypt', + installed: hasInjectedProvider({ namespace: 'enkrypt.providers.ethereum' }), + iconUrl: async () => (await import('./enkryptWallet.svg')).default, + iconBackground: '#FFFFFF', + downloadUrls: { + qrCode: 'https://www.enkrypt.com', + chrome: + 'https://chrome.google.com/webstore/detail/enkrypt-ethereum-polkadot/kkpllkodjeloidieedojogacfhpaihoh', + browserExtension: 'https://www.enkrypt.com/', + edge: 'https://microsoftedge.microsoft.com/addons/detail/enkrypt-ethereum-polkad/gfenajajnjjmmdojhdjmnngomkhlnfjl', + firefox: 'https://addons.mozilla.org/en-US/firefox/addon/enkrypt/', + opera: 'https://addons.opera.com/en/extensions/details/enkrypt/', + safari: 'https://apps.apple.com/app/enkrypt-web3-wallet/id1640164309', + }, + extension: { + instructions: { + learnMoreUrl: 'https://blog.enkrypt.com/what-is-a-web3-wallet/', + steps: [ + { + description: + 'wallet_connectors.enkrypt.extension.step1.description', + step: 'install', + title: 'wallet_connectors.enkrypt.extension.step1.title', + }, + { + description: + 'wallet_connectors.enkrypt.extension.step2.description', + step: 'create', + title: 'wallet_connectors.enkrypt.extension.step2.title', + }, + { + description: + 'wallet_connectors.enkrypt.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.enkrypt.extension.step3.title', + }, + ], }, - }; - }, -}); + }, + createConnector: getInjectedConnector({ + namespace: 'enkrypt.providers.ethereum', + }), + }; +}; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/foxWallet/foxWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/foxWallet/foxWallet.ts index 70f2b7e5dd..ca0a2caaf6 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/foxWallet/foxWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/foxWallet/foxWallet.ts @@ -1,23 +1,15 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface FoxWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type FoxWalletOptions = DefaultWalletOptions; export const foxWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: FoxWalletOptions): Wallet => { const isFoxInjected = hasInjectedProvider({ namespace: 'foxwallet.ethereum', @@ -35,55 +27,44 @@ export const foxWallet = ({ ios: 'https://apps.apple.com/app/foxwallet-crypto-web3/id1590983231', qrCode: 'https://foxwallet.com/download', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }) - : getInjectedConnector({ chains, namespace: 'foxwallet.ethereum' }); - - return { - connector, - mobile: { - getUri: shouldUseWalletConnect - ? async () => { - const uri = await getWalletConnectUri(connector); - return `foxwallet://wc?uri=${encodeURIComponent(uri)}`; - } - : undefined, - }, - qrCode: shouldUseWalletConnect - ? { - getUri: async () => getWalletConnectUri(connector), - instructions: { - learnMoreUrl: 'https://foxwallet.com', - steps: [ - { - description: - 'wallet_connectors.fox.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.fox.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.fox.qr_code.step2.description', + mobile: { + getUri: shouldUseWalletConnect + ? (uri: string) => { + return `foxwallet://wc?uri=${encodeURIComponent(uri)}`; + } + : undefined, + }, + qrCode: shouldUseWalletConnect + ? { + getUri: (uri: string) => uri, + instructions: { + learnMoreUrl: 'https://foxwallet.com', + steps: [ + { + description: 'wallet_connectors.fox.qr_code.step1.description', + step: 'install', + title: 'wallet_connectors.fox.qr_code.step1.title', + }, + { + description: 'wallet_connectors.fox.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.fox.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.fox.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.fox.qr_code.step3.title', - }, - ], + step: 'create', + title: 'wallet_connectors.fox.qr_code.step2.title', }, - } - : undefined, - }; - }, + { + description: 'wallet_connectors.fox.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.fox.qr_code.step3.title', + }, + ], + }, + } + : undefined, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ namespace: 'foxwallet.ethereum' }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/frameWallet/frameWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/frameWallet/frameWallet.ts index 8767bdeae8..292b43ccdb 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/frameWallet/frameWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/frameWallet/frameWallet.ts @@ -1,15 +1,10 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface FrameWalletOptions { - chains: Chain[]; -} - -export const frameWallet = ({ chains }: FrameWalletOptions): Wallet => ({ +export const frameWallet = (): Wallet => ({ id: 'frame', name: 'Frame', installed: hasInjectedProvider({ flag: 'isFrame' }), @@ -18,30 +13,28 @@ export const frameWallet = ({ chains }: FrameWalletOptions): Wallet => ({ downloadUrls: { browserExtension: 'https://frame.sh/', }, - createConnector: () => ({ - connector: getInjectedConnector({ chains, flag: 'isFrame' }), - extension: { - instructions: { - learnMoreUrl: - 'https://docs.frame.sh/docs/Getting%20Started/Installation/', - steps: [ - { - description: 'wallet_connectors.frame.extension.step1.description', - step: 'install', - title: 'wallet_connectors.frame.extension.step1.title', - }, - { - description: 'wallet_connectors.frame.extension.step2.description', - step: 'create', - title: 'wallet_connectors.frame.extension.step2.title', - }, - { - description: 'wallet_connectors.frame.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.frame.extension.step3.title', - }, - ], - }, + extension: { + instructions: { + learnMoreUrl: + 'https://docs.frame.sh/docs/Getting%20Started/Installation/', + steps: [ + { + description: 'wallet_connectors.frame.extension.step1.description', + step: 'install', + title: 'wallet_connectors.frame.extension.step1.title', + }, + { + description: 'wallet_connectors.frame.extension.step2.description', + step: 'create', + title: 'wallet_connectors.frame.extension.step2.title', + }, + { + description: 'wallet_connectors.frame.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.frame.extension.step3.title', + }, + ], }, - }), + }, + createConnector: getInjectedConnector({ flag: 'isFrame' }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/frontierWallet/frontierWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/frontierWallet/frontierWallet.ts index 72962f5afd..1282465bf3 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/frontierWallet/frontierWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/frontierWallet/frontierWallet.ts @@ -1,24 +1,17 @@ -import type { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isAndroid } from '../../../utils/isMobile'; import type { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; +import { DefaultWalletOptions } from './../../Wallet'; -export interface FrontierWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type FrontierWalletOptions = DefaultWalletOptions; export const frontierWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: FrontierWalletOptions): Wallet => { const isFrontierInjected = hasInjectedProvider({ namespace: 'frontier.ethereum', @@ -28,6 +21,7 @@ export const frontierWallet = ({ return { id: 'frontier', name: 'Frontier Wallet', + rdns: 'xyz.frontier.wallet', installed: isFrontierInjected, iconUrl: async () => (await import('./frontierWallet.svg')).default, iconBackground: '#CC703C', @@ -40,84 +34,79 @@ export const frontierWallet = ({ 'https://chrome.google.com/webstore/detail/frontier-wallet/kppfdiipphfccemcignhifpjkapfbihd', browserExtension: 'https://www.frontier.xyz/download', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - chains, - projectId, - options: walletConnectOptions, - }) - : undefined; - const getUri = async () => { - const uri = await getWalletConnectUri(connector); - return isAndroid() - ? `frontier://wc?uri=${encodeURIComponent(uri)}` - : uri; - }; - return { - connector: getInjectedConnector({ - chains, - namespace: 'frontier.ethereum', - flag: 'isFrontier', - }), - mobile: { - getUri: shouldUseWalletConnect ? getUri : undefined, - }, - qrCode: shouldUseWalletConnect - ? { - getUri, - instructions: { - learnMoreUrl: 'https://help.frontier.xyz/en/', - steps: [ - { - description: - 'wallet_connectors.im_token.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.im_token.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.im_token.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.im_token.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.im_token.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.im_token.qr_code.step3.title', - }, - ], - }, - } - : undefined, - extension: { + + mobile: { + getUri: shouldUseWalletConnect + ? (uri: string) => { + return isAndroid() + ? `frontier://wc?uri=${encodeURIComponent(uri)}` + : uri; + } + : undefined, + }, + qrCode: shouldUseWalletConnect + ? { + getUri: (uri: string) => { + return isAndroid() + ? `frontier://wc?uri=${encodeURIComponent(uri)}` + : uri; + }, instructions: { - learnMoreUrl: - 'https://help.frontier.xyz/en/articles/6967236-setting-up-frontier-on-your-device', + learnMoreUrl: 'https://help.frontier.xyz/en/', steps: [ { description: - 'wallet_connectors.frontier.extension.step1.description', + 'wallet_connectors.im_token.qr_code.step1.description', step: 'install', - title: 'wallet_connectors.frontier.extension.step1.title', + title: 'wallet_connectors.im_token.qr_code.step1.title', }, { description: - 'wallet_connectors.frontier.extension.step2.description', + 'wallet_connectors.im_token.qr_code.step2.description', step: 'create', - title: 'wallet_connectors.frontier.extension.step2.title', + title: 'wallet_connectors.im_token.qr_code.step2.title', }, { description: - 'wallet_connectors.frontier.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.frontier.extension.step3.title', + 'wallet_connectors.im_token.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.im_token.qr_code.step3.title', }, ], }, - }, - }; + } + : undefined, + extension: { + instructions: { + learnMoreUrl: + 'https://help.frontier.xyz/en/articles/6967236-setting-up-frontier-on-your-device', + steps: [ + { + description: + 'wallet_connectors.frontier.extension.step1.description', + step: 'install', + title: 'wallet_connectors.frontier.extension.step1.title', + }, + { + description: + 'wallet_connectors.frontier.extension.step2.description', + step: 'create', + title: 'wallet_connectors.frontier.extension.step2.title', + }, + { + description: + 'wallet_connectors.frontier.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.frontier.extension.step3.title', + }, + ], + }, }, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ projectId, walletConnectParameters }) + : getInjectedConnector({ + namespace: 'frontier.ethereum', + flag: 'isFrontier', + }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/imTokenWallet/imTokenWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/imTokenWallet/imTokenWallet.ts index ceb9ea2d40..e07783f0d8 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/imTokenWallet/imTokenWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/imTokenWallet/imTokenWallet.ts @@ -1,19 +1,11 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface ImTokenWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type ImTokenWalletOptions = DefaultWalletOptions; export const imTokenWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: ImTokenWalletOptions): Wallet => ({ id: 'imToken', name: 'imToken', @@ -25,51 +17,40 @@ export const imTokenWallet = ({ mobile: 'https://token.im/download', qrCode: 'https://token.im/download', }, - createConnector: () => { - const connector = getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }); - - return { - connector, - mobile: { - getUri: async () => { - const uri = await getWalletConnectUri(connector); - return `imtokenv2://wc?uri=${encodeURIComponent(uri)}`; + mobile: { + getUri: (uri: string) => { + return `imtokenv2://wc?uri=${encodeURIComponent(uri)}`; + }, + }, + qrCode: { + getUri: (uri: string) => uri, + instructions: { + learnMoreUrl: + typeof window !== 'undefined' && + window.navigator.language.includes('zh') + ? 'https://support.token.im/hc/zh-cn/categories/360000925393' + : 'https://support.token.im/hc/en-us/categories/360000925393', + steps: [ + { + description: 'wallet_connectors.im_token.qr_code.step1.description', + step: 'install', + title: 'wallet_connectors.im_token.qr_code.step1.title', + }, + { + description: 'wallet_connectors.im_token.qr_code.step2.description', + step: 'create', + title: 'wallet_connectors.im_token.qr_code.step2.title', }, - }, - qrCode: { - getUri: async () => getWalletConnectUri(connector), - instructions: { - learnMoreUrl: - typeof window !== 'undefined' && - window.navigator.language.includes('zh') - ? 'https://support.token.im/hc/zh-cn/categories/360000925393' - : 'https://support.token.im/hc/en-us/categories/360000925393', - steps: [ - { - description: - 'wallet_connectors.im_token.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.im_token.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.im_token.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.im_token.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.im_token.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.im_token.qr_code.step3.title', - }, - ], + { + description: 'wallet_connectors.im_token.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.im_token.qr_code.step3.title', }, - }, - }; + ], + }, }, + createConnector: getWalletConnectConnector({ + projectId, + walletConnectParameters, + }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/index.ts b/packages/rainbowkit/src/wallets/walletConnectors/index.ts index 083e7a16b1..214f693809 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/index.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/index.ts @@ -13,6 +13,7 @@ import { foxWallet } from './foxWallet/foxWallet'; import { frameWallet } from './frameWallet/frameWallet'; import { frontierWallet } from './frontierWallet/frontierWallet'; import { imTokenWallet } from './imTokenWallet/imTokenWallet'; +import { injectedWallet } from './injectedWallet/injectedWallet'; import { ledgerWallet } from './ledgerWallet/ledgerWallet'; import { metaMaskWallet } from './metaMaskWallet/metaMaskWallet'; import { mewWallet } from './mewWallet/mewWallet'; @@ -76,4 +77,5 @@ export { xdefiWallet, zealWallet, zerionWallet, + injectedWallet, }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/browserWallet/browserWallet.svg b/packages/rainbowkit/src/wallets/walletConnectors/injectedWallet/injectedWallet.svg similarity index 100% rename from packages/rainbowkit/src/wallets/walletConnectors/browserWallet/browserWallet.svg rename to packages/rainbowkit/src/wallets/walletConnectors/injectedWallet/injectedWallet.svg diff --git a/packages/rainbowkit/src/wallets/walletConnectors/injectedWallet/injectedWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/injectedWallet/injectedWallet.ts new file mode 100644 index 0000000000..f59c8d35f7 --- /dev/null +++ b/packages/rainbowkit/src/wallets/walletConnectors/injectedWallet/injectedWallet.ts @@ -0,0 +1,10 @@ +import { Wallet } from '../../Wallet'; +import { getInjectedConnector } from '../../getInjectedConnector'; + +export const injectedWallet = (): Wallet => ({ + id: 'injected', + name: 'Browser Wallet', + iconUrl: async () => (await import('./injectedWallet.svg')).default, + iconBackground: '#fff', + createConnector: getInjectedConnector({}), +}); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/ledgerWallet/ledgerWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/ledgerWallet/ledgerWallet.ts index ec21f3b527..ca16e9fa39 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/ledgerWallet/ledgerWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/ledgerWallet/ledgerWallet.ts @@ -1,20 +1,12 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isAndroid } from '../../../utils/isMobile'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface LedgerWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type LedgerWalletOptions = DefaultWalletOptions; export const ledgerWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: LedgerWalletOptions): Wallet => ({ id: 'ledger', iconBackground: '#000', @@ -31,77 +23,67 @@ export const ledgerWallet = ({ linux: 'https://www.ledger.com/ledger-live/download', desktop: 'https://www.ledger.com/ledger-live', }, - createConnector: () => { - const connector = getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }); - - return { - connector, - mobile: { - getUri: async () => { - const uri = await getWalletConnectUri(connector); - return isAndroid() - ? uri - : `ledgerlive://wc?uri=${encodeURIComponent(uri)}`; + mobile: { + getUri: (uri: string) => { + return isAndroid() + ? uri + : `ledgerlive://wc?uri=${encodeURIComponent(uri)}`; + }, + }, + desktop: { + getUri: (uri: string) => { + return `ledgerlive://wc?uri=${encodeURIComponent(uri)}`; + }, + instructions: { + learnMoreUrl: + 'https://support.ledger.com/hc/en-us/articles/4404389503889-Getting-started-with-Ledger-Live', + steps: [ + { + description: 'wallet_connectors.ledger.desktop.step1.description', + step: 'install', + title: 'wallet_connectors.ledger.desktop.step1.title', }, - }, - desktop: { - getUri: async () => { - const uri = await getWalletConnectUri(connector); - return `ledgerlive://wc?uri=${encodeURIComponent(uri)}`; + { + description: 'wallet_connectors.ledger.desktop.step2.description', + step: 'create', + title: 'wallet_connectors.ledger.desktop.step2.title', }, - instructions: { - learnMoreUrl: - 'https://support.ledger.com/hc/en-us/articles/4404389503889-Getting-started-with-Ledger-Live', - steps: [ - { - description: 'wallet_connectors.ledger.desktop.step1.description', - step: 'install', - title: 'wallet_connectors.ledger.desktop.step1.title', - }, - { - description: 'wallet_connectors.ledger.desktop.step2.description', - step: 'create', - title: 'wallet_connectors.ledger.desktop.step2.title', - }, - { - description: 'wallet_connectors.ledger.desktop.step3.description', - step: 'connect', - title: 'wallet_connectors.ledger.desktop.step3.title', - }, - ], + { + description: 'wallet_connectors.ledger.desktop.step3.description', + step: 'connect', + title: 'wallet_connectors.ledger.desktop.step3.title', + }, + ], + }, + }, + qrCode: { + getUri: (uri: string) => { + return `ledgerlive://wc?uri=${encodeURIComponent(uri)}`; + }, + instructions: { + learnMoreUrl: + 'https://support.ledger.com/hc/en-us/articles/4404389503889-Getting-started-with-Ledger-Live', + steps: [ + { + description: 'wallet_connectors.ledger.qr_code.step1.description', + step: 'install', + title: 'wallet_connectors.ledger.qr_code.step1.title', }, - }, - qrCode: { - getUri: async () => { - const uri = await getWalletConnectUri(connector); - return `ledgerlive://wc?uri=${encodeURIComponent(uri)}`; + { + description: 'wallet_connectors.ledger.qr_code.step2.description', + step: 'create', + title: 'wallet_connectors.ledger.qr_code.step2.title', }, - instructions: { - learnMoreUrl: - 'https://support.ledger.com/hc/en-us/articles/4404389503889-Getting-started-with-Ledger-Live', - steps: [ - { - description: 'wallet_connectors.ledger.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.ledger.qr_code.step1.title', - }, - { - description: 'wallet_connectors.ledger.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.ledger.qr_code.step2.title', - }, - { - description: 'wallet_connectors.ledger.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.ledger.qr_code.step3.title', - }, - ], + { + description: 'wallet_connectors.ledger.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.ledger.qr_code.step3.title', }, - }, - }; + ], + }, }, + createConnector: getWalletConnectConnector({ + projectId, + walletConnectParameters, + }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/metaMaskWallet/metaMaskWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/metaMaskWallet/metaMaskWallet.ts index 726a11065a..b2bfef01bb 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/metaMaskWallet/metaMaskWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/metaMaskWallet/metaMaskWallet.ts @@ -1,19 +1,12 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isAndroid, isIOS } from '../../../utils/isMobile'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface MetaMaskWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type MetaMaskWalletOptions = DefaultWalletOptions; function isMetaMask(ethereum?: (typeof window)['ethereum']): boolean { // Logic borrowed from wagmi's MetaMaskConnector @@ -62,9 +55,8 @@ function isMetaMask(ethereum?: (typeof window)['ethereum']): boolean { } export const metaMaskWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: MetaMaskWalletOptions): Wallet => { // Not using the explicit isMetaMask fn to check for MetaMask // so that users can continue to use the MetaMask button @@ -74,9 +66,19 @@ export const metaMaskWallet = ({ const isMetaMaskInjected = hasInjectedProvider({ flag: 'isMetaMask' }); const shouldUseWalletConnect = !isMetaMaskInjected; + const getUri = (uri: string) => { + return isAndroid() + ? uri + : isIOS() + ? // currently broken in MetaMask v6.5.0 https://github.com/MetaMask/metamask-mobile/issues/6457 + `metamask://wc?uri=${encodeURIComponent(uri)}` + : `https://metamask.app.link/wc?uri=${encodeURIComponent(uri)}`; + }; + return { id: 'metaMask', name: 'MetaMask', + rdns: 'io.metamask', iconUrl: async () => (await import('./metaMaskWallet.svg')).default, iconAccent: '#f6851a', iconBackground: '#fff', @@ -93,92 +95,73 @@ export const metaMaskWallet = ({ opera: 'https://addons.opera.com/extensions/details/metamask-10', browserExtension: 'https://metamask.io/download', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }) - : getInjectedConnector({ - chains, - // custom handling for metamask button fallback for third party wallets - getProvider: () => - typeof window !== 'undefined' - ? window.ethereum?.providers?.find(isMetaMask) ?? - window.ethereum - : undefined, - }); - const getUri = async () => { - const uri = await getWalletConnectUri(connector); - return isAndroid() - ? uri - : isIOS() - ? // currently broken in MetaMask v6.5.0 https://github.com/MetaMask/metamask-mobile/issues/6457 - `metamask://wc?uri=${encodeURIComponent(uri)}` - : `https://metamask.app.link/wc?uri=${encodeURIComponent(uri)}`; - }; - - return { - connector, - mobile: { - getUri: shouldUseWalletConnect ? getUri : undefined, - }, - qrCode: shouldUseWalletConnect - ? { - getUri, - instructions: { - learnMoreUrl: 'https://metamask.io/faqs/', - steps: [ - { - description: - 'wallet_connectors.metamask.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.metamask.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.metamask.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.metamask.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.metamask.qr_code.step3.description', - step: 'refresh', - title: 'wallet_connectors.metamask.qr_code.step3.title', - }, - ], - }, - } - : undefined, - extension: { + mobile: { + getUri: shouldUseWalletConnect ? getUri : undefined, + }, + qrCode: shouldUseWalletConnect + ? { + getUri, instructions: { learnMoreUrl: 'https://metamask.io/faqs/', steps: [ { description: - 'wallet_connectors.metamask.extension.step1.description', + 'wallet_connectors.metamask.qr_code.step1.description', step: 'install', - title: 'wallet_connectors.metamask.extension.step1.title', + title: 'wallet_connectors.metamask.qr_code.step1.title', }, { description: - 'wallet_connectors.metamask.extension.step2.description', + 'wallet_connectors.metamask.qr_code.step2.description', step: 'create', - title: 'wallet_connectors.metamask.extension.step2.title', + title: 'wallet_connectors.metamask.qr_code.step2.title', }, { description: - 'wallet_connectors.metamask.extension.step3.description', + 'wallet_connectors.metamask.qr_code.step3.description', step: 'refresh', - title: 'wallet_connectors.metamask.extension.step3.title', + title: 'wallet_connectors.metamask.qr_code.step3.title', }, ], }, - }, - }; + } + : undefined, + extension: { + instructions: { + learnMoreUrl: 'https://metamask.io/faqs/', + steps: [ + { + description: + 'wallet_connectors.metamask.extension.step1.description', + step: 'install', + title: 'wallet_connectors.metamask.extension.step1.title', + }, + { + description: + 'wallet_connectors.metamask.extension.step2.description', + step: 'create', + title: 'wallet_connectors.metamask.extension.step2.title', + }, + { + description: + 'wallet_connectors.metamask.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.metamask.extension.step3.title', + }, + ], + }, }, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ + target: + typeof window !== 'undefined' + ? window.ethereum?.providers?.find(isMetaMask) ?? window.ethereum + : undefined, + }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/mewWallet/mewWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/mewWallet/mewWallet.ts index 10d854865c..e2cf106548 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/mewWallet/mewWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/mewWallet/mewWallet.ts @@ -1,15 +1,10 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface MewWalletOptions { - chains: Chain[]; -} - -export const mewWallet = ({ chains }: MewWalletOptions): Wallet => { +export const mewWallet = (): Wallet => { return { id: 'mew', name: 'MEW wallet', @@ -23,10 +18,6 @@ export const mewWallet = ({ chains }: MewWalletOptions): Wallet => { mobile: 'https://mewwallet.com', qrCode: 'https://mewwallet.com', }, - createConnector: () => { - return { - connector: getInjectedConnector({ chains, flag: 'isMEWwallet' }), - }; - }, + createConnector: getInjectedConnector({ flag: 'isMEWwallet' }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/oktoWallet/oktoWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/oktoWallet/oktoWallet.ts index 911738ba3a..cfdbca3c13 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/oktoWallet/oktoWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/oktoWallet/oktoWallet.ts @@ -1,20 +1,12 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isAndroid } from '../../../utils/isMobile'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface OktoWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type OktoWalletOptions = DefaultWalletOptions; export const oktoWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: OktoWalletOptions): Wallet => ({ id: 'Okto', name: 'Okto', @@ -27,44 +19,36 @@ export const oktoWallet = ({ mobile: 'https://okto.tech/', qrCode: 'https://okto.tech/', }, - createConnector: () => { - const connector = getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }); - - return { - connector, - mobile: { - getUri: async () => { - const uri = await getWalletConnectUri(connector); - return isAndroid() ? uri : `okto://wc?uri=${encodeURIComponent(uri)}`; + mobile: { + getUri: (uri: string) => { + return isAndroid() ? uri : `okto://wc?uri=${encodeURIComponent(uri)}`; + }, + }, + qrCode: { + getUri: (uri: string) => uri, + instructions: { + learnMoreUrl: 'https://okto.tech/', + steps: [ + { + description: 'wallet_connectors.okto.qr_code.step1.description', + step: 'install', + title: 'wallet_connectors.okto.qr_code.step1.title', + }, + { + description: 'wallet_connectors.okto.qr_code.step2.description', + step: 'create', + title: 'wallet_connectors.okto.qr_code.step2.title', }, - }, - qrCode: { - getUri: async () => getWalletConnectUri(connector), - instructions: { - learnMoreUrl: 'https://okto.tech/', - steps: [ - { - description: 'wallet_connectors.okto.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.okto.qr_code.step1.title', - }, - { - description: 'wallet_connectors.okto.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.okto.qr_code.step2.title', - }, - { - description: 'wallet_connectors.okto.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.okto.qr_code.step3.title', - }, - ], + { + description: 'wallet_connectors.okto.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.okto.qr_code.step3.title', }, - }, - }; + ], + }, }, + createConnector: getWalletConnectConnector({ + projectId, + walletConnectParameters, + }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/okxWallet/okxWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/okxWallet/okxWallet.ts index 3608d16de5..5f793342dd 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/okxWallet/okxWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/okxWallet/okxWallet.ts @@ -1,24 +1,16 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isAndroid } from '../../../utils/isMobile'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface OKXWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type OKXWalletOptions = DefaultWalletOptions; export const okxWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: OKXWalletOptions): Wallet => { const isOKXInjected = hasInjectedProvider({ namespace: 'okxwallet' }); const shouldUseWalletConnect = !isOKXInjected; @@ -26,6 +18,7 @@ export const okxWallet = ({ return { id: 'okx', name: 'OKX Wallet', + rdns: 'com.okex.wallet', iconUrl: async () => (await import('./okxWallet.svg')).default, iconAccent: '#000', iconBackground: '#000', @@ -41,81 +34,68 @@ export const okxWallet = ({ firefox: 'https://addons.mozilla.org/firefox/addon/okexwallet/', browserExtension: 'https://okx.com/download', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }) - : getInjectedConnector({ chains, namespace: 'okxwallet' }); - - return { - connector, - mobile: { - getUri: shouldUseWalletConnect - ? async () => { - const uri = await getWalletConnectUri(connector); - return isAndroid() - ? uri - : `okex://main/wc?uri=${encodeURIComponent(uri)}`; - } - : undefined, - }, - qrCode: shouldUseWalletConnect - ? { - getUri: async () => getWalletConnectUri(connector), - instructions: { - learnMoreUrl: 'https://okx.com/web3/', - steps: [ - { - description: - 'wallet_connectors.okx.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.okx.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.okx.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.okx.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.okx.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.okx.qr_code.step3.title', - }, - ], - }, - } - : undefined, - extension: { + mobile: { + getUri: shouldUseWalletConnect + ? (uri: string) => { + return isAndroid() + ? uri + : `okex://main/wc?uri=${encodeURIComponent(uri)}`; + } + : undefined, + }, + qrCode: shouldUseWalletConnect + ? { + getUri: (uri: string) => uri, instructions: { learnMoreUrl: 'https://okx.com/web3/', steps: [ { - description: - 'wallet_connectors.okx.extension.step1.description', + description: 'wallet_connectors.okx.qr_code.step1.description', step: 'install', - title: 'wallet_connectors.okx.extension.step1.title', + title: 'wallet_connectors.okx.qr_code.step1.title', }, { - description: - 'wallet_connectors.okx.extension.step2.description', + description: 'wallet_connectors.okx.qr_code.step2.description', step: 'create', - title: 'wallet_connectors.okx.extension.step2.title', + title: 'wallet_connectors.okx.qr_code.step2.title', }, { - description: - 'wallet_connectors.okx.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.okx.extension.step3.title', + description: 'wallet_connectors.okx.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.okx.qr_code.step3.title', }, ], }, - }, - }; + } + : undefined, + extension: { + instructions: { + learnMoreUrl: 'https://okx.com/web3/', + steps: [ + { + description: 'wallet_connectors.okx.extension.step1.description', + step: 'install', + title: 'wallet_connectors.okx.extension.step1.title', + }, + { + description: 'wallet_connectors.okx.extension.step2.description', + step: 'create', + title: 'wallet_connectors.okx.extension.step2.title', + }, + { + description: 'wallet_connectors.okx.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.okx.extension.step3.title', + }, + ], + }, }, + + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ namespace: 'okxwallet' }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/omniWallet/omniWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/omniWallet/omniWallet.ts index 8f9a1bb523..35d1688406 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/omniWallet/omniWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/omniWallet/omniWallet.ts @@ -1,20 +1,12 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isAndroid } from '../../../utils/isMobile'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface OmniWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type OmniWalletOptions = DefaultWalletOptions; export const omniWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: OmniWalletOptions): Wallet => ({ id: 'omni', name: 'Omni', @@ -26,44 +18,36 @@ export const omniWallet = ({ mobile: 'https://omniwallet.app.link', qrCode: 'https://omniwallet.app.link', }, - createConnector: () => { - const connector = getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }); - - return { - connector, - mobile: { - getUri: async () => { - const uri = await getWalletConnectUri(connector); - return isAndroid() ? uri : `omni://wc?uri=${encodeURIComponent(uri)}`; + mobile: { + getUri: (uri: string) => { + return isAndroid() ? uri : `omni://wc?uri=${encodeURIComponent(uri)}`; + }, + }, + qrCode: { + getUri: (uri: string) => uri, + instructions: { + learnMoreUrl: 'https://omni.app/support', + steps: [ + { + description: 'wallet_connectors.omni.qr_code.step1.description', + step: 'install', + title: 'wallet_connectors.omni.qr_code.step1.title', + }, + { + description: 'wallet_connectors.omni.qr_code.step2.description', + step: 'create', + title: 'wallet_connectors.omni.qr_code.step2.title', }, - }, - qrCode: { - getUri: async () => getWalletConnectUri(connector), - instructions: { - learnMoreUrl: 'https://omni.app/support', - steps: [ - { - description: 'wallet_connectors.omni.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.omni.qr_code.step1.title', - }, - { - description: 'wallet_connectors.omni.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.omni.qr_code.step2.title', - }, - { - description: 'wallet_connectors.omni.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.omni.qr_code.step3.title', - }, - ], + { + description: 'wallet_connectors.omni.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.omni.qr_code.step3.title', }, - }, - }; + ], + }, }, + createConnector: getWalletConnectConnector({ + projectId, + walletConnectParameters, + }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/oneKeyWallet/oneKeyWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/oneKeyWallet/oneKeyWallet.ts index 541d58f2c1..6c5e83dcd6 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/oneKeyWallet/oneKeyWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/oneKeyWallet/oneKeyWallet.ts @@ -1,64 +1,57 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface OnekeyWalletOptions { - chains: Chain[]; -} +export const oneKeyWallet = (): Wallet => { + return { + id: 'onekey', + name: 'OneKey', + iconAccent: '#00B812', + iconBackground: '#fff', + iconUrl: async () => (await import('./oneKeyWallet.svg')).default, + installed: hasInjectedProvider({ namespace: '$onekey.ethereum' }), + downloadUrls: { + android: + 'https://play.google.com/store/apps/details?id=so.onekey.app.wallet', + browserExtension: 'https://www.onekey.so/download/', + chrome: + 'https://chrome.google.com/webstore/detail/onekey/jnmbobjmhlngoefaiojfljckilhhlhcj', + edge: 'https://microsoftedge.microsoft.com/addons/detail/onekey/obffkkagpmohennipjokmpllocnlndac', + ios: 'https://apps.apple.com/us/app/onekey-open-source-wallet/id1609559473', + mobile: 'https://www.onekey.so/download/', + qrCode: 'https://www.onekey.so/download/', + }, -export const oneKeyWallet = ({ chains }: OnekeyWalletOptions): Wallet => ({ - id: 'onekey', - name: 'OneKey', - iconUrl: async () => (await import('./oneKeyWallet.svg')).default, - iconAccent: '#00B812', - iconBackground: '#fff', - installed: hasInjectedProvider({ namespace: '$onekey.ethereum' }), - downloadUrls: { - android: - 'https://play.google.com/store/apps/details?id=so.onekey.app.wallet', - browserExtension: 'https://www.onekey.so/download/', - chrome: - 'https://chrome.google.com/webstore/detail/onekey/jnmbobjmhlngoefaiojfljckilhhlhcj', - edge: 'https://microsoftedge.microsoft.com/addons/detail/onekey/obffkkagpmohennipjokmpllocnlndac', - ios: 'https://apps.apple.com/us/app/onekey-open-source-wallet/id1609559473', - mobile: 'https://www.onekey.so/download/', - qrCode: 'https://www.onekey.so/download/', - }, - createConnector: () => { - return { - connector: getInjectedConnector({ - chains, - namespace: '$onekey.ethereum', - }), - extension: { - instructions: { - learnMoreUrl: - 'https://help.onekey.so/hc/en-us/categories/360000170236', - steps: [ - { - description: - 'wallet_connectors.one_key.extension.step1.description', - step: 'install', - title: 'wallet_connectors.one_key.extension.step1.title', - }, - { - description: - 'wallet_connectors.one_key.extension.step2.description', - step: 'create', - title: 'wallet_connectors.one_key.extension.step2.title', - }, - { - description: - 'wallet_connectors.one_key.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.one_key.extension.step3.title', - }, - ], - }, + extension: { + instructions: { + learnMoreUrl: 'https://help.onekey.so/hc/en-us/categories/360000170236', + steps: [ + { + description: + 'wallet_connectors.one_key.extension.step1.description', + step: 'install', + title: 'wallet_connectors.one_key.extension.step1.title', + }, + { + description: + 'wallet_connectors.one_key.extension.step2.description', + step: 'create', + title: 'wallet_connectors.one_key.extension.step2.title', + }, + { + description: + 'wallet_connectors.one_key.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.one_key.extension.step3.title', + }, + ], }, - }; - }, -}); + }, + + createConnector: getInjectedConnector({ + namespace: '$onekey.ethereum', + }), + }; +}; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/phantomWallet/phantomWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/phantomWallet/phantomWallet.ts index f5f3490ae3..4d1eea1c4b 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/phantomWallet/phantomWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/phantomWallet/phantomWallet.ts @@ -1,63 +1,54 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface PhantomWalletOptions { - chains: Chain[]; -} - -export const phantomWallet = ({ chains }: PhantomWalletOptions): Wallet => ({ - id: 'phantom', - name: 'Phantom', - iconUrl: async () => (await import('./phantomWallet.svg')).default, - iconBackground: '#9A8AEE', - installed: hasInjectedProvider({ namespace: 'phantom.ethereum' }), - downloadUrls: { - android: 'https://play.google.com/store/apps/details?id=app.phantom', - ios: 'https://apps.apple.com/app/phantom-solana-wallet/1598432977', - mobile: 'https://phantom.app/download', - qrCode: 'https://phantom.app/download', - chrome: - 'https://chrome.google.com/webstore/detail/phantom/bfnaelmomeimhlpmgjnjophhpkkoljpa', - firefox: 'https://addons.mozilla.org/firefox/addon/phantom-app/', - browserExtension: 'https://phantom.app/download', - }, - createConnector: () => { - const connector = getInjectedConnector({ - chains, - namespace: 'phantom.ethereum', - }); - - return { - connector, - extension: { - instructions: { - steps: [ - { - description: - 'wallet_connectors.phantom.extension.step1.description', - step: 'install', - title: 'wallet_connectors.phantom.extension.step1.title', - }, - { - description: - 'wallet_connectors.phantom.extension.step2.description', - step: 'create', - title: 'wallet_connectors.phantom.extension.step2.title', - }, - { - description: - 'wallet_connectors.phantom.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.phantom.extension.step3.title', - }, - ], - learnMoreUrl: 'https://help.phantom.app', - }, +export const phantomWallet = (): Wallet => { + return { + id: 'phantom', + name: 'Phantom', + rdns: 'app.phantom', + iconUrl: async () => (await import('./phantomWallet.svg')).default, + iconBackground: '#9A8AEE', + installed: hasInjectedProvider({ namespace: 'phantom.ethereum' }), + downloadUrls: { + android: 'https://play.google.com/store/apps/details?id=app.phantom', + ios: 'https://apps.apple.com/app/phantom-solana-wallet/1598432977', + mobile: 'https://phantom.app/download', + qrCode: 'https://phantom.app/download', + chrome: + 'https://chrome.google.com/webstore/detail/phantom/bfnaelmomeimhlpmgjnjophhpkkoljpa', + firefox: 'https://addons.mozilla.org/firefox/addon/phantom-app/', + browserExtension: 'https://phantom.app/download', + }, + extension: { + instructions: { + steps: [ + { + description: + 'wallet_connectors.phantom.extension.step1.description', + step: 'install', + title: 'wallet_connectors.phantom.extension.step1.title', + }, + { + description: + 'wallet_connectors.phantom.extension.step2.description', + step: 'create', + title: 'wallet_connectors.phantom.extension.step2.title', + }, + { + description: + 'wallet_connectors.phantom.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.phantom.extension.step3.title', + }, + ], + learnMoreUrl: 'https://help.phantom.app', }, - }; - }, -}); + }, + createConnector: getInjectedConnector({ + namespace: 'phantom.ethereum', + }), + }; +}; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/rabbyWallet/rabbyWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/rabbyWallet/rabbyWallet.ts index 1501b77096..4bc086764b 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/rabbyWallet/rabbyWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/rabbyWallet/rabbyWallet.ts @@ -1,18 +1,14 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface RabbyWalletOptions { - chains: Chain[]; -} - -export const rabbyWallet = ({ chains }: RabbyWalletOptions): Wallet => ({ +export const rabbyWallet = (): Wallet => ({ id: 'rabby', name: 'Rabby Wallet', iconUrl: async () => (await import('./rabbyWallet.svg')).default, + rdns: 'io.rabby', iconBackground: '#8697FF', installed: hasInjectedProvider({ flag: 'isRabby' }), downloadUrls: { @@ -20,29 +16,27 @@ export const rabbyWallet = ({ chains }: RabbyWalletOptions): Wallet => ({ 'https://chrome.google.com/webstore/detail/rabby-wallet/acmacodkjbdgmoleebolmdjonilkdbch', browserExtension: 'https://rabby.io', }, - createConnector: () => ({ - connector: getInjectedConnector({ chains, flag: 'isRabby' }), - extension: { - instructions: { - learnMoreUrl: 'https://rabby.io/', - steps: [ - { - description: 'wallet_connectors.rabby.extension.step1.description', - step: 'install', - title: 'wallet_connectors.rabby.extension.step1.title', - }, - { - description: 'wallet_connectors.rabby.extension.step2.description', - step: 'create', - title: 'wallet_connectors.rabby.extension.step2.title', - }, - { - description: 'wallet_connectors.rabby.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.rabby.extension.step3.title', - }, - ], - }, + extension: { + instructions: { + learnMoreUrl: 'https://rabby.io/', + steps: [ + { + description: 'wallet_connectors.rabby.extension.step1.description', + step: 'install', + title: 'wallet_connectors.rabby.extension.step1.title', + }, + { + description: 'wallet_connectors.rabby.extension.step2.description', + step: 'create', + title: 'wallet_connectors.rabby.extension.step2.title', + }, + { + description: 'wallet_connectors.rabby.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.rabby.extension.step3.title', + }, + ], }, - }), + }, + createConnector: getInjectedConnector({ flag: 'isRabby' }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/rainbowWallet/rainbowWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/rainbowWallet/rainbowWallet.ts index 1faf937f2c..3df2494e91 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/rainbowWallet/rainbowWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/rainbowWallet/rainbowWallet.ts @@ -1,30 +1,34 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isAndroid, isIOS } from '../../../utils/isMobile'; -import { Wallet } from '../../Wallet'; +import { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface RainbowWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type RainbowWalletOptions = DefaultWalletOptions; export const rainbowWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: RainbowWalletOptions): Wallet => { const isRainbowInjected = hasInjectedProvider({ flag: 'isRainbow' }); const shouldUseWalletConnect = !isRainbowInjected; + + const getUri = (uri: string) => { + return isAndroid() + ? uri + : isIOS() + ? `rainbow://wc?uri=${encodeURIComponent(uri)}&connector=rainbowkit` + : `https://rnbwapp.com/wc?uri=${encodeURIComponent( + uri, + )}&connector=rainbowkit`; + }; + return { id: 'rainbow', name: 'Rainbow', + rdns: 'me.rainbow', iconUrl: async () => (await import('./rainbowWallet.svg')).default, iconBackground: '#0c2f78', installed: !shouldUseWalletConnect ? isRainbowInjected : undefined, @@ -37,59 +41,42 @@ export const rainbowWallet = ({ 'https://rainbow.download?utm_source=rainbowkit&utm_medium=qrcode', browserExtension: 'https://rainbow.me/extension?utm_source=rainbowkit', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }) - : getInjectedConnector({ flag: 'isRainbow', chains }); - - const getUri = async () => { - const uri = await getWalletConnectUri(connector); - return isAndroid() - ? uri - : isIOS() - ? `rainbow://wc?uri=${encodeURIComponent(uri)}&connector=rainbowkit` - : `https://rnbwapp.com/wc?uri=${encodeURIComponent( - uri, - )}&connector=rainbowkit`; - }; - - return { - connector, - mobile: { getUri: shouldUseWalletConnect ? getUri : undefined }, - qrCode: shouldUseWalletConnect - ? { - getUri, - instructions: { - learnMoreUrl: - 'https://learn.rainbow.me/connect-to-a-website-or-app?utm_source=rainbowkit&utm_medium=connector&utm_campaign=learnmore', - steps: [ - { - description: - 'wallet_connectors.rainbow.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.rainbow.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.rainbow.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.rainbow.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.rainbow.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.rainbow.qr_code.step3.title', - }, - ], + mobile: { getUri: shouldUseWalletConnect ? getUri : undefined }, + qrCode: shouldUseWalletConnect + ? { + getUri, + instructions: { + learnMoreUrl: + 'https://learn.rainbow.me/connect-to-a-website-or-app?utm_source=rainbowkit&utm_medium=connector&utm_campaign=learnmore', + steps: [ + { + description: + 'wallet_connectors.rainbow.qr_code.step1.description', + step: 'install', + title: 'wallet_connectors.rainbow.qr_code.step1.title', }, - } - : undefined, - }; - }, + { + description: + 'wallet_connectors.rainbow.qr_code.step2.description', + step: 'create', + title: 'wallet_connectors.rainbow.qr_code.step2.title', + }, + { + description: + 'wallet_connectors.rainbow.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.rainbow.qr_code.step3.title', + }, + ], + }, + } + : undefined, + + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ flag: 'isRainbow' }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/safeWallet/safeWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/safeWallet/safeWallet.ts index d3f005259f..3614247009 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/safeWallet/safeWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/safeWallet/safeWallet.ts @@ -1,21 +1,8 @@ -import type { SafeConnectorOptions } from 'wagmi/connectors/safe'; -import { SafeConnector } from 'wagmi/connectors/safe'; -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { Wallet } from '../../Wallet'; +import { createConnector } from 'wagmi'; +import { safe } from 'wagmi/connectors'; +import { Wallet, WalletDetailsParams } from '../../Wallet'; -/** - * @protected `safeWallet` interface` - */ -export interface SafeWalletOptions { - chains: Chain[]; -} - -/** - * @protected Safe Browser wallet connector - */ -export const safeWallet = ({ - chains, -}: SafeWalletOptions & SafeConnectorOptions): Wallet => ({ +export const safeWallet = (): Wallet => ({ id: 'safe', name: 'Safe', iconAccent: '#12ff80', @@ -30,7 +17,10 @@ export const safeWallet = ({ // already running as a Safe App within the context of the Safe browser, // since it's unlikely to be a desired behavior for users. }, - createConnector: () => ({ - connector: new SafeConnector({ chains }), - }), + createConnector: (walletDetails: WalletDetailsParams) => { + return createConnector((config) => ({ + ...safe()(config), + ...walletDetails, + })); + }, }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/safeheronWallet/safeheronWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/safeheronWallet/safeheronWallet.ts index 21f6485f11..2952def40a 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/safeheronWallet/safeheronWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/safeheronWallet/safeheronWallet.ts @@ -1,17 +1,10 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface SafeheronWalletOptions { - chains: Chain[]; -} - -export const safeheronWallet = ({ - chains, -}: SafeheronWalletOptions): Wallet => ({ +export const safeheronWallet = (): Wallet => ({ id: 'safeheron', name: 'Safeheron', installed: hasInjectedProvider({ @@ -25,36 +18,33 @@ export const safeheronWallet = ({ 'https://chrome.google.com/webstore/detail/safeheron/aiaghdjafpiofpainifbgfgjfpclngoh', browserExtension: 'https://www.safeheron.com/', }, - createConnector: () => ({ - connector: getInjectedConnector({ - chains, - namespace: 'safeheron', - flag: 'isSafeheron', - }), - extension: { - instructions: { - learnMoreUrl: 'https://www.safeheron.com/', - steps: [ - { - description: - 'wallet_connectors.safeheron.extension.step1.description', - step: 'install', - title: 'wallet_connectors.safeheron.extension.step1.title', - }, - { - description: - 'wallet_connectors.safeheron.extension.step2.description', - step: 'create', - title: 'wallet_connectors.safeheron.extension.step2.title', - }, - { - description: - 'wallet_connectors.safeheron.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.safeheron.extension.step3.title', - }, - ], - }, + extension: { + instructions: { + learnMoreUrl: 'https://www.safeheron.com/', + steps: [ + { + description: + 'wallet_connectors.safeheron.extension.step1.description', + step: 'install', + title: 'wallet_connectors.safeheron.extension.step1.title', + }, + { + description: + 'wallet_connectors.safeheron.extension.step2.description', + step: 'create', + title: 'wallet_connectors.safeheron.extension.step2.title', + }, + { + description: + 'wallet_connectors.safeheron.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.safeheron.extension.step3.title', + }, + ], }, + }, + createConnector: getInjectedConnector({ + namespace: 'safeheron', + flag: 'isSafeheron', }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/safepalWallet/safepalWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/safepalWallet/safepalWallet.ts index 3d8552c957..28f3847d88 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/safepalWallet/safepalWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/safepalWallet/safepalWallet.ts @@ -1,23 +1,19 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; -import { InstructionStepName, Wallet } from '../../Wallet'; +import { + DefaultWalletOptions, + InstructionStepName, + Wallet, +} from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface SafepalWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type SafepalWalletOptions = DefaultWalletOptions; export const safepalWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: SafepalWalletOptions): Wallet => { const isSafePalWalletInjected = hasInjectedProvider({ namespace: 'safepalProvider', @@ -25,6 +21,69 @@ export const safepalWallet = ({ }); const shouldUseWalletConnect = !isSafePalWalletInjected; + const getUriMobile = (uri: string) => { + return `safepalwallet://wc?uri=${encodeURIComponent(uri)}`; + }; + + const getUriQR = async (uri: string) => { + return uri; + }; + + const mobileConnector = { + getUri: shouldUseWalletConnect ? getUriMobile : undefined, + }; + + let qrConnector = undefined; + + if (shouldUseWalletConnect) { + qrConnector = { + getUri: getUriQR, + instructions: { + learnMoreUrl: 'https://safepal.com/', + steps: [ + { + description: 'wallet_connectors.safepal.qr_code.step1.description', + step: 'install' as InstructionStepName, + title: 'wallet_connectors.safepal.qr_code.step1.title', + }, + { + description: 'wallet_connectors.safepal.qr_code.step2.description', + step: 'create' as InstructionStepName, + title: 'wallet_connectors.safepal.qr_code.step2.title', + }, + { + description: 'wallet_connectors.safepal.qr_code.step3.description', + step: 'scan' as InstructionStepName, + title: 'wallet_connectors.safepal.qr_code.step3.title', + }, + ], + }, + }; + } + + const extensionConnector = { + instructions: { + learnMoreUrl: 'https://www.safepal.com/download?product=2', + steps: [ + { + description: 'wallet_connectors.safepal.extension.step1.description', + step: 'install' as InstructionStepName, + title: 'wallet_connectors.safepal.extension.step1.title', + }, + { + description: 'wallet_connectors.safepal.extension.step2.description', + step: 'create' as InstructionStepName, + title: 'wallet_connectors.safepal.extension.step2.title', + }, + { + description: 'wallet_connectors.safepal.extension.step3.description', + step: 'refresh' as InstructionStepName, + title: 'wallet_connectors.safepal.extension.step3.title', + }, + ], + }, + }; + return { id: 'safepal', name: 'SafePal Wallet', @@ -32,7 +91,7 @@ export const safepalWallet = ({ // Note that we never resolve `installed` to `false` because the // SafePal Wallet provider falls back to other connection methods if // the injected connector isn't available - installed: isSafePalWalletInjected || undefined, + installed: isSafePalWalletInjected, iconAccent: '#3375BB', iconBackground: '#fff', downloadUrls: { @@ -45,98 +104,17 @@ export const safepalWallet = ({ 'https://chrome.google.com/webstore/detail/safepal-extension-wallet/lgmpcpglpngdoalbgeoldeajfclnhafa', browserExtension: 'https://www.safepal.com/download?product=2', }, - createConnector: () => { - const getUriMobile = async () => { - const uri = await getWalletConnectUri(connector); - - return `safepalwallet://wc?uri=${encodeURIComponent(uri)}`; - }; - - const getUriQR = async () => { - const uri = await getWalletConnectUri(connector); - - return uri; - }; - - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }) - : getInjectedConnector({ - chains, - namespace: 'safepalProvider', - flag: 'isSafePal', - }); - - const mobileConnector = { - getUri: shouldUseWalletConnect ? getUriMobile : undefined, - }; - - let qrConnector = undefined; - - if (shouldUseWalletConnect) { - qrConnector = { - getUri: getUriQR, - instructions: { - learnMoreUrl: 'https://safepal.com/', - steps: [ - { - description: - 'wallet_connectors.safepal.qr_code.step1.description', - step: 'install' as InstructionStepName, - title: 'wallet_connectors.safepal.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.safepal.qr_code.step2.description', - step: 'create' as InstructionStepName, - title: 'wallet_connectors.safepal.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.safepal.qr_code.step3.description', - step: 'scan' as InstructionStepName, - title: 'wallet_connectors.safepal.qr_code.step3.title', - }, - ], - }, - }; - } - - const extensionConnector = { - instructions: { - learnMoreUrl: 'https://www.safepal.com/download?product=2', - steps: [ - { - description: - 'wallet_connectors.safepal.extension.step1.description', - step: 'install' as InstructionStepName, - title: 'wallet_connectors.safepal.extension.step1.title', - }, - { - description: - 'wallet_connectors.safepal.extension.step2.description', - step: 'create' as InstructionStepName, - title: 'wallet_connectors.safepal.extension.step2.title', - }, - { - description: - 'wallet_connectors.safepal.extension.step3.description', - step: 'refresh' as InstructionStepName, - title: 'wallet_connectors.safepal.extension.step3.title', - }, - ], - }, - }; - - return { - connector, - mobile: mobileConnector, - qrCode: qrConnector, - extension: extensionConnector, - }; - }, + mobile: mobileConnector, + ...(qrConnector ? qrConnector : {}), + extension: extensionConnector, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ + namespace: 'safepalProvider', + flag: 'isSafePal', + }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/subWallet/subWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/subWallet/subWallet.ts index 6b2b2051b7..40f40fd69d 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/subWallet/subWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/subWallet/subWallet.ts @@ -1,29 +1,92 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; -import { InstructionStepName, Wallet } from '../../Wallet'; +import { + DefaultWalletOptions, + InstructionStepName, + Wallet, +} from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -import { - WalletConnectConnectorOptions, - getWalletConnectConnector, -} from '../../getWalletConnectConnector'; +import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -export interface SubWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type SubWalletOptions = DefaultWalletOptions; export const subWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: SubWalletOptions): Wallet => { const isSubWalletInjected = hasInjectedProvider({ namespace: 'SubWallet' }); const shouldUseWalletConnect = !isSubWalletInjected; + const getUriMobile = (uri: string) => { + return `subwallet://wc?uri=${encodeURIComponent(uri)}`; + }; + + const getUriQR = (uri: string) => { + return uri; + }; + + const mobileConnector = { + getUri: shouldUseWalletConnect ? getUriMobile : undefined, + }; + + let qrConnector = undefined; + + if (shouldUseWalletConnect) { + qrConnector = { + getUri: getUriQR, + instructions: { + learnMoreUrl: 'https://www.subwallet.app/', + steps: [ + { + description: + 'wallet_connectors.subwallet.qr_code.step1.description', + step: 'install' as InstructionStepName, + title: 'wallet_connectors.subwallet.qr_code.step1.title', + }, + { + description: + 'wallet_connectors.subwallet.qr_code.step2.description', + step: 'create' as InstructionStepName, + title: 'wallet_connectors.subwallet.qr_code.step2.title', + }, + { + description: + 'wallet_connectors.subwallet.qr_code.step3.description', + step: 'scan' as InstructionStepName, + title: 'wallet_connectors.subwallet.qr_code.step3.title', + }, + ], + }, + }; + } + + const extensionConnector = { + instructions: { + learnMoreUrl: 'https://www.subwallet.app/', + steps: [ + { + description: + 'wallet_connectors.subwallet.extension.step1.description', + step: 'install' as InstructionStepName, + title: 'wallet_connectors.subwallet.extension.step1.title', + }, + { + description: + 'wallet_connectors.subwallet.extension.step2.description', + step: 'create' as InstructionStepName, + title: 'wallet_connectors.subwallet.extension.step2.title', + }, + { + description: + 'wallet_connectors.subwallet.extension.step3.description', + step: 'refresh' as InstructionStepName, + title: 'wallet_connectors.subwallet.extension.step3.title', + }, + ], + }, + }; + return { id: 'subwallet', name: 'SubWallet', @@ -42,92 +105,14 @@ export const subWallet = ({ ios: 'https://apps.apple.com/us/app/subwallet-polkadot-wallet/id1633050285', qrCode: 'https://www.subwallet.app/download', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }) - : getInjectedConnector({ chains, namespace: 'SubWallet' }); - - const getUriMobile = async () => { - const uri = await getWalletConnectUri(connector); - - return `subwallet://wc?uri=${encodeURIComponent(uri)}`; - }; - - const getUriQR = async () => { - return await getWalletConnectUri(connector); - }; - - const mobileConnector = { - getUri: shouldUseWalletConnect ? getUriMobile : undefined, - }; - - let qrConnector = undefined; - - if (shouldUseWalletConnect) { - qrConnector = { - getUri: getUriQR, - instructions: { - learnMoreUrl: 'https://www.subwallet.app/', - steps: [ - { - description: - 'wallet_connectors.subwallet.qr_code.step1.description', - step: 'install' as InstructionStepName, - title: 'wallet_connectors.subwallet.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.subwallet.qr_code.step2.description', - step: 'create' as InstructionStepName, - title: 'wallet_connectors.subwallet.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.subwallet.qr_code.step3.description', - step: 'scan' as InstructionStepName, - title: 'wallet_connectors.subwallet.qr_code.step3.title', - }, - ], - }, - }; - } - - const extensionConnector = { - instructions: { - learnMoreUrl: 'https://www.subwallet.app/', - steps: [ - { - description: - 'wallet_connectors.subwallet.extension.step1.description', - step: 'install' as InstructionStepName, - title: 'wallet_connectors.subwallet.extension.step1.title', - }, - { - description: - 'wallet_connectors.subwallet.extension.step2.description', - step: 'create' as InstructionStepName, - title: 'wallet_connectors.subwallet.extension.step2.title', - }, - { - description: - 'wallet_connectors.subwallet.extension.step3.description', - step: 'refresh' as InstructionStepName, - title: 'wallet_connectors.subwallet.extension.step3.title', - }, - ], - }, - }; - - return { - connector, - mobile: mobileConnector, - qrCode: qrConnector, - extension: extensionConnector, - }; - }, + mobile: mobileConnector, + qrCode: qrConnector, + extension: extensionConnector, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ namespace: 'SubWallet' }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/tahoWallet/tahoWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/tahoWallet/tahoWallet.ts index 17b536dfce..233ed3b067 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/tahoWallet/tahoWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/tahoWallet/tahoWallet.ts @@ -1,55 +1,47 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface TahoWalletOptions { - chains: Chain[]; -} - -export const tahoWallet = ({ chains }: TahoWalletOptions): Wallet => ({ - id: 'taho', - name: 'Taho', - iconBackground: '#d08d57', - iconUrl: async () => (await import('./tahoWallet.svg')).default, - downloadUrls: { - chrome: - 'https://chrome.google.com/webstore/detail/taho/eajafomhmkipbjmfmhebemolkcicgfmd', - browserExtension: 'https://taho.xyz', - }, - installed: hasInjectedProvider({ namespace: 'tally', flag: 'isTally' }), - createConnector: () => { - return { - connector: getInjectedConnector({ - chains, - namespace: 'tally', - flag: 'isTally', - }), - extension: { - instructions: { - learnMoreUrl: - 'https://tahowallet.notion.site/Taho-Knowledge-Base-4d95ed5439c64d6db3d3d27abf1fdae5', - steps: [ - { - description: 'wallet_connectors.taho.extension.step1.description', - step: 'install', - title: 'wallet_connectors.taho.extension.step1.title', - }, - { - description: 'wallet_connectors.taho.extension.step2.description', - step: 'create', - title: 'wallet_connectors.taho.extension.step2.title', - }, - { - description: 'wallet_connectors.taho.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.taho.extension.step3.title', - }, - ], - }, +export const tahoWallet = (): Wallet => { + return { + id: 'taho', + name: 'Taho', + iconBackground: '#d08d57', + iconUrl: async () => (await import('./tahoWallet.svg')).default, + downloadUrls: { + chrome: + 'https://chrome.google.com/webstore/detail/taho/eajafomhmkipbjmfmhebemolkcicgfmd', + browserExtension: 'https://taho.xyz', + }, + installed: hasInjectedProvider({ namespace: 'tally', flag: 'isTally' }), + extension: { + instructions: { + learnMoreUrl: + 'https://tahowallet.notion.site/Taho-Knowledge-Base-4d95ed5439c64d6db3d3d27abf1fdae5', + steps: [ + { + description: 'wallet_connectors.taho.extension.step1.description', + step: 'install', + title: 'wallet_connectors.taho.extension.step1.title', + }, + { + description: 'wallet_connectors.taho.extension.step2.description', + step: 'create', + title: 'wallet_connectors.taho.extension.step2.title', + }, + { + description: 'wallet_connectors.taho.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.taho.extension.step3.title', + }, + ], }, - }; - }, -}); + }, + createConnector: getInjectedConnector({ + namespace: 'tally', + flag: 'isTally', + }), + }; +}; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/talismanWallet/talismanWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/talismanWallet/talismanWallet.ts index 1edf2bda2f..a5e4c64cc8 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/talismanWallet/talismanWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/talismanWallet/talismanWallet.ts @@ -1,17 +1,13 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface TalismanWalletOptions { - chains: Chain[]; -} - -export const talismanWallet = ({ chains }: TalismanWalletOptions): Wallet => ({ +export const talismanWallet = (): Wallet => ({ id: 'talisman', name: 'Talisman', + rdns: 'xyz.talisman', iconUrl: async () => (await import('./talismanWallet.svg')).default, iconBackground: '#fff', installed: hasInjectedProvider({ @@ -25,36 +21,30 @@ export const talismanWallet = ({ chains }: TalismanWalletOptions): Wallet => ({ 'https://addons.mozilla.org/en-US/firefox/addon/talisman-wallet-extension/', browserExtension: 'https://talisman.xyz/download', }, - createConnector: () => ({ - connector: getInjectedConnector({ - chains, - namespace: 'talismanEth', - flag: 'isTalisman', - }), - extension: { - instructions: { - learnMoreUrl: 'https://talisman.xyz/', - steps: [ - { - description: - 'wallet_connectors.talisman.extension.step1.description', - step: 'install', - title: 'wallet_connectors.talisman.extension.step1.title', - }, - { - description: - 'wallet_connectors.talisman.extension.step2.description', - step: 'create', - title: 'wallet_connectors.talisman.extension.step2.title', - }, - { - description: - 'wallet_connectors.talisman.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.talisman.extension.step3.title', - }, - ], - }, + extension: { + instructions: { + learnMoreUrl: 'https://talisman.xyz/', + steps: [ + { + description: 'wallet_connectors.talisman.extension.step1.description', + step: 'install', + title: 'wallet_connectors.talisman.extension.step1.title', + }, + { + description: 'wallet_connectors.talisman.extension.step2.description', + step: 'create', + title: 'wallet_connectors.talisman.extension.step2.title', + }, + { + description: 'wallet_connectors.talisman.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.talisman.extension.step3.title', + }, + ], }, + }, + createConnector: getInjectedConnector({ + namespace: 'talismanEth', + flag: 'isTalisman', }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/tokenPocketWallet/tokenPocketWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/tokenPocketWallet/tokenPocketWallet.ts index dfabc425bb..188e3af33e 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/tokenPocketWallet/tokenPocketWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/tokenPocketWallet/tokenPocketWallet.ts @@ -1,31 +1,28 @@ -import type { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isMobile } from '../../../utils/isMobile'; -import type { Wallet } from '../../Wallet'; +import type { DefaultWalletOptions, Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -export interface TokenPocketWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type TokenPocketWalletOptions = DefaultWalletOptions; export const tokenPocketWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: TokenPocketWalletOptions): Wallet => { const isTokenPocketInjected = hasInjectedProvider({ flag: 'isTokenPocket' }); const shouldUseWalletConnect = !isTokenPocketInjected; + const getUri = (uri: string) => { + return isMobile() ? `tpoutside://wc?uri=${encodeURIComponent(uri)}` : uri; + }; + return { id: 'tokenPocket', name: 'TokenPocket', + rdns: 'pro.tokenpocket', iconUrl: async () => (await import('./tokenPocketWallet.svg')).default, iconBackground: '#2980FE', installed: !shouldUseWalletConnect ? isTokenPocketInjected : undefined, @@ -39,82 +36,68 @@ export const tokenPocketWallet = ({ qrCode: 'https://tokenpocket.pro/en/download/app', mobile: 'https://tokenpocket.pro/en/download/app', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - chains, - projectId, - options: walletConnectOptions, - }) - : getInjectedConnector({ chains, flag: 'isTokenPocket' }); - - const getUri = async () => { - const uri = await getWalletConnectUri(connector); - return isMobile() - ? `tpoutside://wc?uri=${encodeURIComponent(uri)}` - : uri; - }; - - return { - connector, - mobile: { - getUri: shouldUseWalletConnect ? getUri : undefined, - }, - qrCode: shouldUseWalletConnect - ? { - getUri, - instructions: { - learnMoreUrl: 'https://help.tokenpocket.pro/en/', - steps: [ - { - description: - 'wallet_connectors.token_pocket.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.token_pocket.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.token_pocket.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.token_pocket.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.token_pocket.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.token_pocket.qr_code.step3.title', - }, - ], - }, - } - : undefined, - extension: { + mobile: { + getUri: shouldUseWalletConnect ? getUri : undefined, + }, + qrCode: shouldUseWalletConnect + ? { + getUri, instructions: { - learnMoreUrl: - 'https://help.tokenpocket.pro/en/extension-wallet/faq/installation-tutorial', + learnMoreUrl: 'https://help.tokenpocket.pro/en/', steps: [ { description: - 'wallet_connectors.token_pocket.extension.step1.description', + 'wallet_connectors.token_pocket.qr_code.step1.description', step: 'install', - title: 'wallet_connectors.token_pocket.extension.step1.title', + title: 'wallet_connectors.token_pocket.qr_code.step1.title', }, { description: - 'wallet_connectors.token_pocket.extension.step2.description', + 'wallet_connectors.token_pocket.qr_code.step2.description', step: 'create', - title: 'wallet_connectors.token_pocket.extension.step2.title', + title: 'wallet_connectors.token_pocket.qr_code.step2.title', }, { description: - 'wallet_connectors.token_pocket.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.token_pocket.extension.step3.title', + 'wallet_connectors.token_pocket.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.token_pocket.qr_code.step3.title', }, ], }, - }, - }; + } + : undefined, + extension: { + instructions: { + learnMoreUrl: + 'https://help.tokenpocket.pro/en/extension-wallet/faq/installation-tutorial', + steps: [ + { + description: + 'wallet_connectors.token_pocket.extension.step1.description', + step: 'install', + title: 'wallet_connectors.token_pocket.extension.step1.title', + }, + { + description: + 'wallet_connectors.token_pocket.extension.step2.description', + step: 'create', + title: 'wallet_connectors.token_pocket.extension.step2.title', + }, + { + description: + 'wallet_connectors.token_pocket.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.token_pocket.extension.step3.title', + }, + ], + }, }, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ flag: 'isTokenPocket' }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/tokenaryWallet/tokenaryWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/tokenaryWallet/tokenaryWallet.ts index 8400bfdb69..05d1392122 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/tokenaryWallet/tokenaryWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/tokenaryWallet/tokenaryWallet.ts @@ -1,4 +1,3 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { isSafari } from '../../../utils/browsers'; import { Wallet } from '../../Wallet'; import { @@ -6,11 +5,7 @@ import { hasInjectedProvider, } from '../../getInjectedConnector'; -export interface TokenaryWalletOptions { - chains: Chain[]; -} - -export const tokenaryWallet = ({ chains }: TokenaryWalletOptions): Wallet => ({ +export const tokenaryWallet = (): Wallet => ({ id: 'tokenary', name: 'Tokenary', iconUrl: async () => (await import('./tokenaryWallet.svg')).default, @@ -24,7 +19,5 @@ export const tokenaryWallet = ({ chains }: TokenaryWalletOptions): Wallet => ({ safari: 'https://tokenary.io/get', browserExtension: 'https://tokenary.io/get', }, - createConnector: () => ({ - connector: getInjectedConnector({ chains, flag: 'isTokenary' }), - }), + createConnector: getInjectedConnector({ flag: 'isTokenary' }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/trustWallet/trustWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/trustWallet/trustWallet.ts index cde311a6ac..378101238f 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/trustWallet/trustWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/trustWallet/trustWallet.ts @@ -1,33 +1,93 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isMobile } from '../../../utils/isMobile'; -import { InstructionStepName, Wallet } from '../../Wallet'; +import { + DefaultWalletOptions, + InstructionStepName, + Wallet, +} from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; -export interface TrustWalletOptions { - chains: Chain[]; - projectId: string; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type TrustWalletOptions = DefaultWalletOptions; export const trustWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: TrustWalletOptions): Wallet => { const isTrustWalletInjected = isMobile() ? hasInjectedProvider({ flag: 'isTrust' }) : hasInjectedProvider({ flag: 'isTrustWallet' }); const shouldUseWalletConnect = !isTrustWalletInjected; + const getUriMobile = (uri: string) => { + return `trust://wc?uri=${encodeURIComponent(uri)}`; + }; + + const getUriQR = (uri: string) => { + return uri; + }; + + const mobileConnector = { + getUri: shouldUseWalletConnect ? getUriMobile : undefined, + }; + + let qrConnector = undefined; + + if (shouldUseWalletConnect) { + qrConnector = { + getUri: getUriQR, + instructions: { + learnMoreUrl: 'https://trustwallet.com/', + steps: [ + { + description: 'wallet_connectors.trust.qr_code.step1.description', + step: 'install' as InstructionStepName, + title: 'wallet_connectors.trust.qr_code.step1.title', + }, + { + description: 'wallet_connectors.trust.qr_code.step2.description', + step: 'create' as InstructionStepName, + title: 'wallet_connectors.trust.qr_code.step2.title', + }, + { + description: 'wallet_connectors.trust.qr_code.step3.description', + step: 'scan' as InstructionStepName, + title: 'wallet_connectors.trust.qr_code.step3.title', + }, + ], + }, + }; + } + + const extensionConnector = { + instructions: { + learnMoreUrl: 'https://trustwallet.com/browser-extension', + steps: [ + { + description: 'wallet_connectors.trust.extension.step1.description', + step: 'install' as InstructionStepName, + title: 'wallet_connectors.trust.extension.step1.title', + }, + { + description: 'wallet_connectors.trust.extension.step2.description', + step: 'create' as InstructionStepName, + title: 'wallet_connectors.trust.extension.step2.title', + }, + { + description: 'wallet_connectors.trust.extension.step3.description', + step: 'refresh' as InstructionStepName, + title: 'wallet_connectors.trust.extension.step3.title', + }, + ], + }, + }; + return { id: 'trust', name: 'Trust Wallet', + rdns: 'com.trustwallet.app', iconUrl: async () => (await import('./trustWallet.svg')).default, // Note that we never resolve `installed` to `false` because the // Trust Wallet provider falls back to other connection methods if @@ -45,96 +105,16 @@ export const trustWallet = ({ 'https://chrome.google.com/webstore/detail/trust-wallet/egjidjbpglichdcondbcbdnbeeppgdph', browserExtension: 'https://trustwallet.com/browser-extension', }, - createConnector: () => { - const getUriMobile = async () => { - const uri = await getWalletConnectUri(connector); - - return `trust://wc?uri=${encodeURIComponent(uri)}`; - }; - - const getUriQR = async () => { - const uri = await getWalletConnectUri(connector); - - return uri; - }; - - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }) - : isMobile() - ? getInjectedConnector({ flag: 'isTrust', chains }) - : getInjectedConnector({ flag: 'isTrustWallet', chains }); - - const mobileConnector = { - getUri: shouldUseWalletConnect ? getUriMobile : undefined, - }; - - let qrConnector = undefined; - - if (shouldUseWalletConnect) { - qrConnector = { - getUri: getUriQR, - instructions: { - learnMoreUrl: 'https://trustwallet.com/', - steps: [ - { - description: - 'wallet_connectors.trust.qr_code.step1.description', - step: 'install' as InstructionStepName, - title: 'wallet_connectors.trust.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.trust.qr_code.step2.description', - step: 'create' as InstructionStepName, - title: 'wallet_connectors.trust.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.trust.qr_code.step3.description', - step: 'scan' as InstructionStepName, - title: 'wallet_connectors.trust.qr_code.step3.title', - }, - ], - }, - }; - } - - const extensionConnector = { - instructions: { - learnMoreUrl: 'https://trustwallet.com/browser-extension', - steps: [ - { - description: - 'wallet_connectors.trust.extension.step1.description', - step: 'install' as InstructionStepName, - title: 'wallet_connectors.trust.extension.step1.title', - }, - { - description: - 'wallet_connectors.trust.extension.step2.description', - step: 'create' as InstructionStepName, - title: 'wallet_connectors.trust.extension.step2.title', - }, - { - description: - 'wallet_connectors.trust.extension.step3.description', - step: 'refresh' as InstructionStepName, - title: 'wallet_connectors.trust.extension.step3.title', - }, - ], - }, - }; - - return { - connector, - mobile: mobileConnector, - qrCode: qrConnector, - extension: extensionConnector, - }; - }, + mobile: mobileConnector, + qrCode: qrConnector, + extension: extensionConnector, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : isMobile() + ? getInjectedConnector({ flag: 'isTrust' }) + : getInjectedConnector({ flag: 'isTrustWallet' }), }; }; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/uniswapWallet/uniswapWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/uniswapWallet/uniswapWallet.ts index 0ee3b4d732..74b9cc8d8b 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/uniswapWallet/uniswapWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/uniswapWallet/uniswapWallet.ts @@ -1,19 +1,12 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { Wallet } from '../../Wallet'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; +import { DefaultWalletOptions } from './../../Wallet'; -export interface UniswapWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type UniswapWalletOptions = DefaultWalletOptions; export const uniswapWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: UniswapWalletOptions): Wallet => ({ id: 'uniswap', name: 'Uniswap Wallet', @@ -24,47 +17,38 @@ export const uniswapWallet = ({ mobile: 'https://wallet.uniswap.org/', qrCode: 'https://wallet.uniswap.org/', }, - createConnector: () => { - const connector = getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }); - return { - connector, - mobile: { - getUri: async () => { - const uri = await getWalletConnectUri(connector); - return `uniswap://wc?uri=${encodeURIComponent(uri)}`; + mobile: { + getUri: (uri: string) => { + return `uniswap://wc?uri=${encodeURIComponent(uri)}`; + }, + }, + qrCode: { + getUri: (uri: string) => uri, + instructions: { + learnMoreUrl: 'https://wallet.uniswap.org/', + steps: [ + { + description: 'wallet_connectors.uniswap.qr_code.step1.description', + step: 'install', + title: 'wallet_connectors.uniswap.qr_code.step1.title', + }, + { + description: 'wallet_connectors.uniswap.qr_code.step2.description', + step: 'create', + title: 'wallet_connectors.uniswap.qr_code.step2.title', }, - }, - qrCode: { - getUri: async () => getWalletConnectUri(connector), - instructions: { - learnMoreUrl: 'https://wallet.uniswap.org/', - steps: [ - { - description: - 'wallet_connectors.uniswap.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.uniswap.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.uniswap.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.uniswap.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.uniswap.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.uniswap.qr_code.step3.title', - }, - ], + { + description: 'wallet_connectors.uniswap.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.uniswap.qr_code.step3.title', }, - }, - }; + ], + }, }, + + createConnector: getWalletConnectConnector({ + projectId, + walletConnectParameters, + }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/walletConnectWallet/walletConnectWallet.test.ts b/packages/rainbowkit/src/wallets/walletConnectors/walletConnectWallet/walletConnectWallet.test.ts index 7a793a5adb..4313aa7fcf 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/walletConnectWallet/walletConnectWallet.test.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/walletConnectWallet/walletConnectWallet.test.ts @@ -1,56 +1,39 @@ import { describe, expect, expectTypeOf, it } from 'vitest'; -import { mainnet } from 'wagmi/chains'; -import { WalletConnectConnector } from 'wagmi/connectors/walletConnect'; +import { Wallet } from '../../Wallet'; import { walletConnectWallet } from './walletConnectWallet'; describe('walletConnectWallet', () => { - const chains = [mainnet]; const projectId = 'test-project-id'; it('without projectId', () => { - // @ts-ignore - intentionally missing projectId for v2 default - const wallet = walletConnectWallet({ chains }); - expect(() => wallet.createConnector()).toThrowError(); + expect(() => + // @ts-ignore + walletConnectWallet({ + /* no project id */ + }), + ).toThrowError(); }); it('with projectId', () => { - const wallet = walletConnectWallet({ chains, projectId }); - const { connector } = wallet.createConnector(); - expect(connector.id).toBe('walletConnect'); - expectTypeOf(connector).toMatchTypeOf<WalletConnectConnector>(); + const wallet = walletConnectWallet({ projectId }); + + expect(wallet.id).toBe('walletConnect'); + expectTypeOf(wallet.createConnector).toMatchTypeOf< + Wallet['createConnector'] + >(); }); it('v2 options', () => { const wallet = walletConnectWallet({ - chains, - projectId, options: { - showQrModal: true, + isNewChainsStale: true, }, - }); - const { connector } = wallet.createConnector(); - - expect(connector.id).toBe('walletConnect'); - expectTypeOf(connector).toMatchTypeOf<WalletConnectConnector>(); - - expect(connector.options.qrcode).toBe(undefined); - expect(connector.options.showQrModal).toBe(true); - }); - - it('v2 walletConnectOptions', () => { - const wallet = walletConnectWallet({ - chains, projectId, - options: { - showQrModal: true, - }, }); - const { connector } = wallet.createConnector(); - - expect(connector.id).toBe('walletConnect'); - expectTypeOf(connector).toMatchTypeOf<WalletConnectConnector>(); - expect(connector.options.qrcode).toBe(undefined); - expect(connector.options.showQrModal).toBe(true); + expect(wallet.id).toBe('walletConnect'); + expectTypeOf(wallet.createConnector).toMatchTypeOf< + Wallet['createConnector'] + >(); }); }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/walletConnectWallet/walletConnectWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/walletConnectWallet/walletConnectWallet.ts index 571abc9e8f..a949b7990c 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/walletConnectWallet/walletConnectWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/walletConnectWallet/walletConnectWallet.ts @@ -1,47 +1,27 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; -import { isIOS } from '../../../utils/isMobile'; -import { Wallet } from '../../Wallet'; +import { RainbowKitWalletConnectParameters, Wallet } from '../../Wallet'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; export interface WalletConnectWalletOptions { projectId: string; - chains: Chain[]; - options?: WalletConnectConnectorOptions; + options?: RainbowKitWalletConnectParameters; } export const walletConnectWallet = ({ - chains, - options, projectId, -}: WalletConnectWalletOptions): Wallet => ({ - id: 'walletConnect', - name: 'WalletConnect', - iconUrl: async () => (await import('./walletConnectWallet.svg')).default, - iconBackground: '#3b99fc', - createConnector: () => { - const ios = isIOS(); + options, +}: WalletConnectWalletOptions): Wallet => { + const getUri = (uri: string) => uri; - const connector = getWalletConnectConnector({ - chains, + return { + id: 'walletConnect', + name: 'WalletConnect', + installed: undefined, + iconUrl: async () => (await import('./walletConnectWallet.svg')).default, + iconBackground: '#3b99fc', + qrCode: { getUri }, + createConnector: getWalletConnectConnector({ projectId, - options: { - showQrModal: ios, - ...options, - }, - }); - - const getUri = async () => getWalletConnectUri(connector); - - return { - connector, - ...(ios - ? {} - : { - mobile: { getUri }, - qrCode: { getUri }, - }), - }; - }, -}); + walletConnectParameters: options, + }), + }; +}; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/xdefiWallet/xdefiWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/xdefiWallet/xdefiWallet.ts index 5ad37cc9c0..88d6d3b31a 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/xdefiWallet/xdefiWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/xdefiWallet/xdefiWallet.ts @@ -1,27 +1,22 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface XDEFIWalletOptions { - chains: Chain[]; -} - -export const xdefiWallet = ({ chains }: XDEFIWalletOptions): Wallet => ({ - id: 'xdefi', - name: 'XDEFI Wallet', - installed: hasInjectedProvider({ namespace: 'xfi.ethereum' }), - iconUrl: async () => (await import('./xdefiWallet.svg')).default, - iconBackground: '#fff', - downloadUrls: { - chrome: - 'https://chrome.google.com/webstore/detail/xdefi-wallet/hmeobnfnfcmdkdcmlblgagmfpfboieaf', - browserExtension: 'https://xdefi.io', - }, - createConnector: () => ({ - connector: getInjectedConnector({ namespace: 'xfi.ethereum', chains }), +export const xdefiWallet = (): Wallet => { + return { + id: 'xdefi', + name: 'XDEFI Wallet', + rdns: 'io.xdefi', + installed: hasInjectedProvider({ namespace: 'xfi.ethereum' }), + iconUrl: async () => (await import('./xdefiWallet.svg')).default, + iconBackground: '#fff', + downloadUrls: { + chrome: + 'https://chrome.google.com/webstore/detail/xdefi-wallet/hmeobnfnfcmdkdcmlblgagmfpfboieaf', + browserExtension: 'https://xdefi.io', + }, extension: { instructions: { learnMoreUrl: 'https://xdefi.io/support-categories/xdefi-wallet/', @@ -44,5 +39,6 @@ export const xdefiWallet = ({ chains }: XDEFIWalletOptions): Wallet => ({ ], }, }, - }), -}); + createConnector: getInjectedConnector({ namespace: 'xfi.ethereum' }), + }; +}; diff --git a/packages/rainbowkit/src/wallets/walletConnectors/zealWallet/zealWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/zealWallet/zealWallet.ts index 69395abdf6..90fff40f3e 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/zealWallet/zealWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/zealWallet/zealWallet.ts @@ -1,15 +1,10 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; import { Wallet } from '../../Wallet'; import { getInjectedConnector, hasInjectedProvider, } from '../../getInjectedConnector'; -export interface ZealWalletOptions { - chains: Chain[]; -} - -export const zealWallet = ({ chains }: ZealWalletOptions): Wallet => ({ +export const zealWallet = (): Wallet => ({ id: 'zeal', name: 'Zeal', iconUrl: async () => (await import('./zealWallet.svg')).default, @@ -18,29 +13,27 @@ export const zealWallet = ({ chains }: ZealWalletOptions): Wallet => ({ downloadUrls: { browserExtension: 'https://zeal.app', }, - createConnector: () => ({ - connector: getInjectedConnector({ chains, flag: 'isZeal' }), - extension: { - instructions: { - learnMoreUrl: 'https://zeal.app/', - steps: [ - { - description: 'wallet_connectors.zeal.extension.step1.description', - step: 'install', - title: 'wallet_connectors.zeal.extension.step1.title', - }, - { - description: 'wallet_connectors.zeal.extension.step2.description', - step: 'create', - title: 'wallet_connectors.zeal.extension.step2.title', - }, - { - description: 'wallet_connectors.zeal.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.zeal.extension.step3.title', - }, - ], - }, + extension: { + instructions: { + learnMoreUrl: 'https://zeal.app/', + steps: [ + { + description: 'wallet_connectors.zeal.extension.step1.description', + step: 'install', + title: 'wallet_connectors.zeal.extension.step1.title', + }, + { + description: 'wallet_connectors.zeal.extension.step2.description', + step: 'create', + title: 'wallet_connectors.zeal.extension.step2.title', + }, + { + description: 'wallet_connectors.zeal.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.zeal.extension.step3.title', + }, + ], }, - }), + }, + createConnector: getInjectedConnector({ flag: 'isZeal' }), }); diff --git a/packages/rainbowkit/src/wallets/walletConnectors/zerionWallet/zerionWallet.ts b/packages/rainbowkit/src/wallets/walletConnectors/zerionWallet/zerionWallet.ts index 535fd0733c..f5f8e855b3 100644 --- a/packages/rainbowkit/src/wallets/walletConnectors/zerionWallet/zerionWallet.ts +++ b/packages/rainbowkit/src/wallets/walletConnectors/zerionWallet/zerionWallet.ts @@ -1,5 +1,3 @@ -import { Chain } from '../../../components/RainbowKitProvider/RainbowKitChainContext'; -import { getWalletConnectUri } from '../../../utils/getWalletConnectUri'; import { isIOS } from '../../../utils/isMobile'; import { Wallet } from '../../Wallet'; import { @@ -7,18 +5,13 @@ import { hasInjectedProvider, } from '../../getInjectedConnector'; import { getWalletConnectConnector } from '../../getWalletConnectConnector'; -import type { WalletConnectConnectorOptions } from '../../getWalletConnectConnector'; +import { DefaultWalletOptions } from './../../Wallet'; -export interface ZerionWalletOptions { - projectId: string; - chains: Chain[]; - walletConnectOptions?: WalletConnectConnectorOptions; -} +export type ZerionWalletOptions = DefaultWalletOptions; export const zerionWallet = ({ - chains, projectId, - walletConnectOptions, + walletConnectParameters, }: ZerionWalletOptions): Wallet => { const isZerionInjected = hasInjectedProvider({ namespace: 'zerionWallet', @@ -26,9 +19,14 @@ export const zerionWallet = ({ }); const shouldUseWalletConnect = !isZerionInjected; + const getUri = (uri: string) => { + return isIOS() ? `zerion://wc?uri=${encodeURIComponent(uri)}` : uri; + }; + return { id: 'zerion', name: 'Zerion', + rdns: 'io.zerion.wallet', iconUrl: async () => (await import('./zerionWallet.svg')).default, iconAccent: '#2962ef', iconBackground: '#2962ef', @@ -43,84 +41,68 @@ export const zerionWallet = ({ 'https://chrome.google.com/webstore/detail/klghhnkeealcohjjanjjdaeeggmfmlpl', browserExtension: 'https://zerion.io/extension', }, - createConnector: () => { - const connector = shouldUseWalletConnect - ? getWalletConnectConnector({ - projectId, - chains, - options: walletConnectOptions, - }) - : getInjectedConnector({ - chains, - namespace: 'zerionWallet', - flag: 'isZerion', - }); - - const getUri = async () => { - const uri = await getWalletConnectUri(connector); - return isIOS() ? `zerion://wc?uri=${encodeURIComponent(uri)}` : uri; - }; - - return { - connector, - mobile: { - getUri: shouldUseWalletConnect ? getUri : undefined, - }, - qrCode: shouldUseWalletConnect - ? { - getUri, - instructions: { - learnMoreUrl: - 'https://zerion.io/blog/announcing-the-zerion-smart-wallet/', - steps: [ - { - description: - 'wallet_connectors.zerion.qr_code.step1.description', - step: 'install', - title: 'wallet_connectors.zerion.qr_code.step1.title', - }, - { - description: - 'wallet_connectors.zerion.qr_code.step2.description', - step: 'create', - title: 'wallet_connectors.zerion.qr_code.step2.title', - }, - { - description: - 'wallet_connectors.zerion.qr_code.step3.description', - step: 'scan', - title: 'wallet_connectors.zerion.qr_code.step3.title', - }, - ], - }, - } - : undefined, - extension: { + mobile: { + getUri: shouldUseWalletConnect ? getUri : undefined, + }, + qrCode: shouldUseWalletConnect + ? { + getUri, instructions: { - learnMoreUrl: 'https://help.zerion.io/en/', + learnMoreUrl: + 'https://zerion.io/blog/announcing-the-zerion-smart-wallet/', steps: [ { description: - 'wallet_connectors.zerion.extension.step1.description', + 'wallet_connectors.zerion.qr_code.step1.description', step: 'install', - title: 'wallet_connectors.zerion.extension.step1.title', + title: 'wallet_connectors.zerion.qr_code.step1.title', }, { description: - 'wallet_connectors.zerion.extension.step2.description', + 'wallet_connectors.zerion.qr_code.step2.description', step: 'create', - title: 'wallet_connectors.zerion.extension.step2.title', + title: 'wallet_connectors.zerion.qr_code.step2.title', }, { description: - 'wallet_connectors.zerion.extension.step3.description', - step: 'refresh', - title: 'wallet_connectors.zerion.extension.step3.title', + 'wallet_connectors.zerion.qr_code.step3.description', + step: 'scan', + title: 'wallet_connectors.zerion.qr_code.step3.title', }, ], }, - }, - }; + } + : undefined, + extension: { + instructions: { + learnMoreUrl: 'https://help.zerion.io/en/', + steps: [ + { + description: 'wallet_connectors.zerion.extension.step1.description', + step: 'install', + title: 'wallet_connectors.zerion.extension.step1.title', + }, + { + description: 'wallet_connectors.zerion.extension.step2.description', + step: 'create', + title: 'wallet_connectors.zerion.extension.step2.title', + }, + { + description: 'wallet_connectors.zerion.extension.step3.description', + step: 'refresh', + title: 'wallet_connectors.zerion.extension.step3.title', + }, + ], + }, }, + createConnector: shouldUseWalletConnect + ? getWalletConnectConnector({ + projectId, + walletConnectParameters, + }) + : getInjectedConnector({ + namespace: 'zerionWallet', + flag: 'isZerion', + }), }; }; diff --git a/packages/rainbowkit/test/index.tsx b/packages/rainbowkit/test/index.tsx index 44d0829d19..57063294c5 100644 --- a/packages/rainbowkit/test/index.tsx +++ b/packages/rainbowkit/test/index.tsx @@ -1,81 +1,77 @@ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { render } from '@testing-library/react'; import React, { ReactElement } from 'react'; -import { http, createWalletClient } from 'viem'; -import { privateKeyToAccount } from 'viem/accounts'; -import { WagmiConfig, configureChains, createConfig } from 'wagmi'; -import type { Chain } from 'wagmi'; +import { http, type Chain } from 'viem'; +import { WagmiProvider, createConfig } from 'wagmi'; import { arbitrum, base, mainnet, optimism, polygon, zora } from 'wagmi/chains'; -import { MockConnector } from 'wagmi/connectors/mock'; -import { alchemyProvider } from 'wagmi/providers/alchemy'; -import { publicProvider } from 'wagmi/providers/public'; +import { MockParameters, mock } from 'wagmi/connectors'; import { RainbowKitProvider } from '../src/components/RainbowKitProvider/RainbowKitProvider'; import type { RainbowKitProviderProps } from '../src/components/RainbowKitProvider/RainbowKitProvider'; +import { connectorsForWallets } from '../src/wallets/connectorsForWallets'; import { getDefaultWallets } from '../src/wallets/getDefaultWallets'; -const defaultChains = [mainnet, polygon, optimism, arbitrum, base, zora]; +const defaultChains: readonly [Chain, ...Chain[]] = [ + mainnet, + polygon, + optimism, + arbitrum, + base, + zora, +]; -type MockConnectorOptions = ConstructorParameters< - typeof MockConnector ->[0]['options']; +const queryClient = new QueryClient(); export function renderWithProviders( component: ReactElement, options?: { - chains?: Chain[]; + chains?: readonly [Chain, ...Chain[]]; mock?: boolean; - mockOptions?: MockConnectorOptions; + mockFeatures?: MockParameters['features']; props?: Omit<RainbowKitProviderProps, 'children'>; }, ) { - const supportedChains: Chain[] = options?.chains || defaultChains; - const firstChain = supportedChains[0]; + const supportedChains = options?.chains || defaultChains; - const account = privateKeyToAccount( - '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', - ); // first anvil pk + const { wallets } = getDefaultWallets(); - const client = createWalletClient({ - account, - chain: firstChain, - transport: http(), - }); - - const { chains, publicClient } = configureChains(supportedChains, [ - alchemyProvider({ apiKey: process.env.ALCHEMY_ID ?? '' }), - publicProvider(), - ]); - - const { connectors } = getDefaultWallets({ - appName: 'My RainbowKit App', - chains, - projectId: process.env.WALLETCONNECT_PROJECT_ID ?? 'YOUR_PROJECT_ID', - }); - - const mockConnector = new MockConnector({ - chains, - options: { - chainId: firstChain.id, - flags: { isAuthorized: true }, - walletClient: client, - ...options?.mockOptions, + const config = createConfig({ + chains: supportedChains, + connectors: options?.mock + ? [ + mock({ + ...(options?.mockFeatures + ? { features: options?.mockFeatures } + : {}), + accounts: [ + '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', + '0x70997970c51812dc3a010c7d01b50e0d17dc79c8', + '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC', + ], + }), + ] + : connectorsForWallets(wallets, { + appName: 'rainbowkit.com', + projectId: process.env.WALLETCONNECT_PROJECT_ID ?? 'YOUR_PROJECT_ID', + }), + transports: { + [mainnet.id]: http(), + [polygon.id]: http(), + [optimism.id]: http(), + [arbitrum.id]: http(), + [base.id]: http(), + [zora.id]: http(), }, }); - const wagmiConfig = createConfig({ - autoConnect: true, - connectors: options?.mock ? [mockConnector] : connectors, - publicClient, - }); - return render(component, { wrapper: ({ children }) => ( - <WagmiConfig config={wagmiConfig}> - <RainbowKitProvider - chains={chains} - children={children} - {...options?.props} - /> - </WagmiConfig> + <WagmiProvider config={config}> + <QueryClientProvider client={queryClient}> + <RainbowKitProvider {...options?.props}> + {children} + </RainbowKitProvider> + </QueryClientProvider> + </WagmiProvider> ), }); } diff --git a/packages/rainbowkit/tsconfig.json b/packages/rainbowkit/tsconfig.json index 99394ebd79..94a9a5b3d7 100644 --- a/packages/rainbowkit/tsconfig.json +++ b/packages/rainbowkit/tsconfig.json @@ -3,6 +3,7 @@ "compilerOptions": { "module": "ESNext", "target": "ES2019", + "preserveSymlinks": false, "declaration": true, "declarationDir": "dist", "jsx": "react", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6baed101d8..fe88667ebe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,12 +26,9 @@ importers: '@lavamoat/preinstall-always-fail': specifier: ^2.0.0 version: 2.0.0 - '@tanstack/query-core': - specifier: ^4.28.0 - version: 4.29.5 '@tanstack/react-query': - specifier: ^4.28.0 - version: 4.29.5(react-dom@18.2.0)(react@18.2.0) + specifier: ^5.17.9 + version: 5.17.9(react@18.2.0) '@testing-library/jest-dom': specifier: ^6.2.0 version: 6.2.0(vitest@0.33.0) @@ -105,14 +102,14 @@ importers: specifier: ^5.0.4 version: 5.0.4 viem: - specifier: ~1.21.4 - version: 1.21.4(typescript@5.0.4) + specifier: ^2.4.1 + version: 2.4.1(typescript@5.0.4) vitest: specifier: ^0.33.0 version: 0.33.0(jsdom@23.0.1) wagmi: - specifier: ~1.4.13 - version: 1.4.13(@types/react@18.2.46)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(viem@1.21.4) + specifier: ^2.3.1 + version: 2.3.1(@tanstack/react-query@5.17.9)(@types/react@18.2.46)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0)(typescript@5.0.4)(viem@2.4.1) packages/create-rainbowkit: dependencies: @@ -185,12 +182,15 @@ importers: '@rainbow-me/rainbowkit-siwe-next-auth': specifier: workspace:* version: link:../rainbowkit-siwe-next-auth + '@tanstack/react-query': + specifier: ^5.17.9 + version: 5.17.9(react@18.2.0) ethers: specifier: ^5.6.8 version: 5.6.8 next: specifier: ^14.0.4 - version: 14.0.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) + version: 14.0.4(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0) next-auth: specifier: 4.24.5 version: 4.24.5(next@14.0.4)(react-dom@18.2.0)(react@18.2.0) @@ -204,11 +204,11 @@ importers: specifier: ^2.1.4 version: 2.1.4(ethers@5.6.8) viem: - specifier: ~1.21.4 - version: 1.21.4(typescript@5.0.4) + specifier: ^2.4.1 + version: 2.4.1(typescript@5.0.4) wagmi: - specifier: ~1.4.13 - version: 1.4.13(@types/react@18.2.46)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(viem@1.21.4) + specifier: ^2.3.1 + version: 2.3.1(@tanstack/react-query@5.17.9)(@types/react@18.2.46)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0)(typescript@5.0.4)(viem@2.4.1) packages/rainbow-button: dependencies: @@ -222,11 +222,11 @@ importers: specifier: '>=17' version: 18.2.0(react@18.2.0) viem: - specifier: ~0.3.19 || ^1.0.0 - version: 1.19.4(typescript@5.0.4) + specifier: 2.x + version: 2.4.1(typescript@5.0.4) wagmi: - specifier: ~1.0.1 || ~1.1.0 || ~1.2.0 || ~1.3.0 || ~1.4.0 - version: 1.4.7(@types/react@18.2.46)(lokijs@1.5.12)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(viem@1.19.4) + specifier: 2.x + version: 2.3.1(@tanstack/react-query@5.17.9)(@types/react@18.2.46)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0)(typescript@5.0.4)(viem@2.4.1) packages/rainbowkit: dependencies: @@ -257,6 +257,12 @@ importers: ua-parser-js: specifier: ^1.0.37 version: 1.0.37 + viem: + specifier: 2.x + version: 2.4.1(typescript@5.0.4) + wagmi: + specifier: 2.x + version: 2.3.1(@tanstack/react-query@5.17.9)(@types/react@18.2.46)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0)(typescript@5.0.4)(viem@2.4.1) devDependencies: '@testing-library/jest-dom': specifier: ^6.2.0 @@ -297,15 +303,9 @@ importers: react: specifier: ^18.2.0 version: 18.2.0 - viem: - specifier: ~1.21.4 - version: 1.21.4(typescript@5.0.4) vitest: specifier: ^0.33.0 version: 0.33.0(jsdom@23.0.1) - wagmi: - specifier: ~1.4.13 - version: 1.4.13(@types/react@18.2.46)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(viem@1.21.4) packages/rainbowkit-siwe-next-auth: dependencies: @@ -351,7 +351,10 @@ importers: version: 9.4.4(@react-three/fiber@8.0.12)(react@18.2.0)(three@0.139.2) '@react-three/fiber': specifier: ^8.0.12 - version: 8.0.12(react-dom@18.2.0)(react@18.2.0)(three@0.139.2) + version: 8.0.12(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0)(three@0.139.2) + '@tanstack/react-query': + specifier: ^5.17.9 + version: 5.17.9(react@18.2.0) '@vanilla-extract/css': specifier: 1.14.0 version: 1.14.0 @@ -422,11 +425,11 @@ importers: specifier: 4.1.0 version: 4.1.0 viem: - specifier: ~1.21.4 - version: 1.21.4(typescript@5.0.4) + specifier: ^2.4.1 + version: 2.4.1(typescript@5.0.4) wagmi: - specifier: ~1.4.13 - version: 1.4.13(@types/react@18.2.46)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(viem@1.21.4) + specifier: ^2.3.1 + version: 2.3.1(@tanstack/react-query@5.17.9)(@types/react@18.2.46)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0)(typescript@5.0.4)(viem@2.4.1) devDependencies: contentlayer: specifier: 0.2.9 @@ -565,45 +568,46 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 - /@babel/code-frame@7.21.4: - resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.5 - /@babel/code-frame@7.22.5: resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.22.5 - /@babel/compat-data@7.21.7: - resolution: {integrity: sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==} + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 /@babel/compat-data@7.22.9: resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + /@babel/core@7.21.8: resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.21.4 - '@babel/generator': 7.21.5 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-module-transforms': 7.21.5 - '@babel/helpers': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.21.8) + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.21.8) + '@babel/helpers': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -629,14 +633,27 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator@7.21.5: - resolution: {integrity: sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==} + /@babel/core@7.23.7: + resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - jsesc: 2.5.2 + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helpers': 7.23.7 + '@babel/parser': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color /@babel/generator@7.22.9: resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} @@ -647,16 +664,37 @@ packages: '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 - /@babel/helper-compilation-targets@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==} + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-compilation-targets@7.22.9(@babel/core@7.21.8): + resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.7 + '@babel/compat-data': 7.22.9 '@babel/core': 7.21.8 - '@babel/helper-validator-option': 7.21.0 - browserslist: 4.21.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.22.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -669,195 +707,1963 @@ packages: '@babel/compat-data': 7.22.9 '@babel/core': 7.22.9 '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.9 + browserslist: 4.22.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.2 lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-environment-visitor@7.21.5: - resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==} + /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.21.8): + resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.21.8) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: false + + /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.21.8): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: false + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.7): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.21.8): + resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.7): + resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} - /@babel/helper-function-name@7.21.0: - resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + + /@babel/helper-module-transforms@7.22.9(@babel/core@7.21.8): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + + /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.21.8): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: false + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.7): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.21.8): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: false + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + + /@babel/helpers@7.22.6: + resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + + /@babel/helpers@7.23.7: + resolution: {integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 + transitivePeerDependencies: + - supports-color + + /@babel/highlight@7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/parser@7.22.7: + resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} + engines: {node: '>=6.0.0'} + dependencies: + '@babel/types': 7.22.5 + + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) + + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.8): + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.21.8) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) + dev: false + + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.23.7): + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.7): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-proposal-export-default-from@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.21.8) + dev: false + + /@babel/plugin-proposal-export-default-from@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.23.7) + + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) + dev: false + + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.7): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) + dev: false + + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.7): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.8): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.21.8) + dev: false + + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.23.7): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) + dev: false + + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.23.7): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.8): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) + dev: false + + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.7): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.8): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.7): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.8): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.7): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.7): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.7): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-export-default-from@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-export-default-from@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.7): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.7): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.7): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.7): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.7): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.8): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.7): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.7): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.7): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.7): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.8): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.7): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.7): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.8): + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.22.9): + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.7): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.21.8) + dev: false + + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) + + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.21.8): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.21.8): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.21.8) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: false + + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.7): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 + dev: false + + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 + + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + + /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.21.8) + dev: false + + /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.7) + + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.21.8): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.7): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.7): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.21.8) + dev: false + + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.21.8): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) + dev: false + + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) + + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.21.8): + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.21.8) + '@babel/types': 7.23.6 + dev: false + + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) + '@babel/types': 7.23.6 + + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.5 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 - /@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.5 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/helper-hoist-variables@7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + /@babel/plugin-transform-runtime@7.23.7(@babel/core@7.21.8): + resolution: {integrity: sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.21.8) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.21.8) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.21.8) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + /@babel/plugin-transform-runtime@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.23.7 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.7) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color - /@babel/helper-module-imports@7.21.4: - resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false - /@babel/helper-module-imports@7.22.5: - resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/helper-module-transforms@7.21.5: - resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==} + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-simple-access': 7.21.5 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false - /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): - resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.5 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false - /@babel/helper-simple-access@7.21.5: - resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==} + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false - /@babel/helper-split-export-declaration@7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/helper-string-parser@7.21.5: - resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.21.8): + resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.21.8) + dev: false - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.7): + resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.7) - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 - /@babel/helper-validator-option@7.21.0: - resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.21.8): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: false - /@babel/helper-validator-option@7.22.5: - resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 - /@babel/helpers@7.21.5: - resolution: {integrity: sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==} + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 - /@babel/helpers@7.22.6: - resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + /@babel/preset-env@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-SY27X/GtTz/L4UryMNJ6p4fH4nsgWbz84y9FE0bQeWJP6O5BhgVCt53CotQKHCOeXJel8VyhlhujhlltKms/CA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8 - '@babel/types': 7.22.5 + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.23.7) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.7) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.7) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.7) + core-js-compat: 3.35.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/highlight@7.22.5: - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + /@babel/preset-flow@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-validator-identifier': 7.22.5 - chalk: 2.4.2 - js-tokens: 4.0.0 - - /@babel/parser@7.21.8: - resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} - engines: {node: '>=6.0.0'} - dependencies: - '@babel/types': 7.21.5 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.7) - /@babel/parser@7.22.7: - resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} - engines: {node: '>=6.0.0'} + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.7): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.6 + esutils: 2.0.3 - /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.8): - resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + /@babel/preset-typescript@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - dev: false + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.7) - /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.22.9): - resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + /@babel/register@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true + '@babel/core': 7.23.7 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.6 + source-map-support: 0.5.21 + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} /@babel/runtime@7.21.5: resolution: {integrity: sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==} @@ -871,13 +2677,13 @@ packages: dependencies: regenerator-runtime: 0.14.0 - /@babel/template@7.20.7: - resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.21.4 - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 /@babel/template@7.22.5: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} @@ -887,23 +2693,6 @@ packages: '@babel/parser': 7.22.7 '@babel/types': 7.22.5 - /@babel/traverse@7.21.5: - resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.9 - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - /@babel/traverse@7.22.8: resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} engines: {node: '>=6.9.0'} @@ -921,13 +2710,22 @@ packages: transitivePeerDependencies: - supports-color - /@babel/types@7.21.5: - resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} + /@babel/traverse@7.23.7: + resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.21.5 - '@babel/helper-validator-identifier': 7.19.1 - to-fast-properties: 2.0.0 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color /@babel/types@7.22.5: resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} @@ -937,6 +2735,14 @@ packages: '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + /@biomejs/biome@1.4.1: resolution: {integrity: sha512-JccVAwPbhi37pdxbAGmaOBjUTKEwEjWAhl7rKkVVuXHo4MLASXJ5HR8BTgrImi4/7rTBsGz1tgVD1Kwv1CHGRg==} engines: {node: '>=14.*'} @@ -1179,32 +2985,20 @@ packages: prettier: 2.8.8 dev: true - /@coinbase/wallet-sdk@3.6.6: - resolution: {integrity: sha512-vX+epj/Ttjo7XRwlr3TFUUfW5GTRMvORpERPwiu7z2jl3DSVL4rXLmHt5y6LDPlUVreas2gumdcFbu0fLRG9Jg==} - engines: {node: '>= 10.0.0'} + /@coinbase/wallet-sdk@3.9.1: + resolution: {integrity: sha512-cGUE8wm1/cMI8irRMVOqbFWYcnNugqCtuy2lnnHfgloBg+GRLs9RsrkOUDMdv/StfUeeKhCDyYudsXXvcL1xIA==} dependencies: - '@metamask/safe-event-emitter': 2.0.0 - '@solana/web3.js': 1.75.0 - bind-decorator: 1.0.11 bn.js: 5.2.1 buffer: 6.0.3 - clsx: 1.1.1 - eth-block-tracker: 6.1.0 - eth-json-rpc-filters: 5.1.0 - eth-rpc-errors: 4.0.2 - json-rpc-engine: 6.1.0 + clsx: 1.2.1 + eth-block-tracker: 7.1.0 + eth-json-rpc-filters: 6.0.1 + eventemitter3: 5.0.1 keccak: 3.0.3 - preact: 10.13.2 - qs: 6.11.1 - rxjs: 6.6.7 + preact: 10.19.3 sha.js: 2.4.11 - stream-browserify: 3.0.0 - util: 0.12.4 transitivePeerDependencies: - - bufferutil - - encoding - supports-color - - utf-8-validate /@commitlint/cli@18.4.3(typescript@5.0.4): resolution: {integrity: sha512-zop98yfB3A6NveYAZ3P1Mb6bIXuCeWgnUfVNkH4yhIMQpQfzFwseadazOuSn0OOfTt0lWuFauehpm9GcqM5lww==} @@ -1573,6 +3367,30 @@ packages: resolution: {integrity: sha512-/crHGujo0xnuHIYNc1VgP0HGJGFSoSqq88JFXe6FmFyXPpWt8Xu39LyLg7rchsxfXFeEdA9CrIZvLV5eswXV5g==} dev: true + /@emotion/babel-plugin@11.11.0: + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + dependencies: + '@babel/helper-module-imports': 7.22.15 + '@babel/runtime': 7.23.4 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/serialize': 1.1.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + + /@emotion/cache@11.11.0: + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + dependencies: + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + stylis: 4.2.0 + /@emotion/hash@0.9.1: resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} @@ -1583,11 +3401,87 @@ packages: dev: false optional: true + /@emotion/is-prop-valid@1.2.1: + resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} + dependencies: + '@emotion/memoize': 0.8.1 + /@emotion/memoize@0.7.4: resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} dev: false optional: true + /@emotion/memoize@0.8.1: + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + + /@emotion/react@11.11.3(@types/react@18.2.46)(react@18.2.0): + resolution: {integrity: sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.4 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + '@types/react': 18.2.46 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + + /@emotion/serialize@1.1.3: + resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} + dependencies: + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 + csstype: 3.1.2 + + /@emotion/sheet@1.2.2: + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} + + /@emotion/styled@11.11.0(@emotion/react@11.11.3)(@types/react@18.2.46)(react@18.2.0): + resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.4 + '@emotion/babel-plugin': 11.11.0 + '@emotion/is-prop-valid': 1.2.1 + '@emotion/react': 11.11.3(@types/react@18.2.46)(react@18.2.0) + '@emotion/serialize': 1.1.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@types/react': 18.2.46 + react: 18.2.0 + + /@emotion/unitless@0.8.1: + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.2.0 + + /@emotion/utils@1.2.1: + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} + + /@emotion/weak-memoize@0.3.1: + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + /@esbuild-plugins/node-resolve@0.1.4(esbuild@0.14.39): resolution: {integrity: sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g==} peerDependencies: @@ -2103,6 +3997,33 @@ packages: - supports-color dev: true + /@ethereumjs/common@3.2.0: + resolution: {integrity: sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==} + dependencies: + '@ethereumjs/util': 8.1.0 + crc-32: 1.2.2 + + /@ethereumjs/rlp@4.0.1: + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + + /@ethereumjs/tx@4.2.0: + resolution: {integrity: sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==} + engines: {node: '>=14'} + dependencies: + '@ethereumjs/common': 3.2.0 + '@ethereumjs/rlp': 4.0.1 + '@ethereumjs/util': 8.1.0 + ethereum-cryptography: 2.1.2 + + /@ethereumjs/util@8.1.0: + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.1.2 + micro-ftch: 0.3.1 + /@ethersproject/abi@5.6.3: resolution: {integrity: sha512-CxKTdoZY4zDJLWXG6HzNH6znWK0M79WzzxHegDoecE3+K32pzfHOzuXg2/oGSTecZynFgpkjYXNPOqXVJlqClw==} dependencies: @@ -2667,6 +4588,14 @@ packages: yargs: 17.7.2 dev: true + /@hapi/hoek@9.3.0: + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + /@hapi/topo@5.1.0: + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + dependencies: + '@hapi/hoek': 9.3.0 + /@humanwhocodes/config-array@0.9.5: resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} engines: {node: '>=10.10.0'} @@ -2685,12 +4614,62 @@ packages: /@ioredis/commands@1.2.0: resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} - /@jest/schemas@29.6.0: - resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} + /@isaacs/ttlcache@1.4.1: + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} + + /@jest/create-cache-key-function@29.7.0: + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.4 + jest-mock: 29.7.0 + + /@jest/fake-timers@29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 18.19.4 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.27.8 - dev: true + + /@jest/types@26.6.2: + resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} + engines: {node: '>= 10.14.2'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 18.19.4 + '@types/yargs': 15.0.19 + chalk: 4.1.2 + + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 18.19.4 + '@types/yargs': 17.0.32 + chalk: 4.1.2 /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} @@ -2713,7 +4692,6 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 - dev: false /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -2740,10 +4718,6 @@ packages: engines: {node: ^16.20.0 || ^18.0.0 || ^20.0.0} dev: true - /@ledgerhq/connect-kit-loader@1.1.0: - resolution: {integrity: sha512-HUy12FEczoWY2FPubnsm1uOA8tkVWc0j90i47suThV3C9NL2xx69ZAIEU3Ytzs2bwLek9S1Q2S1VQJvA+3Ygkg==} - dev: false - /@lit-labs/ssr-dom-shim@1.1.1: resolution: {integrity: sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==} @@ -2809,15 +4783,179 @@ packages: - supports-color dev: true + /@metamask/eth-json-rpc-provider@1.0.1: + resolution: {integrity: sha512-whiUMPlAOrVGmX8aKYVPvlKyG4CpQXiNNyt74vE1xb5sPvmx5oA7B/kOi/JdBvhGQq97U1/AVdXEdk2zkP8qyA==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/json-rpc-engine': 7.3.1 + '@metamask/safe-event-emitter': 3.0.0 + '@metamask/utils': 5.0.2 + transitivePeerDependencies: + - supports-color + + /@metamask/json-rpc-engine@7.3.1: + resolution: {integrity: sha512-OVxccX/IFOjPzCzSFAEceccPIAf7A7IwnvjyWjyHCkLrO+LWV4e7Tpe79JNXiORywNulHxrg+q6QrmrnGEwssQ==} + engines: {node: '>=16.0.0'} + dependencies: + '@metamask/rpc-errors': 6.1.0 + '@metamask/safe-event-emitter': 3.0.0 + '@metamask/utils': 8.2.1 + transitivePeerDependencies: + - supports-color + + /@metamask/object-multiplex@1.3.0: + resolution: {integrity: sha512-czcQeVYdSNtabd+NcYQnrM69MciiJyd1qvKH8WM2Id3C0ZiUUX5Xa/MK+/VUk633DBhVOwdNzAKIQ33lGyA+eQ==} + engines: {node: '>=12.0.0'} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + readable-stream: 2.3.8 + + /@metamask/onboarding@1.0.1: + resolution: {integrity: sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ==} + dependencies: + bowser: 2.11.0 + + /@metamask/post-message-stream@6.2.0: + resolution: {integrity: sha512-WunZ0bruClF862mvbKQGETn5SM0XKGmocPMQR1Ew6sYix9/FDzeoZnoI8RkXk01E+70FCdxhTE/r8kk5SFOuTw==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/utils': 5.0.2 + readable-stream: 2.3.3 + transitivePeerDependencies: + - supports-color + + /@metamask/providers@10.2.1: + resolution: {integrity: sha512-p2TXw2a1Nb8czntDGfeIYQnk4LLVbd5vlcb3GY//lylYlKdSqp+uUTegCvxiFblRDOT68jsY8Ib1VEEzVUOolA==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/object-multiplex': 1.3.0 + '@metamask/safe-event-emitter': 2.0.0 + '@types/chrome': 0.0.136 + detect-browser: 5.3.0 + eth-rpc-errors: 4.0.3 + extension-port-stream: 2.1.1 + fast-deep-equal: 2.0.1 + is-stream: 2.0.1 + json-rpc-engine: 6.1.0 + json-rpc-middleware-stream: 4.2.3 + pump: 3.0.0 + webextension-polyfill-ts: 0.25.0 + + /@metamask/rpc-errors@6.1.0: + resolution: {integrity: sha512-JQElKxai26FpDyRKO/yH732wI+BV90i1u6pOuDOpdADSbppB2g1pPh3AGST1zkZqEE9eIKIUw8UdBQ4rp3VTSg==} + engines: {node: '>=16.0.0'} + dependencies: + '@metamask/utils': 8.2.1 + fast-safe-stringify: 2.1.1 + transitivePeerDependencies: + - supports-color + /@metamask/safe-event-emitter@2.0.0: resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} - /@metamask/utils@3.6.0: - resolution: {integrity: sha512-9cIRrfkWvHblSiNDVXsjivqa9Ak0RYo/1H6tqTqTbAx+oBK2Sva0lWDHxGchOqA7bySGUJKAWSNJvH6gdHZ0gQ==} + /@metamask/safe-event-emitter@3.0.0: + resolution: {integrity: sha512-j6Z47VOmVyGMlnKXZmL0fyvWfEYtKWCA9yGZkU3FCsGZUT5lHGmvaV9JA5F2Y+010y7+ROtR3WMXIkvl/nVzqQ==} + engines: {node: '>=12.0.0'} + + /@metamask/sdk-communication-layer@0.14.1: + resolution: {integrity: sha512-K1KhkKMdAAPi079G/bX/cIazqT6qnkRnykrs7nA1sU2BouG7BYD4qPgv7ridc3BNIewnFg9eMzzYIgOgfXzJKw==} + dependencies: + bufferutil: 4.0.8 + cross-fetch: 3.1.5 + date-fns: 2.30.0 + eciesjs: 0.3.18 + eventemitter2: 6.4.9 + socket.io-client: 4.7.3(bufferutil@4.0.8)(utf-8-validate@6.0.3) + utf-8-validate: 6.0.3 + uuid: 8.3.2 + transitivePeerDependencies: + - encoding + - supports-color + + /@metamask/sdk-install-modal-web@0.14.1(@types/react@18.2.46)(react-native@0.73.1): + resolution: {integrity: sha512-emT8HKbnfVwGhPxyUfMja6DWzvtJvDEBQxqCVx93H0HsyrrOzOC43iGCAosslw6o5h7gOfRKLqWmK8V7jQAS2Q==} + dependencies: + '@emotion/react': 11.11.3(@types/react@18.2.46)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.3)(@types/react@18.2.46)(react@18.2.0) + i18next: 22.5.1 + qr-code-styling: 1.6.0-rc.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-i18next: 13.5.0(i18next@22.5.1)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react-native + + /@metamask/sdk@0.14.1(@types/react@18.2.46)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0): + resolution: {integrity: sha512-52kfvnlyMXRO8/oPGoQOFMevSjgkLzpl8aGG6Ivx/6jiqSv5ScuOg6YdSWXR937Ts0zWE0V8KTUBMfnGGt0S9Q==} + peerDependencies: + react: ^18.2.0 + react-native: '*' + peerDependenciesMeta: + react: + optional: true + react-native: + optional: true + dependencies: + '@metamask/onboarding': 1.0.1 + '@metamask/post-message-stream': 6.2.0 + '@metamask/providers': 10.2.1 + '@metamask/sdk-communication-layer': 0.14.1 + '@metamask/sdk-install-modal-web': 0.14.1(@types/react@18.2.46)(react-native@0.73.1) + '@react-native-async-storage/async-storage': 1.21.0(react-native@0.73.1) + '@types/dom-screen-wake-lock': 1.0.3 + bowser: 2.11.0 + cross-fetch: 4.0.0 + eciesjs: 0.3.18 + eth-rpc-errors: 4.0.3 + eventemitter2: 6.4.9 + extension-port-stream: 2.1.1 + i18next: 22.5.1 + i18next-browser-languagedetector: 7.2.0 + obj-multiplex: 1.0.0 + pump: 3.0.0 + qrcode-terminal-nooctal: 0.12.1 + react: 18.2.0 + react-i18next: 13.5.0(i18next@22.5.1)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0) + react-native: 0.73.1(@babel/core@7.23.7)(@babel/preset-env@7.23.7)(react@18.2.0) + react-native-webview: 11.26.1(react-native@0.73.1)(react@18.2.0) + readable-stream: 2.3.8 + rollup-plugin-visualizer: 5.12.0 + socket.io-client: 4.7.3(bufferutil@4.0.8)(utf-8-validate@6.0.3) + util: 0.12.4 + uuid: 8.3.2 + transitivePeerDependencies: + - '@types/react' + - bufferutil + - encoding + - react-dom + - rollup + - supports-color + - utf-8-validate + + /@metamask/utils@5.0.2: + resolution: {integrity: sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g==} engines: {node: '>=14.0.0'} dependencies: + '@ethereumjs/tx': 4.2.0 + '@types/debug': 4.1.7 + debug: 4.3.4 + semver: 7.5.4 + superstruct: 1.0.3 + transitivePeerDependencies: + - supports-color + + /@metamask/utils@8.2.1: + resolution: {integrity: sha512-dlnpow8r0YHDDL1xKCEwUoTGOAo9icdv+gaJG0EbgDnkD/BDqW2eH1XMtm9i7rPaiHWo/aLtcrh9WBhkCq/viw==} + engines: {node: '>=16.0.0'} + dependencies: + '@ethereumjs/tx': 4.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 '@types/debug': 4.1.7 debug: 4.3.4 + pony-cause: 2.1.10 semver: 7.5.4 superstruct: 1.0.3 transitivePeerDependencies: @@ -2829,7 +4967,7 @@ packages: '@motionone/easing': 10.15.1 '@motionone/types': 10.15.1 '@motionone/utils': 10.15.1 - tslib: 2.5.0 + tslib: 2.6.2 /@motionone/dom@10.16.2: resolution: {integrity: sha512-bnuHdNbge1FutZXv+k7xub9oPWcF0hsu8y1HTH/qg6av58YI0VufZ3ngfC7p2xhMJMnoh0LXFma2EGTgPeCkeg==} @@ -2839,26 +4977,26 @@ packages: '@motionone/types': 10.15.1 '@motionone/utils': 10.15.1 hey-listen: 1.0.8 - tslib: 2.5.0 + tslib: 2.6.2 /@motionone/easing@10.15.1: resolution: {integrity: sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==} dependencies: '@motionone/utils': 10.15.1 - tslib: 2.5.0 + tslib: 2.6.2 /@motionone/generators@10.15.1: resolution: {integrity: sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ==} dependencies: '@motionone/types': 10.15.1 '@motionone/utils': 10.15.1 - tslib: 2.5.0 + tslib: 2.6.2 /@motionone/svelte@10.16.2: resolution: {integrity: sha512-38xsroKrfK+aHYhuQlE6eFcGy0EwrB43Q7RGjF73j/kRUTcLNu/LAaKiLLsN5lyqVzCgTBVt4TMT/ShWbTbc5Q==} dependencies: '@motionone/dom': 10.16.2 - tslib: 2.5.0 + tslib: 2.6.2 /@motionone/types@10.15.1: resolution: {integrity: sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA==} @@ -2868,13 +5006,13 @@ packages: dependencies: '@motionone/types': 10.15.1 hey-listen: 1.0.8 - tslib: 2.5.0 + tslib: 2.6.2 /@motionone/vue@10.16.2: resolution: {integrity: sha512-7/dEK/nWQXOkJ70bqb2KyNfSWbNvWqKKq1C8juj+0Mg/AorgD8O5wE3naddK0G+aXuNMqRuc4jlsYHHWHtIzVw==} dependencies: '@motionone/dom': 10.16.2 - tslib: 2.5.0 + tslib: 2.6.2 /@next/env@13.4.19: resolution: {integrity: sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==} @@ -2952,21 +5090,24 @@ packages: os: [win32] optional: true + /@noble/curves@1.1.0: + resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} + dependencies: + '@noble/hashes': 1.3.1 + /@noble/curves@1.2.0: resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} dependencies: '@noble/hashes': 1.3.2 - /@noble/ed25519@1.7.3: - resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} + /@noble/hashes@1.3.1: + resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} + engines: {node: '>= 16'} /@noble/hashes@1.3.2: resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} engines: {node: '>= 16'} - /@noble/secp256k1@1.7.1: - resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} - /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -3615,56 +5756,477 @@ packages: /@radix-ui/react-use-escape-keydown@1.0.2(react@18.2.0): resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.23.4 + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0): + resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.23.4 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-previous@1.0.0(react@18.2.0): + resolution: {integrity: sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.5 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-rect@1.0.0(react@18.2.0): + resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.23.4 + '@radix-ui/rect': 1.0.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-size@1.0.0(react@18.2.0): + resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.5 + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@radix-ui/rect@1.0.0: + resolution: {integrity: sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==} + dependencies: + '@babel/runtime': 7.23.4 + dev: false + + /@react-native-async-storage/async-storage@1.21.0(react-native@0.73.1): + resolution: {integrity: sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag==} + peerDependencies: + react-native: ^0.0.0-0 || >=0.60 <1.0 + dependencies: + merge-options: 3.0.4 + react-native: 0.73.1(@babel/core@7.23.7)(@babel/preset-env@7.23.7)(react@18.2.0) + + /@react-native-community/cli-clean@12.3.0: + resolution: {integrity: sha512-iAgLCOWYRGh9ukr+eVQnhkV/OqN3V2EGd/in33Ggn/Mj4uO6+oUncXFwB+yjlyaUNz6FfjudhIz09yYGSF+9sg==} + dependencies: + '@react-native-community/cli-tools': 12.3.0 + chalk: 4.1.2 + execa: 5.1.1 + transitivePeerDependencies: + - encoding + + /@react-native-community/cli-config@12.3.0: + resolution: {integrity: sha512-BrTn5ndFD9uOxO8kxBQ32EpbtOvAsQExGPI7SokdI4Zlve70FziLtTq91LTlTUgMq1InVZn/jJb3VIDk6BTInQ==} + dependencies: + '@react-native-community/cli-tools': 12.3.0 + chalk: 4.1.2 + cosmiconfig: 5.2.1 + deepmerge: 4.3.1 + glob: 7.2.3 + joi: 17.11.0 + transitivePeerDependencies: + - encoding + + /@react-native-community/cli-debugger-ui@12.3.0: + resolution: {integrity: sha512-w3b0iwjQlk47GhZWHaeTG8kKH09NCMUJO729xSdMBXE8rlbm4kHpKbxQY9qKb6NlfWSJN4noGY+FkNZS2rRwnQ==} + dependencies: + serve-static: 1.15.0 + transitivePeerDependencies: + - supports-color + + /@react-native-community/cli-doctor@12.3.0: + resolution: {integrity: sha512-BPCwNNesoQMkKsxB08Ayy6URgGQ8Kndv6mMhIvJSNdST3J1+x3ehBHXzG9B9Vfi+DrTKRb8lmEl/b/7VkDlPkA==} + dependencies: + '@react-native-community/cli-config': 12.3.0 + '@react-native-community/cli-platform-android': 12.3.0 + '@react-native-community/cli-platform-ios': 12.3.0 + '@react-native-community/cli-tools': 12.3.0 + chalk: 4.1.2 + command-exists: 1.2.9 + deepmerge: 4.3.1 + envinfo: 7.11.0 + execa: 5.1.1 + hermes-profile-transformer: 0.0.6 + ip: 1.1.8 + node-stream-zip: 1.15.0 + ora: 5.4.1 + semver: 7.5.4 + strip-ansi: 5.2.0 + wcwidth: 1.0.1 + yaml: 2.2.2 + transitivePeerDependencies: + - encoding + + /@react-native-community/cli-hermes@12.3.0: + resolution: {integrity: sha512-G6FxpeZBO4AimKZwtWR3dpXRqTvsmEqlIkkxgwthdzn3LbVjDVIXKpVYU9PkR5cnT+KuAUxO0WwthrJ6Nmrrlg==} + dependencies: + '@react-native-community/cli-platform-android': 12.3.0 + '@react-native-community/cli-tools': 12.3.0 + chalk: 4.1.2 + hermes-profile-transformer: 0.0.6 + ip: 1.1.8 + transitivePeerDependencies: + - encoding + + /@react-native-community/cli-platform-android@12.3.0: + resolution: {integrity: sha512-VU1NZw63+GLU2TnyQ919bEMThpHQ/oMFju9MCfrd3pyPJz4Sn+vc3NfnTDUVA5Z5yfLijFOkHIHr4vo/C9bjnw==} + dependencies: + '@react-native-community/cli-tools': 12.3.0 + chalk: 4.1.2 + execa: 5.1.1 + fast-xml-parser: 4.3.2 + glob: 7.2.3 + logkitty: 0.7.1 + transitivePeerDependencies: + - encoding + + /@react-native-community/cli-platform-ios@12.3.0: + resolution: {integrity: sha512-H95Sgt3wT7L8V75V0syFJDtv4YgqK5zbu69ko4yrXGv8dv2EBi6qZP0VMmkqXDamoPm9/U7tDTdbcf26ctnLfg==} + dependencies: + '@react-native-community/cli-tools': 12.3.0 + chalk: 4.1.2 + execa: 5.1.1 + fast-xml-parser: 4.3.2 + glob: 7.2.3 + ora: 5.4.1 + transitivePeerDependencies: + - encoding + + /@react-native-community/cli-plugin-metro@12.3.0: + resolution: {integrity: sha512-tYNHIYnNmxrBcsqbE2dAnLMzlKI3Cp1p1xUgTrNaOMsGPDN1epzNfa34n6Nps3iwKElSL7Js91CzYNqgTalucA==} + + /@react-native-community/cli-server-api@12.3.0: + resolution: {integrity: sha512-Rode8NrdyByC+lBKHHn+/W8Zu0c+DajJvLmOWbe2WY/ECvnwcd9MHHbu92hlT2EQaJ9LbLhGrSbQE3cQy9EOCw==} + dependencies: + '@react-native-community/cli-debugger-ui': 12.3.0 + '@react-native-community/cli-tools': 12.3.0 + compression: 1.7.4 + connect: 3.7.0 + errorhandler: 1.5.1 + nocache: 3.0.4 + pretty-format: 26.6.2 + serve-static: 1.15.0 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + /@react-native-community/cli-tools@12.3.0: + resolution: {integrity: sha512-2GafnCr8D88VdClwnm9KZfkEb+lzVoFdr/7ybqhdeYM0Vnt/tr2N+fM1EQzwI1DpzXiBzTYemw8GjRq+Utcz2Q==} + dependencies: + appdirsjs: 1.2.7 + chalk: 4.1.2 + find-up: 5.0.0 + mime: 2.6.0 + node-fetch: 2.7.0 + open: 6.4.0 + ora: 5.4.1 + semver: 7.5.4 + shell-quote: 1.8.1 + sudo-prompt: 9.2.1 + transitivePeerDependencies: + - encoding + + /@react-native-community/cli-types@12.3.0: + resolution: {integrity: sha512-MgOkmrXH4zsGxhte4YqKL7d+N8ZNEd3w1wo56MZlhu5WabwCJh87wYpU5T8vyfujFLYOFuFK5jjlcbs8F4/WDw==} + dependencies: + joi: 17.11.0 + + /@react-native-community/cli@12.3.0: + resolution: {integrity: sha512-XeQohi2E+S2+MMSz97QcEZ/bWpi8sfKiQg35XuYeJkc32Til2g0b97jRpn0/+fV0BInHoG1CQYWwHA7opMsrHg==} + engines: {node: '>=18'} + hasBin: true + dependencies: + '@react-native-community/cli-clean': 12.3.0 + '@react-native-community/cli-config': 12.3.0 + '@react-native-community/cli-debugger-ui': 12.3.0 + '@react-native-community/cli-doctor': 12.3.0 + '@react-native-community/cli-hermes': 12.3.0 + '@react-native-community/cli-plugin-metro': 12.3.0 + '@react-native-community/cli-server-api': 12.3.0 + '@react-native-community/cli-tools': 12.3.0 + '@react-native-community/cli-types': 12.3.0 + chalk: 4.1.2 + commander: 9.5.0 + deepmerge: 4.3.1 + execa: 5.1.1 + find-up: 4.1.0 + fs-extra: 8.1.0 + graceful-fs: 4.2.11 + prompts: 2.4.2 + semver: 7.5.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + /@react-native/assets-registry@0.73.1: + resolution: {integrity: sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg==} + engines: {node: '>=18'} + + /@react-native/babel-plugin-codegen@0.74.0(@babel/preset-env@7.23.7): + resolution: {integrity: sha512-xAM/eVSb5LBkKue3bDZgt76bdsGGzKeF/iEzUNbDTwRQrB3Q5GoceGNM/zVlF+z1xGAkr3jhL+ZyITZGSoIlgw==} + engines: {node: '>=18'} + dependencies: + '@react-native/codegen': 0.73.2(@babel/preset-env@7.23.7) + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + + /@react-native/babel-preset@0.74.0(@babel/core@7.21.8)(@babel/preset-env@7.23.7): + resolution: {integrity: sha512-k+1aaYQeLn+GBmGA5Qs3NKI8uzhLvRRMML+pB/+43ZL6DvCklbuJ5KO5oqRRpF3KZ2t/VKUqqSichpXfFrXGjg==} + engines: {node: '>=18'} + peerDependencies: + '@babel/core': '*' dependencies: - '@babel/runtime': 7.23.4 - '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) - react: 18.2.0 + '@babel/core': 7.21.8 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.8) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-export-default-from': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.8) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.21.8) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.21.8) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.21.8) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.21.8) + '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-runtime': 7.23.7(@babel/core@7.21.8) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.21.8) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.21.8) + '@babel/template': 7.22.15 + '@react-native/babel-plugin-codegen': 0.74.0(@babel/preset-env@7.23.7) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.21.8) + react-refresh: 0.14.0 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color dev: false - /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0): - resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} + /@react-native/babel-preset@0.74.0(@babel/core@7.23.7)(@babel/preset-env@7.23.7): + resolution: {integrity: sha512-k+1aaYQeLn+GBmGA5Qs3NKI8uzhLvRRMML+pB/+43ZL6DvCklbuJ5KO5oqRRpF3KZ2t/VKUqqSichpXfFrXGjg==} + engines: {node: '>=18'} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + '@babel/core': '*' dependencies: - '@babel/runtime': 7.23.4 - react: 18.2.0 - dev: false + '@babel/core': 7.23.7 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.23.7) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-proposal-export-default-from': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.7) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.7) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-runtime': 7.23.7(@babel/core@7.23.7) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) + '@babel/template': 7.22.15 + '@react-native/babel-plugin-codegen': 0.74.0(@babel/preset-env@7.23.7) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.23.7) + react-refresh: 0.14.0 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color - /@radix-ui/react-use-previous@1.0.0(react@18.2.0): - resolution: {integrity: sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==} + /@react-native/codegen@0.73.2(@babel/preset-env@7.23.7): + resolution: {integrity: sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==} + engines: {node: '>=18'} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + '@babel/preset-env': ^7.1.6 dependencies: - '@babel/runtime': 7.21.5 - react: 18.2.0 + '@babel/parser': 7.23.6 + '@babel/preset-env': 7.23.7(@babel/core@7.23.7) + flow-parser: 0.206.0 + glob: 7.2.3 + invariant: 2.2.4 + jscodeshift: 0.14.0(@babel/preset-env@7.23.7) + mkdirp: 0.5.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + /@react-native/community-cli-plugin@0.73.11(@babel/core@7.21.8)(@babel/preset-env@7.23.7): + resolution: {integrity: sha512-s0bprwljKS1Al8wOKathDDmRyF+70CcNE2G/aqZ7+L0NoOE0Uxxx/5P2BxlM2Mfht7O33B4SeMNiPdE/FqIubQ==} + engines: {node: '>=18'} + dependencies: + '@react-native-community/cli-server-api': 12.3.0 + '@react-native-community/cli-tools': 12.3.0 + '@react-native/dev-middleware': 0.73.6 + '@react-native/metro-babel-transformer': 0.73.12(@babel/core@7.21.8)(@babel/preset-env@7.23.7) + chalk: 4.1.2 + execa: 5.1.1 + metro: 0.80.3 + metro-config: 0.80.3 + metro-core: 0.80.3 + node-fetch: 2.7.0 + readline: 1.3.0 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate dev: false - /@radix-ui/react-use-rect@1.0.0(react@18.2.0): - resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==} + /@react-native/community-cli-plugin@0.73.11(@babel/core@7.23.7)(@babel/preset-env@7.23.7): + resolution: {integrity: sha512-s0bprwljKS1Al8wOKathDDmRyF+70CcNE2G/aqZ7+L0NoOE0Uxxx/5P2BxlM2Mfht7O33B4SeMNiPdE/FqIubQ==} + engines: {node: '>=18'} + dependencies: + '@react-native-community/cli-server-api': 12.3.0 + '@react-native-community/cli-tools': 12.3.0 + '@react-native/dev-middleware': 0.73.6 + '@react-native/metro-babel-transformer': 0.73.12(@babel/core@7.23.7)(@babel/preset-env@7.23.7) + chalk: 4.1.2 + execa: 5.1.1 + metro: 0.80.3 + metro-config: 0.80.3 + metro-core: 0.80.3 + node-fetch: 2.7.0 + readline: 1.3.0 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate + + /@react-native/debugger-frontend@0.73.3: + resolution: {integrity: sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw==} + engines: {node: '>=18'} + + /@react-native/dev-middleware@0.73.6: + resolution: {integrity: sha512-9SD7gIso+hO1Jy1Y/Glbd+JWQwyH7Xjnwebtkxdm5TMB51LQPjaGtMcwEigbIZyAtvoaDGmhWmudwbKpDlS+gA==} + engines: {node: '>=18'} + dependencies: + '@isaacs/ttlcache': 1.4.1 + '@react-native/debugger-frontend': 0.73.3 + chrome-launcher: 0.15.2 + chromium-edge-launcher: 1.0.0 + connect: 3.7.0 + debug: 2.6.9 + node-fetch: 2.7.0 + open: 7.4.2 + serve-static: 1.15.0 + temp-dir: 2.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + /@react-native/gradle-plugin@0.73.4: + resolution: {integrity: sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg==} + engines: {node: '>=18'} + + /@react-native/js-polyfills@0.73.1: + resolution: {integrity: sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g==} + engines: {node: '>=18'} + + /@react-native/metro-babel-transformer@0.73.12(@babel/core@7.21.8)(@babel/preset-env@7.23.7): + resolution: {integrity: sha512-VmxN5aaoOprzDzUR+8c3XYhG0FoMOO6n0ToylCW6EeZCuf5RTY7HWVOhacabGoB1mHrWzJ0wWEsqX+eD4iFxoA==} + engines: {node: '>=18'} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + '@babel/core': '*' dependencies: - '@babel/runtime': 7.23.4 - '@radix-ui/rect': 1.0.0 - react: 18.2.0 + '@babel/core': 7.21.8 + '@react-native/babel-preset': 0.74.0(@babel/core@7.21.8)(@babel/preset-env@7.23.7) + babel-preset-fbjs: 3.4.0(@babel/core@7.21.8) + hermes-parser: 0.15.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color dev: false - /@radix-ui/react-use-size@1.0.0(react@18.2.0): - resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} + /@react-native/metro-babel-transformer@0.73.12(@babel/core@7.23.7)(@babel/preset-env@7.23.7): + resolution: {integrity: sha512-VmxN5aaoOprzDzUR+8c3XYhG0FoMOO6n0ToylCW6EeZCuf5RTY7HWVOhacabGoB1mHrWzJ0wWEsqX+eD4iFxoA==} + engines: {node: '>=18'} peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 + '@babel/core': '*' dependencies: - '@babel/runtime': 7.21.5 - '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) - react: 18.2.0 - dev: false + '@babel/core': 7.23.7 + '@react-native/babel-preset': 0.74.0(@babel/core@7.23.7)(@babel/preset-env@7.23.7) + babel-preset-fbjs: 3.4.0(@babel/core@7.23.7) + hermes-parser: 0.15.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color - /@radix-ui/rect@1.0.0: - resolution: {integrity: sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==} + /@react-native/normalize-colors@0.73.2: + resolution: {integrity: sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==} + + /@react-native/virtualized-lists@0.73.4(react-native@0.73.1): + resolution: {integrity: sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog==} + engines: {node: '>=18'} + peerDependencies: + react-native: '*' dependencies: - '@babel/runtime': 7.23.4 - dev: false + invariant: 2.2.4 + nullthrows: 1.1.1 + react-native: 0.73.1(@babel/core@7.23.7)(@babel/preset-env@7.23.7)(react@18.2.0) /@react-spring/animated@9.4.5(react@18.2.0): resolution: {integrity: sha512-KWqrtvJSMx6Fj9nMJkhTwM9r6LIriExDRV6YHZV9HKQsaolUFppgkOXpC+rsL1JEtEvKv6EkLLmSqHTnuYjiIA==} @@ -3713,7 +6275,7 @@ packages: '@react-spring/core': 9.4.5(react@18.2.0) '@react-spring/shared': 9.4.5(react@18.2.0) '@react-spring/types': 9.4.5 - '@react-three/fiber': 8.0.12(react-dom@18.2.0)(react@18.2.0)(three@0.139.2) + '@react-three/fiber': 8.0.12(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0)(three@0.139.2) react: 18.2.0 three: 0.139.2 dev: false @@ -3722,7 +6284,7 @@ packages: resolution: {integrity: sha512-mpRIamoHwql0ogxEUh9yr4TP0xU5CWyZxVQeccGkHHF8kPMErtDXJlxyo0lj+telRF35XNihtPTWoflqtyARmg==} dev: false - /@react-three/fiber@8.0.12(react-dom@18.2.0)(react@18.2.0)(three@0.139.2): + /@react-three/fiber@8.0.12(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0)(three@0.139.2): resolution: {integrity: sha512-McYcJDlkksn9LlIhE2A4Y2scZOtKfX1ia3+7EvpFjFozFJx0Ecszi7atlizOvesIa9nG9VQWQCvjQxu9L0/TmA==} peerDependencies: expo: '>=43.0' @@ -3749,6 +6311,7 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-merge-refs: 1.1.0 + react-native: 0.73.1(@babel/core@7.21.8)(@babel/preset-env@7.23.7)(react@18.2.0) react-reconciler: 0.27.0(react@18.2.0) react-use-measure: 2.1.1(react-dom@18.2.0)(react@18.2.0) scheduler: 0.21.0 @@ -3852,19 +6415,6 @@ packages: resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==} dev: true - /@safe-global/safe-apps-provider@0.17.1(typescript@5.0.4): - resolution: {integrity: sha512-lYfRqrbbK1aKU1/UGkYWc/X7PgySYcumXKc5FB2uuwAs2Ghj8uETuW5BrwPqyjBknRxutFbTv+gth/JzjxAhdQ==} - dependencies: - '@safe-global/safe-apps-sdk': 8.0.0(typescript@5.0.4) - events: 3.3.0 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - dev: false - /@safe-global/safe-apps-provider@0.18.1(typescript@5.0.4): resolution: {integrity: sha512-V4a05A3EgJcriqtDoJklDz1BOinWhC6P0hjUSxshA4KOZM7rGPCTto/usXs09zr1vvL28evl/NldSTv97j2bmg==} dependencies: @@ -3877,19 +6427,6 @@ packages: - utf-8-validate - zod - /@safe-global/safe-apps-sdk@8.0.0(typescript@5.0.4): - resolution: {integrity: sha512-gYw0ki/EAuV1oSyMxpqandHjnthZjYYy+YWpTAzf8BqfXM3ItcZLpjxfg+3+mXW8HIO+3jw6T9iiqEXsqHaMMw==} - dependencies: - '@safe-global/safe-gateway-typescript-sdk': 3.7.3 - viem: 1.21.4(typescript@5.0.4) - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - dev: false - /@safe-global/safe-apps-sdk@8.1.0(typescript@5.0.4): resolution: {integrity: sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w==} dependencies: @@ -3912,6 +6449,13 @@ packages: /@scure/base@1.1.3: resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} + /@scure/bip32@1.3.1: + resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} + dependencies: + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + /@scure/bip32@1.3.2: resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} dependencies: @@ -3925,40 +6469,32 @@ packages: '@noble/hashes': 1.3.2 '@scure/base': 1.1.3 + /@sideway/address@4.1.4: + resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} + dependencies: + '@hapi/hoek': 9.3.0 + + /@sideway/formula@3.0.1: + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + /@sideway/pinpoint@2.0.0: + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true - /@solana/buffer-layout@4.0.1: - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} + /@sinonjs/commons@3.0.0: + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} dependencies: - buffer: 6.0.3 + type-detect: 4.0.8 - /@solana/web3.js@1.75.0: - resolution: {integrity: sha512-rHQgdo1EWfb+nPUpHe4O7i8qJPELHKNR5PAZRK+a7XxiykqOfbaAlPt5boDWAGPnYbSv0ziWZv5mq9DlFaQCxg==} + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@babel/runtime': 7.23.4 - '@noble/ed25519': 1.7.3 - '@noble/hashes': 1.3.2 - '@noble/secp256k1': 1.7.1 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.3.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 3.7.0 - node-fetch: 2.6.11 - rpc-websockets: 7.5.1 - superstruct: 0.14.2 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate + '@sinonjs/commons': 3.0.0 + + /@socket.io/component-emitter@3.1.0: + resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} /@spruceid/siwe-parser@2.0.2: resolution: {integrity: sha512-9WuA0ios2537cWYu39MMeH0O2KdrMKgKlOBUTWRTXQjCYu5B+mHCA0JkCbFaJ/0EjxoVIcYCXIW/DoPEpw+PqA==} @@ -4071,43 +6607,16 @@ packages: dependencies: tslib: 2.5.0 - /@tanstack/query-core@4.29.5: - resolution: {integrity: sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==} - - /@tanstack/query-persist-client-core@4.29.5: - resolution: {integrity: sha512-IjLtEZiEUnzpcFVdHoZGqtjv2g0smLK5WOWk8hP/2ndlXe5kaSbtCKWO2WFbw7yWPYVMM2m9zyglZqg5kU1DMA==} - dependencies: - '@tanstack/query-core': 4.29.5 - - /@tanstack/query-sync-storage-persister@4.29.5: - resolution: {integrity: sha512-A5K2owrQ1z/Ipndt/thv3vMXjRPOT02jwlXM51OV5IHg4FLQ9vlXvImYWlBoHmY1MMl91x9bqRgz0gX6hnr14g==} - dependencies: - '@tanstack/query-persist-client-core': 4.29.5 - - /@tanstack/react-query-persist-client@4.29.5(@tanstack/react-query@4.29.5): - resolution: {integrity: sha512-zvQChSqO/HpRHWjCn+4L4M45Yr2eslogJcQr2HFxRw27Wj/5WlFYhnQFo5SCCR+gZh09tMnkzD+zFhN76wMEGw==} - peerDependencies: - '@tanstack/react-query': 4.29.5 - dependencies: - '@tanstack/query-persist-client-core': 4.29.5 - '@tanstack/react-query': 4.29.5(react-dom@18.2.0)(react@18.2.0) + /@tanstack/query-core@5.17.9: + resolution: {integrity: sha512-8xcvpWIPaRMDNLMvG9ugcUJMgFK316ZsqkPPbsI+TMZsb10N9jk0B6XgPk4/kgWC2ziHyWR7n7wUhxmD0pChQw==} - /@tanstack/react-query@4.29.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-F87cibC3s3eG0Q90g2O+hqntpCrudKFnR8P24qkH9uccEhXErnJxBC/AAI4cJRV2bfMO8IeGZQYf3WyYgmSg0w==} + /@tanstack/react-query@5.17.9(react@18.2.0): + resolution: {integrity: sha512-M5E9gwUq1Stby/pdlYjBlL24euIVuGbWKIFCbtnQxSdXI4PgzjTSdXdV3QE6fc+itF+TUvX/JPTKIwq8yuBXcg==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-native: '*' - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true + react: ^18.0.0 dependencies: - '@tanstack/query-core': 4.29.5 + '@tanstack/query-core': 5.17.9 react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - use-sync-external-store: 1.2.0(react@18.2.0) /@testing-library/dom@9.3.1: resolution: {integrity: sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w==} @@ -4195,16 +6704,20 @@ packages: resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} dev: true - /@types/connect@3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + /@types/chrome@0.0.136: + resolution: {integrity: sha512-XDEiRhLkMd+SB7Iw3ZUIj/fov3wLd4HyTdLltVszkgl1dBfc3Rb7oPMVZ2Mz2TLqnF7Ow+StbR8E7r9lqpb4DA==} dependencies: - '@types/node': 18.19.4 + '@types/filesystem': 0.0.35 + '@types/har-format': 1.2.15 /@types/debug@4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: '@types/ms': 0.7.31 + /@types/dom-screen-wake-lock@1.0.3: + resolution: {integrity: sha512-3Iten7X3Zgwvk6kh6/NRdwN7WbZ760YgFCsF5AxDifltUQzW1RaW+WRmcVtgwFzLjaNu64H+0MPJ13yRa8g3Dw==} + /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: @@ -4228,12 +6741,23 @@ packages: /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + /@types/filesystem@0.0.35: + resolution: {integrity: sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ==} + dependencies: + '@types/filewriter': 0.0.32 + + /@types/filewriter@0.0.32: + resolution: {integrity: sha512-Kpi2GXQyYJdjL8mFclL1eDgihn1SIzorMZjD94kdPZh9E4VxGOeyjPxi5LpsM4Zku7P0reqegZTt2GxhmA9VBg==} + /@types/fs-extra@9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: '@types/node': 17.0.35 dev: true + /@types/har-format@1.2.15: + resolution: {integrity: sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==} + /@types/hast@2.3.4: resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} dependencies: @@ -4243,6 +6767,19 @@ packages: resolution: {integrity: sha512-bSxgya4x5O+x+QhfCGckiDDE+17XGPp1TNBgBA/vfF5EwdiZC70F4cKG5QK2v44+v62oY7/t/InreRhxskulcA==} dev: true + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: false @@ -4273,6 +6810,7 @@ packages: /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: true /@types/node@17.0.35: resolution: {integrity: sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==} @@ -4297,6 +6835,9 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + /@types/prismjs@1.26.0: resolution: {integrity: sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ==} dev: false @@ -4348,10 +6889,18 @@ packages: /@types/scheduler@0.16.3: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + /@types/secp256k1@4.0.6: + resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} + dependencies: + '@types/node': 18.19.4 + /@types/semver@7.5.0: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + /@types/trusted-types@2.0.3: resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} @@ -4366,10 +6915,18 @@ packages: resolution: {integrity: sha512-dLhCHEIjf9++/vHaHCo/ngJzGqGGbPh/f7HKwznEk3WFL64t/VKuRiVpyQH4afX93YkCV94I9M0Cx+DBLk1Dsg==} dev: true - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + /@types/yargs@15.0.19: + resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} dependencies: - '@types/node': 18.19.4 + '@types/yargs-parser': 21.0.3 + + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + dependencies: + '@types/yargs-parser': 21.0.3 /@typescript-eslint/parser@5.59.5(eslint@8.15.0)(typescript@5.0.4): resolution: {integrity: sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw==} @@ -4642,7 +7199,7 @@ packages: dependencies: magic-string: 0.30.3 pathe: 1.1.1 - pretty-format: 29.6.0 + pretty-format: 29.7.0 dev: true /@vitest/spy@0.33.0: @@ -4656,98 +7213,28 @@ packages: dependencies: diff-sequences: 29.4.3 loupe: 2.3.6 - pretty-format: 29.6.0 + pretty-format: 29.7.0 dev: true - /@wagmi/connectors@3.1.11(@types/react@18.2.46)(react@18.2.0)(typescript@5.0.4)(viem@1.21.4): - resolution: {integrity: sha512-wzxp9f9PtSUFjDUP/QDjc1t7HON4D8wrVKsw35ejdO8hToDpx1gU9lwH/47Zo/1zExGezQc392sjoHSszYd7OA==} + /@wagmi/connectors@4.1.6(@types/react@18.2.46)(@wagmi/core@2.3.1)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0)(typescript@5.0.4)(viem@2.4.1): + resolution: {integrity: sha512-Kew/4K3AFMF4eNwg5ZEDMDu0R2MaLWwkgzWTPNwIp3Jjm8jtxSJ2Qyg23wS0YxaaGGefXX4/9K9MAN2Vjpsowg==} peerDependencies: + '@wagmi/core': 2.3.1 typescript: '>=5.0.4' - viem: '>=0.3.35' + viem: 2.x peerDependenciesMeta: typescript: optional: true dependencies: - '@coinbase/wallet-sdk': 3.6.6 + '@coinbase/wallet-sdk': 3.9.1 + '@metamask/sdk': 0.14.1(@types/react@18.2.46)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0) '@safe-global/safe-apps-provider': 0.18.1(typescript@5.0.4) '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.0.4) + '@wagmi/core': 2.3.1(@types/react@18.2.46)(react@18.2.0)(typescript@5.0.4)(viem@2.4.1) '@walletconnect/ethereum-provider': 2.11.0(@types/react@18.2.46)(react@18.2.0) - '@walletconnect/legacy-provider': 2.0.0 - '@walletconnect/modal': 2.6.2(@types/react@18.2.46)(react@18.2.0) - '@walletconnect/utils': 2.11.0 - abitype: 0.8.7(typescript@5.0.4) - eventemitter3: 4.0.7 - typescript: 5.0.4 - viem: 1.21.4(typescript@5.0.4) - 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 - - /@wagmi/connectors@3.1.5(@types/react@18.2.46)(lokijs@1.5.12)(react@18.2.0)(typescript@5.0.4)(viem@1.19.4): - resolution: {integrity: sha512-aE4rWZbivqWa9HqjiLDPtwROH2b1Az+lBVMeZ3o/aFxGNGNEkdrSAMOUG15/UFy3VnN6HqGOtTobOBZ10JhfNQ==} - peerDependencies: - typescript: '>=5.0.4' - viem: '>=0.3.35' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@coinbase/wallet-sdk': 3.6.6 - '@ledgerhq/connect-kit-loader': 1.1.0 - '@safe-global/safe-apps-provider': 0.17.1(typescript@5.0.4) - '@safe-global/safe-apps-sdk': 8.0.0(typescript@5.0.4) - '@walletconnect/ethereum-provider': 2.10.2(@walletconnect/modal@2.6.2)(lokijs@1.5.12) - '@walletconnect/legacy-provider': 2.0.0 '@walletconnect/modal': 2.6.2(@types/react@18.2.46)(react@18.2.0) - '@walletconnect/utils': 2.10.2(lokijs@1.5.12) - abitype: 0.8.7(typescript@5.0.4) - eventemitter3: 4.0.7 - typescript: 5.0.4 - viem: 1.19.4(typescript@5.0.4) - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - '@types/react' - - bufferutil - - encoding - - lokijs - - react - - supports-color - - utf-8-validate - - zod - dev: false - - /@wagmi/core@1.4.13(@types/react@18.2.46)(react@18.2.0)(typescript@5.0.4)(viem@1.21.4): - resolution: {integrity: sha512-ytMCvXbBOgfDu9Qw67279wq/jNEe7EZLjLyekX7ROnvHRADqFr3lwZI6ih41UmtRZAmXAx8Ghyuqy154EjB5mQ==} - peerDependencies: - typescript: '>=5.0.4' - viem: '>=0.3.35' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@wagmi/connectors': 3.1.11(@types/react@18.2.46)(react@18.2.0)(typescript@5.0.4)(viem@1.21.4) - abitype: 0.8.7(typescript@5.0.4) - eventemitter3: 4.0.7 typescript: 5.0.4 - viem: 1.21.4(typescript@5.0.4) - zustand: 4.3.8(react@18.2.0) + viem: 2.4.1(typescript@5.0.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -4764,65 +7251,38 @@ packages: - '@vercel/kv' - bufferutil - encoding - - immer - react + - react-dom + - react-native + - rollup - supports-color - utf-8-validate - zod - /@wagmi/core@1.4.7(@types/react@18.2.46)(lokijs@1.5.12)(react@18.2.0)(typescript@5.0.4)(viem@1.19.4): - resolution: {integrity: sha512-PiOIGni8ArQoPmuDylHX38zMt2nPnTYRIluIqiduKyGCM61X/tf10a0rafUMOOphDPudZu1TacNDhCSeoh/LEA==} + /@wagmi/core@2.3.1(@types/react@18.2.46)(react@18.2.0)(typescript@5.0.4)(viem@2.4.1): + resolution: {integrity: sha512-vpD5el6E8s2gmTDFPr1ghRuQCBTe45QSOSxAPkImCXWXiAh4xoCfwPH8lBUBpRJouu2eVBPVaCpGQNGO8yD1xw==} peerDependencies: + '@tanstack/query-core': '>=5.0.0' typescript: '>=5.0.4' - viem: '>=0.3.35' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@wagmi/connectors': 3.1.5(@types/react@18.2.46)(lokijs@1.5.12)(react@18.2.0)(typescript@5.0.4)(viem@1.19.4) - abitype: 0.8.7(typescript@5.0.4) - eventemitter3: 4.0.7 - typescript: 5.0.4 - viem: 1.19.4(typescript@5.0.4) - zustand: 4.3.8(react@18.2.0) - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - '@types/react' - - bufferutil - - encoding - - immer - - lokijs - - react - - supports-color - - utf-8-validate - - zod - dev: false - - /@walletconnect/core@2.10.2(lokijs@1.5.12): - resolution: {integrity: sha512-JQz/xp3SLEpTeRQctdck2ugSBVEpMxoSE+lFi2voJkZop1hv6P+uqr6E4PzjFluAjeAnKlT1xvra0aFWjPWVcw==} - 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.13 - '@walletconnect/keyvaluestorage': 1.0.2(lokijs@1.5.12) - '@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.2(lokijs@1.5.12) - '@walletconnect/utils': 2.10.2(lokijs@1.5.12) - events: 3.3.0 - lodash.isequal: 4.5.0 - uint8arrays: 3.1.1 + viem: 2.x + peerDependenciesMeta: + '@tanstack/query-core': + optional: true + typescript: + optional: true + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.5(typescript@5.0.4) + typescript: 5.0.4 + viem: 2.4.1(typescript@5.0.4) + zustand: 4.4.1(@types/react@18.2.46)(react@18.2.0) transitivePeerDependencies: - - '@react-native-async-storage/async-storage' + - '@types/react' - bufferutil - - lokijs + - immer + - react - utf-8-validate - dev: false + - zod /@walletconnect/core@2.11.0: resolution: {integrity: sha512-2Tjp5BCevI7dbmqo/OrCjX4tqgMqwJNQLlQAlphqPfvwlF9+tIu6pGcVbSN3U9zyXzWIZCeleqEaWUeSeET4Ew==} @@ -4862,54 +7322,11 @@ packages: - supports-color - utf-8-validate - /@walletconnect/crypto@1.0.3: - resolution: {integrity: sha512-+2jdORD7XQs76I2Odgr3wwrtyuLUXD/kprNVsjWRhhhdO9Mt6WqVzOPu0/t7OHSmgal8k7SoBQzUc5hu/8zL/g==} - dependencies: - '@walletconnect/encoding': 1.0.2 - '@walletconnect/environment': 1.0.1 - '@walletconnect/randombytes': 1.0.3 - aes-js: 3.1.2 - hash.js: 1.1.7 - tslib: 1.14.1 - - /@walletconnect/encoding@1.0.2: - resolution: {integrity: sha512-CrwSBrjqJ7rpGQcTL3kU+Ief+Bcuu9PH6JLOb+wM6NITX1GTxR/MfNwnQfhLKK6xpRAyj2/nM04OOH6wS8Imag==} - dependencies: - is-typedarray: 1.0.0 - tslib: 1.14.1 - typedarray-to-buffer: 3.1.5 - /@walletconnect/environment@1.0.1: resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} dependencies: tslib: 1.14.1 - /@walletconnect/ethereum-provider@2.10.2(@walletconnect/modal@2.6.2)(lokijs@1.5.12): - resolution: {integrity: sha512-QMYFZ6+rVq2CJLdIPdKK0j1Qm66UA27oQU5V2SrL8EVwl7wFfm0Bq7fnL+qAWeDpn612dNeNErpk/ROa1zWlWg==} - peerDependencies: - '@walletconnect/modal': '>=2' - peerDependenciesMeta: - '@walletconnect/modal': - optional: true - 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.46)(react@18.2.0) - '@walletconnect/sign-client': 2.10.2(lokijs@1.5.12) - '@walletconnect/types': 2.10.2(lokijs@1.5.12) - '@walletconnect/universal-provider': 2.10.2(lokijs@1.5.12) - '@walletconnect/utils': 2.10.2(lokijs@1.5.12) - events: 3.3.0 - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - bufferutil - - encoding - - lokijs - - utf-8-validate - dev: false - /@walletconnect/ethereum-provider@2.11.0(@types/react@18.2.46)(react@18.2.0): resolution: {integrity: sha512-YrTeHVjuSuhlUw7SQ6xBJXDuJ6iAC+RwINm9nVhoKYJSHAy3EVSJZOofMKrnecL0iRMtD29nj57mxAInIBRuZA==} dependencies: @@ -4986,19 +7403,6 @@ packages: '@walletconnect/jsonrpc-types': 1.0.3 tslib: 1.14.1 - /@walletconnect/jsonrpc-ws-connection@1.0.13: - resolution: {integrity: sha512-mfOM7uFH4lGtQxG+XklYuFBj6dwVvseTt5/ahOkkmpcAEgz2umuzu7fTR+h5EmjQBdrmYyEBOWADbeaFNxdySg==} - dependencies: - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/safe-json': 1.0.2 - events: 3.3.0 - tslib: 1.14.1 - ws: 7.5.9 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@walletconnect/jsonrpc-ws-connection@1.0.14: resolution: {integrity: sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA==} dependencies: @@ -5010,22 +7414,6 @@ packages: - bufferutil - utf-8-validate - /@walletconnect/keyvaluestorage@1.0.2(lokijs@1.5.12): - resolution: {integrity: sha512-U/nNG+VLWoPFdwwKx0oliT4ziKQCEoQ27L5Hhw8YOFGA2Po9A9pULUYNWhDgHkrb0gYDNt//X7wABcEWWBd3FQ==} - peerDependencies: - '@react-native-async-storage/async-storage': 1.x - lokijs: 1.x - peerDependenciesMeta: - '@react-native-async-storage/async-storage': - optional: true - lokijs: - optional: true - dependencies: - lokijs: 1.5.12 - safe-json-utils: 1.1.1 - tslib: 1.14.1 - dev: false - /@walletconnect/keyvaluestorage@1.1.1: resolution: {integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==} peerDependencies: @@ -5051,58 +7439,6 @@ packages: - '@vercel/kv' - supports-color - /@walletconnect/legacy-client@2.0.0: - resolution: {integrity: sha512-v5L7rYk9loVnfvUf0mF+76bUPFaU5/Vh7mzL6/950CD/yoGdzYZ3Kj+L7mkC6HPMEGeQsBP1+sqBuiVGZ/aODA==} - dependencies: - '@walletconnect/crypto': 1.0.3 - '@walletconnect/encoding': 1.0.2 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/legacy-types': 2.0.0 - '@walletconnect/legacy-utils': 2.0.0 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/window-getters': 1.0.1 - '@walletconnect/window-metadata': 1.0.1 - detect-browser: 5.3.0 - query-string: 6.14.1 - - /@walletconnect/legacy-modal@2.0.0: - resolution: {integrity: sha512-jckNd8lMhm4X7dX9TDdxM3bXKJnaqkRs6K2Mo5j6GmbIF9Eyx40jZ5+q457RVxvM6ciZEDT5s1wBHWdWoOo+9Q==} - dependencies: - '@walletconnect/legacy-types': 2.0.0 - '@walletconnect/legacy-utils': 2.0.0 - copy-to-clipboard: 3.3.3 - preact: 10.13.2 - qrcode: 1.5.3 - - /@walletconnect/legacy-provider@2.0.0: - resolution: {integrity: sha512-A8xPebMI1A+50HbWwTpFCbwP7G+1NGKdTKyg8BUUg3h3Y9JucpC1W6w/x0v1Xw7qFEqQnz74LoIN/A3ytH9xrQ==} - dependencies: - '@walletconnect/jsonrpc-http-connection': 1.0.7 - '@walletconnect/jsonrpc-provider': 1.0.13 - '@walletconnect/legacy-client': 2.0.0 - '@walletconnect/legacy-modal': 2.0.0 - '@walletconnect/legacy-types': 2.0.0 - '@walletconnect/legacy-utils': 2.0.0 - transitivePeerDependencies: - - encoding - - /@walletconnect/legacy-types@2.0.0: - resolution: {integrity: sha512-sOVrA7HUdbI1OwKyPOQU0/DdvTSVFlsXWpAk2K2WvP2erTkBWPMTJq6cv2BmKdoJ3p6gLApT7sd+jHi3OF71uw==} - dependencies: - '@walletconnect/jsonrpc-types': 1.0.3 - - /@walletconnect/legacy-utils@2.0.0: - resolution: {integrity: sha512-CPWxSVVXw0kgNCxvU126g4GiV3mzXmC8IPJ15twE46aJ1FX+RHEIfAzFMFz2F2+fEhBxL63A7dwNQKDXorRPcQ==} - dependencies: - '@walletconnect/encoding': 1.0.2 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/legacy-types': 2.0.0 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/window-getters': 1.0.1 - '@walletconnect/window-metadata': 1.0.1 - detect-browser: 5.3.0 - query-string: 6.14.1 - /@walletconnect/logger@2.0.1: resolution: {integrity: sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ==} dependencies: @@ -5137,14 +7473,6 @@ packages: - '@types/react' - react - /@walletconnect/randombytes@1.0.3: - resolution: {integrity: sha512-35lpzxcHFbTN3ABefC9W+uBpNZl1GC4Wpx0ed30gibfO/y9oLdy1NznbV96HARQKSBV9J9M/rrtIvf6a23jfYw==} - dependencies: - '@walletconnect/encoding': 1.0.2 - '@walletconnect/environment': 1.0.1 - randombytes: 2.1.0 - tslib: 1.14.1 - /@walletconnect/relay-api@1.0.9: resolution: {integrity: sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg==} dependencies: @@ -5166,25 +7494,6 @@ packages: dependencies: tslib: 1.14.1 - /@walletconnect/sign-client@2.10.2(lokijs@1.5.12): - resolution: {integrity: sha512-vviSLV3f92I0bReX+OLr1HmbH0uIzYEQQFd1MzIfDk9PkfFT/LLAHhUnDaIAMkIdippqDcJia+5QEtT4JihL3Q==} - dependencies: - '@walletconnect/core': 2.10.2(lokijs@1.5.12) - '@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.2(lokijs@1.5.12) - '@walletconnect/utils': 2.10.2(lokijs@1.5.12) - events: 3.3.0 - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - bufferutil - - lokijs - - utf-8-validate - dev: false - /@walletconnect/sign-client@2.11.0: resolution: {integrity: sha512-H2ukscibBS+6WrzQWh+WyVBqO5z4F5et12JcwobdwgHnJSlqIoZxqnUYYWNCI5rUR5UKsKWaUyto4AE9N5dw4Q==} dependencies: @@ -5220,20 +7529,6 @@ packages: dependencies: tslib: 1.14.1 - /@walletconnect/types@2.10.2(lokijs@1.5.12): - resolution: {integrity: sha512-luNV+07Wdla4STi9AejseCQY31tzWKQ5a7C3zZZaRK/di+rFaAAb7YW04OP4klE7tw/mJRGPTlekZElmHxO8kQ==} - dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.1 - '@walletconnect/jsonrpc-types': 1.0.3 - '@walletconnect/keyvaluestorage': 1.0.2(lokijs@1.5.12) - '@walletconnect/logger': 2.0.1 - events: 3.3.0 - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - lokijs - dev: false - /@walletconnect/types@2.11.0: resolution: {integrity: sha512-AB5b1lrEbCGHxqS2vqfCkIoODieH+ZAUp9rA1O2ftrhnqDJiJK983Df87JhYhECsQUBHHfALphA8ydER0q+9sw==} dependencies: @@ -5258,26 +7553,6 @@ packages: - '@vercel/kv' - supports-color - /@walletconnect/universal-provider@2.10.2(lokijs@1.5.12): - resolution: {integrity: sha512-wFgI0LbQ3D56sgaUMsgOHCM5m8WLxiC71BGuCKQfApgsbNMVKugYVy2zWHyUyi8sqTQHI+uSaVpDev4UHq9LEw==} - 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.2(lokijs@1.5.12) - '@walletconnect/types': 2.10.2(lokijs@1.5.12) - '@walletconnect/utils': 2.10.2(lokijs@1.5.12) - events: 3.3.0 - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - bufferutil - - encoding - - lokijs - - utf-8-validate - dev: false - /@walletconnect/universal-provider@2.11.0: resolution: {integrity: sha512-zgJv8jDvIMP4Qse/D9oIRXGdfoNqonsrjPZanQ/CHNe7oXGOBiQND2IIeX+tS0H7uNA0TPvctljCLiIN9nw4eA==} dependencies: @@ -5308,28 +7583,6 @@ packages: - supports-color - utf-8-validate - /@walletconnect/utils@2.10.2(lokijs@1.5.12): - resolution: {integrity: sha512-syxXRpc2yhSknMu3IfiBGobxOY7fLfLTJuw+ppKaeO6WUdZpIit3wfuGOcc0Ms3ZPFCrGfyGOoZsCvgdXtptRg==} - 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.2(lokijs@1.5.12) - '@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: - - '@react-native-async-storage/async-storage' - - lokijs - dev: false - /@walletconnect/utils@2.11.0: resolution: {integrity: sha512-hxkHPlTlDQILHfIKXlmzgNJau/YcSBC3XHUSuZuKZbNEw3duFT6h6pm3HT/1+j1a22IG05WDsNBuTCRkwss+BQ==} dependencies: @@ -5492,23 +7745,26 @@ packages: dependencies: jsonparse: 1.3.1 through: 2.3.8 + dev: true - /abitype@0.8.7(typescript@5.0.4): - resolution: {integrity: sha512-wQ7hV8Yg/yKmGyFpqrNZufCxbszDe5es4AZGYPBitocfSqXtjrTG9JMWFcc4N30ukl2ve48aBTwt7NJxVQdU3w==} + /abitype@0.9.8(typescript@5.0.4): + 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.0.4 - /abitype@0.9.8(typescript@5.0.4): - resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + /abitype@1.0.0(typescript@5.0.4): + resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} peerDependencies: typescript: '>=5.0.4' - zod: ^3 >=3.19.1 + zod: ^3 >=3.22.0 peerDependenciesMeta: typescript: optional: true @@ -5517,6 +7773,19 @@ packages: dependencies: typescript: 5.0.4 + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + /acorn-import-assertions@1.8.0(acorn@8.10.0): resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: @@ -5545,9 +7814,6 @@ packages: /aes-js@3.0.0: resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} - /aes-js@3.1.2: - resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} - /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} @@ -5557,16 +7823,6 @@ packages: - supports-color dev: true - /agentkeepalive@4.3.0: - resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} - engines: {node: '>= 8.0.0'} - dependencies: - debug: 4.3.4 - depd: 2.0.0 - humanize-ms: 1.2.1 - transitivePeerDependencies: - - supports-color - /aggregate-error@4.0.1: resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} engines: {node: '>=12'} @@ -5619,11 +7875,25 @@ packages: '@algolia/transporter': 4.17.0 dev: false + /anser@1.4.10: + resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} + /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} dev: true + /ansi-fragments@0.2.1: + resolution: {integrity: sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==} + dependencies: + colorette: 1.4.0 + slice-ansi: 2.1.0 + strip-ansi: 5.2.0 + + /ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -5643,7 +7913,6 @@ packages: /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -5655,6 +7924,9 @@ packages: /apg-js@4.1.3: resolution: {integrity: sha512-XYyDcoBho8OpnWPRnedMwyL+76ovCtsESerHZEfY39dO4IrEqN97mdEYkOyHa0XTX5+3+U5FmpqPLttK0f7n6g==} + /appdirsjs@1.2.7: + resolution: {integrity: sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==} + /arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} @@ -5662,7 +7934,6 @@ packages: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 - dev: true /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -5782,6 +8053,9 @@ packages: engines: {node: '>=12'} dev: false + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true @@ -5790,14 +8064,27 @@ packages: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true + /ast-types@0.15.2: + resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.2 + + /astral-regex@1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} + engines: {node: '>=4'} + /astring@1.8.4: resolution: {integrity: sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==} dev: true + /async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + /async-mutex@0.2.6: resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} dependencies: - tslib: 2.5.0 + tslib: 2.6.2 /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} @@ -5843,17 +8130,182 @@ packages: dequal: 2.0.3 dev: true + /babel-core@7.0.0-bridge.0(@babel/core@7.23.7): + resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.23.4 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.21.8): + resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.21.8) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.7): + resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.21.8): + resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.21.8) + core-js-compat: 3.35.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.7): + resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + core-js-compat: 3.35.0 + transitivePeerDependencies: + - supports-color + + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.21.8): + resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.7): + resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + transitivePeerDependencies: + - supports-color + + /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: + resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} + + /babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.21.8): + resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} + dependencies: + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.21.8) + transitivePeerDependencies: + - '@babel/core' + dev: false + + /babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.23.7): + resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} + dependencies: + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.7) + transitivePeerDependencies: + - '@babel/core' + + /babel-preset-fbjs@3.4.0(@babel/core@7.21.8): + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.8) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.8) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.21.8) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.21.8) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.21.8) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.21.8) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.21.8) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.21.8) + babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 + dev: false + + /babel-preset-fbjs@3.4.0(@babel/core@7.23.7): + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.7) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) + babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 + /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /base-x@3.0.9: - resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} - dependencies: - safe-buffer: 5.2.1 /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -5877,12 +8329,6 @@ packages: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: false - /bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - dependencies: - bindings: 1.5.0 - /bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} dev: false @@ -5891,13 +8337,12 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - /bind-decorator@1.0.11: - resolution: {integrity: sha512-yzkH0uog6Vv/vQ9+rhSKxecnqGUZHYncg7qS7voz3Q76+TAi1SGiOKk2mlOvusQnFz9Dc4BC/NMkeXu11YgjJg==} - - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: - file-uri-to-path: 1.0.0 + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} @@ -5905,12 +8350,8 @@ packages: /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - /borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} - dependencies: - bn.js: 5.2.1 - bs58: 4.0.1 - text-encoding-utf-8: 1.0.2 + /bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} /bplist-parser@0.2.0: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} @@ -5924,7 +8365,6 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -5961,42 +8401,37 @@ packages: update-browserslist-db: 1.0.11(browserslist@4.21.5) dev: false - /browserslist@4.21.9: - resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - dependencies: - caniuse-lite: 1.0.30001563 - electron-to-chromium: 1.4.475 - node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.9) - /browserslist@4.22.2: resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: caniuse-lite: 1.0.30001568 electron-to-chromium: 1.4.610 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) - dev: false - /bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: - base-x: 3.0.9 + node-int64: 0.4.0 /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + /buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - /bufferutil@4.0.7: - resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==} + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} engines: {node: '>=6.14.2'} dependencies: node-gyp-build: 4.6.0 @@ -6020,6 +8455,10 @@ packages: dependencies: streamsearch: 1.1.0 + /bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -6036,12 +8475,26 @@ packages: function-bind: 1.1.2 get-intrinsic: 1.2.2 set-function-length: 1.1.1 - dev: true + + /caller-callsite@2.0.0: + resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} + engines: {node: '>=4'} + dependencies: + callsites: 2.0.0 + + /caller-path@2.0.0: + resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==} + engines: {node: '>=4'} + dependencies: + caller-callsite: 2.0.0 + + /callsites@2.0.0: + resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} + engines: {node: '>=4'} /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: true /camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} @@ -6063,12 +8516,17 @@ packages: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + /caniuse-lite@1.0.30001527: resolution: {integrity: sha512-YkJi7RwPgWtXVSgK4lG9AHH57nSzvvOp9MesgXmw4Q7n0C3H04L0foHqfxcmSAm5AcWb8dW9AYj2tR7/5GnddQ==} dev: true /caniuse-lite@1.0.30001563: resolution: {integrity: sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==} + dev: true /caniuse-lite@1.0.30001568: resolution: {integrity: sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A==} @@ -6151,15 +8609,41 @@ packages: optionalDependencies: fsevents: 2.3.3 + /chrome-launcher@0.15.2: + resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} + engines: {node: '>=12.13.0'} + hasBin: true + dependencies: + '@types/node': 18.19.4 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + transitivePeerDependencies: + - supports-color + /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: false + /chromium-edge-launcher@1.0.0: + resolution: {integrity: sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==} + dependencies: + '@types/node': 18.19.4 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + mkdirp: 1.0.4 + rimraf: 3.0.2 + transitivePeerDependencies: + - supports-color + + /ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + /ci-info@3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} - dev: true /citty@0.1.5: resolution: {integrity: sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==} @@ -6173,6 +8657,16 @@ packages: escape-string-regexp: 5.0.0 dev: false + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -6214,15 +8708,21 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true + + /clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - dev: true - /clsx@1.1.1: - resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} + /clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} /clsx@2.1.0: @@ -6251,6 +8751,9 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -6261,6 +8764,9 @@ packages: /comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + /command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -6269,6 +8775,10 @@ packages: engines: {node: ^12.20.0 || >=14} dev: false + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + /comment-json@4.2.3: resolution: {integrity: sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==} engines: {node: '>= 6'} @@ -6280,6 +8790,9 @@ packages: repeat-string: 1.6.1 dev: true + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: @@ -6287,9 +8800,39 @@ packages: dot-prop: 5.3.0 dev: true + /compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + + /compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + + /connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color /consola@3.2.3: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} @@ -6339,6 +8882,9 @@ packages: /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + /cookie-es@1.0.0: resolution: {integrity: sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==} @@ -6352,14 +8898,13 @@ packages: toggle-selection: 1.0.6 dev: false - /copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + /core-js-compat@3.35.0: + resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==} dependencies: - toggle-selection: 1.0.6 + browserslist: 4.22.2 /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true /cosmiconfig-typescript-loader@5.0.0(@types/node@18.19.4)(cosmiconfig@8.3.6)(typescript@5.0.4): resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} @@ -6375,6 +8920,25 @@ packages: typescript: 5.0.4 dev: true + /cosmiconfig@5.2.1: + resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} + engines: {node: '>=4'} + dependencies: + import-fresh: 2.0.0 + is-directory: 0.3.1 + js-yaml: 3.14.1 + parse-json: 4.0.0 + + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + /cosmiconfig@8.3.6(typescript@5.0.4): resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -6415,6 +8979,10 @@ packages: p-map: 5.5.0 dev: false + /crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: @@ -6422,6 +8990,13 @@ packages: transitivePeerDependencies: - encoding + /cross-fetch@4.0.0: + resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: @@ -6504,10 +9079,29 @@ packages: whatwg-url: 14.0.0 dev: true + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.23.4 + + /dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + /debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} dev: false + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -6596,6 +9190,10 @@ packages: resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} engines: {node: '>=0.10.0'} + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + /default-browser-id@3.0.0: resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} engines: {node: '>=12'} @@ -6618,7 +9216,6 @@ packages: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - dev: true /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} @@ -6627,7 +9224,10 @@ packages: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.0 - dev: true + + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} /define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} @@ -6654,15 +9254,14 @@ packages: /defu@6.1.3: resolution: {integrity: sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==} - /delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} - /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: true + /denodeify@1.2.1: + resolution: {integrity: sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==} + /denque@2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} @@ -6671,6 +9270,14 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + /deprecated-react-native-prop-types@5.0.0: + resolution: {integrity: sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ==} + engines: {node: '>=18'} + dependencies: + '@react-native/normalize-colors': 0.73.2 + invariant: 2.2.4 + prop-types: 15.8.1 + /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -6679,6 +9286,10 @@ packages: /destr@2.0.2: resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==} + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + /detect-browser@5.3.0: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} @@ -6751,20 +9362,26 @@ packages: readable-stream: 3.6.2 stream-shift: 1.0.1 + /eciesjs@0.3.18: + resolution: {integrity: sha512-RQhegEtLSyIiGJmFTZfvCTHER/fymipXFVx6OwSRYD6hOuy+6Kjpk0dGvIfP9kxn/smBpxQy71uxpGO406ITCw==} + dependencies: + '@types/secp256k1': 4.0.6 + futoin-hkdf: 1.5.3 + secp256k1: 5.0.0 + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + /electron-to-chromium@1.4.387: resolution: {integrity: sha512-tutLf+alr1/0YqJwKPdstVvDLmxmLb5xNyDLNS0RZmenHcEYk9qKfpKDCVZEKJ00JVbnayJm1MZAbYhYDFpcOw==} dev: false - /electron-to-chromium@1.4.475: - resolution: {integrity: sha512-mTye5u5P98kSJO2n7zYALhpJDmoSQejIGya0iR01GpoRady8eK3bw7YHHnjA1Rfi4ZSLdpuzlAC7Zw+1Zu7Z6A==} - /electron-to-chromium@1.4.508: resolution: {integrity: sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==} dev: true /electron-to-chromium@1.4.610: resolution: {integrity: sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg==} - dev: false /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -6792,11 +9409,32 @@ packages: /encode-utf8@1.0.3: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 + /engine.io-client@6.5.3(bufferutil@4.0.8)(utf-8-validate@6.0.3): + resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-parser: 5.2.1 + ws: 8.11.0(bufferutil@4.0.8)(utf-8-validate@6.0.3) + xmlhttprequest-ssl: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /engine.io-parser@5.2.1: + resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} + engines: {node: '>=10.0.0'} + /enhanced-resolve@5.13.0: resolution: {integrity: sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==} engines: {node: '>=10.13.0'} @@ -6816,11 +9454,27 @@ packages: engines: {node: '>=0.12'} dev: true + /envinfo@7.11.0: + resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} + engines: {node: '>=4'} + hasBin: true + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - dev: true + + /error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + dependencies: + stackframe: 1.3.4 + + /errorhandler@1.5.1: + resolution: {integrity: sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==} + engines: {node: '>= 0.8'} + dependencies: + accepts: 1.3.8 + escape-html: 1.0.3 /es-abstract@1.21.2: resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} @@ -6968,14 +9622,6 @@ packages: is-symbol: 1.0.4 dev: true - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} - dependencies: - es6-promise: 4.2.8 - /esbuild-android-64@0.14.39: resolution: {integrity: sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==} engines: {node: '>=12'} @@ -7238,14 +9884,20 @@ packages: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true /escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} @@ -7526,7 +10178,6 @@ packages: /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - dev: true /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} @@ -7603,24 +10254,28 @@ packages: /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - dev: true - /eth-block-tracker@6.1.0: - resolution: {integrity: sha512-K9SY8+/xMBi4M5HHTDdxnpEqEEGjbNpzHFqvxyjMZej8InV/B+CkFRKM6W+uvrFJ7m8Zd1E0qUkseU3vdIDFYQ==} + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + /eth-block-tracker@7.1.0: + resolution: {integrity: sha512-8YdplnuE1IK4xfqpf4iU7oBxnOYAc35934o083G8ao+8WM8QQtt/mVlAY6yIAdY1eMeLqg4Z//PZjJGmWGPMRg==} engines: {node: '>=14.0.0'} dependencies: - '@metamask/safe-event-emitter': 2.0.0 - '@metamask/utils': 3.6.0 + '@metamask/eth-json-rpc-provider': 1.0.1 + '@metamask/safe-event-emitter': 3.0.0 + '@metamask/utils': 5.0.2 json-rpc-random-id: 1.0.1 pify: 3.0.0 transitivePeerDependencies: - supports-color - /eth-json-rpc-filters@5.1.0: - resolution: {integrity: sha512-fos+9xmoa1A2Ytsc9eYof17r81BjdJOUcGcgZn4K/tKdCCTb+a8ytEtwlu1op5qsXFDlgGmstTELFrDEc89qEQ==} + /eth-json-rpc-filters@6.0.1: + resolution: {integrity: sha512-ITJTvqoCw6OVMLs7pI8f4gG92n/St6x80ACtHodeS+IXmO0w+t1T5OOzfSt7KLSMLRkVUoexV7tztLgDxg+iig==} engines: {node: '>=14.0.0'} dependencies: - '@metamask/safe-event-emitter': 2.0.0 + '@metamask/safe-event-emitter': 3.0.0 async-mutex: 0.2.6 eth-query: 2.1.2 json-rpc-engine: 6.1.0 @@ -7632,11 +10287,19 @@ packages: json-rpc-random-id: 1.0.1 xtend: 4.0.2 - /eth-rpc-errors@4.0.2: - resolution: {integrity: sha512-n+Re6Gu8XGyfFy1it0AwbD1x0MUzspQs0D5UiPs1fFPCr6WAwZM+vbIhXheBFrpgosqN9bs5PqlB4Q61U/QytQ==} + /eth-rpc-errors@4.0.3: + resolution: {integrity: sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==} dependencies: fast-safe-stringify: 2.1.1 + /ethereum-cryptography@2.1.2: + resolution: {integrity: sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==} + dependencies: + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.1 + '@scure/bip32': 1.3.1 + '@scure/bip39': 1.2.1 + /ethers@5.6.8: resolution: {integrity: sha512-YxIGaltAOdvBFPZwIkyHnXbW40f1r8mHUgapW6dxkO+6t7H6wY8POUn0Kbxrd/N7I4hHxyi7YCddMAH/wmho2w==} dependencies: @@ -7689,12 +10352,15 @@ packages: require-like: 0.1.2 dev: true - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + /eventemitter2@6.4.9: + resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} @@ -7758,6 +10424,12 @@ packages: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} dev: true + /extension-port-stream@2.1.1: + resolution: {integrity: sha512-qknp5o5rj2J9CRKfVB8KJr+uXQlrojNZzdESUPhKYLXf97TPcGf6qWWKmpsNNtUyOdzFhab1ON0jzouNxHHvow==} + engines: {node: '>=12.0.0'} + dependencies: + webextension-polyfill: 0.10.0 + /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -7767,9 +10439,8 @@ packages: tmp: 0.0.33 dev: true - /eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} + /fast-deep-equal@2.0.1: + resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -7798,8 +10469,11 @@ packages: /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - /fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + /fast-xml-parser@4.3.2: + resolution: {integrity: sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==} + hasBin: true + dependencies: + strnum: 1.0.5 /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} @@ -7812,6 +10486,11 @@ packages: format: 0.2.2 dev: true + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + /fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -7827,9 +10506,6 @@ packages: flat-cache: 3.0.4 dev: true - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -7840,6 +10516,37 @@ packages: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} + /finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + /find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -7873,6 +10580,13 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true + /flow-enums-runtime@0.0.6: + resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} + + /flow-parser@0.206.0: + resolution: {integrity: sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==} + engines: {node: '>=0.4.0'} + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -7926,6 +10640,10 @@ packages: tslib: 2.5.0 dev: false + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -7960,11 +10678,9 @@ packages: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} @@ -7977,7 +10693,6 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} @@ -8007,6 +10722,10 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true + /futoin-hkdf@1.5.3: + resolution: {integrity: sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ==} + engines: {node: '>=8'} + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -8033,7 +10752,6 @@ packages: has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.0 - dev: true /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} @@ -8110,7 +10828,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /global-dirs@0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} @@ -8219,12 +10936,10 @@ packages: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.0 - dev: true /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} - dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} @@ -8257,7 +10972,6 @@ packages: engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 - dev: true /hast-util-from-parse5@7.1.2: resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} @@ -8338,6 +11052,28 @@ packages: space-separated-tokens: 2.0.2 dev: false + /hermes-estree@0.15.0: + resolution: {integrity: sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==} + + /hermes-estree@0.18.2: + resolution: {integrity: sha512-KoLsoWXJ5o81nit1wSyEZnWUGy9cBna9iYMZBR7skKh7okYAYKqQ9/OczwpMHn/cH0hKDyblulGsJ7FknlfVxQ==} + + /hermes-parser@0.15.0: + resolution: {integrity: sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==} + dependencies: + hermes-estree: 0.15.0 + + /hermes-parser@0.18.2: + resolution: {integrity: sha512-1eQfvib+VPpgBZ2zYKQhpuOjw1tH+Emuib6QmjkJWJMhyjM8xnXMvA+76o9LhF0zOAJDZgPfQhg43cyXEyl5Ew==} + dependencies: + hermes-estree: 0.18.2 + + /hermes-profile-transformer@0.0.6: + resolution: {integrity: sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==} + engines: {node: '>=8'} + dependencies: + source-map: 0.7.4 + /hey-listen@1.0.8: resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} @@ -8348,6 +11084,11 @@ packages: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -8366,9 +11107,24 @@ packages: whatwg-encoding: 3.1.1 dev: true + /html-parse-stringify@3.0.1: + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + dependencies: + void-elements: 3.1.0 + /html-void-elements@2.0.1: resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + /http-proxy-agent@7.0.0: resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} engines: {node: '>= 14'} @@ -8411,11 +11167,6 @@ packages: engines: {node: '>=14.18.0'} dev: true - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - dependencies: - ms: 2.1.3 - /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} @@ -8429,6 +11180,16 @@ packages: make-plural: 7.3.0 dev: false + /i18next-browser-languagedetector@7.2.0: + resolution: {integrity: sha512-U00DbDtFIYD3wkWsr2aVGfXGAj2TgnELzOX9qv8bT0aJtvPV9CRO77h+vgmHFBMe7LAxdwvT/7VkCWGya6L3tA==} + dependencies: + '@babel/runtime': 7.23.4 + + /i18next@22.5.1: + resolution: {integrity: sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==} + dependencies: + '@babel/runtime': 7.23.4 + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -8453,23 +11214,35 @@ packages: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} + /image-size@1.1.1: + resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} + engines: {node: '>=16.x'} + hasBin: true + dependencies: + queue: 6.0.2 + /imagescript@1.2.16: resolution: {integrity: sha512-hhy8OVNymU+cYYj8IwCbdNlXJRoMr4HRd7+efkH32eBVfybVU/5SbzDYf3ZSiiF9ye/ghfBrI/ujec/nwl+fOQ==} engines: {node: '>=14.0.0'} dev: true + /import-fresh@2.0.0: + resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} + engines: {node: '>=4'} + dependencies: + caller-path: 2.0.0 + resolve-from: 3.0.0 + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - dev: true /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} @@ -8491,7 +11264,6 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -8526,7 +11298,6 @@ packages: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: loose-envify: 1.4.0 - dev: false /ioredis@5.3.2: resolution: {integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==} @@ -8544,6 +11315,9 @@ packages: transitivePeerDependencies: - supports-color + /ip@1.1.8: + resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} + /iron-webcrypto@1.0.0: resolution: {integrity: sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg==} @@ -8573,7 +11347,6 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true /is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} @@ -8620,7 +11393,6 @@ packages: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.0 - dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -8632,6 +11404,10 @@ packages: /is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + /is-directory@0.3.1: + resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==} + engines: {node: '>=0.10.0'} + /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} @@ -8656,6 +11432,10 @@ packages: call-bind: 1.0.5 dev: true + /is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -8682,6 +11462,10 @@ packages: is-docker: 3.0.0 dev: true + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true @@ -8712,6 +11496,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + /is-plain-obj@3.0.0: resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} engines: {node: '>=10'} @@ -8721,6 +11509,12 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true @@ -8794,16 +11588,17 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 + dev: true /is-typed-array@1.1.12: resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.13 - dev: true - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} @@ -8827,12 +11622,19 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-wsl@1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true @@ -8840,21 +11642,18 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + /isomorphic-unfetch@3.1.0: resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} dependencies: - node-fetch: 2.6.11 + node-fetch: 2.7.0 unfetch: 4.2.0 transitivePeerDependencies: - encoding - /isomorphic-ws@4.0.1(ws@7.5.9): - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' - dependencies: - ws: 7.5.9 - /isows@1.0.3(ws@8.13.0): resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} peerDependencies: @@ -8875,26 +11674,64 @@ packages: /javascript-stringify@2.1.0: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} - /jayson@3.7.0: - resolution: {integrity: sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==} - engines: {node: '>=8'} + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/connect': 3.4.35 - '@types/node': 12.20.55 - '@types/ws': 7.4.7 - JSONStream: 1.3.5 - commander: 2.20.3 - delay: 5.0.0 - es6-promisify: 5.0.0 - eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.9) - json-stringify-safe: 5.0.1 - lodash: 4.17.21 - uuid: 8.3.2 - ws: 7.5.9 - transitivePeerDependencies: - - bufferutil - - utf-8-validate + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.4 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.23.5 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.19.4 + jest-util: 29.7.0 + + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.19.4 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + /jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} @@ -8905,9 +11742,27 @@ packages: supports-color: 8.1.1 dev: false + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@types/node': 18.19.4 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + /joi@17.11.0: + resolution: {integrity: sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==} + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.4 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + /jose@4.14.4: resolution: {integrity: sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==} @@ -8922,7 +11777,6 @@ packages: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} @@ -8934,6 +11788,41 @@ packages: resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==} dev: true + /jsc-android@250231.0.0: + resolution: {integrity: sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==} + + /jsc-safe-url@0.2.4: + resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} + + /jscodeshift@0.14.0(@babel/preset-env@7.23.7): + resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} + hasBin: true + peerDependencies: + '@babel/preset-env': ^7.1.6 + dependencies: + '@babel/core': 7.23.7 + '@babel/parser': 7.23.6 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/preset-env': 7.23.7(@babel/core@7.23.7) + '@babel/preset-flow': 7.23.3(@babel/core@7.23.7) + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.7) + '@babel/register': 7.23.7(@babel/core@7.23.7) + babel-core: 7.0.0-bridge.0(@babel/core@7.23.7) + chalk: 4.1.2 + flow-parser: 0.206.0 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + neo-async: 2.6.2 + node-dir: 0.1.17 + recast: 0.21.5 + temp: 0.8.4 + write-file-atomic: 2.4.3 + transitivePeerDependencies: + - supports-color + /jsdom@23.0.1: resolution: {integrity: sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==} engines: {node: '>=18'} @@ -8962,7 +11851,7 @@ packages: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - ws: 8.15.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + ws: 8.15.0 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -8970,10 +11859,17 @@ packages: - utf-8-validate dev: true + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -8982,7 +11878,15 @@ packages: engines: {node: '>=10.0.0'} dependencies: '@metamask/safe-event-emitter': 2.0.0 - eth-rpc-errors: 4.0.2 + eth-rpc-errors: 4.0.3 + + /json-rpc-middleware-stream@4.2.3: + resolution: {integrity: sha512-4iFb0yffm5vo3eFKDbQgke9o17XBcLQ2c3sONrXSbcOLzP8LTojqo8hRGVgtJShhm5q4ZDSNq039fAx9o65E1w==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/safe-event-emitter': 3.0.0 + json-rpc-engine: 6.1.0 + readable-stream: 2.3.8 /json-rpc-random-id@1.0.1: resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} @@ -9000,6 +11904,7 @@ packages: /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: true /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} @@ -9018,7 +11923,6 @@ packages: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 - dev: true /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -9030,6 +11934,7 @@ packages: /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} + dev: true /jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} @@ -9060,12 +11965,10 @@ packages: /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - dev: true /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - dev: false /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} @@ -9083,6 +11986,10 @@ packages: language-subtag-registry: 0.3.22 dev: true + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -9091,6 +11998,14 @@ packages: type-check: 0.4.0 dev: true + /lighthouse-logger@1.4.2: + resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + dependencies: + debug: 2.6.9 + marky: 1.2.5 + transitivePeerDependencies: + - supports-color + /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -9098,7 +12013,6 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /listhen@1.5.5: resolution: {integrity: sha512-LXe8Xlyh3gnxdv4tSjTjscD1vpr/2PRpzq8YIaMJgyKzRG8wdISlWVWnGThJfHnlJ6hmLt2wq1yeeix0TEbuoA==} @@ -9169,6 +12083,13 @@ packages: engines: {node: '>=14'} dev: true + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -9185,6 +12106,9 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + /lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} @@ -9222,6 +12146,9 @@ packages: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true + /lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: true @@ -9233,8 +12160,24 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + /logkitty@0.7.1: + resolution: {integrity: sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==} + hasBin: true + dependencies: + ansi-fragments: 0.2.1 + dayjs: 1.11.10 + yargs: 15.4.1 + /lokijs@1.5.12: resolution: {integrity: sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==} + dev: true /long@4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} @@ -9304,6 +12247,13 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + dependencies: + pify: 4.0.1 + semver: 5.7.1 + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -9315,6 +12265,11 @@ packages: resolution: {integrity: sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw==} dev: false + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} @@ -9330,6 +12285,9 @@ packages: engines: {node: '>=0.10.0'} dev: true + /marky@1.2.5: + resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} + /mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: @@ -9483,6 +12441,9 @@ packages: dependencies: '@babel/runtime': 7.23.4 + /memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + /meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} @@ -9522,6 +12483,12 @@ packages: yargs-parser: 20.2.9 dev: true + /merge-options@3.0.4: + resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + engines: {node: '>=10'} + dependencies: + is-plain-obj: 2.1.0 + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -9529,6 +12496,206 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + /metro-babel-transformer@0.80.3: + resolution: {integrity: sha512-Si1GO9fhiLi3DfHseFDaZcU+Y6iYHx54rszILnBIx80aas3pRZpL3z/UsEZ7coTQZTFsblt2QDIE+Izxlq4mwQ==} + engines: {node: '>=18'} + dependencies: + '@babel/core': 7.23.7 + hermes-parser: 0.18.2 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + /metro-cache-key@0.80.3: + resolution: {integrity: sha512-WNrtDpbhtW2Yqjp1t0WxJhKNR/Zbo1LZ4WvHsdv/PraAs2mr+SaM5bbiptBSKOOGJkV/FIQveW5riZi53JnCbw==} + engines: {node: '>=18'} + + /metro-cache@0.80.3: + resolution: {integrity: sha512-7gHcOIXdAHCBzsovF4b+VgcfIZtCpCIFiT2zx9amU58xrmkx+PRIl1KZDIUfRBbGrO9HJtZxH7lr7/hoiLIUWA==} + engines: {node: '>=18'} + dependencies: + metro-core: 0.80.3 + rimraf: 3.0.2 + + /metro-config@0.80.3: + resolution: {integrity: sha512-cE7KPT1Usdrd2nLEVpzukKWmeBU1PufHPkuD9BjjtoABbzdj35gMLDnK+mhjSq9km2vF2QEPtE0M+WKvq9pXfQ==} + engines: {node: '>=18'} + dependencies: + connect: 3.7.0 + cosmiconfig: 5.2.1 + jest-validate: 29.7.0 + metro: 0.80.3 + metro-cache: 0.80.3 + metro-core: 0.80.3 + metro-runtime: 0.80.3 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + /metro-core@0.80.3: + resolution: {integrity: sha512-X2ZfAvR55TdD/Rv9i4gYVI68JpRPHcpKpkr6IVtidFPoNjf4Fodh1qH7gEAJUnO5FL3a1JyPffbW6eFaXPxkFw==} + engines: {node: '>=18'} + dependencies: + lodash.throttle: 4.1.1 + metro-resolver: 0.80.3 + + /metro-file-map@0.80.3: + resolution: {integrity: sha512-4qu1ABPZRvboGGB8Q2RlQ26kZRWRCMDiktgCCrX/57V6cnWgdbdTrpnsgmU3i0Q7iiw+FevOGlfD4HqdauQ59g==} + engines: {node: '>=18'} + dependencies: + anymatch: 3.1.3 + debug: 2.6.9 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.5 + node-abort-controller: 3.1.1 + nullthrows: 1.1.1 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - supports-color + + /metro-minify-terser@0.80.3: + resolution: {integrity: sha512-gVFwoL86emFoYbI2DZKk1Ved2CklYv//huWriF0UpLJHmVEO9ii2ajTx3aIxgSeuxFLPJhdp8RgUB2EDCooaJw==} + engines: {node: '>=18'} + dependencies: + terser: 5.17.2 + + /metro-resolver@0.80.3: + resolution: {integrity: sha512-zwa0i32rj/TI3NivcvMXHJwTG2gUgo2dXdcnAJlhEKKQvyN+7AfhNdQSlDdDqMQmU7FaLRdeWORnQJbYCrprQQ==} + engines: {node: '>=18'} + + /metro-runtime@0.80.3: + resolution: {integrity: sha512-16RKcwpxriNnPdE5eKWJu7/KLgxE+AaDAdYthoS6zbzjaOu7RiY2zPM1Elz175Rw//74kOwtKXgxTW8ADHB8SQ==} + engines: {node: '>=18'} + dependencies: + '@babel/runtime': 7.23.4 + + /metro-source-map@0.80.3: + resolution: {integrity: sha512-5DYcOLPjDLx84ZCZ1i0DuWSPU7AY5G/7tR+u/WN6CZNxLyYEe3TwUBdIUgQj4HgZJl/zZ/7bGYJQOHd7ubuO0w==} + engines: {node: '>=18'} + dependencies: + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 + invariant: 2.2.4 + metro-symbolicate: 0.80.3 + nullthrows: 1.1.1 + ob1: 0.80.3 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + + /metro-symbolicate@0.80.3: + resolution: {integrity: sha512-baIt8Ss2vTGbxolRTa5yg+tKVAIAB1OpwMzJ0FSUjLs+HDAzaOtSpGbNd3DPc+pzX8Gj/rdbDOA0wPuOhVsHKQ==} + engines: {node: '>=18'} + hasBin: true + dependencies: + invariant: 2.2.4 + metro-source-map: 0.80.3 + nullthrows: 1.1.1 + source-map: 0.5.7 + through2: 2.0.5 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + + /metro-transform-plugins@0.80.3: + resolution: {integrity: sha512-/2hGGRdJPrNfB9lz8unukaqQpGpDhYwNM0Odfh37OVFjygMB30Ffd8neQ4FNqnHnFxhl5j8VTcopUg6QhygMGQ==} + engines: {node: '>=18'} + dependencies: + '@babel/core': 7.23.7 + '@babel/generator': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.7 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + /metro-transform-worker@0.80.3: + resolution: {integrity: sha512-10ZwMDuSWyHwqNnZ50baNtHNuHhOnqThbTOgv03PsrmPHWmSv4/rrmm7711tEyLUxptY3A1hEgJ+LKYyOIQiUA==} + engines: {node: '>=18'} + dependencies: + '@babel/core': 7.23.7 + '@babel/generator': 7.23.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + metro: 0.80.3 + metro-babel-transformer: 0.80.3 + metro-cache: 0.80.3 + metro-cache-key: 0.80.3 + metro-source-map: 0.80.3 + metro-transform-plugins: 0.80.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + /metro@0.80.3: + resolution: {integrity: sha512-7u6HjWVQR7wA/HbxzB0n6iQ0GI9s/fr49N++dZQ41BcrcFxrguIGaRe4W8VI5DtYifCVCjXDIFw6e9+MAccx/Q==} + engines: {node: '>=18'} + hasBin: true + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/core': 7.23.7 + '@babel/generator': 7.23.6 + '@babel/parser': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 + accepts: 1.3.8 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 2.6.9 + denodeify: 1.2.1 + error-stack-parser: 2.1.4 + graceful-fs: 4.2.11 + hermes-parser: 0.18.2 + image-size: 1.1.1 + invariant: 2.2.4 + jest-worker: 29.7.0 + jsc-safe-url: 0.2.4 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.80.3 + metro-cache: 0.80.3 + metro-cache-key: 0.80.3 + metro-config: 0.80.3 + metro-core: 0.80.3 + metro-file-map: 0.80.3 + metro-minify-terser: 0.80.3 + metro-resolver: 0.80.3 + metro-runtime: 0.80.3 + metro-source-map: 0.80.3 + metro-symbolicate: 0.80.3 + metro-transform-plugins: 0.80.3 + metro-transform-worker: 0.80.3 + mime-types: 2.1.35 + node-fetch: 2.7.0 + nullthrows: 1.1.1 + rimraf: 3.0.2 + serialize-error: 2.1.0 + source-map: 0.5.7 + strip-ansi: 6.0.1 + throat: 5.0.0 + ws: 7.5.9 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + /micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + /micromark-core-commonmark@1.0.6: resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} dependencies: @@ -9814,6 +12981,16 @@ packages: dependencies: mime-db: 1.52.0 + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + /mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + /mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} @@ -9841,7 +13018,6 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: true /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} @@ -9854,13 +13030,38 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + + /mipd@0.0.5(typescript@5.0.4): + resolution: {integrity: sha512-gbKA784D2WKb5H/GtqEv+Ofd1S9Zj+Z/PGDIl1u1QAbswkxD28BQ5bSXQxkeBzPBABg1iDSbiwGG1XqlOxRspA==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.0.4 + viem: 1.21.4(typescript@5.0.4) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod /mixme@0.5.9: resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==} engines: {node: '>= 8.0.0'} dev: true + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + /mlly@1.2.0: resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} dependencies: @@ -9903,6 +13104,9 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -9930,11 +13134,9 @@ packages: /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - dev: false /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: false /nested-error-stacks@2.1.1: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} @@ -9955,7 +13157,7 @@ packages: '@panva/hkdf': 1.1.1 cookie: 0.5.0 jose: 4.14.4 - next: 14.0.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) + next: 14.0.4(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0) oauth: 0.9.15 openid-client: 5.4.2 preact: 10.13.2 @@ -10015,7 +13217,46 @@ packages: next: 14.0.4(@babel/core@7.21.8)(@opentelemetry/api@1.1.0)(react-dom@18.2.0)(react@18.2.0) dev: true - /next@14.0.4(@babel/core@7.21.8)(@opentelemetry/api@1.1.0)(react-dom@18.2.0)(react@18.2.0): + /next@14.0.4(@babel/core@7.21.8)(@opentelemetry/api@1.1.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} + engines: {node: '>=18.17.0'} + 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': 14.0.4 + '@opentelemetry/api': 1.1.0 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001568 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.21.8)(react@18.2.0) + watchpack: 2.4.0 + optionalDependencies: + '@next/swc-darwin-arm64': 14.0.4 + '@next/swc-darwin-x64': 14.0.4 + '@next/swc-linux-arm64-gnu': 14.0.4 + '@next/swc-linux-arm64-musl': 14.0.4 + '@next/swc-linux-x64-gnu': 14.0.4 + '@next/swc-linux-x64-musl': 14.0.4 + '@next/swc-win32-arm64-msvc': 14.0.4 + '@next/swc-win32-ia32-msvc': 14.0.4 + '@next/swc-win32-x64-msvc': 14.0.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + /next@14.0.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} engines: {node: '>=18.17.0'} peerDependencies: @@ -10030,7 +13271,6 @@ packages: optional: true dependencies: '@next/env': 14.0.4 - '@opentelemetry/api': 1.1.0 '@swc/helpers': 0.5.2 busboy: 1.6.0 caniuse-lite: 1.0.30001568 @@ -10038,7 +13278,7 @@ packages: postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.21.8)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.22.9)(react@18.2.0) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 14.0.4 @@ -10053,8 +13293,9 @@ packages: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros + dev: true - /next@14.0.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0): + /next@14.0.4(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} engines: {node: '>=18.17.0'} peerDependencies: @@ -10076,7 +13317,7 @@ packages: postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.22.9)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.23.7)(react@18.2.0) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 14.0.4 @@ -10099,6 +13340,10 @@ packages: tslib: 2.5.0 dev: true + /nocache@3.0.4: + resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} + engines: {node: '>=12.0.0'} + /nock@13.4.0: resolution: {integrity: sha512-W8NVHjO/LCTNA64yxAPHV/K47LpGYcVzgKd3Q0n6owhwvD0Dgoterc25R4rnZbckJEb6Loxz1f5QMuJpJnbSyQ==} engines: {node: '>= 10.13'} @@ -10110,12 +13355,24 @@ packages: - supports-color dev: true + /node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + /node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + /node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + /node-addon-api@7.0.0: resolution: {integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==} + /node-dir@0.1.17: + resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} + engines: {node: '>= 0.10.5'} + dependencies: + minimatch: 3.1.2 + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -10124,8 +13381,8 @@ packages: /node-fetch-native@1.4.1: resolution: {integrity: sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==} - /node-fetch@2.6.11: - resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} + /node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -10135,8 +13392,8 @@ packages: dependencies: whatwg-url: 5.0.0 - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -10162,16 +13419,23 @@ packages: /node-gyp-build@4.6.0: resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: false /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: false + + /node-stream-zip@1.15.0: + resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} + engines: {node: '>=0.12.0'} /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -10213,6 +13477,9 @@ packages: dependencies: path-key: 4.0.0 + /nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + /nwsapi@2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} dev: true @@ -10220,10 +13487,20 @@ packages: /oauth@0.9.15: resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==} + /ob1@0.80.3: + resolution: {integrity: sha512-lKJ/Wp6eSyYKYKYds1lgiDRtD2j9nNhrhx4hwegxYXTBkWz4dqermZV+Bq0iw0SszUIb+fC+btNSXwc4AG1lBQ==} + engines: {node: '>=18'} + + /obj-multiplex@1.0.0: + resolution: {integrity: sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + readable-stream: 2.3.8 + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: true /object-hash@2.2.0: resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} @@ -10231,6 +13508,7 @@ packages: /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: true /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -10316,6 +13594,22 @@ packages: /on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + /on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -10338,6 +13632,27 @@ packages: engines: {node: '>= 14.6.0'} dev: true + /open@6.4.0: + resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} + engines: {node: '>=8'} + dependencies: + is-wsl: 1.1.0 + + /open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + /open@9.1.0: resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} engines: {node: '>=14.16'} @@ -10368,6 +13683,20 @@ packages: word-wrap: 1.2.5 dev: true + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -10425,6 +13754,12 @@ packages: yocto-queue: 1.0.0 dev: true + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -10465,7 +13800,6 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 - dev: true /parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} @@ -10479,6 +13813,13 @@ packages: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -10487,7 +13828,6 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true /parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} @@ -10503,6 +13843,10 @@ packages: entities: 4.5.0 dev: true + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + /pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: @@ -10510,6 +13854,10 @@ packages: tslib: 2.5.0 dev: true + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -10517,7 +13865,6 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: true /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -10529,7 +13876,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -10564,7 +13910,6 @@ packages: /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - dev: true /pify@5.0.0: resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} @@ -10594,6 +13939,16 @@ packages: sonic-boom: 2.8.0 thread-stream: 0.15.2 + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + /pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + dependencies: + find-up: 3.0.0 + /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -10612,6 +13967,10 @@ packages: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} + /pony-cause@2.1.10: + resolution: {integrity: sha512-3IKLNXclQgkU++2fSi93sQ6BznFuxSLB11HdvZQ6JW/spahf/P1pAHBQEahr20rs0htZW0UDkM1HmA+nZkXKsw==} + engines: {node: '>=12.0.0'} + /popmotion@11.0.3: resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==} dependencies: @@ -10677,6 +14036,9 @@ packages: /preact@10.13.2: resolution: {integrity: sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==} + /preact@10.19.3: + resolution: {integrity: sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==} + /preferred-pm@3.0.3: resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} engines: {node: '>=10'} @@ -10697,6 +14059,15 @@ packages: engines: {node: '>=10.13.0'} dev: true + /pretty-format@26.6.2: + resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} + engines: {node: '>= 10'} + dependencies: + '@jest/types': 26.6.2 + ansi-regex: 5.0.1 + ansi-styles: 4.3.0 + react-is: 17.0.2 + /pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -10706,14 +14077,13 @@ packages: react-is: 17.0.2 dev: true - /pretty-format@29.6.0: - resolution: {integrity: sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==} + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.6.0 + '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 - dev: true /pretty-format@3.8.0: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} @@ -10723,16 +14093,26 @@ packages: engines: {node: '>=6'} dev: false + /process-nextick-args@1.0.7: + resolution: {integrity: sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==} + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + /process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + /promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - dev: false /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -10740,7 +14120,6 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true /propagate@2.0.1: resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} @@ -10797,6 +14176,12 @@ packages: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} @@ -10806,6 +14191,17 @@ packages: engines: {node: '>=6'} dev: true + /qr-code-styling@1.6.0-rc.1: + resolution: {integrity: sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q==} + dependencies: + qrcode-generator: 1.4.4 + + /qrcode-generator@1.4.4: + resolution: {integrity: sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==} + + /qrcode-terminal-nooctal@0.12.1: + resolution: {integrity: sha512-jy/kkD0iIMDjTucB+5T6KBsnirlhegDH47vHgrj5MejchSQmi/EAMM0xMFeePgV9CJkkAapNakpVUWYgHvtdKg==} + /qrcode@1.5.3: resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==} engines: {node: '>=10.13.0'} @@ -10815,21 +14211,6 @@ packages: pngjs: 5.0.0 yargs: 15.4.1 - /qs@6.11.1: - resolution: {integrity: sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - - /query-string@6.14.1: - resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} - engines: {node: '>=6'} - dependencies: - decode-uri-component: 0.2.2 - filter-obj: 1.1.0 - split-on-first: 1.1.0 - strict-uri-encode: 2.0.0 - /query-string@7.1.3: resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} engines: {node: '>=6'} @@ -10846,6 +14227,11 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + /queue@6.0.2: + resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + dependencies: + inherits: 2.0.4 + /quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} @@ -10861,6 +14247,20 @@ packages: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 + dev: false + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + /react-devtools-core@4.28.5: + resolution: {integrity: sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==} + dependencies: + shell-quote: 1.8.1 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} @@ -10871,22 +14271,157 @@ packages: react: 18.2.0 scheduler: 0.23.0 + /react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0): + resolution: {integrity: sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA==} + peerDependencies: + i18next: '>= 23.2.3' + react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + '@babel/runtime': 7.23.4 + html-parse-stringify: 3.0.1 + i18next: 22.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-native: 0.73.1(@babel/core@7.23.7)(@babel/preset-env@7.23.7)(react@18.2.0) + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: true /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true /react-merge-refs@1.1.0: resolution: {integrity: sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==} dev: false + /react-native-webview@11.26.1(react-native@0.73.1)(react@18.2.0): + resolution: {integrity: sha512-hC7BkxOpf+z0UKhxFSFTPAM4shQzYmZHoELa6/8a/MspcjEP7ukYKpuSUTLDywQditT8yI9idfcKvfZDKQExGw==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + escape-string-regexp: 2.0.0 + invariant: 2.2.4 + react: 18.2.0 + react-native: 0.73.1(@babel/core@7.23.7)(@babel/preset-env@7.23.7)(react@18.2.0) + + /react-native@0.73.1(@babel/core@7.21.8)(@babel/preset-env@7.23.7)(react@18.2.0): + resolution: {integrity: sha512-nLl9O2yKRh1nMXwsk4SUiD0ddd19RqlKgNU9AU8bTK/zD2xwnVOG56YK1/22SN67niWyoeG83vVg1eTk+S6ReA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + react: 18.2.0 + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native-community/cli': 12.3.0 + '@react-native-community/cli-platform-android': 12.3.0 + '@react-native-community/cli-platform-ios': 12.3.0 + '@react-native/assets-registry': 0.73.1 + '@react-native/codegen': 0.73.2(@babel/preset-env@7.23.7) + '@react-native/community-cli-plugin': 0.73.11(@babel/core@7.21.8)(@babel/preset-env@7.23.7) + '@react-native/gradle-plugin': 0.73.4 + '@react-native/js-polyfills': 0.73.1 + '@react-native/normalize-colors': 0.73.2 + '@react-native/virtualized-lists': 0.73.4(react-native@0.73.1) + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + base64-js: 1.5.1 + deprecated-react-native-prop-types: 5.0.0 + event-target-shim: 5.0.1 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + jsc-android: 250231.0.0 + memoize-one: 5.2.1 + metro-runtime: 0.80.3 + metro-source-map: 0.80.3 + mkdirp: 0.5.6 + nullthrows: 1.1.1 + pretty-format: 26.6.2 + promise: 8.3.0 + react: 18.2.0 + react-devtools-core: 4.28.5 + react-refresh: 0.14.0 + react-shallow-renderer: 16.15.0(react@18.2.0) + regenerator-runtime: 0.13.11 + scheduler: 0.24.0-canary-efb381bbf-20230505 + stacktrace-parser: 0.1.10 + whatwg-fetch: 3.6.20 + ws: 6.2.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /react-native@0.73.1(@babel/core@7.23.7)(@babel/preset-env@7.23.7)(react@18.2.0): + resolution: {integrity: sha512-nLl9O2yKRh1nMXwsk4SUiD0ddd19RqlKgNU9AU8bTK/zD2xwnVOG56YK1/22SN67niWyoeG83vVg1eTk+S6ReA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + react: 18.2.0 + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native-community/cli': 12.3.0 + '@react-native-community/cli-platform-android': 12.3.0 + '@react-native-community/cli-platform-ios': 12.3.0 + '@react-native/assets-registry': 0.73.1 + '@react-native/codegen': 0.73.2(@babel/preset-env@7.23.7) + '@react-native/community-cli-plugin': 0.73.11(@babel/core@7.23.7)(@babel/preset-env@7.23.7) + '@react-native/gradle-plugin': 0.73.4 + '@react-native/js-polyfills': 0.73.1 + '@react-native/normalize-colors': 0.73.2 + '@react-native/virtualized-lists': 0.73.4(react-native@0.73.1) + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + base64-js: 1.5.1 + deprecated-react-native-prop-types: 5.0.0 + event-target-shim: 5.0.1 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + jsc-android: 250231.0.0 + memoize-one: 5.2.1 + metro-runtime: 0.80.3 + metro-source-map: 0.80.3 + mkdirp: 0.5.6 + nullthrows: 1.1.1 + pretty-format: 26.6.2 + promise: 8.3.0 + react: 18.2.0 + react-devtools-core: 4.28.5 + react-refresh: 0.14.0 + react-shallow-renderer: 16.15.0(react@18.2.0) + regenerator-runtime: 0.13.11 + scheduler: 0.24.0-canary-efb381bbf-20230505 + stacktrace-parser: 0.1.10 + whatwg-fetch: 3.6.20 + ws: 6.2.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate + /react-reconciler@0.27.0(react@18.2.0): resolution: {integrity: sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==} engines: {node: '>=0.10.0'} @@ -10898,6 +14433,10 @@ packages: scheduler: 0.21.0 dev: false + /react-refresh@0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + /react-remove-scroll-bar@2.3.4(@types/react@18.2.46)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} @@ -10952,6 +14491,15 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.46)(react@18.2.0) dev: false + /react-shallow-renderer@16.15.0(react@18.2.0): + resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + object-assign: 4.1.1 + react: 18.2.0 + react-is: 18.2.0 + /react-style-singleton@2.2.1(@types/react@18.2.46)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} @@ -11015,6 +14563,28 @@ packages: strip-bom: 3.0.0 dev: true + /readable-stream@2.3.3: + resolution: {integrity: sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 1.0.7 + safe-buffer: 5.1.2 + string_decoder: 1.0.3 + util-deprecate: 1.0.2 + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -11029,10 +14599,22 @@ packages: dependencies: picomatch: 2.3.1 + /readline@1.3.0: + resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} + /real-require@0.1.0: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} engines: {node: '>= 12.13.0'} + /recast@0.21.5: + resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} + engines: {node: '>= 4'} + dependencies: + ast-types: 0.15.2 + esprima: 4.0.1 + source-map: 0.6.1 + tslib: 2.6.2 + /recursive-readdir-files@2.3.1: resolution: {integrity: sha512-BQfYr6RUl1wdla4+F8gTFzItE52/GpYssMiq+wHIN77n8mF9wzb1M/MndkDImZSzfFjrz5tJ/S5jdV7hGolm6g==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -11078,12 +14660,26 @@ packages: prismjs: 1.27.0 dev: false + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} /regenerator-runtime@0.14.0: resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.23.4 + /regexp.prototype.flags@1.5.0: resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} engines: {node: '>= 0.4'} @@ -11107,6 +14703,23 @@ packages: engines: {node: '>=8'} dev: true + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + /rehype-parse@8.0.4: resolution: {integrity: sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==} dependencies: @@ -11206,10 +14819,13 @@ packages: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true + /resolve-from@3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: true /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} @@ -11237,7 +14853,6 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /resolve@2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} @@ -11247,15 +14862,41 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + /rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + hasBin: true + dependencies: + glob: 7.2.3 + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} dependencies: glob: 7.2.3 - dev: true + + /rollup-plugin-visualizer@5.12.0: + resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} + engines: {node: '>=14'} + peerDependencies: + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rollup: + optional: true + dependencies: + open: 8.4.2 + picomatch: 2.3.1 + source-map: 0.7.4 + yargs: 17.7.2 /rollup@3.26.3: resolution: {integrity: sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==} @@ -11284,17 +14925,6 @@ packages: fsevents: 2.3.3 dev: true - /rpc-websockets@7.5.1: - resolution: {integrity: sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==} - dependencies: - '@babel/runtime': 7.23.4 - eventemitter3: 4.0.7 - uuid: 8.3.2 - ws: 8.15.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) - optionalDependencies: - bufferutil: 4.0.7 - utf-8-validate: 5.0.10 - /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: true @@ -11311,12 +14941,6 @@ packages: dependencies: queue-microtask: 1.2.3 - /rxjs@6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} - dependencies: - tslib: 1.14.1 - /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -11334,13 +14958,12 @@ packages: isarray: 2.0.5 dev: true + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-json-utils@1.1.1: - resolution: {integrity: sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==} - dev: false - /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -11375,6 +14998,11 @@ packages: dependencies: loose-envify: 1.4.0 + /scheduler@0.24.0-canary-efb381bbf-20230505: + resolution: {integrity: sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==} + dependencies: + loose-envify: 1.4.0 + /schema-utils@3.1.2: resolution: {integrity: sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==} engines: {node: '>= 10.13.0'} @@ -11387,6 +15015,14 @@ packages: /scrypt-js@3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + /secp256k1@5.0.0: + resolution: {integrity: sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==} + engines: {node: '>=14.0.0'} + dependencies: + elliptic: 6.5.4 + node-addon-api: 5.1.0 + node-gyp-build: 4.6.0 + /section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -11397,10 +15033,6 @@ packages: /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - dev: true - - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} @@ -11418,12 +15050,47 @@ packages: dependencies: lru-cache: 6.0.0 + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + /serialize-error@2.1.0: + resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==} + engines: {node: '>=0.10.0'} + /serialize-javascript@6.0.1: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 dev: false + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -11435,7 +15102,6 @@ packages: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.0 - dev: true /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} @@ -11446,12 +15112,22 @@ packages: has-property-descriptors: 1.0.0 dev: true + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + /shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + dependencies: + kind-of: 6.0.3 + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -11474,12 +15150,16 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.0 object-inspect: 1.12.3 + dev: true /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -11490,7 +15170,6 @@ packages: /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: false /siwe@2.1.4(ethers@5.6.8): resolution: {integrity: sha512-Dke1Qqa3mgiLm3vjqw/+SQ7dl8WV/Pfk3AlQBF94cBFydTYhztngqYrikzE3X5UTsJ6565dfVbQptszsuYZNYg==} @@ -11506,12 +15185,19 @@ packages: /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - dev: true /slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} + /slice-ansi@2.1.0: + resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.0 + /smartwrap@2.0.2: resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} engines: {node: '>=6'} @@ -11524,6 +15210,28 @@ packages: yargs: 15.4.1 dev: true + /socket.io-client@4.7.3(bufferutil@4.0.8)(utf-8-validate@6.0.3): + resolution: {integrity: sha512-nU+ywttCyBitXIl9Xe0RSEfek4LneYkJxCeNnKCuhwoH4jGXO1ipIUw/VA/+Vvv2G1MTym11fzFC0SxkrcfXDw==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-client: 6.5.3(bufferutil@4.0.8)(utf-8-validate@6.0.3) + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + /sonic-boom@2.8.0: resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} dependencies: @@ -11539,6 +15247,10 @@ packages: buffer-from: 1.1.2 source-map: 0.6.1 + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -11546,7 +15258,6 @@ packages: /source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} - dev: true /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} @@ -11600,15 +15311,37 @@ packages: /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 /stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true + /stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + + /stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + dependencies: + type-fest: 0.7.1 + /standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + /std-env@3.3.3: resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} dev: true @@ -11623,12 +15356,6 @@ packages: internal-slot: 1.0.5 dev: true - /stream-browserify@3.0.0: - resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.2 - /stream-shift@1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} @@ -11717,6 +15444,16 @@ packages: es-abstract: 1.22.3 dev: true + /string_decoder@1.0.3: + resolution: {integrity: sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==} + dependencies: + safe-buffer: 5.1.2 + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: @@ -11728,6 +15465,12 @@ packages: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + /strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + dependencies: + ansi-regex: 4.1.1 + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -11770,6 +15513,9 @@ packages: acorn: 8.10.0 dev: true + /strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + /style-to-object@0.4.1: resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==} dependencies: @@ -11816,9 +15562,30 @@ packages: '@babel/core': 7.22.9 client-only: 0.0.1 react: 18.2.0 + dev: true + + /styled-jsx@5.1.1(@babel/core@7.23.7)(react@18.2.0): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + '@babel/core': 7.23.7 + client-only: 0.0.1 + react: 18.2.0 - /superstruct@0.14.2: - resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + /stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + /sudo-prompt@9.2.1: + resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} /superstruct@1.0.3: resolution: {integrity: sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==} @@ -11841,12 +15608,10 @@ packages: engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - dev: false /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /suspend-react@0.0.8(react@18.2.0): resolution: {integrity: sha512-ZC3r8Hu1y0dIThzsGw0RLZplnX9yXwfItcvaIzJc2VQVi8TGyGDlu92syMB5ulybfvGLHAI5Ghzlk23UBPF8xg==} @@ -11872,6 +15637,16 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + /temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + /temp@0.8.4: + resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} + engines: {node: '>=6.0.0'} + dependencies: + rimraf: 2.6.3 + /term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -11911,10 +15686,6 @@ packages: acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 - dev: false - - /text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} /text-extensions@2.4.0: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} @@ -11934,6 +15705,15 @@ packages: resolution: {integrity: sha512-gV7q7QY8rogu7HLFZR9cWnOQAUedUhu2WXAnpr2kdXZP9YDKsG/0ychwQvWkZN5PlNw9mv5MoCTin6zNTXoONg==} dev: false + /throat@5.0.0: + resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} + + /through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: @@ -11942,6 +15722,7 @@ packages: /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true /tinybench@2.5.0: resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} @@ -11969,6 +15750,9 @@ packages: os-tmpdir: 1.0.2 dev: true + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -11981,6 +15765,11 @@ packages: /toggle-selection@1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + dev: false + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} /toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} @@ -12037,6 +15826,9 @@ packages: /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tsutils@3.21.0(typescript@5.0.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -12074,7 +15866,6 @@ packages: /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - dev: true /type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} @@ -12096,6 +15887,10 @@ packages: engines: {node: '>=8'} dev: true + /type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} @@ -12148,11 +15943,6 @@ packages: is-typed-array: 1.1.10 dev: true - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} @@ -12199,6 +15989,25 @@ packages: /unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + /unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} dependencies: @@ -12259,7 +16068,6 @@ packages: /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - dev: true /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} @@ -12270,6 +16078,10 @@ packages: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + /unstorage@1.10.1(idb-keyval@6.2.1): resolution: {integrity: sha512-rWQvLRfZNBpF+x8D3/gda5nUCQL2PgXy2jNG4U7/Rc9BGEv9+CAJd0YyGCROUBKs9v49Hg8huw3aih5Bf5TAVw==} peerDependencies: @@ -12358,25 +16170,14 @@ packages: picocolors: 1.0.0 dev: false - /update-browserslist-db@1.0.11(browserslist@4.21.9): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.9 - escalade: 3.1.1 - picocolors: 1.0.0 - /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: browserslist: 4.22.2 escalade: 3.1.1 picocolors: 1.0.0 - dev: false /uqr@0.1.2: resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} @@ -12455,8 +16256,8 @@ packages: dependencies: react: 18.2.0 - /utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + /utf-8-validate@6.0.3: + resolution: {integrity: sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==} engines: {node: '>=6.14.2'} dependencies: node-gyp-build: 4.6.0 @@ -12470,9 +16271,13 @@ packages: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 - is-typed-array: 1.1.10 + is-typed-array: 1.1.12 safe-buffer: 5.2.1 - which-typed-array: 1.1.9 + which-typed-array: 1.1.13 + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} @@ -12525,6 +16330,10 @@ packages: react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + /vfile-location@4.1.0: resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} dependencies: @@ -12545,8 +16354,8 @@ packages: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - /viem@1.19.4(typescript@5.0.4): - resolution: {integrity: sha512-CvAVaOzxlu3Q/cpfrYvTRMBIPDMAkLu8aFmHLqU1Bg25DyUxp9xwoF1Ljp38q7/Rosm1OPFQ4y6K64v/VwoumQ==} + /viem@1.21.4(typescript@5.0.4): + resolution: {integrity: sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -12566,10 +16375,9 @@ packages: - bufferutil - utf-8-validate - zod - dev: false - /viem@1.21.4(typescript@5.0.4): - resolution: {integrity: sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ==} + /viem@2.4.1(typescript@5.0.4): + resolution: {integrity: sha512-mC1L4+ilf512YPcS+NLQgOrxroKdldEauURNmWU7BaR8qmgt1vzmQVLDcJMQ0eNEqQCiG01LhLMZ5k5oI7EKUQ==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -12581,7 +16389,7 @@ packages: '@noble/hashes': 1.3.2 '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 - abitype: 0.9.8(typescript@5.0.4) + abitype: 1.0.0(typescript@5.0.4) isows: 1.0.3(ws@8.13.0) typescript: 5.0.4 ws: 8.13.0 @@ -12596,7 +16404,7 @@ packages: dependencies: cac: 6.7.14 debug: 4.3.4 - mlly: 1.4.0 + mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 source-map: 0.6.1 @@ -12803,6 +16611,13 @@ packages: - terser dev: true + /vlq@1.0.1: + resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} + + /void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + /w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -12810,25 +16625,24 @@ packages: xml-name-validator: 5.0.0 dev: true - /wagmi@1.4.13(@types/react@18.2.46)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(viem@1.21.4): - resolution: {integrity: sha512-AScVYFjqNt1wMgL99Bob7MLdhoTZ3XKiOZL5HVBdy4W1sh7QodA3gQ8IsmTuUrQ7oQaTxjiXEhwg7sWNrPBvJA==} + /wagmi@2.3.1(@tanstack/react-query@5.17.9)(@types/react@18.2.46)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0)(typescript@5.0.4)(viem@2.4.1): + resolution: {integrity: sha512-Cwc9d1aP3EY+kvbNhP1HWgOJxFwqG3i6BaFnGlpTTEmmk8IKT7oGeb8MU39IpU03QC4C2OhViZ+hYxeXIa1dYA==} peerDependencies: - react: '>=17.0.0' + '@tanstack/react-query': '>=5.0.0' + react: '>=18' typescript: '>=5.0.4' - viem: '>=0.3.35' + viem: 2.x peerDependenciesMeta: typescript: optional: true dependencies: - '@tanstack/query-sync-storage-persister': 4.29.5 - '@tanstack/react-query': 4.29.5(react-dom@18.2.0)(react@18.2.0) - '@tanstack/react-query-persist-client': 4.29.5(@tanstack/react-query@4.29.5) - '@wagmi/core': 1.4.13(@types/react@18.2.46)(react@18.2.0)(typescript@5.0.4)(viem@1.21.4) - abitype: 0.8.7(typescript@5.0.4) + '@tanstack/react-query': 5.17.9(react@18.2.0) + '@wagmi/connectors': 4.1.6(@types/react@18.2.46)(@wagmi/core@2.3.1)(react-dom@18.2.0)(react-native@0.73.1)(react@18.2.0)(typescript@5.0.4)(viem@2.4.1) + '@wagmi/core': 2.3.1(@types/react@18.2.46)(react@18.2.0)(typescript@5.0.4)(viem@2.4.1) react: 18.2.0 typescript: 5.0.4 use-sync-external-store: 1.2.0(react@18.2.0) - viem: 1.21.4(typescript@5.0.4) + viem: 2.4.1(typescript@5.0.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -12840,6 +16654,7 @@ packages: - '@netlify/blobs' - '@planetscale/database' - '@react-native-async-storage/async-storage' + - '@tanstack/query-core' - '@types/react' - '@upstash/redis' - '@vercel/kv' @@ -12848,42 +16663,15 @@ packages: - immer - react-dom - react-native + - rollup - supports-color - utf-8-validate - zod - /wagmi@1.4.7(@types/react@18.2.46)(lokijs@1.5.12)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.4)(viem@1.19.4): - resolution: {integrity: sha512-/k8gA9S6RnwU6Qroxs630jAFvRIx+DSKpCP1owgAEGWc7D2bAJHljwRSCRTGENz48HyJ4V3R7KYV1yImxPvM3A==} - peerDependencies: - react: '>=17.0.0' - typescript: '>=5.0.4' - viem: '>=0.3.35' - peerDependenciesMeta: - typescript: - optional: true + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: - '@tanstack/query-sync-storage-persister': 4.29.5 - '@tanstack/react-query': 4.29.5(react-dom@18.2.0)(react@18.2.0) - '@tanstack/react-query-persist-client': 4.29.5(@tanstack/react-query@4.29.5) - '@wagmi/core': 1.4.7(@types/react@18.2.46)(lokijs@1.5.12)(react@18.2.0)(typescript@5.0.4)(viem@1.19.4) - abitype: 0.8.7(typescript@5.0.4) - react: 18.2.0 - typescript: 5.0.4 - use-sync-external-store: 1.2.0(react@18.2.0) - viem: 1.19.4(typescript@5.0.4) - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - '@types/react' - - bufferutil - - encoding - - immer - - lokijs - - react-dom - - react-native - - supports-color - - utf-8-validate - - zod - dev: false + makeerror: 1.0.12 /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} @@ -12896,7 +16684,6 @@ packages: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - dev: true /web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -12907,6 +16694,17 @@ packages: engines: {node: '>= 8'} dev: true + /webextension-polyfill-ts@0.25.0: + resolution: {integrity: sha512-ikQhwwHYkpBu00pFaUzIKY26I6L87DeRI+Q6jBT1daZUNuu8dSrg5U9l/ZbqdaQ1M/TTSPKeAa3kolP5liuedw==} + dependencies: + webextension-polyfill: 0.7.0 + + /webextension-polyfill@0.10.0: + resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==} + + /webextension-polyfill@0.7.0: + resolution: {integrity: sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==} + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -12967,6 +16765,9 @@ packages: iconv-lite: 0.6.3 dev: true + /whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + /whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} @@ -13043,7 +16844,6 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: true /which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} @@ -13055,6 +16855,7 @@ packages: gopd: 1.0.1 has-tostringtag: 1.0.0 is-typed-array: 1.1.10 + dev: true /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} @@ -13096,11 +16897,30 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + /write-file-atomic@2.4.3: + resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + dependencies: + graceful-fs: 4.2.11 + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + /ws@6.2.2: + resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + async-limiter: 1.0.1 + /ws@7.4.6: resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} engines: {node: '>=8.3.0'} @@ -13125,6 +16945,21 @@ packages: utf-8-validate: optional: true + /ws@8.11.0(bufferutil@4.0.8)(utf-8-validate@6.0.3): + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + 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 + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 6.0.3 + /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} @@ -13137,7 +16972,7 @@ packages: utf-8-validate: optional: true - /ws@8.15.0(bufferutil@4.0.7)(utf-8-validate@5.0.10): + /ws@8.15.0: resolution: {integrity: sha512-H/Z3H55mrcrgjFwI+5jKavgXvwQLtfPCUEp6pi35VhoB0pfcHnSoyuTzkBEZpzq49g1193CUEwIvmsjcotenYw==} engines: {node: '>=10.0.0'} peerDependencies: @@ -13148,9 +16983,7 @@ packages: optional: true utf-8-validate: optional: true - dependencies: - bufferutil: 4.0.7 - utf-8-validate: 5.0.10 + dev: true /xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} @@ -13161,6 +16994,10 @@ packages: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true + /xmlhttprequest-ssl@2.0.0: + resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + engines: {node: '>=0.4.0'} + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -13171,7 +17008,6 @@ packages: /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - dev: true /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} @@ -13186,12 +17022,10 @@ packages: /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - dev: true /yaml@2.2.2: resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} engines: {node: '>= 14'} - dev: true /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} @@ -13208,7 +17042,6 @@ packages: /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - dev: true /yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} @@ -13250,7 +17083,6 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} @@ -13277,18 +17109,22 @@ packages: react: 18.2.0 dev: false - /zustand@4.3.8(react@18.2.0): - resolution: {integrity: sha512-4h28KCkHg5ii/wcFFJ5Fp+k1J3gJoasaIbppdgZFO4BPJnsNxL0mQXBSFgOgAdCdBj35aDTPvdAJReTMntFPGg==} + /zustand@4.4.1(@types/react@18.2.46)(react@18.2.0): + resolution: {integrity: sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==} 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.46 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) diff --git a/site/components/Demo/WalletButton.tsx b/site/components/Demo/WalletButton.tsx index 8336fc23ea..7bec409c90 100644 --- a/site/components/Demo/WalletButton.tsx +++ b/site/components/Demo/WalletButton.tsx @@ -11,7 +11,7 @@ import { walletButtons } from './WalletButton.css'; export function WalletButtonDemo() { const { locale } = useRouter() as { locale: Locale }; return ( - <RainbowKitProvider chains={[]} locale={locale}> + <RainbowKitProvider locale={locale}> <Box className={walletButtons} id="wallet-button-demo"> <Box alignItems={'flex-start'}> <RKWalletButton wallet="rainbow" /> diff --git a/site/components/Header/Header.tsx b/site/components/Header/Header.tsx index 216f08c35f..14ad50e454 100644 --- a/site/components/Header/Header.tsx +++ b/site/components/Header/Header.tsx @@ -7,7 +7,6 @@ import { } from '@rainbow-me/rainbowkit'; import { Badge } from 'components/Badge/Badge'; import { Box } from 'components/Box/Box'; -import { chains } from 'components/Provider/Provider'; import { Text } from 'components/Text/Text'; import { vars } from 'css/vars.css'; import NextLink from 'next/link'; @@ -63,7 +62,6 @@ export function Header({ <Box style={{ marginLeft: 'auto' }}> <RainbowKitProvider - chains={chains} theme={ darkMode ? darkTheme({ accentColor: vars.colors.blue }) diff --git a/site/components/Playground/Playground.tsx b/site/components/Playground/Playground.tsx index 1ad4ac9e60..4d3ac7376f 100644 --- a/site/components/Playground/Playground.tsx +++ b/site/components/Playground/Playground.tsx @@ -10,7 +10,6 @@ import { import clsx from 'clsx'; import { Box } from 'components/Box/Box'; import { MeshGradient } from 'components/MeshGradient/MeshGradient'; -import { Provider, chains } from 'components/Provider/Provider'; import { Text } from 'components/Text/Text'; import { Wrapper } from 'components/Wrapper/Wrapper'; import { motion } from 'framer-motion'; @@ -145,68 +144,65 @@ export function Playground() { </Text> </Wrapper> - <Provider> - <RainbowKitProvider - chains={chains} - id="playground" - modalSize={modalSize} - theme={selectedTheme} - locale={locale} + <RainbowKitProvider + id="playground" + modalSize={modalSize} + theme={selectedTheme} + locale={locale} + > + <Box + marginX={{ xs: '0', md: 'auto' }} + marginY={{ xs: '9', md: '11' }} + paddingX="10" + style={{ + maxWidth: 'fit-content', + userSelect: 'none', + }} > <Box - marginX={{ xs: '0', md: 'auto' }} - marginY={{ xs: '9', md: '11' }} - paddingX="10" + display={{ xs: 'none', md: 'flex' }} style={{ - maxWidth: 'fit-content', - userSelect: 'none', + height: 500, + alignItems: 'center', + justifyContent: 'center', }} > - <Box - display={{ xs: 'none', md: 'flex' }} - style={{ - height: 500, - alignItems: 'center', - justifyContent: 'center', - }} - > - <div style={{ position: 'relative' }}> - <div - className={dialogContent} - style={ - isCompact - ? {} - : { - width: 712, - } - } - > - <DesktopOptions onClose={() => {}} /> - </div> - {/* This div is placed on top of rainbowkit to make it non-interactive. + <div style={{ position: 'relative' }}> + <div + className={dialogContent} + style={ + isCompact + ? {} + : { + width: 712, + } + } + > + <DesktopOptions onClose={() => {}} /> + </div> + {/* This div is placed on top of rainbowkit to make it non-interactive. pointer-events: none; was forcing scrollbar to show: https://linear.app/rainbow/issue/RNBW-3686/site-playground-wallet-list-showing-a-scrollbar */} - <div style={{ position: 'absolute', inset: 0 }} /> - </div> - </Box> + <div style={{ position: 'absolute', inset: 0 }} /> + </div> + </Box> - <Box display={{ md: 'none' }}> - <div style={{ position: 'relative' }}> - <div - className={clsx(dialogContent)} - style={{ maxWidth: '100%' }} - > - <DesktopOptions onClose={() => {}} /> - </div> - {/* This div is placed on top of rainbowkit to make it non-interactive. + <Box display={{ md: 'none' }}> + <div style={{ position: 'relative' }}> + <div + className={clsx(dialogContent)} + style={{ maxWidth: '100%' }} + > + <DesktopOptions onClose={() => {}} /> + </div> + {/* This div is placed on top of rainbowkit to make it non-interactive. pointer-events: none; was forcing scrollbar to show: https://linear.app/rainbow/issue/RNBW-3686/site-playground-wallet-list-showing-a-scrollbar */} - <div style={{ position: 'absolute', inset: 0 }} /> - </div> - </Box> + <div style={{ position: 'absolute', inset: 0 }} /> + </div> </Box> - </RainbowKitProvider> - </Provider> + </Box> + </RainbowKitProvider> <Box marginX={{ xs: '0', md: 'auto' }} diff --git a/site/components/Provider/Provider.tsx b/site/components/Provider/Provider.tsx index e6156a21e9..f6d5496a91 100644 --- a/site/components/Provider/Provider.tsx +++ b/site/components/Provider/Provider.tsx @@ -6,8 +6,9 @@ import { omniWallet, trustWallet, } from '@rainbow-me/rainbowkit/wallets'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import React from 'react'; -import { WagmiConfig } from 'wagmi'; +import { http, WagmiProvider } from 'wagmi'; import { arbitrum, base, @@ -18,36 +19,47 @@ import { zora, } from 'wagmi/chains'; -export const chains = [mainnet, polygon, optimism, arbitrum, base, zora, bsc]; - const projectId = process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID ?? 'YOUR_PROJECT_ID'; -const { wallets } = getDefaultWallets({ - appName: 'rainbowkit.com', - projectId, - chains, -}); +const transports = { + [mainnet.id]: http(), + [polygon.id]: http(), + [optimism.id]: http(), + [arbitrum.id]: http(), + [base.id]: http(), + [zora.id]: http(), + [bsc.id]: http(), +}; + +const { wallets } = getDefaultWallets(); -const wagmiConfig = getDefaultConfig({ +const config = getDefaultConfig({ appName: 'rainbowkit.com', projectId, - chains, + chains: [mainnet, polygon, optimism, arbitrum, base, zora, bsc], + transports, wallets: [ ...wallets, { groupName: 'More', wallets: [ - argentWallet({ chains, projectId }), - trustWallet({ chains, projectId }), - omniWallet({ chains, projectId }), - imTokenWallet({ chains, projectId }), - ledgerWallet({ chains, projectId }), + argentWallet, + trustWallet, + omniWallet, + imTokenWallet, + ledgerWallet, ], }, ], }); +const client = new QueryClient(); + export function Provider({ children }) { - return <WagmiConfig config={wagmiConfig}>{children}</WagmiConfig>; + return ( + <WagmiProvider config={config}> + <QueryClientProvider client={client}>{children}</QueryClientProvider> + </WagmiProvider> + ); } diff --git a/site/package.json b/site/package.json index 2327cecc26..29e171c50e 100644 --- a/site/package.json +++ b/site/package.json @@ -35,8 +35,9 @@ "three": "^0.139.2", "unified": "10.1.2", "unist-util-visit": "4.1.0", - "viem": "~1.21.4", - "wagmi": "~1.4.13" + "viem": "^2.4.1", + "wagmi": "^2.3.1", + "@tanstack/react-query": "^5.17.9" }, "devDependencies": { "contentlayer": "0.2.9", @@ -52,4 +53,4 @@ "keywords": [], "author": "", "license": "ISC" -} \ No newline at end of file +} diff --git a/tsconfig.json b/tsconfig.json index a363a39c62..718b449d4a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,10 +2,10 @@ "compilerOptions": { "module": "ESNext", "target": "ES2019", + "preserveSymlinks": false, "moduleResolution": "node", "esModuleInterop": true, "isolatedModules": true, - "preserveSymlinks": true, "declaration": true, "declarationDir": "dist", "jsx": "preserve",