diff --git a/.browserlistrc b/.browserlistrc new file mode 100644 index 000000000..617929258 --- /dev/null +++ b/.browserlistrc @@ -0,0 +1,7 @@ +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major version +last 2 iOS major versions +Firefox ESR +not IE 9-11 \ No newline at end of file diff --git a/.env b/.env new file mode 100644 index 000000000..154aa821b --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +VITE_WALLET_CONNECT_PROJECT_ID= +VITE_INFURA_ID= diff --git a/.eslintrc.json b/.eslintrc.json index 35ea19bb3..4dcc7dca2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,6 +6,7 @@ "formatjs", "unused-imports", "simple-import-sort", + "import", "prettier" ], "overrides": [ @@ -27,24 +28,29 @@ } ], "react/react-in-jsx-scope": "off", + "no-empty": ["error", { "allowEmptyCatch": true }], // Unused imports rules "unused-imports/no-unused-imports": "error", - "unused-imports/no-unused-vars": "warn", + "unused-imports/no-unused-vars": [ + "warn", + { + "varsIgnorePattern": "^_", + "args": "none", + "argsIgnorePattern": "^_", + "ignoreRestSiblings": true + } + ], // Import ordering rules "simple-import-sort/imports": [ "warn", { "groups": [ - // Side effect imports ["^\\u0000"], - // React Package(s) comes first as seperate group ["^react(-dom(/client)?)?$"], - // All other imports ["^@?\\w"], ["^((?!\\u0000$)|/.*|$)"], ["^\\."], - // Type imports: keep these last! ["^@?\\w.*\\u0000$"], ["^.*\\u0000$"], ["^\\..*\\u0000$"] @@ -54,6 +60,7 @@ // import types rules "@typescript-eslint/consistent-type-imports": "error", + "import/consistent-type-specifier-style": ["error", "prefer-top-level"], // FormatJS rules "formatjs/enforce-default-message": ["error", "literal"], diff --git a/.gitignore b/.gitignore index 51b9af526..94d719317 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,6 @@ testem.log # System Files .DS_Store Thumbs.db + +# env +.env.local \ No newline at end of file diff --git a/apps/.gitkeep b/apps/oeth/public/.gitkeep similarity index 100% rename from apps/.gitkeep rename to apps/oeth/public/.gitkeep diff --git a/apps/oeth/public/favicon.ico b/apps/oeth/public/favicon.ico deleted file mode 100644 index 317ebcb23..000000000 Binary files a/apps/oeth/public/favicon.ico and /dev/null differ diff --git a/apps/oeth/src/App.tsx b/apps/oeth/src/App.tsx new file mode 100644 index 000000000..999231de7 --- /dev/null +++ b/apps/oeth/src/App.tsx @@ -0,0 +1,39 @@ +import { Container, Stack } from '@mui/material'; +import { HistoryView } from '@origin/oeth/history'; +import { SwapView } from '@origin/oeth/swap'; +import { WrapView } from '@origin/oeth/wrap'; +import { Route, Routes } from 'react-router-dom'; + +import { ApyHeader } from './components/ApyHeader'; +import { Topnav } from './components/Topnav'; + +export function App() { + return ( + + + + + + + } /> + } /> + } /> + } /> + + + + + ); +} diff --git a/apps/oeth/src/clients/index.ts b/apps/oeth/src/clients/index.ts new file mode 100644 index 000000000..a116ec85e --- /dev/null +++ b/apps/oeth/src/clients/index.ts @@ -0,0 +1,2 @@ +export * from './reactQuery'; +export * from './wagmi'; diff --git a/apps/oeth/src/clients/reactQuery.ts b/apps/oeth/src/clients/reactQuery.ts new file mode 100644 index 000000000..b29dac653 --- /dev/null +++ b/apps/oeth/src/clients/reactQuery.ts @@ -0,0 +1,5 @@ +import { QueryClient } from '@tanstack/react-query'; + +export const queryClient = new QueryClient({ + defaultOptions: { queries: { staleTime: 1000 * 60 * 20 } }, +}); diff --git a/apps/oeth/src/clients/wagmi.ts b/apps/oeth/src/clients/wagmi.ts new file mode 100644 index 000000000..5c807f52c --- /dev/null +++ b/apps/oeth/src/clients/wagmi.ts @@ -0,0 +1,63 @@ +import { connectorsForWallets } from '@rainbow-me/rainbowkit'; +import { + argentWallet, + braveWallet, + coinbaseWallet, + imTokenWallet, + injectedWallet, + ledgerWallet, + metaMaskWallet, + rainbowWallet, + safeWallet, + walletConnectWallet, +} from '@rainbow-me/rainbowkit/wallets'; +import { configureChains, createConfig } from 'wagmi'; +import { goerli, localhost, mainnet } from 'wagmi/chains'; +import { infuraProvider } from 'wagmi/providers/infura'; +import { publicProvider } from 'wagmi/providers/public'; + +const VITE_WALLET_CONNECT_PROJECT_ID = import.meta.env + .VITE_WALLET_CONNECT_PROJECT_ID; +const VITE_INFURA_ID = import.meta.env.VITE_INFURA_ID; + +export const { chains, publicClient, webSocketPublicClient } = configureChains( + [mainnet, goerli, localhost], + [infuraProvider({ apiKey: VITE_INFURA_ID }), publicProvider()], +); + +const connectors = connectorsForWallets([ + { + groupName: 'Recommended', + wallets: [ + metaMaskWallet({ + chains, + shimDisconnect: true, + projectId: VITE_WALLET_CONNECT_PROJECT_ID, + }), + ledgerWallet({ chains, projectId: VITE_WALLET_CONNECT_PROJECT_ID }), + walletConnectWallet({ + chains, + projectId: VITE_WALLET_CONNECT_PROJECT_ID, + }), + coinbaseWallet({ appName: 'mStable', chains }), + ], + }, + { + groupName: 'Others', + wallets: [ + injectedWallet({ chains, shimDisconnect: true }), + safeWallet({ chains }), + rainbowWallet({ chains, projectId: VITE_WALLET_CONNECT_PROJECT_ID }), + braveWallet({ chains, shimDisconnect: true }), + argentWallet({ chains, projectId: VITE_WALLET_CONNECT_PROJECT_ID }), + imTokenWallet({ chains, projectId: VITE_WALLET_CONNECT_PROJECT_ID }), + ], + }, +]); + +export const wagmiConfig = createConfig({ + autoConnect: true, + connectors, + publicClient, + webSocketPublicClient, +}); diff --git a/apps/oeth/src/components/App.tsx b/apps/oeth/src/components/App.tsx deleted file mode 100644 index 45621181b..000000000 --- a/apps/oeth/src/components/App.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { HistoryView, SwapView, WrapView } from '@origin/defi/oeth'; -import { Route, Routes } from 'react-router-dom'; - -import { Layout } from './Layout'; - -export function App() { - return ( - - }> - } /> - } /> - } /> - } /> - - - ); -} diff --git a/apps/oeth/src/components/ApyHeader.tsx b/apps/oeth/src/components/ApyHeader.tsx new file mode 100644 index 000000000..ad87e571b --- /dev/null +++ b/apps/oeth/src/components/ApyHeader.tsx @@ -0,0 +1,233 @@ +import React, { useState } from 'react'; + +import { + alpha, + Box, + Divider, + IconButton, + Menu, + MenuItem, + Stack, + Typography, +} from '@mui/material'; +import { Icon } from '@origin/shared/components'; +import { tokens } from '@origin/shared/contracts'; +import { useIntl } from 'react-intl'; +import { useAccount, useBalance } from 'wagmi'; + +const days = [7, 30]; + +export function ApyHeader() { + const intl = useIntl(); + const [selectedPeriod, setSelectedPeriod] = useState(30); + const [anchorEl, setAnchorEl] = React.useState(null); + const { address } = useAccount(); + const { data: oethBalance } = useBalance({ + address, + token: tokens.mainnet.OUSD.address, + watch: true, + }); + + const handleClose = () => { + setAnchorEl(null); + }; + + return ( + <> + + {days.map((day) => ( + { + setSelectedPeriod(day); + setAnchorEl(null); + }} + > + {intl.formatMessage( + { defaultMessage: '{days} day trailing' }, + { days: day }, + )} + + ))} + + + + + {intl.formatMessage( + { defaultMessage: '{days} day trailing APY' }, + { days: selectedPeriod }, + )} + + + + {intl.formatNumber(6.71 / 100, { + minimumFractionDigits: 2, + style: 'percent', + })} + + setAnchorEl(e.currentTarget)} + sx={{ + backgroundColor: (theme) => + alpha(theme.palette.common.white, 0.15), + marginInlineStart: 1, + alignSelf: 'center', + position: 'relative', + height: '26px', + borderRadius: '100%', + top: '-2px', + }} + > + + + + + + + + + + + + + + + + + + + ); +} + +function ValueContainer({ + text, + value, + icon, +}: { + text: string; + value: string; + icon?: string; +}) { + return ( + + + {text} + + + {icon ? ( + + ) : undefined} + + {value} + + + ); +} diff --git a/apps/oeth/src/components/Layout.tsx b/apps/oeth/src/components/Layout.tsx deleted file mode 100644 index 5589d5111..000000000 --- a/apps/oeth/src/components/Layout.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Container } from '@mui/material'; -import { TopNav } from '@origin/shared/components'; -import { useIntl } from 'react-intl'; -import { Outlet } from 'react-router-dom'; - -export function Layout() { - const intl = useIntl(); - - return ( - <> - - - - - - ); -} diff --git a/apps/oeth/src/components/Topnav.tsx b/apps/oeth/src/components/Topnav.tsx new file mode 100644 index 000000000..ed9c2148b --- /dev/null +++ b/apps/oeth/src/components/Topnav.tsx @@ -0,0 +1,208 @@ +import { useState } from 'react'; + +import { + alpha, + Box, + Divider, + Link as MuiLink, + Tab, + Tabs, + useTheme, +} from '@mui/material'; +import { OpenAccountModalButton } from '@origin/shared/providers'; +import { useIntl } from 'react-intl'; +import { Link } from 'react-router-dom'; + +import type { BoxProps } from '@mui/material'; + +export function Topnav(props: BoxProps) { + const theme = useTheme(); + const intl = useIntl(); + const [value, setValue] = useState(0); + + return ( + + ({ + '& img': { + maxHeight: { + xs: '1rem', + md: '1.5rem', + }, + maxWidth: { + xs: theme.typography.pxToRem(100), + sm: theme.typography.pxToRem(120), + md: theme.typography.pxToRem(180), + }, + }, + })} + onClick={() => setValue(0)} + > + Origin logo + + setValue(value)} + sx={{ + order: { + xs: 2, + md: 0, + }, + gridColumn: { + xs: 'span 2', + md: 'span 1', + }, + backgroundColor: 'transparent', + minHeight: 0, + overflow: 'visible', + '& .MuiTabs-fixed': { + overflow: 'visible !important', + }, + fontSize: { + xs: '0.875rem', + md: '1rem', + }, + '& .MuiTabs-flexContainer': { + justifyContent: { + xs: 'center', + md: 'flex-start', + }, + }, + }} + value={value} + > + {[ + intl.formatMessage({ defaultMessage: 'Swap' }), + intl.formatMessage({ defaultMessage: 'Wrap' }), + intl.formatMessage({ defaultMessage: 'History' }), + ].map((tab) => ( + + `linear-gradient(90deg, ${alpha( + theme.palette.primary.main, + 0.4, + )} 0%, ${alpha(theme.palette.primary.dark, 0.4)} 100%)`, + position: 'absolute', + left: 0, + bottom: 0, + zIndex: 2, + }, + }} + > + ))} + + + a': { + fontSize: { + xs: '0.75rem', + md: '1rem', + }, + color: (theme) => theme.palette.primary.contrastText, + lineHeight: (theme) => theme.spacing(3), + }, + }} + > + theme.shadows['24'], + display: 'grid', + placeContent: 'center', + paddingInline: { + md: 3, + xs: 2, + }, + fontFamily: 'Inter', + fontStyle: 'normal', + fontWeight: 500, + background: ` linear-gradient(0deg, ${alpha( + theme.palette.common.white, + 0.05, + )} 0%, ${alpha(theme.palette.common.white, 0.05)} 100%), ${ + theme.palette.background.paper + };`, + '&:hover': { + background: (theme) => theme.palette.background.paper, + backgroundImage: 'none', + }, + }} + > + {theme.breakpoints.down('md') + ? intl.formatMessage({ defaultMessage: 'IPFS' }) + : intl.formatMessage({ defaultMessage: 'View on IPFS' })} + + + + + + ); +} diff --git a/apps/oeth/src/components/index.tsx b/apps/oeth/src/components/index.tsx deleted file mode 100644 index 9342f378e..000000000 --- a/apps/oeth/src/components/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from './App'; \ No newline at end of file diff --git a/apps/oeth/src/env.d.ts b/apps/oeth/src/env.d.ts new file mode 100644 index 000000000..147044ddc --- /dev/null +++ b/apps/oeth/src/env.d.ts @@ -0,0 +1,10 @@ +/// + +interface ImportMetaEnv { + readonly VITE_WALLET_CONNECT_PROJECT_ID: string; + readonly VITE_INFURA_ID: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/apps/oeth/src/lang/en.json b/apps/oeth/src/lang/en.json index 2654cb997..b3f86c1e0 100644 --- a/apps/oeth/src/lang/en.json +++ b/apps/oeth/src/lang/en.json @@ -1,8 +1,146 @@ { + "+U6ozc": { + "defaultMessage": "Type" + }, + "+vVZ/G": { + "defaultMessage": "Connect" + }, + "/23BOU": { + "defaultMessage": "Pending yield" + }, + "0fR+fE": { + "defaultMessage": "Route" + }, + "52pR3B": { + "defaultMessage": "Swap via {name}" + }, + "67ACiw": { + "defaultMessage": "Liquid Staked Ether 2.0" + }, + "BY343C": { + "defaultMessage": "Change" + }, + "CcqmCh": { + "defaultMessage": "OETH Balance" + }, + "JCo6tU": { + "defaultMessage": "WETH" + }, + "JrepQU": { + "defaultMessage": "Gas:" + }, + "NXI/XL": { + "defaultMessage": "Auto" + }, + "O1F5Cx": { + "defaultMessage": "Connect your wallet to see your history" + }, + "P7PLVj": { + "defaultMessage": "Date" + }, + "PzlMqG": { + "defaultMessage": "Best" + }, + "QDdmJX": { + "defaultMessage": "Swap for {name}" + }, + "SSCpzG": { + "defaultMessage": "Wrapped wOETH is a non-rebasing tokenized vault that appreciates in value instead of growing in number." + }, + "TE51b7": { + "defaultMessage": "Export CSV" + }, + "U0+mZs": { + "defaultMessage": "Frax Ether" + }, + "V/q7w4": { + "defaultMessage": "Finding the best route..." + }, + "VNvqEh": { + "defaultMessage": "stETH" + }, + "WwtFYK": { + "defaultMessage": "frxETH" + }, + "YnftYz": { + "defaultMessage": "Wait time:" + }, + "ZmLuI/": { + "defaultMessage": "Rate:" + }, + "ZrmBE1": { + "defaultMessage": "{days} day trailing APY" + }, + "aA9zvD": { + "defaultMessage": "The best swap route factors in the best price after transaction costs" + }, + "aWpBzj": { + "defaultMessage": "Show more" + }, + "c0b5XV": { + "defaultMessage": "Rate" + }, + "cOB9Jx": { + "defaultMessage": "Yield" + }, + "djJp6c": { + "defaultMessage": "History" + }, + "eTeBsj": { + "defaultMessage": "Price tolerance" + }, + "gcuDcH": { + "defaultMessage": "Sent" + }, + "hMFTdI": { + "defaultMessage": "Gas Price" + }, + "i8dYu2": { + "defaultMessage": "GWEI" + }, + "kZcqo0": { + "defaultMessage": "%" + }, + "mt0/Cd": { + "defaultMessage": "Waiting time:" + }, + "om9WOe": { + "defaultMessage": "rETH" + }, + "pg4o1k": { + "defaultMessage": "Rocket Pool ETH" + }, + "qIoHXA": { + "defaultMessage": "Lifetime earnings" + }, + "qY1iOf": { + "defaultMessage": "{days} day trailing" + }, + "r7kiOG": { + "defaultMessage": "Wrap" + }, + "s8BnAC": { + "defaultMessage": "Swap" + }, + "s8UwDT": { + "defaultMessage": "Wrapped Ether" + }, + "sGU9Dr": { + "defaultMessage": "ETH" + }, + "tio9Gt": { + "defaultMessage": "IPFS" + }, + "xZIm6b": { + "defaultMessage": "Your transaction may be frontrun" + }, "xomxyH": { "defaultMessage": "Welcome to DefiOeth!" }, - "y6cogA": { - "defaultMessage": "test OEth" + "z/wUXE": { + "defaultMessage": "Received" + }, + "zbaTLV": { + "defaultMessage": "View on IPFS" } } diff --git a/apps/oeth/src/lang/enUS.json b/apps/oeth/src/lang/enUS.json index 688bdab96..2796fee5c 100644 --- a/apps/oeth/src/lang/enUS.json +++ b/apps/oeth/src/lang/enUS.json @@ -1,4 +1,50 @@ { + "+U6ozc": "Type", + "+vVZ/G": "Connect", + "/23BOU": "Pending yield", + "0fR+fE": "Route", + "52pR3B": "Swap via {name}", + "67ACiw": "Liquid Staked Ether 2.0", + "BY343C": "Change", + "CcqmCh": "OETH Balance", + "JCo6tU": "WETH", + "JrepQU": "Gas:", + "NXI/XL": "Auto", + "O1F5Cx": "Connect your wallet to see your history", + "P7PLVj": "Date", + "PzlMqG": "Best", + "QDdmJX": "Swap for {name}", + "SSCpzG": "Wrapped wOETH is a non-rebasing tokenized vault that appreciates in value instead of growing in number.", + "TE51b7": "Export CSV", + "U0+mZs": "Frax Ether", + "V/q7w4": "Finding the best route...", + "VNvqEh": "stETH", + "WwtFYK": "frxETH", + "YnftYz": "Wait time:", + "ZmLuI/": "Rate:", + "ZrmBE1": "{days} day trailing APY", + "aA9zvD": "The best swap route factors in the best price after transaction costs", + "aWpBzj": "Show more", + "c0b5XV": "Rate", + "cOB9Jx": "Yield", + "djJp6c": "History", + "eTeBsj": "Price tolerance", + "gcuDcH": "Sent", + "hMFTdI": "Gas Price", + "i8dYu2": "GWEI", + "kZcqo0": "%", + "mt0/Cd": "Waiting time:", + "om9WOe": "rETH", + "pg4o1k": "Rocket Pool ETH", + "qIoHXA": "Lifetime earnings", + "qY1iOf": "{days} day trailing", + "r7kiOG": "Wrap", + "s8BnAC": "Swap", + "s8UwDT": "Wrapped Ether", + "sGU9Dr": "ETH", + "tio9Gt": "IPFS", + "xZIm6b": "Your transaction may be frontrun", "xomxyH": "Welcome to DefiOeth!", - "y6cogA": "test OEth" + "z/wUXE": "Received", + "zbaTLV": "View on IPFS" } \ No newline at end of file diff --git a/apps/oeth/src/main.tsx b/apps/oeth/src/main.tsx index 5e65c7a48..39e46ad93 100644 --- a/apps/oeth/src/main.tsx +++ b/apps/oeth/src/main.tsx @@ -1,31 +1,42 @@ +import '@rainbow-me/rainbowkit/styles.css'; +import './polyfills'; + import { StrictMode } from 'react'; import * as ReactDOM from 'react-dom/client'; -import { BrowserRouter } from 'react-router-dom'; -import { QueryClientProvider } from '@tanstack/react-query'; -import { queryClient } from '@origin/shared/data-access'; -import { theme } from '@origin/shared/theme'; + import { CssBaseline, Experimental_CssVarsProvider as CssVarsProvider, } from '@mui/material'; +import { theme } from '@origin/shared/theme'; +import { composeContexts } from '@origin/shared/utils'; +import { darkTheme, RainbowKitProvider } from '@rainbow-me/rainbowkit'; +import { QueryClientProvider } from '@tanstack/react-query'; import { IntlProvider } from 'react-intl'; +import { BrowserRouter } from 'react-router-dom'; +import { WagmiConfig } from 'wagmi'; + +import { App } from './App'; +import { chains, queryClient, wagmiConfig } from './clients'; import { en } from './lang'; -import { App } from './components'; const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement + document.getElementById('root') as HTMLElement, ); root.render( - - - - - - - - - - - - + composeContexts( + [ + [StrictMode], + [IntlProvider, { messages: en, locale: 'en', defaultLocale: 'en' }], + [BrowserRouter], + [QueryClientProvider, { client: queryClient }], + [CssVarsProvider, { theme: theme, defaultMode: 'dark' }], + [WagmiConfig, { config: wagmiConfig }], + [RainbowKitProvider, { chains: chains, theme: darkTheme() }], + ], + <> + + + , + ), ); diff --git a/apps/oeth/src/polyfills.ts b/apps/oeth/src/polyfills.ts new file mode 100644 index 000000000..6fcfffd6a --- /dev/null +++ b/apps/oeth/src/polyfills.ts @@ -0,0 +1,8 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { Buffer } from 'buffer'; + +window.global = window.global ?? window; +window.Buffer = window.Buffer ?? Buffer; +window.process = window.process ?? ({ env: {} } as any); + +export {}; diff --git a/apps/oeth/tsconfig.app.json b/apps/oeth/tsconfig.app.json index e4322b551..fc0ac957a 100644 --- a/apps/oeth/tsconfig.app.json +++ b/apps/oeth/tsconfig.app.json @@ -6,7 +6,8 @@ }, "files": [ "../../node_modules/@nx/react/typings/cssmodule.d.ts", - "../../node_modules/@nx/react/typings/image.d.ts" + "../../node_modules/@nx/react/typings/image.d.ts", + "../../libs/shared/theme/src/theme.d.ts" ], "exclude": [ "src/**/*.spec.ts", diff --git a/apps/oeth/tsconfig.json b/apps/oeth/tsconfig.json index fdfab6c30..0b77af82e 100644 --- a/apps/oeth/tsconfig.json +++ b/apps/oeth/tsconfig.json @@ -4,7 +4,6 @@ "allowJs": false, "esModuleInterop": false, "allowSyntheticDefaultImports": true, - "strict": true, "types": ["vite/client", "vitest"] }, "files": [], diff --git a/apps/oeth/vite.config.ts b/apps/oeth/vite.config.ts index 89ae276f5..e1b3e9e4e 100644 --- a/apps/oeth/vite.config.ts +++ b/apps/oeth/vite.config.ts @@ -20,6 +20,15 @@ export default defineConfig({ host: 'localhost', }, + optimizeDeps: { + esbuildOptions: { + target: 'esnext', + supported: { + bigint: true, + }, + }, + }, + plugins: [ svgr(), react({ @@ -41,7 +50,7 @@ export default defineConfig({ viteStaticCopy({ targets: [ { - src: path.resolve(__dirname, '../../libs/shared/assets/files/*'), + src: path.resolve(__dirname, '../../libs/shared/assets/files/**/*'), dest: './images', }, ], diff --git a/libs/.gitkeep b/apps/ousd/public/.gitkeep similarity index 100% rename from libs/.gitkeep rename to apps/ousd/public/.gitkeep diff --git a/apps/ousd/public/favicon.ico b/apps/ousd/public/favicon.ico deleted file mode 100644 index 317ebcb23..000000000 Binary files a/apps/ousd/public/favicon.ico and /dev/null differ diff --git a/apps/ousd/src/main.tsx b/apps/ousd/src/main.tsx index 3c52a6263..b71db345e 100644 --- a/apps/ousd/src/main.tsx +++ b/apps/ousd/src/main.tsx @@ -1,18 +1,20 @@ import { StrictMode } from 'react'; import * as ReactDOM from 'react-dom/client'; -import { OUSDRoot } from './components'; -import { QueryClientProvider } from '@tanstack/react-query'; -import { queryClient } from '@origin/shared/data-access'; + import { CssBaseline, Experimental_CssVarsProvider as CssVarsProvider, } from '@mui/material'; +import { queryClient } from '@origin/shared/data-access'; import { theme } from '@origin/shared/theme'; +import { QueryClientProvider } from '@tanstack/react-query'; import { IntlProvider } from 'react-intl'; + +import { OUSDRoot } from './components'; import { en } from './lang'; const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement + document.getElementById('root') as HTMLElement, ); root.render( @@ -24,5 +26,5 @@ root.render( - + , ); diff --git a/apps/ousd/tsconfig.json b/apps/ousd/tsconfig.json index fdfab6c30..0b77af82e 100644 --- a/apps/ousd/tsconfig.json +++ b/apps/ousd/tsconfig.json @@ -4,7 +4,6 @@ "allowJs": false, "esModuleInterop": false, "allowSyntheticDefaultImports": true, - "strict": true, "types": ["vite/client", "vitest"] }, "files": [], diff --git a/libs/oeth/history/.babelrc b/libs/oeth/history/.babelrc new file mode 100644 index 000000000..1ea870ead --- /dev/null +++ b/libs/oeth/history/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "@nx/react/babel", + { + "runtime": "automatic", + "useBuiltIns": "usage" + } + ] + ], + "plugins": [] +} diff --git a/libs/oeth/history/.eslintrc.json b/libs/oeth/history/.eslintrc.json new file mode 100644 index 000000000..a786f2cf3 --- /dev/null +++ b/libs/oeth/history/.eslintrc.json @@ -0,0 +1,34 @@ +{ + "extends": [ + "plugin:@nx/react", + "../../../.eslintrc.json" + ], + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": {} + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "rules": {} + }, + { + "files": [ + "*.js", + "*.jsx" + ], + "rules": {} + } + ] +} diff --git a/libs/oeth/history/README.md b/libs/oeth/history/README.md new file mode 100644 index 000000000..70bea331f --- /dev/null +++ b/libs/oeth/history/README.md @@ -0,0 +1,7 @@ +# oeth-history + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test oeth-history` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/oeth/history/project.json b/libs/oeth/history/project.json new file mode 100644 index 000000000..031db8b96 --- /dev/null +++ b/libs/oeth/history/project.json @@ -0,0 +1,20 @@ +{ + "name": "oeth-history", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/oeth/history/src", + "projectType": "library", + "tags": [], + "targets": { + "lint": { + "executor": "@nx/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/oeth/history/**/*.{ts,tsx,js,jsx}" + ] + } + } + } +} diff --git a/libs/oeth/history/src/components/HistoryButton.tsx b/libs/oeth/history/src/components/HistoryButton.tsx new file mode 100644 index 000000000..b62a708fd --- /dev/null +++ b/libs/oeth/history/src/components/HistoryButton.tsx @@ -0,0 +1,67 @@ +import { alpha, Box, Button } from '@mui/material'; + +import type { BoxProps, ButtonProps } from '@mui/material'; + +interface Props extends ButtonProps { + circle?: boolean; + selected?: boolean; +} + +export function HistoryFilterButton({ + children, + circle = false, + onClick, + selected = false, + sx, + ...rest +}: Props) { + return ( + + ); +} + +function Circle(props: BoxProps) { + return ( + theme.palette.background.default, + height: '0.5rem', + width: '0.5rem', + borderRadius: '100%', + ...props, + }} + /> + ); +} diff --git a/libs/oeth/history/src/components/HistoryCard.tsx b/libs/oeth/history/src/components/HistoryCard.tsx new file mode 100644 index 000000000..c13d944c7 --- /dev/null +++ b/libs/oeth/history/src/components/HistoryCard.tsx @@ -0,0 +1,83 @@ +import { useState } from 'react'; + +import { Box, Button, Stack, Typography } from '@mui/material'; +import { Card } from '@origin/shared/components'; +import { useIntl } from 'react-intl'; + +import { HistoryFilterButton } from './HistoryButton'; +import { HistoryTable } from './HistoryTable'; + +import type { ColumnFilter } from '@tanstack/react-table'; + +export function HistoryCard() { + const [isConnected, setConnectionState] = useState(false); + const intl = useIntl(); + const [filter, setFilter] = useState({ + id: 'type', + value: [], + }); + + function filterRows(value: string) { + setFilter((prev) => { + if ((prev.value as string[]).includes(value)) { + return { + ...prev, + value: [...(prev.value as string[]).filter((val) => val !== value)], + }; + } else { + return { + ...prev, + value: [...(prev.value as string[]), value], + }; + } + }); + } + return ( + + History + + {[ + intl.formatMessage({ defaultMessage: 'Received' }), + intl.formatMessage({ defaultMessage: 'Sent' }), + intl.formatMessage({ defaultMessage: 'Swap' }), + intl.formatMessage({ defaultMessage: 'Yield' }), + ].map((label) => ( + filterRows(label.toLowerCase())} + > + {label} + + ))} + + + {intl.formatMessage({ defaultMessage: 'Export CSV' })} + + + } + > + {isConnected ? ( + + ) : ( + + + {intl.formatMessage({ + defaultMessage: 'Connect your wallet to see your history', + })} + + + + )} + + ); +} diff --git a/libs/oeth/history/src/components/HistoryTable.tsx b/libs/oeth/history/src/components/HistoryTable.tsx new file mode 100644 index 000000000..2401bb7dc --- /dev/null +++ b/libs/oeth/history/src/components/HistoryTable.tsx @@ -0,0 +1,166 @@ +import { useEffect, useMemo, useState } from 'react'; + +import { + Box, + Pagination, + Stack, + Table, + TableBody, + TableCell, + TableHead, + TableRow, +} from '@mui/material'; +import { LinkIcon, quantityFormat } from '@origin/shared/components'; +import { + createColumnHelper, + flexRender, + getCoreRowModel, + getFilteredRowModel, + getPaginationRowModel, + useReactTable, +} from '@tanstack/react-table'; +import { useIntl } from 'react-intl'; + +import type { ColumnFilter, ColumnFiltersState } from '@tanstack/react-table'; + +type Filter = 'swap' | 'yield' | 'received' | 'sent'; + +export interface HistoryRow { + date: Date; + type: Filter; + change: number; + balance: number; + link: string; +} + +interface Props { + rows: HistoryRow[]; + isLoading: boolean; + filter: ColumnFilter; +} + +const columnHelper = createColumnHelper(); + +export function HistoryTable({ rows, filter }: Props) { + const intl = useIntl(); + const [columnFilters, setColumnFilters] = useState([]); + const columns = useMemo( + () => [ + columnHelper.accessor('date', { + cell: (info) => intl.formatDate(info.getValue()), + header: intl.formatMessage({ defaultMessage: 'Date' }), + }), + columnHelper.accessor('type', { + id: 'type', + cell: (info) => info.getValue(), + header: intl.formatMessage({ defaultMessage: 'Type' }), + enableColumnFilter: true, + filterFn: (row, _, value) => { + if (!value.value.length) return true; + return value.value.includes(row.original.type); + }, + }), + columnHelper.accessor('change', { + cell: (info) => intl.formatNumber(info.getValue(), quantityFormat), + header: intl.formatMessage({ defaultMessage: 'Change' }), + }), + columnHelper.accessor('balance', { + cell: (info) => ( + + + {intl.formatNumber(info.getValue(), quantityFormat)} + + + + + ), + header: intl.formatMessage({ defaultMessage: 'OETH Balance' }), + }), + ], + [intl], + ); + + const table = useReactTable({ + data: rows, + columns, + state: { + pagination: { + pageSize: 20, + pageIndex: 0, + }, + columnFilters, + }, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), + getFilteredRowModel: getFilteredRowModel(), + onColumnFiltersChange: setColumnFilters, + // add when we do server side pagination + // manualPagination: true, + pageCount: rows.length / 3, + // add when we do server side pagination + // onPaginationChange: setPagination + }); + + useEffect(() => { + table.getColumn('type')?.setFilterValue(filter); + }, [filter, table]); + return ( + + + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => ( + + {flexRender( + header.column.columnDef.header, + header.getContext(), + )} + + ))} + + ))} + + + {table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + + ))} + + ))} + +
+ table.setPageIndex(page)} + /> +
+ ); +} diff --git a/libs/oeth/history/src/index.ts b/libs/oeth/history/src/index.ts new file mode 100644 index 000000000..286a630ac --- /dev/null +++ b/libs/oeth/history/src/index.ts @@ -0,0 +1 @@ +export * from './views/HistoryView'; diff --git a/libs/oeth/history/src/views/HistoryView.tsx b/libs/oeth/history/src/views/HistoryView.tsx new file mode 100644 index 000000000..be369b9e6 --- /dev/null +++ b/libs/oeth/history/src/views/HistoryView.tsx @@ -0,0 +1,5 @@ +import { HistoryCard } from '../components/HistoryCard'; + +export function HistoryView() { + return ; +} diff --git a/libs/oeth/history/tsconfig.json b/libs/oeth/history/tsconfig.json new file mode 100644 index 000000000..90fcf85c5 --- /dev/null +++ b/libs/oeth/history/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "jsx": "react-jsx", + "allowJs": false, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ], + "extends": "../../../tsconfig.base.json" +} diff --git a/libs/oeth/history/tsconfig.lib.json b/libs/oeth/history/tsconfig.lib.json new file mode 100644 index 000000000..78f9e0f1c --- /dev/null +++ b/libs/oeth/history/tsconfig.lib.json @@ -0,0 +1,24 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": ["node"] + }, + "files": [ + "../../../node_modules/@nx/react/typings/cssmodule.d.ts", + "../../../node_modules/@nx/react/typings/image.d.ts", + "../../../libs/shared/theme/src/theme.d.ts" + ], + "exclude": [ + "jest.config.ts", + "src/**/*.spec.ts", + "src/**/*.test.ts", + "src/**/*.spec.tsx", + "src/**/*.test.tsx", + "src/**/*.spec.js", + "src/**/*.test.js", + "src/**/*.spec.jsx", + "src/**/*.test.jsx" + ], + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] +} diff --git a/libs/oeth/swap/.babelrc b/libs/oeth/swap/.babelrc new file mode 100644 index 000000000..1ea870ead --- /dev/null +++ b/libs/oeth/swap/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "@nx/react/babel", + { + "runtime": "automatic", + "useBuiltIns": "usage" + } + ] + ], + "plugins": [] +} diff --git a/libs/oeth/swap/.eslintrc.json b/libs/oeth/swap/.eslintrc.json new file mode 100644 index 000000000..a786f2cf3 --- /dev/null +++ b/libs/oeth/swap/.eslintrc.json @@ -0,0 +1,34 @@ +{ + "extends": [ + "plugin:@nx/react", + "../../../.eslintrc.json" + ], + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": {} + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "rules": {} + }, + { + "files": [ + "*.js", + "*.jsx" + ], + "rules": {} + } + ] +} diff --git a/libs/oeth/swap/README.md b/libs/oeth/swap/README.md new file mode 100644 index 000000000..ec3526d64 --- /dev/null +++ b/libs/oeth/swap/README.md @@ -0,0 +1,7 @@ +# oeth-swap + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test oeth-swap` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/oeth/swap/project.json b/libs/oeth/swap/project.json new file mode 100644 index 000000000..377e5422d --- /dev/null +++ b/libs/oeth/swap/project.json @@ -0,0 +1,20 @@ +{ + "name": "oeth-swap", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/oeth/swap/src", + "projectType": "library", + "tags": [], + "targets": { + "lint": { + "executor": "@nx/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/oeth/swap/**/*.{ts,tsx,js,jsx}" + ] + } + } + } +} diff --git a/libs/oeth/swap/src/components/BestRoutes.tsx b/libs/oeth/swap/src/components/BestRoutes.tsx new file mode 100644 index 000000000..2484e3889 --- /dev/null +++ b/libs/oeth/swap/src/components/BestRoutes.tsx @@ -0,0 +1,33 @@ +import { Box } from '@mui/material'; + +import { SwapRouteCard } from './SwapRouteCard'; + +import type { Route } from './SwapRoute'; + +interface Props { + routes: Route[]; + selected: number; + onSelect: (index: number) => void; +} + +export function BestRoutes({ routes, selected, onSelect }: Props) { + return ( + + {routes.slice(0, 2).map((route, index) => ( + onSelect(index)} + route={route} + /> + ))} + + ); +} diff --git a/libs/oeth/swap/src/components/GasPopover.tsx b/libs/oeth/swap/src/components/GasPopover.tsx new file mode 100644 index 000000000..2fbdfcb30 --- /dev/null +++ b/libs/oeth/swap/src/components/GasPopover.tsx @@ -0,0 +1,206 @@ +import { useState } from 'react'; + +import { + alpha, + Box, + Button, + FormControl, + FormHelperText, + IconButton, + InputAdornment, + InputBase, + InputLabel, + Popover, + Stack, + useTheme, +} from '@mui/material'; +import { produce } from 'immer'; +import { useIntl } from 'react-intl'; +import { useFeeData } from 'wagmi'; + +import { useSwapState } from '../state'; + +import type { Theme } from '@mui/material'; +import type { ChangeEvent } from 'react'; + +const defaultSlippage = 0.01; + +const gridStyles = { + display: 'grid', + gridTemplateColumns: (theme: Theme) => `1.5fr 1fr`, + gap: 1, + justifyContent: 'space-between', + alignItems: 'center', +}; + +export function GasPopover() { + const theme = useTheme(); + const intl = useIntl(); + const [anchorEl, setAnchorEl] = useState(null); + const [{ slippage }, setSwapState] = useSwapState(); + const { data: feeData } = useFeeData({ formatUnits: 'gwei' }); + + const handleSlippageChange = (evt: ChangeEvent) => {}; + + return ( + <> + setAnchorEl(e.currentTarget)} + data-testid="gas-popover-button" + > + settings + + setAnchorEl(null)} + anchorOrigin={{ + vertical: 'bottom', + horizontal: 'center', + }} + transformOrigin={{ + vertical: 'top', + horizontal: 'right', + }} + sx={{ + '& .MuiPaper-root.MuiPopover-paper': { + padding: 3, + boxSizing: 'border-box', + maxWidth: { + xs: '90vw', + md: '16.5rem', + }, + width: '100%', + border: '1px solid', + borderColor: 'grey.700', + [theme.breakpoints.down('md')]: { + left: '0 !important', + right: 0, + marginInline: 'auto', + }, + }, + }} + > + + + + {intl.formatMessage({ defaultMessage: 'Slippage' })} + + + + {intl.formatMessage({ defaultMessage: '%' })} + + } + /> + + + + {slippage > 1 ? ( + theme.typography.pxToRem(12), + color: (theme) => theme.palette.warning.main, + fontWeight: 400, + fontStyle: 'normal', + }} + > + {intl.formatMessage({ + defaultMessage: 'Your transaction may be frontrun', + })} + + ) : null} + + + + {intl.formatMessage({ defaultMessage: 'Gas Price' })} + + + + {intl.formatMessage({ defaultMessage: 'GWEI' })} + + } + /> + + + + + + ); +} diff --git a/libs/oeth/swap/src/components/SwapInfo.tsx b/libs/oeth/swap/src/components/SwapInfo.tsx new file mode 100644 index 000000000..2249ca993 --- /dev/null +++ b/libs/oeth/swap/src/components/SwapInfo.tsx @@ -0,0 +1,43 @@ +import { Box, Tooltip, Typography } from '@mui/material'; +import { useIntl } from 'react-intl'; + +import type { Theme } from '@mui/material'; + +export function SwapInfo() { + const intl = useIntl(); + return ( + + {intl.formatMessage({ + defaultMessage: + 'The best swap route factors in the best price after transaction costs', + })} + + } + componentsProps={{ + tooltip: { + sx: { + paddingInline: 2, + paddingBlock: 1.5, + borderRadius: 2, + border: '1px solid', + borderColor: (theme) => theme.palette.grey[500], + boxShadow: (theme: Theme) => theme.shadows[23], + }, + }, + }} + > + theme.typography.pxToRem(12), + height: (theme) => theme.typography.pxToRem(12), + color: (theme) => theme.palette.text.secondary, + }} + > + + ); +} diff --git a/libs/oeth/swap/src/components/SwapRoute.tsx b/libs/oeth/swap/src/components/SwapRoute.tsx new file mode 100644 index 000000000..853e896b7 --- /dev/null +++ b/libs/oeth/swap/src/components/SwapRoute.tsx @@ -0,0 +1,112 @@ +import { useState } from 'react'; + +import { Skeleton, Stack, Typography } from '@mui/material'; +import { Card, cardStyles } from '@origin/shared/components'; +import { useIntl } from 'react-intl'; + +import { BestRoutes } from './BestRoutes'; +import { SwapInfo } from './SwapInfo'; +import { SwapRouteAccordion } from './SwapRouteAccordion'; + +interface Swap { + type: 'swap'; +} +export interface Redeem { + type: 'redeem'; + tokenAbbreviation: string; + waitTime: string; +} + +export type Route = { + name: string; + icon: string | string[]; + quantity: number; + value: number; + rate: number; + transactionCost: number; +} & (Swap | Redeem); + +interface Props { + isLoading: boolean; + routes: Route[]; +} + +export function SwapRoute({ isLoading = false, routes }: Props) { + const intl = useIntl(); + const [selectedRoute, setSelectedRoute] = useState(0); + + const hasContent = routes.length > 0; + return ( + theme.palette.background.default, + backgroundColor: 'grey.900', + }} + title={ + isLoading ? ( + theme.typography.pxToRem(12), + display: 'flex', + alignItems: 'center', + }} + > + theme.palette.primary.contrastText, + }} + /> + {intl.formatMessage({ + defaultMessage: 'Finding the best route...', + })} + + ) : ( + + {intl.formatMessage({ defaultMessage: 'Route' })} + + + ) + } + sxCardTitle={{ borderBottom: 'none', paddingBlock: 1, paddingInline: 2 }} + sxCardContent={{ + ...(hasContent + ? cardStyles + : { + p: 0, + paddingBlock: 0, + paddingInline: 0, + '&:last-child': { pb: 0 }, + }), + }} + > + {hasContent ? ( + <> + setSelectedRoute(index)} + /> + setSelectedRoute(index)} + sx={{ mt: 2 }} + /> + + ) : undefined} + + ); +} diff --git a/libs/oeth/swap/src/components/SwapRouteAccordion.tsx b/libs/oeth/swap/src/components/SwapRouteAccordion.tsx new file mode 100644 index 000000000..96d6816cc --- /dev/null +++ b/libs/oeth/swap/src/components/SwapRouteAccordion.tsx @@ -0,0 +1,112 @@ +import { + Accordion, + AccordionDetails, + AccordionSummary, + Box, + Stack, + Typography, +} from '@mui/material'; +import { useIntl } from 'react-intl'; + +import { SwapRouteAccordionItem } from './SwapRouteAccordionItem'; + +import type { SxProps } from '@mui/material'; + +import type { Route } from './SwapRoute'; + +interface Props { + routes: Route[]; + selected: number; + onSelect: (index: number) => void; + sx?: SxProps; +} + +export function SwapRouteAccordion({ routes, selected, onSelect, sx }: Props) { + const intl = useIntl(); + return ( + + theme.typography.pxToRem(14), + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + '& .MuiAccordionSummary-content': { + margin: 0, + }, + padding: 0, + '&.Mui-expanded': { + minHeight: 0, + '& img': { + transform: 'rotate(-180deg)', + }, + }, + }} + > + + {intl.formatMessage({ defaultMessage: 'Show more' })} + + + theme.typography.pxToRem(12), + width: (theme) => theme.typography.pxToRem(12), + alignSelf: 'center', + }} + > + + theme.spacing(-1), + '&:before': { + content: '""', + width: (theme) => `calc(100% + ${theme.spacing(2)})`, + position: 'absolute', + left: (theme) => theme.spacing(-1), + height: '1px', + borderBlockEnd: '1px solid', + display: 'block', + borderColor: 'grey.800', + }, + }} + > + + {routes.slice(2).map((route, index) => ( + + ))} + + + + ); +} diff --git a/libs/oeth/swap/src/components/SwapRouteAccordionItem.tsx b/libs/oeth/swap/src/components/SwapRouteAccordionItem.tsx new file mode 100644 index 000000000..2ee3f1c41 --- /dev/null +++ b/libs/oeth/swap/src/components/SwapRouteAccordionItem.tsx @@ -0,0 +1,133 @@ +import { alpha, Box, Stack, Typography, useTheme } from '@mui/material'; +import { currencyFormat, quantityFormat } from '@origin/shared/components'; +import { useIntl } from 'react-intl'; + +import { SwapInfo } from './SwapInfo'; + +import type { Route } from './SwapRoute'; + +interface Props { + route: Route; + selected: number; + index: number; + onSelect: (index: number) => void; +} + +export function SwapRouteAccordionItem({ + route, + selected, + index, + onSelect, +}: Props) { + const theme = useTheme(); + const intl = useIntl(); + return ( + + `linear-gradient(${theme.palette.grey[800]}, ${ + theme.palette.grey[800] + }) padding-box, + linear-gradient(90deg, ${alpha( + theme.palette.primary.main, + 0.4, + )} 0%, ${alpha( + theme.palette.primary.dark, + 0.4, + )} 100%) border-box;`, + }, + ...(selected === index + ? { + borderColor: 'transparent', + background: (theme) => + `linear-gradient(${theme.palette.grey[800]}, ${theme.palette.grey[800]}) padding-box, + linear-gradient(90deg, ${theme.palette.primary.main} 0%, ${theme.palette.primary.dark} 100%) border-box;`, + } + : {}), + }} + onClick={() => onSelect(index)} + role="button" + > + + + theme.typography.pxToRem(24), + width: (theme) => theme.typography.pxToRem(24), + }} + /> + + + {intl.formatNumber(route.quantity, quantityFormat)} +   + + ({intl.formatNumber(route.value, currencyFormat)}) + + + + {route.type === 'swap' + ? intl.formatMessage( + { defaultMessage: 'Swap via {name}' }, + { name: route.name }, + ) + : intl.formatMessage( + { defaultMessage: 'Swap for {name}' }, + { name: route.name }, + )} + + + + + + Rate  + +   + + 1:{intl.formatNumber(route.rate, quantityFormat)} + + + + + Est gas:  + + ~{intl.formatNumber(route.transactionCost, currencyFormat)} + + + + + + ); +} diff --git a/libs/oeth/swap/src/components/SwapRouteCard.tsx b/libs/oeth/swap/src/components/SwapRouteCard.tsx new file mode 100644 index 000000000..9c99910c2 --- /dev/null +++ b/libs/oeth/swap/src/components/SwapRouteCard.tsx @@ -0,0 +1,194 @@ +import { alpha, Box, Card, CardHeader, Stack, Typography } from '@mui/material'; +import { currencyFormat } from '@origin/shared/components'; +import { useIntl } from 'react-intl'; + +import type { Route } from './SwapRoute'; + +interface Props { + index: number; + selected: number; + onSelect: (index: number) => void; + route: Route; +} + +export function SwapRouteCard({ index, selected, onSelect, route }: Props) { + const intl = useIntl(); + return ( + `1px solid ${theme.palette.grey[800]}`, + borderRadius: 1, + ...(selected === index + ? { + background: `linear-gradient(var(--mui-palette-grey-800), var(--mui-palette-grey-800)) padding-box, + linear-gradient(90deg, var(--mui-palette-primary-main) 0%, var(--mui-palette-primary-dark) 100%) border-box;`, + borderColor: 'transparent', + } + : { + '&:hover': { + borderColor: 'transparent', + background: ( + theme, + ) => `linear-gradient(var(--mui-palette-grey-800), var(--mui-palette-grey-800)) padding-box, + linear-gradient(90deg, ${alpha( + theme.palette.primary.main, + 0.4, + )} 0%, ${alpha( + theme.palette.primary.dark, + 0.4, + )} 100%) border-box;`, + }, + }), + }} + role="button" + onClick={() => onSelect(index)} + > + + + + + {route.quantity}  + + ({intl.formatNumber(route.value, currencyFormat)}) + + + + {index === 0 ? ( + theme.shape.borderRadius, + background: (theme) => theme.palette.background.gradient1, + color: 'primary.contrastText', + fontSize: (theme) => theme.typography.pxToRem(12), + top: (theme) => theme.spacing(-3), + right: (theme) => theme.spacing(-2), + paddingInline: 1, + }} + > + {intl.formatMessage({ defaultMessage: 'Best' })} + + ) : undefined} + + + + ({intl.formatNumber(route.value, currencyFormat)}) + + + } + > + + + {route.name} + + + + {intl.formatMessage({ defaultMessage: 'Rate:' })} + + 1:{route.rate} + + + + + {intl.formatMessage({ + defaultMessage: 'Gas:', + })} + + + ~{intl.formatNumber(route.transactionCost, currencyFormat)} + + + {route.type === 'redeem' ? ( + + + {intl.formatMessage({ + defaultMessage: 'Wait time:', + })} + + {/* TODO better logic for coloring -> prob time should come as a ms duration and getting it formated */} + + ~{route.waitTime} + + + ) : undefined} + + + ); +} diff --git a/libs/oeth/swap/src/constants.ts b/libs/oeth/swap/src/constants.ts new file mode 100644 index 000000000..c444e05ec --- /dev/null +++ b/libs/oeth/swap/src/constants.ts @@ -0,0 +1,10 @@ +import { tokens } from '@origin/shared/contracts'; + +export const swapTokens = [ + tokens.mainnet.ETH, + tokens.mainnet.OETH, + tokens.mainnet.WETH, + tokens.mainnet.stETH, + tokens.mainnet.frxETH, + tokens.mainnet.sfrxETH, +]; diff --git a/libs/oeth/swap/src/index.ts b/libs/oeth/swap/src/index.ts new file mode 100644 index 000000000..d29bf0360 --- /dev/null +++ b/libs/oeth/swap/src/index.ts @@ -0,0 +1 @@ +export * from './views/SwapView'; diff --git a/libs/oeth/swap/src/state.ts b/libs/oeth/swap/src/state.ts new file mode 100644 index 000000000..7ddffd2a5 --- /dev/null +++ b/libs/oeth/swap/src/state.ts @@ -0,0 +1,33 @@ +import { useState } from 'react'; + +import { tokens } from '@origin/shared/contracts'; +import { useDebouncedEffect } from '@react-hookz/web'; +import { produce } from 'immer'; +import { createContainer } from 'react-tracked'; + +import type { Token } from '@origin/shared/contracts'; + +export const { Provider: SwapProvider, useTracked: useSwapState } = + createContainer(() => { + const [state, setState] = useState({ + amountIn: 0n, + tokenIn: tokens.mainnet.ETH as Token, + amountOut: 0n, + tokenOut: tokens.mainnet.OETH as Token, + slippage: 0.01, + }); + + useDebouncedEffect( + () => { + setState( + produce((draft) => { + draft.amountOut = draft.amountIn; + }), + ); + }, + [state.amountIn], + 1e3, + ); + + return [state, setState]; + }); diff --git a/libs/oeth/swap/src/views/SwapView.tsx b/libs/oeth/swap/src/views/SwapView.tsx new file mode 100644 index 000000000..4a0622ea5 --- /dev/null +++ b/libs/oeth/swap/src/views/SwapView.tsx @@ -0,0 +1,221 @@ +import { useState } from 'react'; + +import { alpha, Box, IconButton, Stack } from '@mui/material'; +import { Card, TokenInput } from '@origin/shared/components'; +import { TokenSelectModal, usePrices } from '@origin/shared/providers'; +import { isNilOrEmpty } from '@origin/shared/utils'; +import { produce } from 'immer'; +import { useIntl } from 'react-intl'; +import { useAccount, useBalance } from 'wagmi'; + +import { GasPopover } from '../components/GasPopover'; +import { SwapRoute } from '../components/SwapRoute'; +import { swapTokens } from '../constants'; +import { SwapProvider, useSwapState } from '../state'; + +import type { IconButtonProps } from '@mui/material'; +import type { Token } from '@origin/shared/contracts'; + +export const SwapView = () => ( + + + +); + +function SwapViewWrapped() { + const intl = useIntl(); + const { address, isConnected } = useAccount(); + const [tokenModal, setTokenModal] = useState<'tokenIn' | 'tokenOut' | null>( + null, + ); + const [{ amountIn, amountOut, tokenIn, tokenOut }, setSwapState] = + useSwapState(); + const { data: prices, isLoading: isPriceLoading } = usePrices(); + const { data: balTokenIn, isLoading: isBalTokenInLoading } = useBalance({ + address, + token: tokenIn.address, + }); + const { data: balTokenOut, isLoading: isBalTokenOutLoading } = useBalance({ + address, + token: tokenOut.address, + }); + + const handleCloseSelectionModal = () => { + setTokenModal(null); + }; + + const handleSelectToken = (value: Token) => { + setSwapState( + produce((draft) => { + draft[tokenModal] = value; + }), + ); + }; + + const handleExchangeTokens = () => { + setSwapState( + produce((draft) => { + draft.amountIn = 0n; + draft.amountOut = 0n; + const oldTokenOut = draft.tokenOut; + draft.tokenOut = draft.tokenIn; + draft.tokenIn = oldTokenOut; + }), + ); + }; + + return ( + <> + + {intl.formatMessage({ defaultMessage: 'Swap' })} + + + } + > + + { + setSwapState( + produce((draft) => { + draft.amountIn = val; + }), + ); + }} + balance={balTokenIn?.value} + isBalanceLoading={isBalTokenInLoading} + token={tokenIn} + onTokenClick={() => { + setTokenModal('tokenIn'); + }} + tokenPriceUsd={prices?.[tokenIn.symbol]} + isPriceLoading={isPriceLoading} + isConnected={isConnected} + sx={{ + backgroundColor: 'grey.900', + padding: 2.875, + border: '1px solid', + borderColor: 'divider', + borderRadius: 1, + borderEndStartRadius: 0, + borderEndEndRadius: 0, + '&:hover, &:focus-within': { + borderColor: 'transparent', + borderStartStartRadius: (theme) => theme.shape.borderRadius, + borderStartEndRadius: (theme) => theme.shape.borderRadius, + }, + '&:hover': { + background: (theme) => + `linear-gradient(${theme.palette.grey[900]}, ${ + theme.palette.grey[900] + }) padding-box, + linear-gradient(90deg, ${alpha( + theme.palette.primary.main, + 0.4, + )} 0%, ${alpha( + theme.palette.primary.dark, + 0.4, + )} 100%) border-box;`, + }, + '&:focus-within': { + background: (theme) => + `linear-gradient(${theme.palette.grey[900]}, ${theme.palette.grey[900]}) padding-box, + linear-gradient(90deg, var(--mui-palette-primary-main) 0%, var(--mui-palette-primary-dark) 100%) border-box;`, + }, + }} + /> + { + setTokenModal('tokenOut'); + }} + tokenPriceUsd={prices?.[tokenOut.symbol]} + isPriceLoading={isPriceLoading} + inputProps={{ readOnly: true }} + isConnected={isConnected} + sx={{ + border: '1px solid', + borderColor: 'divider', + borderTop: 0, + borderRadius: 1, + borderStartStartRadius: 0, + borderStartEndRadius: 0, + backgroundColor: (theme) => alpha(theme.palette.grey[400], 0.2), + padding: 2.875, + }} + /> + + + + + + + ); +} + +function SwapButton(props: IconButtonProps) { + return ( + theme.palette.background.paper, + strokeWidth: (theme) => theme.typography.pxToRem(2), + stroke: (theme) => theme.palette.grey[700], + backgroundColor: (theme) => theme.palette.divider, + '& img': { + transition: (theme) => theme.transitions.create('transform'), + }, + '&:hover': { + backgroundColor: (theme) => theme.palette.background.default, + '& img': { + transform: 'rotate(-180deg)', + }, + }, + ...props?.sx, + }} + > + + + ); +} diff --git a/libs/oeth/swap/tsconfig.json b/libs/oeth/swap/tsconfig.json new file mode 100644 index 000000000..90fcf85c5 --- /dev/null +++ b/libs/oeth/swap/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "jsx": "react-jsx", + "allowJs": false, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ], + "extends": "../../../tsconfig.base.json" +} diff --git a/libs/oeth/swap/tsconfig.lib.json b/libs/oeth/swap/tsconfig.lib.json new file mode 100644 index 000000000..d11ac2d7a --- /dev/null +++ b/libs/oeth/swap/tsconfig.lib.json @@ -0,0 +1,30 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": ["node"] + }, + "files": [ + "../../../node_modules/@nx/react/typings/cssmodule.d.ts", + "../../../node_modules/@nx/react/typings/image.d.ts", + "../../../libs/shared/theme/src/theme.d.ts" + ], + "exclude": [ + "jest.config.ts", + "src/**/*.spec.ts", + "src/**/*.test.ts", + "src/**/*.spec.tsx", + "src/**/*.test.tsx", + "src/**/*.spec.js", + "src/**/*.test.js", + "src/**/*.spec.jsx", + "src/**/*.test.jsx" + ], + "include": [ + "src/**/*.js", + "src/**/*.jsx", + "src/**/*.ts", + "src/**/*.tsx", + "../../shared/providers/src/wagmi/components/TokenSelectModal.tsx" + ] +} diff --git a/libs/oeth/wrap/.babelrc b/libs/oeth/wrap/.babelrc new file mode 100644 index 000000000..1ea870ead --- /dev/null +++ b/libs/oeth/wrap/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "@nx/react/babel", + { + "runtime": "automatic", + "useBuiltIns": "usage" + } + ] + ], + "plugins": [] +} diff --git a/libs/oeth/wrap/.eslintrc.json b/libs/oeth/wrap/.eslintrc.json new file mode 100644 index 000000000..a786f2cf3 --- /dev/null +++ b/libs/oeth/wrap/.eslintrc.json @@ -0,0 +1,34 @@ +{ + "extends": [ + "plugin:@nx/react", + "../../../.eslintrc.json" + ], + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": {} + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "rules": {} + }, + { + "files": [ + "*.js", + "*.jsx" + ], + "rules": {} + } + ] +} diff --git a/libs/oeth/wrap/README.md b/libs/oeth/wrap/README.md new file mode 100644 index 000000000..446cad759 --- /dev/null +++ b/libs/oeth/wrap/README.md @@ -0,0 +1,7 @@ +# oeth-wrap + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test oeth-wrap` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/oeth/wrap/project.json b/libs/oeth/wrap/project.json new file mode 100644 index 000000000..1f8a9626e --- /dev/null +++ b/libs/oeth/wrap/project.json @@ -0,0 +1,20 @@ +{ + "name": "oeth-wrap", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/oeth/wrap/src", + "projectType": "library", + "tags": [], + "targets": { + "lint": { + "executor": "@nx/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/oeth/wrap/**/*.{ts,tsx,js,jsx}" + ] + } + } + } +} diff --git a/libs/oeth/wrap/src/components/SwapWrap.tsx b/libs/oeth/wrap/src/components/SwapWrap.tsx new file mode 100644 index 000000000..84ff7c5b8 --- /dev/null +++ b/libs/oeth/wrap/src/components/SwapWrap.tsx @@ -0,0 +1,63 @@ +import { useState } from 'react'; + +import { SwapCard } from '@origin/shared/components'; +import random from 'lodash/random'; +import { useIntl } from 'react-intl'; + +export function PortfolioSwap() { + const intl = useIntl(); + const [values, setValues] = useState({ + baseToken: { + abbreviation: 'OETH', + imgSrc: 'https://app.oeth.com/images/currency/oeth-icon-small.svg', + quantity: 0, + }, + exchangeCurrency: { + abbreviation: 'wOETH', + imgSrc: 'https://app.oeth.com/images/currency/woeth-icon-small.svg', + quantity: 0, + }, + }); + + function handleValueChange(value: string) { + const number = parseInt(value) || 0; + setValues((prev) => ({ + baseToken: { + ...prev.baseToken, + quantity: number, + }, + exchangeCurrency: { + ...prev.exchangeCurrency, + quantity: number * random(number - 0.5, number, true), + }, + })); + } + + function swapTokens() { + setValues((prev) => ({ + baseToken: { + ...prev.exchangeCurrency, + quantity: prev.baseToken.quantity, + }, + exchangeCurrency: { + ...prev.baseToken, + quantity: + prev.baseToken.quantity * + random(prev.baseToken.quantity - 0.5, prev.baseToken.quantity, true), + }, + })); + } + + return ( + + ); +} diff --git a/libs/oeth/wrap/src/index.ts b/libs/oeth/wrap/src/index.ts new file mode 100644 index 000000000..0fe462b97 --- /dev/null +++ b/libs/oeth/wrap/src/index.ts @@ -0,0 +1 @@ +export * from './views/WrapView'; diff --git a/libs/oeth/wrap/src/views/WrapView.tsx b/libs/oeth/wrap/src/views/WrapView.tsx new file mode 100644 index 000000000..0dcab5d10 --- /dev/null +++ b/libs/oeth/wrap/src/views/WrapView.tsx @@ -0,0 +1,50 @@ +import { Button, Stack } from '@mui/material'; +import { ActionButton, Card } from '@origin/shared/components'; +import { useIntl } from 'react-intl'; + +import { PortfolioSwap } from '../components/SwapWrap'; + +export function WrapView() { + const intl = useIntl(); + + return ( + + + + + + console.log('test')}> + {intl.formatMessage({ defaultMessage: 'Connect' })} + + + ); +} diff --git a/libs/oeth/wrap/tsconfig.json b/libs/oeth/wrap/tsconfig.json new file mode 100644 index 000000000..90fcf85c5 --- /dev/null +++ b/libs/oeth/wrap/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "jsx": "react-jsx", + "allowJs": false, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ], + "extends": "../../../tsconfig.base.json" +} diff --git a/libs/oeth/wrap/tsconfig.lib.json b/libs/oeth/wrap/tsconfig.lib.json new file mode 100644 index 000000000..78f9e0f1c --- /dev/null +++ b/libs/oeth/wrap/tsconfig.lib.json @@ -0,0 +1,24 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": ["node"] + }, + "files": [ + "../../../node_modules/@nx/react/typings/cssmodule.d.ts", + "../../../node_modules/@nx/react/typings/image.d.ts", + "../../../libs/shared/theme/src/theme.d.ts" + ], + "exclude": [ + "jest.config.ts", + "src/**/*.spec.ts", + "src/**/*.test.ts", + "src/**/*.spec.tsx", + "src/**/*.test.tsx", + "src/**/*.spec.js", + "src/**/*.test.js", + "src/**/*.spec.jsx", + "src/**/*.test.jsx" + ], + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] +} diff --git a/libs/shared/assets/files/tokens/DAI.svg b/libs/shared/assets/files/tokens/DAI.svg new file mode 100644 index 000000000..55f30e4ad --- /dev/null +++ b/libs/shared/assets/files/tokens/DAI.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/libs/shared/assets/files/tokens/ETH.svg b/libs/shared/assets/files/tokens/ETH.svg new file mode 100644 index 000000000..c330fd730 --- /dev/null +++ b/libs/shared/assets/files/tokens/ETH.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/libs/shared/assets/files/tokens/OETH.svg b/libs/shared/assets/files/tokens/OETH.svg new file mode 100644 index 000000000..e12abe4ae --- /dev/null +++ b/libs/shared/assets/files/tokens/OETH.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/shared/assets/files/tokens/OGN.svg b/libs/shared/assets/files/tokens/OGN.svg new file mode 100644 index 000000000..bc220e5ba --- /dev/null +++ b/libs/shared/assets/files/tokens/OGN.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/libs/shared/assets/files/tokens/OGV.svg b/libs/shared/assets/files/tokens/OGV.svg new file mode 100644 index 000000000..0f57558f3 --- /dev/null +++ b/libs/shared/assets/files/tokens/OGV.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libs/shared/assets/files/tokens/OUSD.svg b/libs/shared/assets/files/tokens/OUSD.svg new file mode 100644 index 000000000..412c5703c --- /dev/null +++ b/libs/shared/assets/files/tokens/OUSD.svg @@ -0,0 +1,3 @@ + + + diff --git a/libs/shared/assets/files/tokens/USDC.svg b/libs/shared/assets/files/tokens/USDC.svg new file mode 100644 index 000000000..9303ee78e --- /dev/null +++ b/libs/shared/assets/files/tokens/USDC.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/libs/shared/assets/files/tokens/USDT.svg b/libs/shared/assets/files/tokens/USDT.svg new file mode 100644 index 000000000..c7088804d --- /dev/null +++ b/libs/shared/assets/files/tokens/USDT.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/libs/shared/assets/files/tokens/WETH.svg b/libs/shared/assets/files/tokens/WETH.svg new file mode 100644 index 000000000..54781a0fc --- /dev/null +++ b/libs/shared/assets/files/tokens/WETH.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/libs/shared/assets/files/tokens/WOETH.svg b/libs/shared/assets/files/tokens/WOETH.svg new file mode 100644 index 000000000..856f1950d --- /dev/null +++ b/libs/shared/assets/files/tokens/WOETH.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/shared/assets/files/tokens/WOUSD.svg b/libs/shared/assets/files/tokens/WOUSD.svg new file mode 100644 index 000000000..6d665bf22 --- /dev/null +++ b/libs/shared/assets/files/tokens/WOUSD.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/shared/assets/files/tokens/frxETH.svg b/libs/shared/assets/files/tokens/frxETH.svg new file mode 100644 index 000000000..88b0ff85f --- /dev/null +++ b/libs/shared/assets/files/tokens/frxETH.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/libs/shared/assets/files/tokens/rETH.svg b/libs/shared/assets/files/tokens/rETH.svg new file mode 100644 index 000000000..6e86e83b2 --- /dev/null +++ b/libs/shared/assets/files/tokens/rETH.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/libs/shared/assets/files/tokens/sfrxETH.svg b/libs/shared/assets/files/tokens/sfrxETH.svg new file mode 100644 index 000000000..289b9156d --- /dev/null +++ b/libs/shared/assets/files/tokens/sfrxETH.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/libs/shared/assets/files/tokens/stETH.svg b/libs/shared/assets/files/tokens/stETH.svg new file mode 100644 index 000000000..76e013643 --- /dev/null +++ b/libs/shared/assets/files/tokens/stETH.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/libs/shared/components/src/Cards/index.tsx b/libs/shared/components/src/Cards/index.ts similarity index 100% rename from libs/shared/components/src/Cards/index.tsx rename to libs/shared/components/src/Cards/index.ts diff --git a/libs/shared/components/src/Inputs/BigIntInput.tsx b/libs/shared/components/src/Inputs/BigIntInput.tsx new file mode 100644 index 000000000..665635807 --- /dev/null +++ b/libs/shared/components/src/Inputs/BigIntInput.tsx @@ -0,0 +1,106 @@ +import { forwardRef, useEffect, useState } from 'react'; + +import { InputBase } from '@mui/material'; +import { isNilOrEmpty } from '@origin/shared/utils'; +import { formatUnits, parseUnits } from 'viem'; + +import type { InputBaseProps } from '@mui/material'; +import type { ChangeEvent } from 'react'; + +export type BigintInputProps = { + value: bigint; + decimals?: number; + onChange?: (value: bigint) => void; + isLoading?: boolean; + isError?: boolean; +} & Omit; + +export const BigIntInput = forwardRef( + ({ value, decimals = 18, isLoading, isError, onChange, ...rest }, ref) => { + const [strVal, setStrVal] = useState(formatUnits(value, decimals)); + + useEffect(() => { + if (value === 0n && (isNilOrEmpty(strVal) || strVal === '0.')) { + return; + } + + if (value === 0n && !/0\.0+$/.test(strVal)) { + setStrVal(''); + return; + } + + if ( + isNilOrEmpty(strVal) || + strVal === '0.' || + value !== parseUnits(strVal, decimals) + ) { + setStrVal(formatUnits(value, decimals)); + } + }, [value, decimals, strVal]); + + const handleChange = (evt: ChangeEvent) => { + if (evt.target.validity.valid) { + const val = + isNilOrEmpty(evt.target.value) || evt.target.value === '.' + ? '0' + : evt.target.value.replace(/\.0+$/, ''); + + try { + const num = parseUnits(val, decimals); + setStrVal(evt.target.value === '.' ? '0.' : evt.target.value); + if (onChange && num !== value) { + onChange(num); + } + } catch {} + } + }; + + return ( + + ); + }, +); + +BigIntInput.displayName = 'BigIntInput'; diff --git a/libs/shared/components/src/Inputs/TokenInput.tsx b/libs/shared/components/src/Inputs/TokenInput.tsx new file mode 100644 index 000000000..cd464dd56 --- /dev/null +++ b/libs/shared/components/src/Inputs/TokenInput.tsx @@ -0,0 +1,178 @@ +import { forwardRef } from 'react'; + +import { alpha, Box, Button, Skeleton, Stack, Typography } from '@mui/material'; +import { useIntl } from 'react-intl'; +import { formatUnits } from 'viem'; + +import { BigIntInput } from './BigIntInput'; + +import type { StackProps } from '@mui/material'; +import type { Token } from '@origin/shared/contracts'; + +import type { BigintInputProps } from './BigIntInput'; + +export type TokenInputProps = { + amount: bigint; + decimals?: number; + onAmountChange?: (value: bigint) => void; + isAmountLoading?: boolean; + isAmountDisabled?: boolean; + isAmountError?: boolean; + isConnected: boolean; + balance?: bigint; + isBalanceLoading?: boolean; + disableMaxClick?: boolean; + token: Token; + onTokenClick: () => void; + tokenPriceUsd?: number; + isPriceLoading?: boolean; + inputProps?: Omit< + BigintInputProps, + 'value' | 'decimals' | 'onChange' | 'isLoading' | 'isError' + >; +} & StackProps; + +export const TokenInput = forwardRef( + ( + { + amount, + decimals = 18, + onAmountChange, + isAmountLoading, + isAmountDisabled, + isAmountError, + isConnected, + balance = 0n, + isBalanceLoading, + disableMaxClick, + token, + onTokenClick, + tokenPriceUsd = 0, + isPriceLoading, + inputProps, + ...rest + }, + ref, + ) => { + const intl = useIntl(); + + const handleMaxClick = () => { + if (onAmountChange) { + onAmountChange(balance); + } + }; + + const bal = +formatUnits(balance, decimals); + const amountUsd = +formatUnits(amount, decimals) * tokenPriceUsd; + + return ( + + + + {isPriceLoading ? ( + + ) : tokenPriceUsd > 0 ? ( + + {intl.formatNumber(amountUsd, { + style: 'currency', + currency: 'usd', + maximumFractionDigits: 4, + })} + + ) : null} + + + {isConnected && ( + + {isBalanceLoading ? ( + + ) : ( + <> + + {intl.formatNumber(bal, { maximumFractionDigits: 4 })}  + {token.symbol} + + {!disableMaxClick && ( + + )} + + )} + + )} + + + + ); + }, +); + +TokenInput.displayName = 'TokenInput'; + +type TokenButtonProps = { token: Token; isDisabled?: boolean } & StackProps; + +function TokenButton({ token, isDisabled, ...rest }: TokenButtonProps) { + return ( + alpha(theme.palette.common.white, 0.1), + fontStyle: 'normal', + cursor: 'pointer', + fontWeight: 500, + gap: 1, + ':hover': { + background: (theme) => + `linear-gradient(#3B3C3E, #3B3C3E) padding-box, linear-gradient(90deg, ${alpha( + theme.palette.primary.main, + 0.4, + )} 0%, ${alpha(theme.palette.primary.dark, 0.4)} 100%) border-box;`, + }, + ...rest?.sx, + }} + {...rest} + > + + + {token.symbol} + + {!isDisabled && } + + ); +} diff --git a/libs/shared/components/src/Inputs/index.ts b/libs/shared/components/src/Inputs/index.ts new file mode 100644 index 000000000..c64c7dfc1 --- /dev/null +++ b/libs/shared/components/src/Inputs/index.ts @@ -0,0 +1,2 @@ +export * from './BigIntInput'; +export * from './TokenInput'; diff --git a/libs/shared/components/src/LinkIcon/LinkIcon.tsx b/libs/shared/components/src/LinkIcon/LinkIcon.tsx deleted file mode 100644 index ba3ff18df..000000000 --- a/libs/shared/components/src/LinkIcon/LinkIcon.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Box, Link } from '@mui/material'; - -interface Props { - url: string; - size?: string; -} - -export function LinkIcon({ url, size = '0.875rem' }: Props) { - return ( - - - - ); -} diff --git a/libs/shared/components/src/LinkIcon/index.tsx b/libs/shared/components/src/LinkIcon/index.tsx index 1718f57d5..ba3ff18df 100644 --- a/libs/shared/components/src/LinkIcon/index.tsx +++ b/libs/shared/components/src/LinkIcon/index.tsx @@ -1 +1,18 @@ -export * from './LinkIcon'; +import { Box, Link } from '@mui/material'; + +interface Props { + url: string; + size?: string; +} + +export function LinkIcon({ url, size = '0.875rem' }: Props) { + return ( + + + + ); +} diff --git a/libs/shared/components/src/Loader/index.tsx b/libs/shared/components/src/Loader/index.ts similarity index 100% rename from libs/shared/components/src/Loader/index.tsx rename to libs/shared/components/src/Loader/index.ts diff --git a/libs/shared/components/src/MiddleTruncated/index.tsx b/libs/shared/components/src/MiddleTruncated/index.tsx new file mode 100644 index 000000000..4a7429f16 --- /dev/null +++ b/libs/shared/components/src/MiddleTruncated/index.tsx @@ -0,0 +1,57 @@ +import { Box, Typography } from '@mui/material'; +import { isNilOrEmpty } from '@origin/shared/utils'; + +import type { SxProps, Theme, TypographyProps } from '@mui/material'; + +export type MiddleTruncatedProps = { + children: string; + textProps?: Omit; + end?: number; +} & TypographyProps; + +const truncate: SxProps = { + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', +}; + +export const MiddleTruncated = ({ + children, + textProps, + end = 4, + ...rest +}: MiddleTruncatedProps) => { + if (isNilOrEmpty(children)) return null; + + if (children.length <= end) { + return ( + + + {children} + + + ); + } + + const partStart = children.substring(0, children.length - end); + const partEnd = children.slice(children.length - end); + const breakspace = + children[children.length - end - 1] === ' ' && + children[children.length - end] !== ' '; + + return ( + + + {partStart} + + {breakspace &&  } + {partEnd} + + ); +}; diff --git a/libs/shared/components/src/Mix/index.tsx b/libs/shared/components/src/Mix/index.ts similarity index 100% rename from libs/shared/components/src/Mix/index.tsx rename to libs/shared/components/src/Mix/index.ts diff --git a/libs/shared/components/src/index.ts b/libs/shared/components/src/index.ts index 0c0f87547..4f3c27667 100644 --- a/libs/shared/components/src/index.ts +++ b/libs/shared/components/src/index.ts @@ -1,4 +1,8 @@ export * from './Cards'; -export * from './top-nav'; -export * from './LinkIcon'; export * from './DataTable'; +export * from './Inputs'; +export * from './LinkIcon'; +export * from './Loader'; +export * from './MiddleTruncated'; +export * from './Mix'; +export * from './top-nav'; diff --git a/libs/shared/components/src/top-nav/ConnectedButton.tsx b/libs/shared/components/src/top-nav/ConnectedButton.tsx index 322acf78a..a8d215e4d 100644 --- a/libs/shared/components/src/top-nav/ConnectedButton.tsx +++ b/libs/shared/components/src/top-nav/ConnectedButton.tsx @@ -12,9 +12,9 @@ import { } from '@mui/material'; import { useIntl } from 'react-intl'; -import { LinkIcon } from '../LinkIcon/LinkIcon'; +import { LinkIcon } from '../LinkIcon'; +import { MiddleTruncated } from '../MiddleTruncated'; import { Icon } from './Icon'; -import { UserId } from './UserId'; import { styles } from './utils'; import type { ButtonProps, SxProps, Theme } from '@mui/material'; @@ -36,6 +36,7 @@ export function ConnectedButton({ const theme = useTheme(); const intl = useIntl(); const [anchor, setAnchor] = useState(null); + return ( <> theme.spacing(3), }} /> - + {userId} - + {userId} @@ -151,17 +152,11 @@ export function ConnectedButton({ ); } -interface ConnectButtonProps extends ButtonProps { +export type ConnectButtonProps = { connected: boolean; -} +} & ButtonProps; -export function ConnectButton({ - onClick, - children, - connected, - sx, - ...rest -}: ConnectButtonProps) { +export function ConnectButton({ connected, ...rest }: ConnectButtonProps) { return ( + /> ); } diff --git a/libs/shared/components/src/top-nav/Transaction.tsx b/libs/shared/components/src/top-nav/Transaction.tsx index 2ec8ada3d..1a2a7d5ce 100644 --- a/libs/shared/components/src/top-nav/Transaction.tsx +++ b/libs/shared/components/src/top-nav/Transaction.tsx @@ -2,7 +2,7 @@ import { keyframes } from '@emotion/react'; import { Stack, Typography } from '@mui/material'; import { useIntl } from 'react-intl'; -import { LinkIcon } from '../LinkIcon/LinkIcon'; +import { LinkIcon } from '../LinkIcon'; import { Icon } from './Icon'; import { messages } from './utils'; diff --git a/libs/shared/components/src/top-nav/index.ts b/libs/shared/components/src/top-nav/index.ts new file mode 100644 index 000000000..57a9a76c3 --- /dev/null +++ b/libs/shared/components/src/top-nav/index.ts @@ -0,0 +1,2 @@ +export * from './ConnectedButton'; +export * from './Icon'; diff --git a/libs/shared/components/src/top-nav/index.tsx b/libs/shared/components/src/top-nav/index.tsx deleted file mode 100644 index 0b5f66e91..000000000 --- a/libs/shared/components/src/top-nav/index.tsx +++ /dev/null @@ -1,2 +0,0 @@ -export * from './TopNav'; -export * from './Icon'; diff --git a/libs/shared/components/tsconfig.json b/libs/shared/components/tsconfig.json index d29cb83ed..3426c8242 100644 --- a/libs/shared/components/tsconfig.json +++ b/libs/shared/components/tsconfig.json @@ -4,7 +4,6 @@ "allowJs": false, "esModuleInterop": false, "allowSyntheticDefaultImports": true, - "strict": true, "types": ["vitest"] }, "files": [], diff --git a/libs/shared/contracts/.babelrc b/libs/shared/contracts/.babelrc new file mode 100644 index 000000000..1ea870ead --- /dev/null +++ b/libs/shared/contracts/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "@nx/react/babel", + { + "runtime": "automatic", + "useBuiltIns": "usage" + } + ] + ], + "plugins": [] +} diff --git a/libs/shared/contracts/.eslintrc.json b/libs/shared/contracts/.eslintrc.json new file mode 100644 index 000000000..a786f2cf3 --- /dev/null +++ b/libs/shared/contracts/.eslintrc.json @@ -0,0 +1,34 @@ +{ + "extends": [ + "plugin:@nx/react", + "../../../.eslintrc.json" + ], + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": {} + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "rules": {} + }, + { + "files": [ + "*.js", + "*.jsx" + ], + "rules": {} + } + ] +} diff --git a/libs/shared/contracts/README.md b/libs/shared/contracts/README.md new file mode 100644 index 000000000..474d2492c --- /dev/null +++ b/libs/shared/contracts/README.md @@ -0,0 +1,7 @@ +# shared-contracts + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test shared-contracts` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/shared/contracts/project.json b/libs/shared/contracts/project.json new file mode 100644 index 000000000..39cb67ed6 --- /dev/null +++ b/libs/shared/contracts/project.json @@ -0,0 +1,20 @@ +{ + "name": "shared-contracts", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/shared/contracts/src", + "projectType": "library", + "tags": [], + "targets": { + "lint": { + "executor": "@nx/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/shared/contracts/**/*.{ts,tsx,js,jsx}" + ] + } + } + } +} diff --git a/libs/shared/contracts/src/abis/ChainlinkAggregatorV3Interface.json b/libs/shared/contracts/src/abis/ChainlinkAggregatorV3Interface.json new file mode 100644 index 000000000..cd65e8125 --- /dev/null +++ b/libs/shared/contracts/src/abis/ChainlinkAggregatorV3Interface.json @@ -0,0 +1,350 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "AggregatorV3Interface", + "sourceName": "/", + "abi": [ + { + "inputs": [ + { "internalType": "address", "name": "_aggregator", "type": "address" }, + { + "internalType": "address", + "name": "_accessController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "int256", + "name": "current", + "type": "int256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "roundId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "updatedAt", + "type": "uint256" + } + ], + "name": "AnswerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "roundId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "startedBy", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startedAt", + "type": "uint256" + } + ], + "name": "NewRound", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "OwnershipTransferRequested", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "accessController", + "outputs": [ + { + "internalType": "contract AccessControllerInterface", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "aggregator", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_aggregator", "type": "address" } + ], + "name": "confirmAggregator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "description", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_roundId", "type": "uint256" } + ], + "name": "getAnswer", + "outputs": [{ "internalType": "int256", "name": "", "type": "int256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint80", "name": "_roundId", "type": "uint80" } + ], + "name": "getRoundData", + "outputs": [ + { "internalType": "uint80", "name": "roundId", "type": "uint80" }, + { "internalType": "int256", "name": "answer", "type": "int256" }, + { "internalType": "uint256", "name": "startedAt", "type": "uint256" }, + { "internalType": "uint256", "name": "updatedAt", "type": "uint256" }, + { + "internalType": "uint80", + "name": "answeredInRound", + "type": "uint80" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_roundId", "type": "uint256" } + ], + "name": "getTimestamp", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestAnswer", + "outputs": [{ "internalType": "int256", "name": "", "type": "int256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestRound", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestRoundData", + "outputs": [ + { "internalType": "uint80", "name": "roundId", "type": "uint80" }, + { "internalType": "int256", "name": "answer", "type": "int256" }, + { "internalType": "uint256", "name": "startedAt", "type": "uint256" }, + { "internalType": "uint256", "name": "updatedAt", "type": "uint256" }, + { + "internalType": "uint80", + "name": "answeredInRound", + "type": "uint80" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestTimestamp", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { "internalType": "address payable", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint16", "name": "", "type": "uint16" }], + "name": "phaseAggregators", + "outputs": [ + { + "internalType": "contract AggregatorV2V3Interface", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "phaseId", + "outputs": [{ "internalType": "uint16", "name": "", "type": "uint16" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_aggregator", "type": "address" } + ], + "name": "proposeAggregator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposedAggregator", + "outputs": [ + { + "internalType": "contract AggregatorV2V3Interface", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint80", "name": "_roundId", "type": "uint80" } + ], + "name": "proposedGetRoundData", + "outputs": [ + { "internalType": "uint80", "name": "roundId", "type": "uint80" }, + { "internalType": "int256", "name": "answer", "type": "int256" }, + { "internalType": "uint256", "name": "startedAt", "type": "uint256" }, + { "internalType": "uint256", "name": "updatedAt", "type": "uint256" }, + { + "internalType": "uint80", + "name": "answeredInRound", + "type": "uint80" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedLatestRoundData", + "outputs": [ + { "internalType": "uint80", "name": "roundId", "type": "uint80" }, + { "internalType": "int256", "name": "answer", "type": "int256" }, + { "internalType": "uint256", "name": "startedAt", "type": "uint256" }, + { "internalType": "uint256", "name": "updatedAt", "type": "uint256" }, + { + "internalType": "uint80", + "name": "answeredInRound", + "type": "uint80" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_accessController", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_to", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + } + ], + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/libs/shared/contracts/src/abis/CompensationClaims.json b/libs/shared/contracts/src/abis/CompensationClaims.json new file mode 100644 index 000000000..ec7f6a657 --- /dev/null +++ b/libs/shared/contracts/src/abis/CompensationClaims.json @@ -0,0 +1,234 @@ +[ + { + "constant": true, + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "tokEthPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "tokUsdPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "claimGovernance", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ethUsdPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferGovernance", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "feed", + "type": "address" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "bool", + "name": "directToUsd", + "type": "bool" + } + ], + "name": "registerFeed", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ethFeed_", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_feed", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "indexed": false, + "internalType": "bool", + "name": "_directToUsd", + "type": "bool" + } + ], + "name": "FeedRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "PendingGovernorshipTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "GovernorshipTransferred", + "type": "event" + } +] diff --git a/libs/shared/contracts/src/abis/CurveAddressProvider.json b/libs/shared/contracts/src/abis/CurveAddressProvider.json new file mode 100644 index 000000000..7f12fb7bf --- /dev/null +++ b/libs/shared/contracts/src/abis/CurveAddressProvider.json @@ -0,0 +1,303 @@ +{ + "_format": "", + "contractName": "CurveAddressProvider", + "sourceName": "/", + "abi": [ + { + "name": "NewAddressIdentifier", + "inputs": [ + { + "type": "uint256", + "name": "id", + "indexed": true + }, + { + "type": "address", + "name": "addr", + "indexed": false + }, + { + "type": "string", + "name": "description", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "AddressModified", + "inputs": [ + { + "type": "uint256", + "name": "id", + "indexed": true + }, + { + "type": "address", + "name": "new_address", + "indexed": false + }, + { + "type": "uint256", + "name": "version", + "indexed": false + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "CommitNewAdmin", + "inputs": [ + { + "type": "uint256", + "name": "deadline", + "indexed": true + }, + { + "type": "address", + "name": "admin", + "indexed": true + } + ], + "anonymous": false, + "type": "event" + }, + { + "name": "NewAdmin", + "inputs": [ + { + "type": "address", + "name": "admin", + "indexed": true + } + ], + "anonymous": false, + "type": "event" + }, + { + "outputs": [], + "inputs": [ + { + "type": "address", + "name": "_admin" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "name": "get_registry", + "outputs": [ + { + "type": "address", + "name": "" + } + ], + "inputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "name": "max_id", + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "inputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "name": "get_address", + "outputs": [ + { + "type": "address", + "name": "" + } + ], + "inputs": [ + { + "type": "uint256", + "name": "_id" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "name": "add_new_id", + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "inputs": [ + { + "type": "address", + "name": "_address" + }, + { + "type": "string", + "name": "_description" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "name": "set_address", + "outputs": [ + { + "type": "bool", + "name": "" + } + ], + "inputs": [ + { + "type": "uint256", + "name": "_id" + }, + { + "type": "address", + "name": "_address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "name": "unset_address", + "outputs": [ + { + "type": "bool", + "name": "" + } + ], + "inputs": [ + { + "type": "uint256", + "name": "_id" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "name": "commit_transfer_ownership", + "outputs": [ + { + "type": "bool", + "name": "" + } + ], + "inputs": [ + { + "type": "address", + "name": "_new_admin" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "name": "apply_transfer_ownership", + "outputs": [ + { + "type": "bool", + "name": "" + } + ], + "inputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "name": "revert_transfer_ownership", + "outputs": [ + { + "type": "bool", + "name": "" + } + ], + "inputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "name": "admin", + "outputs": [ + { + "type": "address", + "name": "" + } + ], + "inputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "name": "transfer_ownership_deadline", + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "inputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "name": "future_admin", + "outputs": [ + { + "type": "address", + "name": "" + } + ], + "inputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "name": "get_id_info", + "outputs": [ + { + "type": "address", + "name": "addr" + }, + { + "type": "bool", + "name": "is_active" + }, + { + "type": "uint256", + "name": "version" + }, + { + "type": "uint256", + "name": "last_modified" + }, + { + "type": "string", + "name": "description" + } + ], + "inputs": [ + { + "type": "uint256", + "name": "arg0" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/libs/shared/contracts/src/abis/OETHProxy.json b/libs/shared/contracts/src/abis/OETHProxy.json new file mode 100644 index 000000000..e28529545 --- /dev/null +++ b/libs/shared/contracts/src/abis/OETHProxy.json @@ -0,0 +1,183 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "GovernorshipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "PendingGovernorshipTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "claimGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "_initGovernor", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] diff --git a/libs/shared/contracts/src/abis/OETHZapper.json b/libs/shared/contracts/src/abis/OETHZapper.json new file mode 100644 index 000000000..0dc4b0fdb --- /dev/null +++ b/libs/shared/contracts/src/abis/OETHZapper.json @@ -0,0 +1,158 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "OETHZapper", + "sourceName": "contracts/vault/OETHZapper.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_oeth", + "type": "address" + }, + { + "internalType": "address", + "name": "_vault", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Zap", + "type": "event" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minOETH", + "type": "uint256" + } + ], + "name": "depositSFRXETH", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "frxeth", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "oeth", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sfrxeth", + "outputs": [ + { + "internalType": "contract ISfrxETH", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "weth", + "outputs": [ + { + "internalType": "contract IWETH9", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x60c060405234801561001057600080fd5b5060405161091038038061091083398101604081905261002f91610198565b6001600160601b0319606083811b821660805282901b1660a05260405163095ea7b360e01b81526001600160a01b0382166004820152600019602482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29063095ea7b390604401602060405180830381600087803b1580156100a657600080fd5b505af11580156100ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100de91906101cb565b5060405163095ea7b360e01b81526001600160a01b03821660048201526000196024820152735e8422345238f34275888049021821e8e08caa1f9063095ea7b390604401602060405180830381600087803b15801561013c57600080fd5b505af1158015610150573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017491906101cb565b5050506101f4565b80516001600160a01b038116811461019357600080fd5b919050565b600080604083850312156101ab57600080fd5b6101b48361017c565b91506101c26020840161017c565b90509250929050565b6000602082840312156101dd57600080fd5b815180151581146101ed57600080fd5b9392505050565b60805160601c60a05160601c6106dc6102346000396000818161019a015261044a015260008181610130015281816104bf01526105b401526106dc6000f3fe6080604052600436106100745760003560e01c8063ccfe2a691161004e578063ccfe2a691461011e578063d0e30db014610152578063d443e97d14610168578063fbfa77cf1461018857600080fd5b80633fc8cef3146100895780636f708a9d146100ce578063a07311af146100f657600080fd5b36610084576100816101bc565b50005b600080fd5b34801561009557600080fd5b506100b173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100da57600080fd5b506100b1735e8422345238f34275888049021821e8e08caa1f81565b34801561010257600080fd5b506100b173ac3e018457b222d93114458476f3e3416abbe38f81565b34801561012a57600080fd5b506100b17f000000000000000000000000000000000000000000000000000000000000000081565b61015a6101bc565b6040519081526020016100c5565b34801561017457600080fd5b5061015a610183366004610684565b610299565b34801561019457600080fd5b506100b17f000000000000000000000000000000000000000000000000000000000000000081565b60008047905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561021157600080fd5b505af1158015610225573d6000803e3d6000fd5b505060405184815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee93503392507f9d0b99c299bdb5656c0c9db6e1886c612db5c2881760ea54ab244f6338b4ebd6915060200160405180910390a361029373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28261039e565b91505090565b604051635d043b2960e11b81526004810183905230602482015233604482015260009073ac3e018457b222d93114458476f3e3416abbe38f9063ba08765290606401602060405180830381600087803b1580156102f557600080fd5b505af1158015610309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032d919061066b565b5060405183815273ac3e018457b222d93114458476f3e3416abbe38f9033907f9d0b99c299bdb5656c0c9db6e1886c612db5c2881760ea54ab244f6338b4ebd69060200160405180910390a3610397735e8422345238f34275888049021821e8e08caa1f8361039e565b9392505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a082319060240160206040518083038186803b1580156103e257600080fd5b505afa1580156103f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041a919061066b565b604051630ab714fb60e11b81526001600160a01b03868116600483015260248201839052604482018690529192507f00000000000000000000000000000000000000000000000000000000000000009091169063156e29f690606401600060405180830381600087803b15801561049057600080fd5b505af11580156104a4573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a082319060240160206040518083038186803b15801561050a57600080fd5b505afa15801561051e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610542919061066b565b9050838110156105985760405162461bcd60e51b815260206004820152601960248201527f5a61707065723a206e6f7420656e6f756768206d696e74656400000000000000604482015260640160405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561060057600080fd5b505af1158015610614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106389190610649565b61064157600080fd5b949350505050565b60006020828403121561065b57600080fd5b8151801515811461039757600080fd5b60006020828403121561067d57600080fd5b5051919050565b6000806040838503121561069757600080fd5b5050803592602090910135915056fea2646970667358221220f5f670173d99f62fa4b62b0fa3f719c63e881f37d20d2de7ee51ff7674dfa72664736f6c63430008070033", + "deployedBytecode": "0x6080604052600436106100745760003560e01c8063ccfe2a691161004e578063ccfe2a691461011e578063d0e30db014610152578063d443e97d14610168578063fbfa77cf1461018857600080fd5b80633fc8cef3146100895780636f708a9d146100ce578063a07311af146100f657600080fd5b36610084576100816101bc565b50005b600080fd5b34801561009557600080fd5b506100b173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100da57600080fd5b506100b1735e8422345238f34275888049021821e8e08caa1f81565b34801561010257600080fd5b506100b173ac3e018457b222d93114458476f3e3416abbe38f81565b34801561012a57600080fd5b506100b17f000000000000000000000000000000000000000000000000000000000000000081565b61015a6101bc565b6040519081526020016100c5565b34801561017457600080fd5b5061015a610183366004610684565b610299565b34801561019457600080fd5b506100b17f000000000000000000000000000000000000000000000000000000000000000081565b60008047905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561021157600080fd5b505af1158015610225573d6000803e3d6000fd5b505060405184815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee93503392507f9d0b99c299bdb5656c0c9db6e1886c612db5c2881760ea54ab244f6338b4ebd6915060200160405180910390a361029373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28261039e565b91505090565b604051635d043b2960e11b81526004810183905230602482015233604482015260009073ac3e018457b222d93114458476f3e3416abbe38f9063ba08765290606401602060405180830381600087803b1580156102f557600080fd5b505af1158015610309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032d919061066b565b5060405183815273ac3e018457b222d93114458476f3e3416abbe38f9033907f9d0b99c299bdb5656c0c9db6e1886c612db5c2881760ea54ab244f6338b4ebd69060200160405180910390a3610397735e8422345238f34275888049021821e8e08caa1f8361039e565b9392505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a082319060240160206040518083038186803b1580156103e257600080fd5b505afa1580156103f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041a919061066b565b604051630ab714fb60e11b81526001600160a01b03868116600483015260248201839052604482018690529192507f00000000000000000000000000000000000000000000000000000000000000009091169063156e29f690606401600060405180830381600087803b15801561049057600080fd5b505af11580156104a4573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a082319060240160206040518083038186803b15801561050a57600080fd5b505afa15801561051e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610542919061066b565b9050838110156105985760405162461bcd60e51b815260206004820152601960248201527f5a61707065723a206e6f7420656e6f756768206d696e74656400000000000000604482015260640160405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561060057600080fd5b505af1158015610614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106389190610649565b61064157600080fd5b949350505050565b60006020828403121561065b57600080fd5b8151801515811461039757600080fd5b60006020828403121561067d57600080fd5b5051919050565b6000806040838503121561069757600080fd5b5050803592602090910135915056fea2646970667358221220f5f670173d99f62fa4b62b0fa3f719c63e881f37d20d2de7ee51ff7674dfa72664736f6c63430008070033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/libs/shared/contracts/src/abis/OGNStakingProxy.json b/libs/shared/contracts/src/abis/OGNStakingProxy.json new file mode 100644 index 000000000..fc2fa5f61 --- /dev/null +++ b/libs/shared/contracts/src/abis/OGNStakingProxy.json @@ -0,0 +1,202 @@ +[ + { + "constant": true, + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "claimGovernance", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "_initGovernor", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferGovernance", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "PendingGovernorshipTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "GovernorshipTransferred", + "type": "event" + } +] diff --git a/libs/shared/contracts/src/abis/OUSDProxy.json b/libs/shared/contracts/src/abis/OUSDProxy.json new file mode 100644 index 000000000..fc2fa5f61 --- /dev/null +++ b/libs/shared/contracts/src/abis/OUSDProxy.json @@ -0,0 +1,202 @@ +[ + { + "constant": true, + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "claimGovernance", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "_initGovernor", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferGovernance", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "PendingGovernorshipTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "GovernorshipTransferred", + "type": "event" + } +] diff --git a/libs/shared/contracts/src/abis/OracleRouter.json b/libs/shared/contracts/src/abis/OracleRouter.json new file mode 100644 index 000000000..97c38a158 --- /dev/null +++ b/libs/shared/contracts/src/abis/OracleRouter.json @@ -0,0 +1,40 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_asset", + "type": "address" + } + ], + "name": "cacheDecimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/libs/shared/contracts/src/abis/Swapper1InchV5.json b/libs/shared/contracts/src/abis/Swapper1InchV5.json new file mode 100644 index 000000000..00c69fbf5 --- /dev/null +++ b/libs/shared/contracts/src/abis/Swapper1InchV5.json @@ -0,0 +1,67 @@ +[ + { + "inputs": [], + "name": "SWAP_ROUTER", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_assets", + "type": "address[]" + } + ], + "name": "approveAssets", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_fromAsset", + "type": "address" + }, + { + "internalType": "address", + "name": "_toAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_fromAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_minToAssetAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "toAssetAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/libs/shared/contracts/src/abis/UniswapV2Router.json b/libs/shared/contracts/src/abis/UniswapV2Router.json new file mode 100644 index 000000000..579aa86be --- /dev/null +++ b/libs/shared/contracts/src/abis/UniswapV2Router.json @@ -0,0 +1,980 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "UniswapRouterV2", + "sourceName": "", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_factory", + "type": "address" + }, + { + "internalType": "address", + "name": "_WETH", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "WETH", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountADesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBDesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountTokenDesired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidityETH", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveOut", + "type": "uint256" + } + ], + "name": "getAmountIn", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveOut", + "type": "uint256" + } + ], + "name": "getAmountOut", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + } + ], + "name": "getAmountsIn", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + } + ], + "name": "getAmountsOut", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveB", + "type": "uint256" + } + ], + "name": "quote", + "outputs": [ + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidityETH", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidityETHSupportingFeeOnTransferTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityETHWithPermit", + "outputs": [ + { + "internalType": "uint256", + "name": "amountToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountTokenMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountETHMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountETH", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountAMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountBMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approveMax", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "removeLiquidityWithPermit", + "outputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapETHForExactTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactETHForTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactETHForTokensSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForETH", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForETHSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapTokensForExactETH", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapTokensForExactTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/libs/shared/contracts/src/abis/UniswapV3Quoter.json b/libs/shared/contracts/src/abis/UniswapV3Quoter.json new file mode 100644 index 000000000..b76ee1b4a --- /dev/null +++ b/libs/shared/contracts/src/abis/UniswapV3Quoter.json @@ -0,0 +1,200 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Quoter", + "sourceName": "contracts/lens/Quoter.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_factory", + "type": "address" + }, + { + "internalType": "address", + "name": "_WETH9", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "WETH9", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "name": "quoteExactInput", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + } + ], + "name": "quoteExactInputSingle", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "name": "quoteExactOutput", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + } + ], + "name": "quoteExactOutputSingle", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount0Delta", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1Delta", + "type": "int256" + }, + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + } + ], + "name": "uniswapV3SwapCallback", + "outputs": [], + "stateMutability": "view", + "type": "function" + } + ], + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/libs/shared/contracts/src/abis/UniswapV3SwapRouter.json b/libs/shared/contracts/src/abis/UniswapV3SwapRouter.json new file mode 100644 index 000000000..798b6cbc2 --- /dev/null +++ b/libs/shared/contracts/src/abis/UniswapV3SwapRouter.json @@ -0,0 +1,572 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SwapRouter", + "sourceName": "contracts/SwapRouter.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_factory", + "type": "address" + }, + { + "internalType": "address", + "name": "_WETH9", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "WETH9", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMinimum", + "type": "uint256" + } + ], + "internalType": "struct ISwapRouter.ExactInputParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactInput", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMinimum", + "type": "uint256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + } + ], + "internalType": "struct ISwapRouter.ExactInputSingleParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactInputSingle", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMaximum", + "type": "uint256" + } + ], + "internalType": "struct ISwapRouter.ExactOutputParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactOutput", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMaximum", + "type": "uint256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + } + ], + "internalType": "struct ISwapRouter.ExactOutputSingleParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactOutputSingle", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "refundETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowed", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowedIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "sweepToken", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "feeBips", + "type": "uint256" + }, + { + "internalType": "address", + "name": "feeRecipient", + "type": "address" + } + ], + "name": "sweepTokenWithFee", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount0Delta", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1Delta", + "type": "int256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "uniswapV3SwapCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "unwrapWETH9", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "feeBips", + "type": "uint256" + }, + { + "internalType": "address", + "name": "feeRecipient", + "type": "address" + } + ], + "name": "unwrapWETH9WithFee", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/libs/shared/contracts/src/abis/VaultProxy.json b/libs/shared/contracts/src/abis/VaultProxy.json new file mode 100644 index 000000000..fc2fa5f61 --- /dev/null +++ b/libs/shared/contracts/src/abis/VaultProxy.json @@ -0,0 +1,202 @@ +[ + { + "constant": true, + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "claimGovernance", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "_initGovernor", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferGovernance", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "PendingGovernorshipTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "GovernorshipTransferred", + "type": "event" + } +] diff --git a/libs/shared/contracts/src/abis/WOETHProxy.json b/libs/shared/contracts/src/abis/WOETHProxy.json new file mode 100644 index 000000000..e28529545 --- /dev/null +++ b/libs/shared/contracts/src/abis/WOETHProxy.json @@ -0,0 +1,183 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "GovernorshipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "PendingGovernorshipTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "claimGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "_initGovernor", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] diff --git a/libs/shared/contracts/src/abis/WOUSDProxy.json b/libs/shared/contracts/src/abis/WOUSDProxy.json new file mode 100644 index 000000000..e28529545 --- /dev/null +++ b/libs/shared/contracts/src/abis/WOUSDProxy.json @@ -0,0 +1,183 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "GovernorshipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousGovernor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "PendingGovernorshipTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "claimGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "governor", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "_initGovernor", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newGovernor", + "type": "address" + } + ], + "name": "transferGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] diff --git a/libs/shared/contracts/src/contracts.ts b/libs/shared/contracts/src/contracts.ts new file mode 100644 index 000000000..c03b2f0aa --- /dev/null +++ b/libs/shared/contracts/src/contracts.ts @@ -0,0 +1,96 @@ +import { mainnet } from 'wagmi/chains'; + +import ChainlinkAggregatorV3Interface from './abis/ChainlinkAggregatorV3Interface.json'; +import CompensationClaims from './abis/CompensationClaims.json'; +import CurveAddressProvider from './abis/CurveAddressProvider.json'; +import OETHZapper from './abis/OETHZapper.json'; +import OGNStakingProxy from './abis/OGNStakingProxy.json'; +import OracleRouter from './abis/OracleRouter.json'; +import Swapper1InchV5 from './abis/Swapper1InchV5.json'; +import UniswapV2Router from './abis/UniswapV2Router.json'; +import UniswapV3Quoter from './abis/UniswapV3Quoter.json'; +import UniswapV3SwapRouter from './abis/UniswapV3SwapRouter.json'; +import VaultProxy from './abis/VaultProxy.json'; + +export const contracts = { + mainnet: { + vault: { + address: '0x39254033945AA2E4809Cc2977E7087BEE48bd7Ab', + chainId: mainnet.id, + abi: VaultProxy, + name: 'vault', + }, + uniV3SwapRouter: { + address: '0xe592427a0aece92de3edee1f18e0157c05861564', + chainId: mainnet.id, + abi: UniswapV3SwapRouter, + name: 'uniV3SwapRouter', + }, + uniV3SwapQuoter: { + address: '0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', + chainId: mainnet.id, + abi: UniswapV3Quoter, + name: 'uniV3SwapQuoter', + }, + uniV2Router: { + address: '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D', + chainId: mainnet.id, + abi: UniswapV2Router, + name: 'uniV2Router', + }, + sushiRouter: { + address: '0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F', + chainId: mainnet.id, + abi: UniswapV2Router, + name: 'sushiRouter', + }, + ognStaking: { + address: '0x501804B374EF06fa9C427476147ac09F1551B9A0', + chainId: mainnet.id, + abi: OGNStakingProxy, + name: 'ognStaking', + }, + compensation: { + address: '0x9C94df9d594BA1eb94430C006c269C314B1A8281', + chainId: mainnet.id, + abi: CompensationClaims, + name: 'compensation', + }, + chainlinkEthAggregator: { + address: '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419', + chainId: mainnet.id, + abi: ChainlinkAggregatorV3Interface, + name: 'chainlinkEthAggregator', + }, + chainlinkFastGasAggregator: { + address: '0x169E633A2D1E6c10dD91238Ba11c4A708dfEF37C', + chainId: mainnet.id, + abi: ChainlinkAggregatorV3Interface, + name: 'chainlinkFastGasAggregator', + }, + curveAddressProvider: { + address: '0x0000000022d53366457f9d5e68ec105046fc4383', + chainId: mainnet.id, + abi: CurveAddressProvider, + name: 'curveAddressProvider', + }, + zapper: { + address: '0x9858e47BCbBe6fBAC040519B02d7cd4B2C470C66', + chainId: mainnet.id, + abi: OETHZapper, + name: 'zapper', + }, + oracleRouter: { + address: '0x3cCD26E82F7305B12742fBb36708B42f82B61dBa', + chainId: mainnet.id, + abi: OracleRouter, + name: 'oracleRouter', + }, + swapper1InchV5: { + address: '0xcD0fcF8a31Bc78ec07752e9CCD3960E936D18366', + chainId: mainnet.id, + abi: Swapper1InchV5, + name: 'oracleRouter', + }, + }, +} as const; diff --git a/libs/shared/contracts/src/index.ts b/libs/shared/contracts/src/index.ts new file mode 100644 index 000000000..74e085082 --- /dev/null +++ b/libs/shared/contracts/src/index.ts @@ -0,0 +1,3 @@ +export * from './contracts'; +export * from './tokens'; +export * from './types'; diff --git a/libs/shared/contracts/src/tokens.ts b/libs/shared/contracts/src/tokens.ts new file mode 100644 index 000000000..8cf962f5c --- /dev/null +++ b/libs/shared/contracts/src/tokens.ts @@ -0,0 +1,170 @@ +import { erc20ABI } from 'wagmi'; +import { mainnet } from 'wagmi/chains'; + +import OETH from './abis/OETHProxy.json'; +import OUSD from './abis/OUSDProxy.json'; +import WOETH from './abis/WOETHProxy.json'; +import WOUSD from './abis/WOUSDProxy.json'; + +export const tokens = { + mainnet: { + ETH: { + address: undefined, + chainId: mainnet.id, + abi: erc20ABI, + name: 'ETH', + icon: '/images/tokens/ETH.svg', + decimals: 18, + symbol: 'ETH', + }, + WETH: { + address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + chainId: mainnet.id, + abi: erc20ABI, + name: 'Wrapped Ether', + icon: '/images/tokens/WETH.svg', + decimals: 18, + symbol: 'WETH', + }, + // Native stablecoins + DAI: { + address: '0x6b175474e89094c44da98b954eedeac495271d0f', + chainId: mainnet.id, + abi: erc20ABI, + name: 'Dai Stablecoin', + icon: '/images/tokens/DAI.svg', + decimals: 18, + symbol: 'DAI', + }, + USDC: { + address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + chainId: mainnet.id, + abi: erc20ABI, + name: 'USD Coin', + icon: '/images/tokens/USDC.svg', + decimals: 6, + symbol: 'USDC', + }, + USDT: { + address: '0xdAC17F958D2ee523a2206206994597C13D831ec7', + chainId: mainnet.id, + abi: erc20ABI, + name: 'Tether USD', + icon: '/images/tokens/USDT.svg', + decimals: 6, + symbol: 'USDT', + }, + TUSD: { + address: '0x0000000000085d4780B73119b644AE5ecd22b376', + chainId: mainnet.id, + abi: erc20ABI, + name: 'TrueUSD', + icon: '/images/tokens/TUSD.svg', + decimals: 18, + symbol: 'TUSD', + }, + // Origin + OETH: { + address: '0x856c4Efb76C1D1AE02e20CEB03A2A6a08b0b8dC3', + chainId: mainnet.id, + abi: OETH, + name: 'Origin Ether', + icon: '/images/tokens/OETH.svg', + decimals: 18, + symbol: 'OETH', + }, + WOETH: { + address: '0xDcEe70654261AF21C44c093C300eD3Bb97b78192', + chainId: mainnet.id, + abi: WOETH, + name: 'Wrapped Origin Ether', + icon: '/images/tokens/WOETH.svg', + decimals: 18, + symbol: 'WOETH', + }, + OUSD: { + address: '0x2A8e1E676Ec238d8A992307B495b45B3fEAa5e86', + chainId: mainnet.id, + abi: OUSD, + name: 'Origin Dollar', + icon: '/images/tokens/OUSD.svg', + decimals: 18, + symbol: 'OUSD', + }, + WOUSD: { + address: '0xD2af830E8CBdFed6CC11Bab697bB25496ed6FA62', + chainId: mainnet.id, + abi: WOUSD, + name: 'WrappedOrigin Dollar', + icon: '/images/tokens/WOUSD.svg', + decimals: 18, + symbol: 'WOUSD', + }, + OGN: { + address: '0x8207c1FfC5B6804F6024322CcF34F29c3541Ae26', + chainId: mainnet.id, + abi: erc20ABI, + name: 'Origin Token', + icon: '/images/tokens/OGN.svg', + decimals: 18, + symbol: 'OGN', + }, + OGV: { + address: '0x9c354503C38481a7A7a51629142963F98eCC12D0', + chainId: mainnet.id, + abi: erc20ABI, + name: 'Origin Dollar Governance', + icon: '/images/tokens/OGV.svg', + decimals: 18, + symbol: 'OGV', + }, + veOGV: { + address: '0x0C4576Ca1c365868E162554AF8e385dc3e7C66D9', + chainId: mainnet.id, + abi: erc20ABI, + name: 'Staked Origin Dollar Governance', + icon: '/images/tokens/OGV.svg', + decimals: 18, + symbol: 'veOGV', + }, + // 1-inch LP + stETH: { + address: '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', + chainId: mainnet.id, + abi: erc20ABI, + name: 'Liquid Staked Ether 2.0', + icon: '/images/tokens/stETH.svg', + decimals: 18, + symbol: 'stETH', + }, + // rocket pool + rETH: { + address: '0xae78736Cd615f374D3085123A210448E74Fc6393', + chainId: mainnet.id, + abi: erc20ABI, + name: 'Rocket Pool ETH', + icon: '/images/tokens/rETH.svg', + decimals: 18, + symbol: 'rETH', + }, + // Frax + frxETH: { + address: '0x5e8422345238f34275888049021821e8e08caa1f', + chainId: mainnet.id, + abi: erc20ABI, + name: 'Frax Ether', + icon: '/images/tokens/frxETH.svg', + decimals: 18, + symbol: 'frxETH', + }, + sfrxETH: { + address: '0xac3E018457B222d93114458476f3E3416Abbe38F', + chainId: mainnet.id, + abi: erc20ABI, + name: 'Staked Frax Ether', + icon: ' /images/tokens/sfrxETH.svg', + decimals: 18, + symbol: 'sfrxETH', + }, + }, +} as const; diff --git a/libs/shared/contracts/src/types.ts b/libs/shared/contracts/src/types.ts new file mode 100644 index 000000000..77949a852 --- /dev/null +++ b/libs/shared/contracts/src/types.ts @@ -0,0 +1,12 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { HexAddress } from '@origin/shared/utils'; + +export type Contract = { + address: undefined | HexAddress; + chainId: number; + abi: any; + name?: string; + icon?: string; +}; + +export type Token = { symbol: string; decimals: number } & Contract; diff --git a/libs/shared/contracts/tsconfig.json b/libs/shared/contracts/tsconfig.json new file mode 100644 index 000000000..5157d5b9a --- /dev/null +++ b/libs/shared/contracts/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "jsx": "react-jsx", + "allowJs": false, + "resolveJsonModule": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ], + "extends": "../../../tsconfig.base.json" +} diff --git a/libs/shared/contracts/tsconfig.lib.json b/libs/shared/contracts/tsconfig.lib.json new file mode 100644 index 000000000..c96232320 --- /dev/null +++ b/libs/shared/contracts/tsconfig.lib.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": ["node"] + }, + "files": [ + "../../../node_modules/@nx/react/typings/cssmodule.d.ts", + "../../../node_modules/@nx/react/typings/image.d.ts" + ], + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts", "src/**/*.spec.tsx", "src/**/*.test.tsx", "src/**/*.spec.js", "src/**/*.test.js", "src/**/*.spec.jsx", "src/**/*.test.jsx"], + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] +} diff --git a/libs/shared/data-access/src/client.ts b/libs/shared/data-access/src/client.ts index c31c09836..b29dac653 100644 --- a/libs/shared/data-access/src/client.ts +++ b/libs/shared/data-access/src/client.ts @@ -2,4 +2,4 @@ import { QueryClient } from '@tanstack/react-query'; export const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 1000 * 60 * 20 } }, -}); \ No newline at end of file +}); diff --git a/libs/shared/providers/.babelrc b/libs/shared/providers/.babelrc new file mode 100644 index 000000000..1ea870ead --- /dev/null +++ b/libs/shared/providers/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "@nx/react/babel", + { + "runtime": "automatic", + "useBuiltIns": "usage" + } + ] + ], + "plugins": [] +} diff --git a/libs/shared/providers/.eslintrc.json b/libs/shared/providers/.eslintrc.json new file mode 100644 index 000000000..a786f2cf3 --- /dev/null +++ b/libs/shared/providers/.eslintrc.json @@ -0,0 +1,34 @@ +{ + "extends": [ + "plugin:@nx/react", + "../../../.eslintrc.json" + ], + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": {} + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "rules": {} + }, + { + "files": [ + "*.js", + "*.jsx" + ], + "rules": {} + } + ] +} diff --git a/libs/shared/providers/README.md b/libs/shared/providers/README.md new file mode 100644 index 000000000..41bd7cbc3 --- /dev/null +++ b/libs/shared/providers/README.md @@ -0,0 +1,7 @@ +# shared-providers + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test shared-providers` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/shared/providers/project.json b/libs/shared/providers/project.json new file mode 100644 index 000000000..9b4551d2b --- /dev/null +++ b/libs/shared/providers/project.json @@ -0,0 +1,20 @@ +{ + "name": "shared-providers", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/shared/providers/src", + "projectType": "library", + "tags": [], + "targets": { + "lint": { + "executor": "@nx/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/shared/providers/**/*.{ts,tsx,js,jsx}" + ] + } + } + } +} diff --git a/libs/shared/providers/src/index.ts b/libs/shared/providers/src/index.ts new file mode 100644 index 000000000..14734c906 --- /dev/null +++ b/libs/shared/providers/src/index.ts @@ -0,0 +1,2 @@ +export * from './prices'; +export * from './wagmi'; diff --git a/libs/shared/providers/src/prices/constants.ts b/libs/shared/providers/src/prices/constants.ts new file mode 100644 index 000000000..8727d6fea --- /dev/null +++ b/libs/shared/providers/src/prices/constants.ts @@ -0,0 +1,18 @@ +import type { SupportedToken } from './types'; + +export const coingeckoApiEndpoint = 'https://api.coingecko.com/api/v3'; + +export const coingeckoTokenIds: Record = { + ETH: 'ethereum', + WETH: 'weth', + DAI: 'dai', + USDC: 'usd-coin', + USDT: 'tether', + TUSD: 'true-usd', + OETH: 'origin-ether', + OUSD: 'origin-dollar', + stETH: 'staked-ether', + rETH: 'rocket-pool-eth', + frxETH: 'frax-ether', + sfrxETH: 'staked-frax-ether', +}; diff --git a/libs/shared/providers/src/prices/hooks.ts b/libs/shared/providers/src/prices/hooks.ts new file mode 100644 index 000000000..77ed146a9 --- /dev/null +++ b/libs/shared/providers/src/prices/hooks.ts @@ -0,0 +1,44 @@ +import { isNilOrEmpty } from '@origin/shared/utils'; +import { useQuery } from '@tanstack/react-query'; +import axios from 'axios'; + +import { coingeckoApiEndpoint, coingeckoTokenIds } from './constants'; + +import type { UseQueryOptions } from '@tanstack/react-query'; + +import type { SupportedToken } from './types'; + +export const usePrices = ( + tokens?: SupportedToken[], + options?: UseQueryOptions< + Record, + Error, + Record, + ['usePrices', SupportedToken[]] + >, +) => { + return useQuery({ + queryKey: ['usePrices', tokens] as const, + queryFn: async ({ queryKey }) => { + let tokens = queryKey[1]; + if (isNilOrEmpty(tokens)) { + tokens = Object.keys(coingeckoTokenIds) as SupportedToken[]; + } + + const res = await axios.get( + `${coingeckoApiEndpoint}/simple/price?ids=${tokens + .map((t) => coingeckoTokenIds[t]) + .join('%2C')}&vs_currencies=usd`, + ); + + return tokens.reduce( + (acc, curr) => ({ + ...acc, + [curr]: res?.data?.[coingeckoTokenIds[curr]]?.usd ?? 0, + }), + {}, + ); + }, + ...options, + }); +}; diff --git a/libs/shared/providers/src/prices/index.ts b/libs/shared/providers/src/prices/index.ts new file mode 100644 index 000000000..4cc90d02b --- /dev/null +++ b/libs/shared/providers/src/prices/index.ts @@ -0,0 +1 @@ +export * from './hooks'; diff --git a/libs/shared/providers/src/prices/types.ts b/libs/shared/providers/src/prices/types.ts new file mode 100644 index 000000000..9b87b7eec --- /dev/null +++ b/libs/shared/providers/src/prices/types.ts @@ -0,0 +1,13 @@ +export type SupportedToken = + | 'ETH' + | 'WETH' + | 'DAI' + | 'USDC' + | 'USDT' + | 'TUSD' + | 'OETH' + | 'OUSD' + | 'stETH' + | 'rETH' + | 'frxETH' + | 'sfrxETH'; diff --git a/libs/shared/providers/src/wagmi/components/AddressLabel.tsx b/libs/shared/providers/src/wagmi/components/AddressLabel.tsx new file mode 100644 index 000000000..d5371a699 --- /dev/null +++ b/libs/shared/providers/src/wagmi/components/AddressLabel.tsx @@ -0,0 +1,37 @@ +import { Skeleton } from '@mui/material'; +import { MiddleTruncated } from '@origin/shared/components'; +import { mainnet, useEnsName } from 'wagmi'; + +import type { MiddleTruncatedProps } from '@origin/shared/components'; +import type { HexAddress } from '@origin/shared/utils'; + +type AddressLabelProps = { + address: HexAddress; + enableEnsName?: boolean; +} & Omit; + +export const AddressLabel = ({ + address, + enableEnsName = false, + ...rest +}: AddressLabelProps) => { + const { data: ensName, isLoading: isEnsNameLoading } = useEnsName({ + address, + enabled: enableEnsName, + chainId: mainnet.id, + }); + + return enableEnsName ? ( + isEnsNameLoading ? ( + + ) : ( + + {ensName ?? address} + + ) + ) : ( + + {address} + + ); +}; diff --git a/libs/shared/providers/src/wagmi/components/OpenAccountModalButton.tsx b/libs/shared/providers/src/wagmi/components/OpenAccountModalButton.tsx new file mode 100644 index 000000000..0a962b61e --- /dev/null +++ b/libs/shared/providers/src/wagmi/components/OpenAccountModalButton.tsx @@ -0,0 +1,87 @@ +import { ConnectButton as CustomButton } from '@origin/shared/components'; +import { ConnectButton } from '@rainbow-me/rainbowkit'; +import { useIntl } from 'react-intl'; + +import { AddressLabel } from './AddressLabel'; + +import type { ButtonProps } from '@mui/material'; +import type { HexAddress } from '@origin/shared/utils'; +import type { MouseEvent } from 'react'; + +interface OpenAccountModalButtonProps extends ButtonProps { + connectLabel?: string; +} + +export const OpenAccountModalButton = ({ + connectLabel, + ...props +}: OpenAccountModalButtonProps) => { + const intl = useIntl(); + + const handleClick = + (handler: () => void) => (evt: MouseEvent) => { + if (props?.onClick) { + props.onClick(evt); + } + handler(); + }; + + return ( + + {({ + account, + chain, + openChainModal, + openConnectModal, + openAccountModal, + mounted, + }) => { + if (!mounted || !account || !chain) { + return ( + + {connectLabel || + intl.formatMessage({ defaultMessage: 'Connect' })} + + ); + } + + if (chain.unsupported) { + return ( + + {intl.formatMessage({ + defaultMessage: 'Wrong Network', + })} + + ); + } + + return ( + ) => { + if (props?.onClick) { + props.onClick(evt); + } + openAccountModal(); + }} + > + + + ); + }} + + ); +}; diff --git a/libs/shared/providers/src/wagmi/components/TokenSelectModal.tsx b/libs/shared/providers/src/wagmi/components/TokenSelectModal.tsx new file mode 100644 index 000000000..0d3fa1bb4 --- /dev/null +++ b/libs/shared/providers/src/wagmi/components/TokenSelectModal.tsx @@ -0,0 +1,151 @@ +import { + Box, + Dialog, + MenuItem, + MenuList, + Skeleton, + Stack, + Typography, +} from '@mui/material'; +import { useIntl } from 'react-intl'; +import { useAccount, useBalance } from 'wagmi'; + +import { usePrices } from '../../prices'; + +import type { DialogProps, MenuItemProps } from '@mui/material'; +import type { Token } from '@origin/shared/contracts'; + +export type TokenSelectModalProps = { + tokens: Token[]; + onSelectToken: (value: Token) => void; + selectedTokenSymbol?: string; +} & DialogProps; + +export const TokenSelectModal = ({ + tokens, + onSelectToken, + selectedTokenSymbol, + onClose, + ...rest +}: TokenSelectModalProps) => { + return ( + theme.palette.background.paper, + borderRadius: 2, + border: '1px solid', + borderColor: (theme) => theme.palette.grey[800], + backgroundImage: 'none', + margin: 0, + minWidth: 'min(90vw, 33rem)', + }, + }} + {...rest} + onClose={onClose} + > + + {tokens.map((token) => ( + { + onSelectToken(token); + onClose({}, 'backdropClick'); + }} + selected={selectedTokenSymbol === token.symbol} + /> + ))} + + + ); +}; + +type TokenListItemProps = { + token: Token; + selected: boolean; +} & MenuItemProps; + +function TokenListItem({ token, selected, ...rest }: TokenListItemProps) { + const intl = useIntl(); + const { address } = useAccount(); + const { data: balance, isLoading: isBalanceLoading } = useBalance({ + address, + token: token.address, + }); + const { data: prices } = usePrices(); + + const bal = parseFloat(balance?.formatted ?? '0'); + const balUsd = bal * (prices?.[token.symbol] ?? 0); + + return ( + theme.palette.background.paper, + borderRadius: 1, + '&:hover': { + background: (theme) => theme.palette.grey[700], + }, + ...rest?.sx, + }} + > + + + + {token?.name} + span:not(:last-child):after': { + content: '", "', + }, + }} + > + {token.symbol} + + + + + + + {isBalanceLoading ? ( + + ) : ( + intl.formatNumber(bal, { + minimumFractionDigits: 0, + maximumFractionDigits: 4, + }) + )} + + + {intl.formatNumber(balUsd, { + style: 'currency', + currency: 'USD', + minimumFractionDigits: 2, + })} + + + + ); +} diff --git a/libs/shared/providers/src/wagmi/index.ts b/libs/shared/providers/src/wagmi/index.ts new file mode 100644 index 000000000..cce378ad8 --- /dev/null +++ b/libs/shared/providers/src/wagmi/index.ts @@ -0,0 +1,3 @@ +export * from './components/AddressLabel'; +export * from './components/OpenAccountModalButton'; +export * from './components/TokenSelectModal'; diff --git a/libs/shared/providers/tsconfig.json b/libs/shared/providers/tsconfig.json new file mode 100644 index 000000000..90fcf85c5 --- /dev/null +++ b/libs/shared/providers/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "jsx": "react-jsx", + "allowJs": false, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ], + "extends": "../../../tsconfig.base.json" +} diff --git a/libs/shared/providers/tsconfig.lib.json b/libs/shared/providers/tsconfig.lib.json new file mode 100644 index 000000000..c96232320 --- /dev/null +++ b/libs/shared/providers/tsconfig.lib.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": ["node"] + }, + "files": [ + "../../../node_modules/@nx/react/typings/cssmodule.d.ts", + "../../../node_modules/@nx/react/typings/image.d.ts" + ], + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts", "src/**/*.spec.tsx", "src/**/*.test.tsx", "src/**/*.spec.js", "src/**/*.test.js", "src/**/*.spec.jsx", "src/**/*.test.jsx"], + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] +} diff --git a/libs/shared/storybook/tsconfig.json b/libs/shared/storybook/tsconfig.json index 6dca5acab..47c4b25cd 100644 --- a/libs/shared/storybook/tsconfig.json +++ b/libs/shared/storybook/tsconfig.json @@ -3,14 +3,13 @@ "compilerOptions": { "module": "commonjs", "forceConsistentCasingInFileNames": true, - "strict": true, "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "jsx": "react-jsx" }, - "files": [], + "files": ["../../../libs/shared/theme/src/theme.d.ts"], "include": [], "references": [ { diff --git a/libs/shared/theme/src/theme.d.ts b/libs/shared/theme/src/theme.d.ts new file mode 100644 index 000000000..d6b375e4d --- /dev/null +++ b/libs/shared/theme/src/theme.d.ts @@ -0,0 +1,29 @@ +import '@mui/material/styles'; + +declare module '@mui/material/styles' { + interface TypeBackground { + gradient1: string; + gradient2: string; + gradient3: string; + gradientSuccess: string; + gradientHover: string; + gradientHoverActionButton: string; + } + + interface TypeBackgroundOptions { + gradient1: string; + gradient2: string; + gradient3: string; + gradientSuccess: string; + gradientHover: string; + gradientHoverActionButton: string; + } + + interface Shape { + cardBorderRadius: number; + } + + interface ShapeOptions { + cardBorderRadius: number; + } +} diff --git a/libs/shared/theme/src/theme.tsx b/libs/shared/theme/src/theme.tsx index 9b90ffdd0..f58554f2a 100644 --- a/libs/shared/theme/src/theme.tsx +++ b/libs/shared/theme/src/theme.tsx @@ -4,34 +4,6 @@ import { } from '@mui/material/styles'; import shadows from '@mui/material/styles/shadows'; -declare module '@mui/material/styles' { - interface TypeBackground { - gradient1: string; - gradient2: string; - gradient3: string; - gradientSuccess: string; - gradientHover: string; - gradientHoverActionButton: string; - } - - interface TypeBackgroundOptions { - gradient1: string; - gradient2: string; - gradient3: string; - gradientSuccess: string; - gradientHover: string; - gradientHoverActionButton: string; - } - - interface Shape { - cardBorderRadius: number; - } - - interface ShapeOptions { - cardBorderRadius: number; - } -} - export const theme = extendTheme({ colorSchemes: { dark: { diff --git a/libs/shared/theme/tsconfig.lib.json b/libs/shared/theme/tsconfig.lib.json index 7b862025e..79e57218a 100644 --- a/libs/shared/theme/tsconfig.lib.json +++ b/libs/shared/theme/tsconfig.lib.json @@ -6,7 +6,8 @@ }, "files": [ "../../../node_modules/@nx/react/typings/cssmodule.d.ts", - "../../../node_modules/@nx/react/typings/image.d.ts" + "../../../node_modules/@nx/react/typings/image.d.ts", + "./src/theme.d.ts" ], "exclude": [ "jest.config.ts", diff --git a/libs/shared/utils/.babelrc b/libs/shared/utils/.babelrc new file mode 100644 index 000000000..1ea870ead --- /dev/null +++ b/libs/shared/utils/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "@nx/react/babel", + { + "runtime": "automatic", + "useBuiltIns": "usage" + } + ] + ], + "plugins": [] +} diff --git a/libs/shared/utils/.eslintrc.json b/libs/shared/utils/.eslintrc.json new file mode 100644 index 000000000..a786f2cf3 --- /dev/null +++ b/libs/shared/utils/.eslintrc.json @@ -0,0 +1,34 @@ +{ + "extends": [ + "plugin:@nx/react", + "../../../.eslintrc.json" + ], + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": {} + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "rules": {} + }, + { + "files": [ + "*.js", + "*.jsx" + ], + "rules": {} + } + ] +} diff --git a/libs/shared/utils/README.md b/libs/shared/utils/README.md new file mode 100644 index 000000000..038826ff7 --- /dev/null +++ b/libs/shared/utils/README.md @@ -0,0 +1,7 @@ +# shared-utils + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test shared-utils` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/shared/utils/project.json b/libs/shared/utils/project.json new file mode 100644 index 000000000..f2d296b69 --- /dev/null +++ b/libs/shared/utils/project.json @@ -0,0 +1,20 @@ +{ + "name": "shared-utils", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/shared/utils/src", + "projectType": "library", + "tags": [], + "targets": { + "lint": { + "executor": "@nx/linter:eslint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "libs/shared/utils/**/*.{ts,tsx,js,jsx}" + ] + } + } + } +} diff --git a/libs/shared/utils/src/BigDecimal.ts b/libs/shared/utils/src/BigDecimal.ts new file mode 100644 index 000000000..4d6ef7d19 --- /dev/null +++ b/libs/shared/utils/src/BigDecimal.ts @@ -0,0 +1,108 @@ +import { formatUnits, parseUnits } from 'viem'; + +const DEFAULT_DECIMALS = 18; + +export class BigDecimal { + value: bigint; + decimals: number; + + constructor(num: bigint, decimals = DEFAULT_DECIMALS) { + this.value = num ? (typeof num === 'bigint' ? num : BigInt(num)) : 0n; + this.decimals = decimals; + } + + static ZERO(): BigDecimal { + return new BigDecimal(0n, DEFAULT_DECIMALS); + } + + static ONE(decimals = DEFAULT_DECIMALS): BigDecimal { + return new BigDecimal(parseUnits('1', decimals), decimals); + } + + static parse( + amountStr: `${number}`, + decimals = DEFAULT_DECIMALS, + ): BigDecimal { + return new BigDecimal(parseUnits(amountStr, decimals), decimals); + } + + static fromSimple( + amountNum: number, + decimals = DEFAULT_DECIMALS, + ): BigDecimal { + return new BigDecimal(BigInt(amountNum), decimals); + } + + get string(): string { + return formatUnits(this.value, this.decimals); + } + + get simple(): number { + return parseFloat(this.string); + } + + get simpleRounded(): number { + return parseFloat(this.simple.toFixed(3).slice(0, -1)); + } + + toJSON(): string { + return JSON.stringify({ + decimals: this.decimals, + value: this.value.toString(), + }); + } + + toFixed(decimalPlaces = 2): number { + return parseFloat(this.simple.toFixed(decimalPlaces + 1).slice(0, -1)); + } + + toPercent(decimalPlaces = 2): number { + return parseFloat((this.simple * 100).toFixed(decimalPlaces)); + } + + format(decimalPlaces = 2): string { + return Intl.NumberFormat('en', { + maximumFractionDigits: decimalPlaces, + }).format(this.simple); + } + + add(other: BigDecimal) { + this.value += other.value; + } + + sub(other: BigDecimal) { + this.value -= other.value; + } + + mul(other: BigDecimal) { + this.value *= other.value; + } + + div(other: BigDecimal) { + this.value /= other.value; + } + + eq(other: BigDecimal): boolean { + return this.value === other.value; + } + + gt(other: BigDecimal): boolean { + return this.value > other.value; + } + + gte(other: BigDecimal): boolean { + return this.value >= other.value; + } + + lt(other: BigDecimal): boolean { + return this.value < other.value; + } + + lte(other: BigDecimal): boolean { + return this.value <= other.value; + } + + isZero(): boolean { + return this.value === 0n; + } +} diff --git a/libs/shared/utils/src/composeContext.ts b/libs/shared/utils/src/composeContext.ts new file mode 100644 index 000000000..2c602eb20 --- /dev/null +++ b/libs/shared/utils/src/composeContext.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { createElement } from 'react'; + +import type { ReactNode } from 'react'; + +/** + * Compose all contexts into one component. + * This is an equivalent to nesting jsx element, it simply helps readabilty. + * Pass ContextProvider as first array element, optional props as second. + * Merge order follows paths input. + * + * @param contexts - [Context, props] arrays for composition + * @param Child - Child element + * @returns ContextProvider + */ +export const composeContexts: ( + contexts: [any, any?][], + Child: ReactNode, +) => any = (contexts, Child) => + contexts.reduceRight( + (children, [Component, props]) => createElement(Component, props, children), + Child, + ); diff --git a/libs/shared/utils/src/formatters.ts b/libs/shared/utils/src/formatters.ts new file mode 100644 index 000000000..8c48d2ca1 --- /dev/null +++ b/libs/shared/utils/src/formatters.ts @@ -0,0 +1,2 @@ +export const middleTruncate = (address: string, start = 6, end = 4): string => + `${address.slice(0, start)}…${address.slice(-end)}`; diff --git a/libs/shared/utils/src/index.ts b/libs/shared/utils/src/index.ts new file mode 100644 index 000000000..434d1e6ba --- /dev/null +++ b/libs/shared/utils/src/index.ts @@ -0,0 +1,5 @@ +export * from './BigDecimal'; +export * from './composeContext'; +export * from './formatters'; +export * from './isNilOrEmpty'; +export * from './types'; diff --git a/libs/shared/utils/src/isNilOrEmpty.ts b/libs/shared/utils/src/isNilOrEmpty.ts new file mode 100644 index 000000000..f32c68272 --- /dev/null +++ b/libs/shared/utils/src/isNilOrEmpty.ts @@ -0,0 +1,15 @@ +export const isNilOrEmpty = (value: unknown): boolean => { + if (value === null || value === undefined) { + return true; + } + + if (Array.isArray(value) || typeof value === 'string') { + return value.length === 0; + } + + if (typeof value === 'object') { + return Object.keys(value).length === 0; + } + + return false; +}; diff --git a/libs/shared/utils/src/types.ts b/libs/shared/utils/src/types.ts new file mode 100644 index 000000000..39a8b3c95 --- /dev/null +++ b/libs/shared/utils/src/types.ts @@ -0,0 +1,38 @@ +import type { ReactNode } from 'react'; + +export type Children = { children?: ReactNode }; + +export type RequiredChildren = Required; + +export type WithChildren = Omit & Children; + +export type WithRequiredChildren = Omit & RequiredChildren; + +export type Mutable = { + -readonly [K in keyof T]: T[K]; +}; + +export type RecursiveMutable = { + -readonly [K in keyof T]: T[K] extends (infer U)[] + ? RecursiveMutable[] + : T[K] extends object + ? RecursiveMutable + : T[K]; +}; + +export type OptionalBy = Omit & Partial>; + +export type RequiredBy = T & { [P in K]-?: T[P] }; + +export type RecursivePartial = { + [K in keyof T]?: T[K] extends (infer U)[] + ? RecursivePartial[] + : T[K] extends object + ? RecursivePartial + : T[K]; +}; + +export type ArrayElement = + ArrayType extends readonly (infer ElementType)[] ? ElementType : never; + +export type HexAddress = `0x${string}`; diff --git a/libs/shared/utils/tsconfig.json b/libs/shared/utils/tsconfig.json new file mode 100644 index 000000000..90fcf85c5 --- /dev/null +++ b/libs/shared/utils/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "jsx": "react-jsx", + "allowJs": false, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ], + "extends": "../../../tsconfig.base.json" +} diff --git a/libs/shared/utils/tsconfig.lib.json b/libs/shared/utils/tsconfig.lib.json new file mode 100644 index 000000000..c96232320 --- /dev/null +++ b/libs/shared/utils/tsconfig.lib.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": ["node"] + }, + "files": [ + "../../../node_modules/@nx/react/typings/cssmodule.d.ts", + "../../../node_modules/@nx/react/typings/image.d.ts" + ], + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts", "src/**/*.spec.tsx", "src/**/*.test.tsx", "src/**/*.spec.js", "src/**/*.test.js", "src/**/*.spec.jsx", "src/**/*.test.jsx"], + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] +} diff --git a/nx.json b/nx.json index 9acf1a54d..4fcb845ac 100644 --- a/nx.json +++ b/nx.json @@ -16,14 +16,25 @@ }, "targetDefaults": { "build": { - "dependsOn": ["^build"], - "inputs": ["production", "^production"] + "dependsOn": [ + "^build" + ], + "inputs": [ + "production", + "^production" + ] }, "e2e": { - "inputs": ["default", "^production"] + "inputs": [ + "default", + "^production" + ] }, "test": { - "inputs": ["default", "^production"] + "inputs": [ + "default", + "^production" + ] }, "lint": { "inputs": [ @@ -42,7 +53,10 @@ } }, "namedInputs": { - "default": ["{projectRoot}/**/*", "sharedGlobals"], + "default": [ + "{projectRoot}/**/*", + "sharedGlobals" + ], "production": [ "default", "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", diff --git a/package.json b/package.json index a44beef88..1e01e55c8 100644 --- a/package.json +++ b/package.json @@ -5,22 +5,29 @@ "scripts": { "build-storybook": "nx build-storybook shared-storybook --verbose", "storybook": "nx storybook shared-storybook", - "oeth": "nx serve oeth" + "oeth": "nx serve oeth", + "ousd": "nx serve ousd" }, "private": true, "dependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@mui/material": "^5.14.3", + "@rainbow-me/rainbowkit": "^1.0.9", "@react-hookz/web": "^23.1.0", "@tanstack/react-query": "^4.32.6", "@tanstack/react-table": "^8.9.3", + "axios": "^1.4.0", + "immer": "^10.0.2", "lodash": "^4.17.21", "react": "18.2.0", "react-dom": "18.2.0", "react-intl": "^6.4.4", "react-router-dom": "6.14.2", - "tslib": "^2.6.1" + "react-tracked": "^1.7.11", + "tslib": "^2.6.1", + "viem": "^1.7.0", + "wagmi": "^1.3.10" }, "devDependencies": { "@babel/preset-react": "^7.14.5", @@ -54,6 +61,7 @@ "@vitest/coverage-c8": "~0.33.0", "@vitest/ui": "~0.34.1", "babel-plugin-formatjs": "^10.5.3", + "buffer": "^6.0.3", "danger": "^11.2.7", "danger-plugin-github-notion": "^0.0.3", "eslint": "~8.46.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e82b75451..d61b0f81b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ dependencies: '@mui/material': specifier: ^5.14.3 version: 5.14.3(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@rainbow-me/rainbowkit': + specifier: ^1.0.9 + version: 1.0.9(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(viem@1.7.0)(wagmi@1.3.10) '@react-hookz/web': specifier: ^23.1.0 version: 23.1.0(react-dom@18.2.0)(react@18.2.0) @@ -23,6 +26,12 @@ dependencies: '@tanstack/react-table': specifier: ^8.9.3 version: 8.9.3(react-dom@18.2.0)(react@18.2.0) + axios: + specifier: ^1.4.0 + version: 1.4.0 + immer: + specifier: ^10.0.2 + version: 10.0.2 lodash: specifier: ^4.17.21 version: 4.17.21 @@ -38,9 +47,18 @@ dependencies: react-router-dom: specifier: 6.14.2 version: 6.14.2(react-dom@18.2.0)(react@18.2.0) + react-tracked: + specifier: ^1.7.11 + version: 1.7.11(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0) tslib: specifier: ^2.6.1 version: 2.6.1 + viem: + specifier: ^1.7.0 + version: 1.7.0(typescript@5.1.6) + wagmi: + specifier: ^1.3.10 + version: 1.3.10(@types/react@18.2.18)(immer@10.0.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6)(viem@1.7.0) devDependencies: '@babel/preset-react': @@ -136,6 +154,9 @@ devDependencies: babel-plugin-formatjs: specifier: ^10.5.3 version: 10.5.3 + buffer: + specifier: ^6.0.3 + version: 6.0.3 danger: specifier: ^11.2.7 version: 11.2.7 @@ -223,6 +244,10 @@ packages: resolution: {integrity: sha512-+RNNcQvw2V1bmnBTPAtOLfW/9mhH2vC67+rUSi5T8EtEWt6lEnGNY2GuhZ1/YwbgikT1TkhvidCDmN5Q5YCo/w==} dev: true + /@adraffy/ens-normalize@1.9.0: + resolution: {integrity: sha512-iowxq3U30sghZotgl4s/oJRci6WPBfNO5YYgk2cIOMCHr3LeGPcsZjCEr+33Q4N+oV3OABDAtA+pyvWjbvBifQ==} + dev: false + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -1662,6 +1687,34 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true + /@coinbase/wallet-sdk@3.7.1: + resolution: {integrity: sha512-LjyoDCB+7p0waQXfK+fUgcAs3Ezk6S6e+LYaoFjpJ6c9VTop3NyZF40Pi7df4z7QJohCwzuIDjz0Rhtig6Y7Pg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + '@solana/web3.js': 1.78.4 + bind-decorator: 1.0.11 + bn.js: 5.2.1 + buffer: 6.0.3 + clsx: 1.2.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 + keccak: 3.0.3 + preact: 10.17.1 + qs: 6.11.2 + rxjs: 6.6.7 + sha.js: 2.4.11 + stream-browserify: 3.0.0 + util: 0.12.5 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + /@colors/colors@1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -1707,6 +1760,10 @@ packages: stylis: 4.2.0 dev: false + /@emotion/hash@0.8.0: + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + dev: false + /@emotion/hash@0.9.1: resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} dev: false @@ -2364,6 +2421,20 @@ packages: resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} dev: true + /@ledgerhq/connect-kit-loader@1.1.2: + resolution: {integrity: sha512-mscwGroSJQrCTjtNGBu+18FQbZYA4+q6Tyx6K7CXHl6AwgZKbWfZYdgP2F+fyZcRUdGRsMX8QtvU61VcGGtO1A==} + dev: false + + /@lit-labs/ssr-dom-shim@1.1.1: + resolution: {integrity: sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==} + dev: false + + /@lit/reactive-element@1.6.3: + resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.1.1 + dev: false + /@mdx-js/react@2.3.0(react@18.2.0): resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} peerDependencies: @@ -2374,6 +2445,22 @@ packages: react: 18.2.0 dev: true + /@metamask/safe-event-emitter@2.0.0: + resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} + dev: false + + /@metamask/utils@3.6.0: + resolution: {integrity: sha512-9cIRrfkWvHblSiNDVXsjivqa9Ak0RYo/1H6tqTqTbAx+oBK2Sva0lWDHxGchOqA7bySGUJKAWSNJvH6gdHZ0gQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@types/debug': 4.1.8 + debug: 4.3.4 + semver: 7.5.4 + superstruct: 1.0.3 + transitivePeerDependencies: + - supports-color + dev: false + /@microsoft/api-extractor-model@7.27.5(@types/node@18.14.2): resolution: {integrity: sha512-9/tBzYMJitR+o+zkPr1lQh2+e8ClcaTF6eZo7vZGDqRt2O5XmXWPbYJZmxyM3wb5at6lfJNEeGZrQXLjsQ0Nbw==} dependencies: @@ -2417,6 +2504,67 @@ packages: resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} dev: true + /@motionone/animation@10.15.1: + resolution: {integrity: sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ==} + dependencies: + '@motionone/easing': 10.15.1 + '@motionone/types': 10.15.1 + '@motionone/utils': 10.15.1 + tslib: 2.6.1 + dev: false + + /@motionone/dom@10.16.2: + resolution: {integrity: sha512-bnuHdNbge1FutZXv+k7xub9oPWcF0hsu8y1HTH/qg6av58YI0VufZ3ngfC7p2xhMJMnoh0LXFma2EGTgPeCkeg==} + dependencies: + '@motionone/animation': 10.15.1 + '@motionone/generators': 10.15.1 + '@motionone/types': 10.15.1 + '@motionone/utils': 10.15.1 + hey-listen: 1.0.8 + tslib: 2.6.1 + dev: false + + /@motionone/easing@10.15.1: + resolution: {integrity: sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==} + dependencies: + '@motionone/utils': 10.15.1 + tslib: 2.6.1 + dev: false + + /@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.6.1 + dev: false + + /@motionone/svelte@10.16.2: + resolution: {integrity: sha512-38xsroKrfK+aHYhuQlE6eFcGy0EwrB43Q7RGjF73j/kRUTcLNu/LAaKiLLsN5lyqVzCgTBVt4TMT/ShWbTbc5Q==} + dependencies: + '@motionone/dom': 10.16.2 + tslib: 2.6.1 + dev: false + + /@motionone/types@10.15.1: + resolution: {integrity: sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA==} + dev: false + + /@motionone/utils@10.15.1: + resolution: {integrity: sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw==} + dependencies: + '@motionone/types': 10.15.1 + hey-listen: 1.0.8 + tslib: 2.6.1 + dev: false + + /@motionone/vue@10.16.2: + resolution: {integrity: sha512-7/dEK/nWQXOkJ70bqb2KyNfSWbNvWqKKq1C8juj+0Mg/AorgD8O5wE3naddK0G+aXuNMqRuc4jlsYHHWHtIzVw==} + dependencies: + '@motionone/dom': 10.16.2 + tslib: 2.6.1 + dev: false + /@mui/base@5.0.0-beta.9(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-gm6gnPnc/lS5Z3neH0iuOrK7IbS02+oh6KsMtXYLhI6bJpHs+PNWFsBmISx7x4FSPVJZvZkb8Bw6pEXpIMFt7Q==} engines: {node: '>=12.0.0'} @@ -2575,6 +2723,38 @@ packages: react-is: 18.2.0 dev: false + /@noble/curves@1.0.0: + resolution: {integrity: sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==} + dependencies: + '@noble/hashes': 1.3.0 + dev: false + + /@noble/curves@1.1.0: + resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} + dependencies: + '@noble/hashes': 1.3.1 + dev: false + + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: false + + /@noble/hashes@1.3.0: + resolution: {integrity: sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==} + dev: false + + /@noble/hashes@1.3.1: + resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} + engines: {node: '>= 16'} + dev: false + + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -3979,6 +4159,29 @@ packages: '@babel/runtime': 7.22.10 dev: true + /@rainbow-me/rainbowkit@1.0.9(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(viem@1.7.0)(wagmi@1.3.10): + resolution: {integrity: sha512-BiMPCWDIR7L44Rq/6j09CPJd7qzUF3vhXo/EIpCF+J0AxQQEWDjwZ+RuWez2XTpzlFjGYl+RwEHZQzX1dKVr+w==} + engines: {node: '>=12.4'} + peerDependencies: + react: '>=17' + react-dom: '>=17' + viem: ~0.3.19 || ^1.0.0 + wagmi: ~1.0.1 || ~1.1.0 || ~1.2.0 || ~1.3.0 + dependencies: + '@vanilla-extract/css': 1.9.1 + '@vanilla-extract/dynamic': 2.0.2 + '@vanilla-extract/sprinkles': 1.5.0(@vanilla-extract/css@1.9.1) + clsx: 1.1.1 + qrcode: 1.5.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.4(@types/react@18.2.18)(react@18.2.0) + viem: 1.7.0(typescript@5.1.6) + wagmi: 1.3.10(@types/react@18.2.18)(immer@10.0.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6)(viem@1.7.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@react-hookz/deep-equal@1.0.4: resolution: {integrity: sha512-N56fTrAPUDz/R423pag+n6TXWbvlBZDtTehaGFjK0InmN+V2OFWLE/WmORhmn6Ce7dlwH5+tQN1LJFw3ngTJVg==} dev: false @@ -4051,6 +4254,72 @@ packages: string-argv: 0.3.2 dev: true + /@safe-global/safe-apps-provider@0.17.1(typescript@5.1.6): + resolution: {integrity: sha512-lYfRqrbbK1aKU1/UGkYWc/X7PgySYcumXKc5FB2uuwAs2Ghj8uETuW5BrwPqyjBknRxutFbTv+gth/JzjxAhdQ==} + dependencies: + '@safe-global/safe-apps-sdk': 8.0.0(typescript@5.1.6) + events: 3.3.0 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: false + + /@safe-global/safe-apps-sdk@8.0.0(typescript@5.1.6): + resolution: {integrity: sha512-gYw0ki/EAuV1oSyMxpqandHjnthZjYYy+YWpTAzf8BqfXM3ItcZLpjxfg+3+mXW8HIO+3jw6T9iiqEXsqHaMMw==} + dependencies: + '@safe-global/safe-gateway-typescript-sdk': 3.10.0 + viem: 1.7.0(typescript@5.1.6) + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: false + + /@safe-global/safe-apps-sdk@8.1.0(typescript@5.1.6): + resolution: {integrity: sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w==} + dependencies: + '@safe-global/safe-gateway-typescript-sdk': 3.10.0 + viem: 1.7.0(typescript@5.1.6) + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: false + + /@safe-global/safe-gateway-typescript-sdk@3.10.0: + resolution: {integrity: sha512-nhWjFRRgrGz4uZbyQ3Hgm4si1AixCWlnvi5WUCq/+V+e8EoA2Apj9xJEt8zzXvtELlddFqkH2sfTFy9LIjGXKg==} + dependencies: + cross-fetch: 3.1.8 + transitivePeerDependencies: + - encoding + dev: false + + /@scure/base@1.1.1: + resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} + dev: false + + /@scure/bip32@1.3.0: + resolution: {integrity: sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==} + dependencies: + '@noble/curves': 1.0.0 + '@noble/hashes': 1.3.0 + '@scure/base': 1.1.1 + dev: false + + /@scure/bip39@1.2.0: + resolution: {integrity: sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==} + dependencies: + '@noble/hashes': 1.3.0 + '@scure/base': 1.1.1 + dev: false + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -4060,6 +4329,153 @@ packages: engines: {node: '>=10'} dev: true + /@solana/buffer-layout@4.0.1: + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + dependencies: + buffer: 6.0.3 + dev: false + + /@solana/web3.js@1.78.4: + resolution: {integrity: sha512-up5VG1dK+GPhykmuMIozJZBbVqpm77vbOG6/r5dS7NBGZonwHfTLdBbsYc3rjmaQ4DpCXUa3tUc4RZHRORvZrw==} + dependencies: + '@babel/runtime': 7.22.10 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.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: 4.1.0 + node-fetch: 2.6.12 + rpc-websockets: 7.6.0 + superstruct: 0.14.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@stablelib/aead@1.0.1: + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} + dev: false + + /@stablelib/binary@1.0.1: + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} + dependencies: + '@stablelib/int': 1.0.1 + dev: false + + /@stablelib/bytes@1.0.1: + resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} + dev: false + + /@stablelib/chacha20poly1305@1.0.1: + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} + dependencies: + '@stablelib/aead': 1.0.1 + '@stablelib/binary': 1.0.1 + '@stablelib/chacha': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/poly1305': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/chacha@1.0.1: + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/constant-time@1.0.1: + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} + dev: false + + /@stablelib/ed25519@1.0.3: + resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} + dependencies: + '@stablelib/random': 1.0.2 + '@stablelib/sha512': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/hash@1.0.1: + resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} + dev: false + + /@stablelib/hkdf@1.0.1: + resolution: {integrity: sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==} + dependencies: + '@stablelib/hash': 1.0.1 + '@stablelib/hmac': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/hmac@1.0.1: + resolution: {integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==} + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/int@1.0.1: + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} + dev: false + + /@stablelib/keyagreement@1.0.1: + resolution: {integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==} + dependencies: + '@stablelib/bytes': 1.0.1 + dev: false + + /@stablelib/poly1305@1.0.1: + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/random@1.0.2: + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/sha256@1.0.1: + resolution: {integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/sha512@1.0.1: + resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/wipe@1.0.1: + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} + dev: false + + /@stablelib/x25519@1.0.3: + resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} + dependencies: + '@stablelib/keyagreement': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/wipe': 1.0.1 + dev: false + /@storybook/addon-actions@7.2.1(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-YUiKksgRIUm80eZacj/x14BEYCQY5iel1/Wo6mrTP7bVQrUNiCmnINSrup0DObg7lmIaq00h3ow7gKeYJ+x6zw==} peerDependencies: @@ -4588,7 +5004,7 @@ packages: util: 0.12.5 util-deprecate: 1.0.2 watchpack: 2.4.0 - ws: 8.13.0 + ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding @@ -5179,6 +5595,31 @@ packages: resolution: {integrity: sha512-YVB+mVWENQwPyv+40qO7flMgKZ0uI41Ph7qXC2Zf1ft5AIGfnXnMZyifB2ghhZ27u+5wm5mlzO4Y6lwwadzxCA==} dev: false + /@tanstack/query-core@4.33.0: + resolution: {integrity: sha512-qYu73ptvnzRh6se2nyBIDHGBQvPY1XXl3yR769B7B6mIDD7s+EZhdlWHQ67JI6UOTFRaI7wupnTnwJ3gE0Mr/g==} + dev: false + + /@tanstack/query-persist-client-core@4.33.0: + resolution: {integrity: sha512-3P16+2JjcUU5CHi10jJuwd0ZQYvQtSuzLvCUCjVuAnj3GZjfSso1v8t6WAObAr9RPuIC6vDXeOQ3mr07EF/NxQ==} + dependencies: + '@tanstack/query-core': 4.33.0 + dev: false + + /@tanstack/query-sync-storage-persister@4.33.0: + resolution: {integrity: sha512-V6igMcdEOXPRpvmNFQ6I/iJaw9NhxWy7x8PWamm2cgSsLi8bHaDvUVuWkZm+ikI47QjoCUk7qll/82JYLaH+pw==} + dependencies: + '@tanstack/query-persist-client-core': 4.33.0 + dev: false + + /@tanstack/react-query-persist-client@4.33.0(@tanstack/react-query@4.32.6): + resolution: {integrity: sha512-B3q0r1tqTTSkd9vctyqFj28xdGZJ+Dnr/7H05Ta1JF1w7EauVQl8ILrmXADecwvILnr1xoZO6lvi2W+mZxMinw==} + peerDependencies: + '@tanstack/react-query': ^4.33.0 + dependencies: + '@tanstack/query-persist-client-core': 4.33.0 + '@tanstack/react-query': 4.32.6(react-dom@18.2.0)(react@18.2.0) + dev: false + /@tanstack/react-query@4.32.6(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-AITu/IKJJJXsHHeXNBy5bclu12t08usMCY0vFC2dh9SP/w6JAk5U9GwfjOIPj3p+ATADZvxQPe8UiCtMLNeQbg==} peerDependencies: @@ -5373,7 +5814,12 @@ packages: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 18.14.2 - dev: true + + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + dependencies: + '@types/ms': 0.7.31 + dev: false /@types/detect-port@1.3.3: resolution: {integrity: sha512-bV/jQlAJ/nPY3XqSatkGpu+nGzou+uSwrH1cROhn+jBFg47yaNH+blW4C7p9KhopC7QxCv/6M86s37k8dMk0Yg==} @@ -5530,6 +5976,10 @@ packages: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true + /@types/ms@0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: false + /@types/node-fetch@2.6.4: resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==} dependencies: @@ -5537,13 +5987,16 @@ packages: form-data: 3.0.1 dev: true + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: false + /@types/node@16.18.39: resolution: {integrity: sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==} dev: true /@types/node@18.14.2: resolution: {integrity: sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA==} - dev: true /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -5634,10 +6087,26 @@ packages: '@types/jest': 29.5.3 dev: true + /@types/trusted-types@2.0.3: + resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} + dev: false + /@types/unist@2.0.7: resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==} dev: true + /@types/ws@7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 18.14.2 + dev: false + + /@types/ws@8.5.5: + resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} + dependencies: + '@types/node': 18.14.2 + dev: false + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true @@ -5902,6 +6371,40 @@ packages: eslint-visitor-keys: 3.4.2 dev: true + /@vanilla-extract/css@1.9.1: + resolution: {integrity: sha512-pu2SFiff5jRhPwvGoj8cM5l/qIyLvigOmy22ss5DGjwV5pJYezRjDLxWumi2luIwioMWvh9EozCjyfH8nq+7fQ==} + dependencies: + '@emotion/hash': 0.8.0 + '@vanilla-extract/private': 1.0.3 + ahocorasick: 1.0.2 + chalk: 4.1.2 + css-what: 5.1.0 + cssesc: 3.0.0 + csstype: 3.1.2 + deep-object-diff: 1.1.9 + deepmerge: 4.3.1 + media-query-parser: 2.0.2 + outdent: 0.8.0 + dev: false + + /@vanilla-extract/dynamic@2.0.2: + resolution: {integrity: sha512-U4nKaEQ8Kuz+exXEr51DUpyaOuzo24/S/k1YbDPQR06cYcNjQqvwFRnwWtZ+9ImocqM1wTKtzrdUgSTtLGIwAg==} + dependencies: + '@vanilla-extract/private': 1.0.3 + dev: false + + /@vanilla-extract/private@1.0.3: + resolution: {integrity: sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==} + dev: false + + /@vanilla-extract/sprinkles@1.5.0(@vanilla-extract/css@1.9.1): + resolution: {integrity: sha512-W58f2Rzz5lLmk0jbhgStVlZl5wEiPB1Ur3fRvUaBM+MrifZ3qskmFq/CiH//fEYeG5Dh9vF1qRviMMH46cX9Nw==} + peerDependencies: + '@vanilla-extract/css': ^1.0.0 + dependencies: + '@vanilla-extract/css': 1.9.1 + dev: false + /@vitejs/plugin-react@3.1.0(vite@4.4.9): resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} engines: {node: ^14.18.0 || >=16.0.0} @@ -6072,27 +6575,476 @@ packages: - typescript dev: true - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + /@wagmi/chains@1.7.0(typescript@5.1.6): + resolution: {integrity: sha512-TKVeHv0GqP5sV1yQ8BDGYToAFezPnCexbbBpeH14x7ywi5a1dDStPffpt9x+ytE6LJWkZ6pAMs/HNWXBQ5Nqmw==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: true - - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: true - - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: true - - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} - dev: true + typescript: 5.1.6 + dev: false - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + /@wagmi/connectors@2.7.0(@wagmi/chains@1.7.0)(react@18.2.0)(typescript@5.1.6)(viem@1.7.0): + resolution: {integrity: sha512-1KOL0HTJl5kzSC/YdKwFwiokr6poUQn1V/tcT0TpG3iH2x0lSM7FTkvCjVVY/6lKzTXrLlo9y2aE7AsOPnkvqg==} + peerDependencies: + '@wagmi/chains': '>=1.7.0' + typescript: '>=5.0.4' + viem: '>=0.3.35' + peerDependenciesMeta: + '@wagmi/chains': + optional: true + typescript: + optional: true + dependencies: + '@coinbase/wallet-sdk': 3.7.1 + '@ledgerhq/connect-kit-loader': 1.1.2 + '@safe-global/safe-apps-provider': 0.17.1(typescript@5.1.6) + '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.1.6) + '@wagmi/chains': 1.7.0(typescript@5.1.6) + '@walletconnect/ethereum-provider': 2.9.2(@walletconnect/modal@2.6.1) + '@walletconnect/legacy-provider': 2.0.0 + '@walletconnect/modal': 2.6.1(react@18.2.0) + '@walletconnect/utils': 2.9.2 + abitype: 0.8.7(typescript@5.1.6) + eventemitter3: 4.0.7 + typescript: 5.1.6 + viem: 1.7.0(typescript@5.1.6) + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - bufferutil + - encoding + - lokijs + - react + - supports-color + - utf-8-validate + - zod + dev: false + + /@wagmi/core@1.3.9(@types/react@18.2.18)(immer@10.0.2)(react@18.2.0)(typescript@5.1.6)(viem@1.7.0): + resolution: {integrity: sha512-SrnABCrsDvhiMCLLLyzyHnZbEumsFT/XWlJJQZeyEDcixL95R7XQwOaaoRI4MpNilCtMtu3jzN57tA5Z2iA+kw==} + peerDependencies: + typescript: '>=5.0.4' + viem: '>=0.3.35' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@wagmi/chains': 1.7.0(typescript@5.1.6) + '@wagmi/connectors': 2.7.0(@wagmi/chains@1.7.0)(react@18.2.0)(typescript@5.1.6)(viem@1.7.0) + abitype: 0.8.7(typescript@5.1.6) + eventemitter3: 4.0.7 + typescript: 5.1.6 + viem: 1.7.0(typescript@5.1.6) + zustand: 4.4.1(@types/react@18.2.18)(immer@10.0.2)(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.9.2: + resolution: {integrity: sha512-VARMPAx8sIgodeyngDHbealP3B621PQqjqKsByFUTOep8ZI1/R/20zU+cmq6j9RCrL+kLKZcrZqeVzs8Z7OlqQ==} + 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 + '@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.9.2 + '@walletconnect/utils': 2.9.2 + events: 3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - bufferutil + - lokijs + - utf-8-validate + dev: false + + /@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 + dev: false + + /@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 + dev: false + + /@walletconnect/environment@1.0.1: + resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/ethereum-provider@2.9.2(@walletconnect/modal@2.6.1): + resolution: {integrity: sha512-eO1dkhZffV1g7vpG19XUJTw09M/bwGUwwhy1mJ3AOPbOSbMPvwiCuRz2Kbtm1g9B0Jv15Dl+TvJ9vTgYF8zoZg==} + 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.1(react@18.2.0) + '@walletconnect/sign-client': 2.9.2 + '@walletconnect/types': 2.9.2 + '@walletconnect/universal-provider': 2.9.2 + '@walletconnect/utils': 2.9.2 + events: 3.3.0 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - bufferutil + - encoding + - lokijs + - utf-8-validate + dev: false + + /@walletconnect/events@1.0.1: + resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/heartbeat@1.2.1: + resolution: {integrity: sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-http-connection@1.0.7: + resolution: {integrity: sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + cross-fetch: 3.1.8 + tslib: 1.14.1 + transitivePeerDependencies: + - encoding + dev: false + + /@walletconnect/jsonrpc-provider@1.0.13: + resolution: {integrity: sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-types@1.0.3: + resolution: {integrity: sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==} + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-utils@1.0.8: + resolution: {integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==} + dependencies: + '@walletconnect/environment': 1.0.1 + '@walletconnect/jsonrpc-types': 1.0.3 + tslib: 1.14.1 + dev: false + + /@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/keyvaluestorage@1.0.2: + 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: + safe-json-utils: 1.1.1 + tslib: 1.14.1 + dev: false + + /@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 + dev: false + + /@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.17.1 + qrcode: 1.5.3 + dev: false + + /@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 + dev: false + + /@walletconnect/legacy-types@2.0.0: + resolution: {integrity: sha512-sOVrA7HUdbI1OwKyPOQU0/DdvTSVFlsXWpAk2K2WvP2erTkBWPMTJq6cv2BmKdoJ3p6gLApT7sd+jHi3OF71uw==} + dependencies: + '@walletconnect/jsonrpc-types': 1.0.3 + dev: false + + /@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 + dev: false + + /@walletconnect/logger@2.0.1: + resolution: {integrity: sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ==} + dependencies: + pino: 7.11.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/modal-core@2.6.1(react@18.2.0): + resolution: {integrity: sha512-f2hYlJ5pwzGvjyaZ6BoGR5uiMgXzWXt6w6ktt1N8lmY6PiYp8whZgqx2hTxVWwVlsGnaIfh6UHp1hGnANx0eTQ==} + dependencies: + valtio: 1.11.0(react@18.2.0) + transitivePeerDependencies: + - react + dev: false + + /@walletconnect/modal-ui@2.6.1(react@18.2.0): + resolution: {integrity: sha512-RFUOwDAMijSK8B7W3+KoLKaa1l+KEUG0LCrtHqaB0H0cLnhEGdLR+kdTdygw+W8+yYZbkM5tXBm7MlFbcuyitA==} + dependencies: + '@walletconnect/modal-core': 2.6.1(react@18.2.0) + lit: 2.7.6 + motion: 10.16.2 + qrcode: 1.5.3 + transitivePeerDependencies: + - react + dev: false + + /@walletconnect/modal@2.6.1(react@18.2.0): + resolution: {integrity: sha512-G84tSzdPKAFk1zimgV7JzIUFT5olZUVtI3GcOk77OeLYjlMfnDT23RVRHm5EyCrjkptnvpD0wQScXePOFd2Xcw==} + dependencies: + '@walletconnect/modal-core': 2.6.1(react@18.2.0) + '@walletconnect/modal-ui': 2.6.1(react@18.2.0) + transitivePeerDependencies: + - react + dev: false + + /@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 + dev: false + + /@walletconnect/relay-api@1.0.9: + resolution: {integrity: sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg==} + dependencies: + '@walletconnect/jsonrpc-types': 1.0.3 + tslib: 1.14.1 + dev: false + + /@walletconnect/relay-auth@1.0.4: + resolution: {integrity: sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==} + dependencies: + '@stablelib/ed25519': 1.0.3 + '@stablelib/random': 1.0.2 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + uint8arrays: 3.1.1 + dev: false + + /@walletconnect/safe-json@1.0.2: + resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/sign-client@2.9.2: + resolution: {integrity: sha512-anRwnXKlR08lYllFMEarS01hp1gr6Q9XUgvacr749hoaC/AwGVlxYFdM8+MyYr3ozlA+2i599kjbK/mAebqdXg==} + dependencies: + '@walletconnect/core': 2.9.2 + '@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.9.2 + '@walletconnect/utils': 2.9.2 + events: 3.3.0 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - bufferutil + - lokijs + - utf-8-validate + dev: false + + /@walletconnect/time@1.0.2: + resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/types@2.9.2: + resolution: {integrity: sha512-7Rdn30amnJEEal4hk83cdwHUuxI1SWQ+K7fFFHBMqkuHLGi3tpMY6kpyfDxnUScYEZXqgRps4Jo5qQgnRqVM7A==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/keyvaluestorage': 1.0.2 + '@walletconnect/logger': 2.0.1 + events: 3.3.0 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - lokijs + dev: false + + /@walletconnect/universal-provider@2.9.2: + resolution: {integrity: sha512-JmaolkO8D31UdRaQCHwlr8uIFUI5BYhBzqYFt54Mc6gbIa1tijGOmdyr6YhhFO70LPmS6gHIjljwOuEllmlrxw==} + 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.9.2 + '@walletconnect/types': 2.9.2 + '@walletconnect/utils': 2.9.2 + events: 3.3.0 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - bufferutil + - encoding + - lokijs + - utf-8-validate + dev: false + + /@walletconnect/utils@2.9.2: + resolution: {integrity: sha512-D44hwXET/8JhhIjqljY6qxSu7xXnlPrf63UN/Qfl98vDjWlYVcDl2+JIQRxD9GPastw0S8XZXdRq59XDXLuZBg==} + 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.9.2 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + - lokijs + dev: false + + /@walletconnect/window-getters@1.0.1: + resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/window-metadata@1.0.1: + resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + dependencies: + '@walletconnect/window-getters': 1.0.1 + tslib: 1.14.1 + dev: false + + /@webassemblyjs/ast@1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: true + + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: true + + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: true + + /@webassemblyjs/helper-buffer@1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + dev: true + + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 @@ -6215,8 +7167,17 @@ packages: argparse: 2.0.1 dev: true + /JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: false + /abab@1.0.4: resolution: {integrity: sha512-I+Wi+qiE2kUXyrRhNsWv6XsjUTBJjSoVSctKNBfLG5zG/Xe7Rjbxf13+vqYHNTwHaFU+FtSlVxOCTiMEVtPv0A==} + requiresBuild: true dev: true optional: true @@ -6224,6 +7185,32 @@ packages: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true + /abitype@0.8.7(typescript@5.1.6): + resolution: {integrity: sha512-wQ7hV8Yg/yKmGyFpqrNZufCxbszDe5es4AZGYPBitocfSqXtjrTG9JMWFcc4N30ukl2ve48aBTwt7NJxVQdU3w==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + dependencies: + typescript: 5.1.6 + dev: false + + /abitype@0.9.3(typescript@5.1.6): + resolution: {integrity: sha512-dz4qCQLurx97FQhnb/EIYTk/ldQ+oafEDUqC0VVIeQS1Q48/YWt/9YNfMmp9SLFqN41ktxny3c8aYxHjmFIB/w==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.1.6 + dev: false + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -6234,6 +7221,7 @@ packages: /acorn-globals@1.0.9: resolution: {integrity: sha512-j3/4pkfih8W4NK22gxVSXcEonTpAHOHh0hu5BoZrKcOsW/4oBPxTi4Yk3SAj+FhC1f3+bRTkXdm4019gw1vg9g==} + requiresBuild: true dependencies: acorn: 2.7.0 dev: true @@ -6277,6 +7265,7 @@ packages: resolution: {integrity: sha512-pXK8ez/pVjqFdAgBkF1YPVRacuLQ9EXBKaKWaeh58WNfMkCmZhOZzu+NtKSPD5PHmCCHheQ5cD29qM1K4QTxIg==} engines: {node: '>=0.4.0'} hasBin: true + requiresBuild: true dev: true optional: true @@ -6297,6 +7286,10 @@ packages: engines: {node: '>= 10.0.0'} dev: true + /aes-js@3.1.2: + resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} + dev: false + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -6306,6 +7299,13 @@ packages: - supports-color dev: true + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + dev: false + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -6314,6 +7314,10 @@ packages: indent-string: 4.0.0 dev: true + /ahocorasick@1.0.2: + resolution: {integrity: sha512-hCOfMzbFx5IDutmWLAt6MZwOUjIfSM9G9FyVxytmE4Rs/5YDPWQrD/+IR1w+FweD9H2oOZEnv36TmkjhNURBVA==} + dev: false + /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -6339,13 +7343,13 @@ packages: /ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: true optional: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} @@ -6355,6 +7359,7 @@ packages: /ansi-styles@2.2.1: resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: true optional: true @@ -6369,7 +7374,6 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: true /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} @@ -6508,6 +7512,7 @@ packages: /asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + requiresBuild: true dependencies: safer-buffer: 2.1.2 dev: true @@ -6516,6 +7521,7 @@ packages: /assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} + requiresBuild: true dev: true optional: true @@ -6550,6 +7556,12 @@ packages: tslib: 2.6.1 dev: true + /async-mutex@0.2.6: + resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} + dependencies: + tslib: 2.6.1 + dev: false + /async-retry@1.2.3: resolution: {integrity: sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==} dependencies: @@ -6568,20 +7580,25 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true + + /atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: false /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - dev: true /aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + requiresBuild: true dev: true optional: true /aws4@1.12.0: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + requiresBuild: true dev: true optional: true @@ -6598,7 +7615,6 @@ packages: proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: true /axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} @@ -6608,6 +7624,7 @@ packages: /babel-code-frame@6.26.0: resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} + requiresBuild: true dependencies: chalk: 1.1.3 esutils: 2.0.3 @@ -6617,6 +7634,7 @@ packages: /babel-generator@6.26.1: resolution: {integrity: sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==} + requiresBuild: true dependencies: babel-messages: 6.23.0 babel-runtime: 6.26.0 @@ -6631,6 +7649,7 @@ packages: /babel-messages@6.23.0: resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==} + requiresBuild: true dependencies: babel-runtime: 6.26.0 dev: true @@ -6749,6 +7768,7 @@ packages: /babel-runtime@6.26.0: resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + requiresBuild: true dependencies: core-js: 2.6.12 regenerator-runtime: 0.11.1 @@ -6757,6 +7777,7 @@ packages: /babel-traverse@6.26.0: resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==} + requiresBuild: true dependencies: babel-code-frame: 6.26.0 babel-messages: 6.23.0 @@ -6774,6 +7795,7 @@ packages: /babel-types@6.26.0: resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==} + requiresBuild: true dependencies: babel-runtime: 6.26.0 esutils: 2.0.3 @@ -6785,6 +7807,7 @@ packages: /babylon@6.18.0: resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} hasBin: true + requiresBuild: true dev: true optional: true @@ -6792,9 +7815,14 @@ packages: 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 + dev: false + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true /basic-auth@2.0.1: resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} @@ -6805,6 +7833,7 @@ packages: /bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + requiresBuild: true dependencies: tweetnacl: 0.14.5 dev: true @@ -6830,11 +7859,29 @@ packages: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true + /bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + dev: false + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true + /bind-decorator@1.0.11: + resolution: {integrity: sha512-yzkH0uog6Vv/vQ9+rhSKxecnqGUZHYncg7qS7voz3Q76+TAi1SGiOKk2mlOvusQnFz9Dc4BC/NMkeXu11YgjJg==} + dev: false + + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: false + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: @@ -6843,6 +7890,10 @@ packages: readable-stream: 3.6.2 dev: true + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: false + /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -6867,6 +7918,14 @@ packages: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true + /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 + dev: false + /bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} dev: true @@ -6913,6 +7972,12 @@ packages: update-browserslist-db: 1.0.11(browserslist@4.21.10) dev: true + /bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + dependencies: + base-x: 3.0.9 + dev: false + /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: @@ -6938,6 +8003,19 @@ packages: ieee754: 1.2.1 dev: true + /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==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.6.0 + /bundle-name@3.0.0: resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} engines: {node: '>=12'} @@ -7002,7 +8080,6 @@ packages: dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.1 - dev: true /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -7011,7 +8088,6 @@ packages: /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - dev: true /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} @@ -7024,6 +8100,7 @@ packages: /caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + requiresBuild: true dev: true optional: true @@ -7043,6 +8120,7 @@ packages: /chalk@1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: ansi-styles: 2.2.1 escape-string-regexp: 1.0.5 @@ -7074,7 +8152,6 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true /check-error@1.0.2: resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} @@ -7083,6 +8160,7 @@ packages: /cheerio@0.20.0: resolution: {integrity: sha512-e5jCTzJc28MWkrLLjB1mu3ks7rDQJLC5y/JMdQkOAEX/dmJk62rC6Xae1yvOO4xyCxLpzcth3jIZ7nypmjQ/0w==} engines: {node: '>= 0.6'} + requiresBuild: true dependencies: css-select: 1.2.0 dom-serializer: 0.1.1 @@ -7097,6 +8175,7 @@ packages: /cheerio@1.0.0-rc.2: resolution: {integrity: sha512-9LDHQy1jHc/eXMzPN6/oah9Qba4CjdKECC7YYEE/2zge/tsGwt19NQp5NFdfd5Lx6TZlyC5SXNQkG41P9r6XDg==} engines: {node: '>= 0.6'} + requiresBuild: true dependencies: css-select: 1.2.0 dom-serializer: 0.1.1 @@ -7158,6 +8237,14 @@ packages: '@colors/colors': 1.5.0 dev: true + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: @@ -7181,6 +8268,16 @@ packages: mimic-response: 1.0.1 dev: true + /clsx@1.1.1: + resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} + engines: {node: '>=6'} + dev: false + + /clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: false + /clsx@2.0.0: resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} engines: {node: '>=6'} @@ -7196,15 +8293,16 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-logger@0.0.3: resolution: {integrity: sha512-s4oriek7VTdSmDbS5chJhNui3uUzlk/mU39V4HnOUv0KphRXpIj73lq4wY5f8l/x+WtHUhiV+FCzsrNO1w6REA==} + requiresBuild: true dev: true optional: true /color-logger@0.0.6: resolution: {integrity: sha512-0iBj3eHRYnor8EJi3oQ1kixbr7B2Sbw1InxjsYZxS+q2H+Ii69m3ARYSJeYIqmf/QRtFhWnR1v97wp8N7ABubw==} + requiresBuild: true dev: true optional: true @@ -7213,7 +8311,6 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true /colors@1.2.5: resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} @@ -7230,11 +8327,9 @@ packages: engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 - dev: true /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} @@ -7310,6 +8405,12 @@ packages: engines: {node: '>= 0.6'} dev: true + /copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + dependencies: + toggle-selection: 1.0.6 + dev: false + /core-js-compat@3.32.0: resolution: {integrity: sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==} dependencies: @@ -7330,11 +8431,13 @@ packages: /core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + requiresBuild: true dev: true optional: true /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + requiresBuild: true dev: true optional: true @@ -7379,6 +8482,14 @@ packages: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true + /cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + dependencies: + node-fetch: 2.6.12 + transitivePeerDependencies: + - encoding + dev: false + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -7390,6 +8501,7 @@ packages: /css-select@1.2.0: resolution: {integrity: sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==} + requiresBuild: true dependencies: boolbase: 1.0.0 css-what: 2.1.3 @@ -7426,9 +8538,15 @@ packages: /css-what@2.1.3: resolution: {integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==} + requiresBuild: true dev: true optional: true + /css-what@5.1.0: + resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==} + engines: {node: '>= 6'} + dev: false + /css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -7438,6 +8556,12 @@ packages: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} dev: true + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: false + /csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -7447,11 +8571,13 @@ packages: /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + requiresBuild: true dev: true optional: true /cssstyle@0.2.37: resolution: {integrity: sha512-FUpKc+1FNBsHUr9IsfSGCovr8VuGOiiuzlgCyppKBjJi2jYTOFLN3oiiNRMIvYqbFzF38mqKj4BgcevzU5/kIA==} + requiresBuild: true dependencies: cssom: 0.3.8 dev: true @@ -7534,6 +8660,7 @@ packages: /dashdash@1.14.1: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} + requiresBuild: true dependencies: assert-plus: 1.0.0 dev: true @@ -7584,7 +8711,11 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: true + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: false /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -7593,7 +8724,6 @@ packages: /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} - dev: true /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} @@ -7636,10 +8766,13 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /deep-object-diff@1.1.9: + resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} + dev: false + /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - dev: true /default-browser-id@3.0.0: resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} @@ -7682,10 +8815,14 @@ packages: object-keys: 1.1.1 dev: true + /delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: false + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: true /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} @@ -7706,9 +8843,14 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true + /detect-browser@5.3.0: + resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + dev: false + /detect-indent@4.0.0: resolution: {integrity: sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: repeating: 2.0.1 dev: true @@ -7716,7 +8858,6 @@ packages: /detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dev: true /detect-package-manager@2.0.1: resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} @@ -7745,6 +8886,10 @@ packages: engines: {node: '>=0.3.1'} dev: true + /dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + dev: false + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -7779,6 +8924,7 @@ packages: /dom-serializer@0.1.1: resolution: {integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==} + requiresBuild: true dependencies: domelementtype: 1.3.1 entities: 1.1.2 @@ -7795,6 +8941,7 @@ packages: /domelementtype@1.3.1: resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + requiresBuild: true dev: true optional: true @@ -7811,6 +8958,7 @@ packages: /domhandler@2.3.0: resolution: {integrity: sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==} + requiresBuild: true dependencies: domelementtype: 1.3.1 dev: true @@ -7818,6 +8966,7 @@ packages: /domhandler@2.4.2: resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + requiresBuild: true dependencies: domelementtype: 1.3.1 dev: true @@ -7832,6 +8981,7 @@ packages: /domutils@1.5.1: resolution: {integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==} + requiresBuild: true dependencies: dom-serializer: 0.1.1 domelementtype: 1.3.1 @@ -7872,12 +9022,22 @@ packages: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true + /duplexify@4.1.2: + resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.1 + dev: false + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true /ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + requiresBuild: true dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 @@ -7912,7 +9072,6 @@ packages: /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} @@ -7923,6 +9082,10 @@ packages: engines: {node: '>= 4'} dev: true + /encode-utf8@1.0.3: + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + dev: false + /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -7932,7 +9095,6 @@ packages: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 - dev: true /enhanced-resolve@5.15.0: resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} @@ -7951,11 +9113,13 @@ packages: /entities@1.0.0: resolution: {integrity: sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==} + requiresBuild: true dev: true optional: true /entities@1.1.2: resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} + requiresBuild: true dev: true optional: true @@ -8104,6 +9268,16 @@ packages: resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} dev: true + /es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: false + + /es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + dependencies: + es6-promise: 4.2.8 + dev: false + /esbuild-plugin-alias@0.2.1: resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} dev: true @@ -8175,6 +9349,7 @@ packages: resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} engines: {node: '>=4.0'} hasBin: true + requiresBuild: true dependencies: esprima: 4.0.1 estraverse: 4.3.0 @@ -8572,14 +9747,48 @@ packages: engines: {node: '>= 0.6'} dev: true + /eth-block-tracker@6.1.0: + resolution: {integrity: sha512-K9SY8+/xMBi4M5HHTDdxnpEqEEGjbNpzHFqvxyjMZej8InV/B+CkFRKM6W+uvrFJ7m8Zd1E0qUkseU3vdIDFYQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + '@metamask/utils': 3.6.0 + json-rpc-random-id: 1.0.1 + pify: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /eth-json-rpc-filters@5.1.0: + resolution: {integrity: sha512-fos+9xmoa1A2Ytsc9eYof17r81BjdJOUcGcgZn4K/tKdCCTb+a8ytEtwlu1op5qsXFDlgGmstTELFrDEc89qEQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + async-mutex: 0.2.6 + eth-query: 2.1.2 + json-rpc-engine: 6.1.0 + pify: 5.0.0 + dev: false + + /eth-query@2.1.2: + resolution: {integrity: sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==} + dependencies: + json-rpc-random-id: 1.0.1 + xtend: 4.0.2 + dev: false + + /eth-rpc-errors@4.0.2: + resolution: {integrity: sha512-n+Re6Gu8XGyfFy1it0AwbD1x0MUzspQs0D5UiPs1fFPCr6WAwZM+vbIhXheBFrpgosqN9bs5PqlB4Q61U/QytQ==} + dependencies: + fast-safe-stringify: 2.1.1 + dev: false + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - dev: true /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} @@ -8683,9 +9892,15 @@ packages: /extsprintf@1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} + requiresBuild: true dev: true optional: true + /eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + dev: false + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -8728,6 +9943,19 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true + /fast-redact@3.3.0: + resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} + engines: {node: '>=6'} + dev: false + + /fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + dev: false + + /fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + dev: false + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -8780,6 +10008,10 @@ packages: ramda: 0.29.0 dev: true + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: false + /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -8796,7 +10028,6 @@ packages: /filter-obj@1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} - dev: true /finalhandler@1.2.0: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} @@ -8832,7 +10063,6 @@ packages: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -8867,13 +10097,11 @@ packages: peerDependenciesMeta: debug: optional: true - dev: true /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 - dev: true /foreground-child@2.0.0: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} @@ -8893,12 +10121,14 @@ packages: /forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + requiresBuild: true dev: true optional: true /form-data@2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} + requiresBuild: true dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -8922,7 +10152,6 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} @@ -8954,6 +10183,7 @@ packages: /fs-extra@5.0.0: resolution: {integrity: sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==} + requiresBuild: true dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 @@ -9007,7 +10237,6 @@ packages: /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - dev: true /get-func-name@2.0.0: resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} @@ -9020,12 +10249,10 @@ packages: has: 1.0.3 has-proto: 1.0.1 has-symbols: 1.0.3 - dev: true /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} - dev: true /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -9059,6 +10286,7 @@ packages: /getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + requiresBuild: true dependencies: assert-plus: 1.0.0 dev: true @@ -9154,6 +10382,7 @@ packages: /globals@9.18.0: resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: true optional: true @@ -9184,7 +10413,6 @@ packages: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.1 - dev: true /got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} @@ -9227,6 +10455,7 @@ packages: /har-schema@2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} engines: {node: '>=4'} + requiresBuild: true dev: true optional: true @@ -9234,6 +10463,7 @@ packages: resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} engines: {node: '>=6'} deprecated: this library is no longer supported + requiresBuild: true dependencies: ajv: 6.12.6 har-schema: 2.0.0 @@ -9243,6 +10473,7 @@ packages: /has-ansi@2.0.0: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: ansi-regex: 2.1.1 dev: true @@ -9264,7 +10495,6 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} @@ -9275,19 +10505,16 @@ packages: /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==} engines: {node: '>= 0.4'} - dev: true /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: true /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} @@ -9295,11 +10522,22 @@ packages: dependencies: function-bind: 1.1.1 + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true dev: true + /hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + dev: false + /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: @@ -9335,6 +10573,7 @@ packages: /htmlparser2@3.10.1: resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} + requiresBuild: true dependencies: domelementtype: 1.3.1 domhandler: 2.4.2 @@ -9347,6 +10586,7 @@ packages: /htmlparser2@3.8.3: resolution: {integrity: sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==} + requiresBuild: true dependencies: domelementtype: 1.3.1 domhandler: 2.3.0 @@ -9419,6 +10659,7 @@ packages: /http-signature@1.2.0: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} engines: {node: '>=0.8', npm: '>=1.3.7'} + requiresBuild: true dependencies: assert-plus: 1.0.0 jsprim: 1.4.2 @@ -9454,6 +10695,12 @@ 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 + dev: false + /hyperlinker@1.0.0: resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} engines: {node: '>=4'} @@ -9461,6 +10708,7 @@ packages: /ice-cap@0.0.4: resolution: {integrity: sha512-39ZblYEKlqj7LHgLkUcVk7zcJp772lOVQAUhN6QyY88w8/4bn5SgDeU2020yzHosf+uKPuCFK1UQ36gyBNiraw==} + requiresBuild: true dependencies: cheerio: 0.20.0 color-logger: 0.0.3 @@ -9483,13 +10731,16 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true + /immer@10.0.2: + resolution: {integrity: sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==} + dev: false + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -9521,7 +10772,6 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -9549,7 +10799,6 @@ packages: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: loose-envify: 1.4.0 - dev: true /ip@2.0.0: resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} @@ -9571,7 +10820,6 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} @@ -9608,7 +10856,6 @@ packages: /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - dev: true /is-core-module@2.13.0: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} @@ -9647,20 +10894,19 @@ packages: /is-finite@1.1.0: resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: true optional: true /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: true /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: true /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -9767,12 +11013,9 @@ packages: engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.11 - dev: true /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true - optional: true /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} @@ -9800,6 +11043,7 @@ packages: /isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + requiresBuild: true dev: true optional: true @@ -9811,8 +11055,25 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /isomorphic-ws@4.0.1(ws@7.5.9): + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + dependencies: + ws: 7.5.9 + dev: false + + /isomorphic-ws@5.0.0(ws@8.12.0): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.12.0 + dev: false + /isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + requiresBuild: true dev: true optional: true @@ -9871,6 +11132,28 @@ packages: minimatch: 3.1.2 dev: true + /jayson@4.1.0: + resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} + engines: {node: '>=8'} + hasBin: true + 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 + uuid: 8.3.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /jest-diff@29.6.2: resolution: {integrity: sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -9980,6 +11263,7 @@ packages: /js-tokens@3.0.2: resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} + requiresBuild: true dev: true optional: true @@ -10003,6 +11287,7 @@ packages: /jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + requiresBuild: true dev: true optional: true @@ -10036,7 +11321,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 12.0.1 - ws: 8.13.0 + ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -10074,6 +11359,7 @@ packages: /jsesc@1.3.0: resolution: {integrity: sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==} hasBin: true + requiresBuild: true dev: true optional: true @@ -10090,12 +11376,25 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + /json-rpc-engine@6.1.0: + resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + eth-rpc-errors: 4.0.2 + dev: false + + /json-rpc-random-id@1.0.1: + resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} + dev: false + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true /json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + requiresBuild: true dev: true optional: true @@ -10111,8 +11410,6 @@ packages: /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: true - optional: true /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} @@ -10159,6 +11456,11 @@ packages: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} dev: true + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: false + /jsonpointer@5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} @@ -10177,6 +11479,7 @@ packages: /jsprim@1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} + requiresBuild: true dependencies: assert-plus: 1.0.0 extsprintf: 1.3.0 @@ -10220,12 +11523,26 @@ packages: safe-buffer: 5.2.1 dev: true + /keccak@3.0.3: + resolution: {integrity: sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.6.0 + readable-stream: 3.6.2 + dev: false + /keyv@4.5.3: resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} dependencies: json-buffer: 3.0.1 dev: true + /keyvaluestorage-interface@1.0.0: + resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} + dev: false + /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -10257,6 +11574,7 @@ packages: /levn@0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} engines: {node: '>= 0.8.0'} + requiresBuild: true dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 @@ -10283,6 +11601,28 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /lit-element@3.3.3: + resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.1.1 + '@lit/reactive-element': 1.6.3 + lit-html: 2.8.0 + dev: false + + /lit-html@2.8.0: + resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + dependencies: + '@types/trusted-types': 2.0.3 + dev: false + + /lit@2.7.6: + resolution: {integrity: sha512-1amFHA7t4VaaDe+vdQejSVBklwtH9svGoG6/dZi9JhxtJBBlqY5D1RV7iLUYY0trCqQc4NfhYYZilZiVHt7Hxg==} + dependencies: + '@lit/reactive-element': 1.6.3 + lit-element: 3.3.3 + lit-html: 2.8.0 + dev: false + /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -10307,7 +11647,6 @@ packages: engines: {node: '>=8'} dependencies: p-locate: 4.1.0 - dev: true /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} @@ -10334,7 +11673,6 @@ packages: /lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - dev: true /lodash.isobject@3.0.2: resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==} @@ -10398,7 +11736,6 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: true /lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} @@ -10460,6 +11797,7 @@ packages: resolution: {integrity: sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==} engines: {node: '>=0.10.0'} hasBin: true + requiresBuild: true dev: true optional: true @@ -10481,6 +11819,12 @@ packages: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: true + /media-query-parser@2.0.2: + resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} + dependencies: + '@babel/runtime': 7.22.10 + dev: false + /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -10529,14 +11873,12 @@ packages: /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - dev: true /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - dev: true /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} @@ -10569,6 +11911,10 @@ packages: engines: {node: '>=4'} dev: true + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false + /minimatch@3.0.5: resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==} dependencies: @@ -10597,6 +11943,7 @@ packages: /minimist@1.2.0: resolution: {integrity: sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==} + requiresBuild: true dev: true optional: true @@ -10625,6 +11972,17 @@ packages: ufo: 1.2.0 dev: true + /motion@10.16.2: + resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} + dependencies: + '@motionone/animation': 10.15.1 + '@motionone/dom': 10.16.2 + '@motionone/svelte': 10.16.2 + '@motionone/types': 10.15.1 + '@motionone/utils': 10.15.1 + '@motionone/vue': 10.16.2 + dev: false + /mrmime@1.0.1: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} engines: {node: '>=10'} @@ -10640,16 +11998,18 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true /muggle-string@0.3.1: resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} dev: true + /multiformats@9.9.0: + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + dev: false + /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -10680,6 +12040,10 @@ packages: tslib: 2.6.1 dev: true + /node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + dev: false + /node-addon-api@3.2.1: resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} dev: true @@ -10705,12 +12069,10 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: true /node-gyp-build@4.6.0: resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} hasBin: true - dev: true /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -10759,6 +12121,7 @@ packages: /nth-check@1.0.2: resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + requiresBuild: true dependencies: boolbase: 1.0.0 dev: true @@ -10772,6 +12135,7 @@ packages: /nwmatcher@1.4.4: resolution: {integrity: sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==} + requiresBuild: true dev: true optional: true @@ -10844,6 +12208,7 @@ packages: /oauth-sign@0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + requiresBuild: true dev: true optional: true @@ -10853,7 +12218,6 @@ packages: /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true /object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} @@ -10937,6 +12301,10 @@ packages: '@octokit/types': 11.1.0 dev: true + /on-exit-leak-free@0.2.0: + resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + dev: false + /on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -10953,7 +12321,6 @@ packages: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - dev: true /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} @@ -10996,6 +12363,7 @@ packages: /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} + requiresBuild: true dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -11018,6 +12386,10 @@ packages: type-check: 0.4.0 dev: true + /outdent@0.8.0: + resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + dev: false + /override-require@1.1.1: resolution: {integrity: sha512-eoJ9YWxFcXbrn2U8FKT6RV+/Kj7fiGAB1VvHzbYKt8xM5ZuKZgCGvnHzDxmreEjcBH28ejg5MiOH4iyY1mQnkg==} dev: true @@ -11032,7 +12404,6 @@ packages: engines: {node: '>=6'} dependencies: p-try: 2.2.0 - dev: true /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} @@ -11053,7 +12424,6 @@ packages: engines: {node: '>=8'} dependencies: p-limit: 2.3.0 - dev: true /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} @@ -11065,7 +12435,6 @@ packages: /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - dev: true /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -11114,11 +12483,13 @@ packages: /parse5@1.5.1: resolution: {integrity: sha512-w2jx/0tJzvgKwZa58sj2vAYq/S/K1QJfIB3cWYea/Iu1scFPDQQ3IQiVZTHWtRBwAjv2Yd7S/xeZf3XqLDb3bA==} + requiresBuild: true dev: true optional: true /parse5@3.0.3: resolution: {integrity: sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==} + requiresBuild: true dependencies: '@types/node': 18.14.2 dev: true @@ -11138,7 +12509,6 @@ packages: /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - dev: true /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} @@ -11184,6 +12554,7 @@ packages: /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + requiresBuild: true dev: true optional: true @@ -11196,6 +12567,44 @@ packages: engines: {node: '>=8.6'} dev: true + /pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: false + + /pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + dev: false + + /pino-abstract-transport@0.5.0: + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + dependencies: + duplexify: 4.1.2 + split2: 4.2.0 + dev: false + + /pino-std-serializers@4.0.0: + resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + dev: false + + /pino@7.11.0: + resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.3.0 + on-exit-leak-free: 0.2.0 + pino-abstract-transport: 0.5.0 + pino-std-serializers: 4.0.0 + process-warning: 1.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.1.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 2.8.0 + thread-stream: 0.15.2 + dev: false + /pinpoint@1.1.0: resolution: {integrity: sha512-+04FTD9x7Cls2rihLlo57QDCcHoLBGn5Dk51SwtFBWkUWLxZaBXyNVpCw1S+atvE7GmnFjeaRZ0WLq3UYuqAdg==} dev: true @@ -11227,6 +12636,11 @@ packages: pathe: 1.1.1 dev: true + /pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + dev: false + /polished@4.2.2: resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} engines: {node: '>=10'} @@ -11254,9 +12668,14 @@ packages: source-map-js: 1.0.2 dev: true + /preact@10.17.1: + resolution: {integrity: sha512-X9BODrvQ4Ekwv9GURm9AKAGaomqXmip7NQTZgY7gcNmr7XE83adOMJvd3N42id1tMFU7ojiynRsYnY6/BRFxLA==} + dev: false + /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} + requiresBuild: true dev: true optional: true @@ -11315,6 +12734,10 @@ packages: minimist: 1.2.8 dev: true + /process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + dev: false + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -11343,9 +12766,16 @@ packages: ipaddr.js: 1.9.1 dev: true + /proxy-compare@2.4.0: + resolution: {integrity: sha512-FD8KmQUQD6Mfpd0hywCOzcon/dbkFP8XBd9F1ycbKtvVsfv6TsFUKJ2eC0Iz2y+KzlkdT1Z8SY6ZSgm07zOyqg==} + dev: false + + /proxy-compare@2.5.1: + resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + dev: false + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} @@ -11363,6 +12793,28 @@ packages: engines: {node: '>=6'} dev: true + /qrcode@1.5.0: + resolution: {integrity: sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + dijkstrajs: 1.0.3 + encode-utf8: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + dev: false + + /qrcode@1.5.3: + resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + dijkstrajs: 1.0.3 + encode-utf8: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + dev: false + /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} @@ -11375,11 +12827,11 @@ packages: engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 - dev: true /qs@6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} + requiresBuild: true dev: true optional: true @@ -11391,7 +12843,16 @@ packages: filter-obj: 1.1.0 split-on-first: 1.1.0 strict-uri-encode: 2.0.0 - dev: true + + /query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + 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 + dev: false /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -11401,6 +12862,10 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: false + /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} @@ -11414,7 +12879,6 @@ packages: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 - dev: true /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} @@ -11540,8 +13004,23 @@ packages: engines: {node: '>=0.10.0'} dev: true - /react-remove-scroll-bar@2.3.4(@types/react@18.2.18)(react@18.2.0): - resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + /react-remove-scroll-bar@2.3.4(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.18 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.2.18)(react@18.2.0) + tslib: 2.6.1 + + /react-remove-scroll@2.5.4(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} engines: {node: '>=10'} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -11552,9 +13031,12 @@ packages: dependencies: '@types/react': 18.2.18 react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.2.18)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.18)(react@18.2.0) tslib: 2.6.1 - dev: true + use-callback-ref: 1.3.0(@types/react@18.2.18)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.18)(react@18.2.0) + dev: false /react-remove-scroll@2.5.5(@types/react@18.2.18)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} @@ -11613,7 +13095,26 @@ packages: invariant: 2.2.4 react: 18.2.0 tslib: 2.6.1 - dev: true + + /react-tracked@1.7.11(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0): + resolution: {integrity: sha512-+XXv4dJH7NnLtSD/cPVL9omra4A3KRK91L33owevXZ81r7qF/a9DdCsVZa90jMGht/V1Ym9sasbmidsJykhULQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '*' + react-native: '*' + scheduler: '>=0.19.0' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + proxy-compare: 2.4.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + scheduler: 0.23.0 + use-context-selector: 1.4.1(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0) + dev: false /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} @@ -11656,6 +13157,7 @@ packages: /readable-stream@1.1.14: resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + requiresBuild: true dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -11671,7 +13173,6 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -11685,6 +13186,11 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /real-require@0.1.0: + resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + engines: {node: '>= 12.13.0'} + dev: false + /recast@0.23.3: resolution: {integrity: sha512-HbCVFh2ANP6a09nzD4lx7XthsxMOJWKX5pIcUwtLrmeEIl3I0DwjCoVXDE0Aobk+7k/mS3H50FK4iuYArpcT6Q==} engines: {node: '>= 4'} @@ -11717,6 +13223,7 @@ packages: /regenerator-runtime@0.11.1: resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + requiresBuild: true dev: true optional: true @@ -11781,6 +13288,7 @@ packages: /repeating@2.0.1: resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: is-finite: 1.1.0 dev: true @@ -11790,6 +13298,7 @@ packages: resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} engines: {node: '>= 6'} deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + requiresBuild: true dependencies: aws-sign2: 0.7.0 aws4: 1.12.0 @@ -11817,13 +13326,16 @@ packages: /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - dev: true /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} dev: true + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: false + /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true @@ -11904,6 +13416,18 @@ packages: fsevents: 2.3.2 dev: true + /rpc-websockets@7.6.0: + resolution: {integrity: sha512-Jgcs8q6t8Go98dEulww1x7RysgTkzpCMelVxZW4hvuyFtOGpeUz9prpr2KjUa/usqxgFCd9Tu3+yhHEP9GVmiQ==} + dependencies: + '@babel/runtime': 7.22.10 + eventemitter3: 4.0.7 + uuid: 8.3.2 + ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.7 + utf-8-validate: 5.0.10 + dev: false + /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: true @@ -11921,6 +13445,13 @@ packages: queue-microtask: 1.2.3 dev: true + /rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: @@ -11947,7 +13478,10 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + + /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==} @@ -11957,12 +13491,18 @@ packages: is-regex: 1.1.4 dev: true + /safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + dev: false + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true /sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + requiresBuild: true dev: true optional: true @@ -12015,7 +13555,6 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: true /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -12067,10 +13606,22 @@ packages: - supports-color dev: true + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: false + /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: true + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -12089,7 +13640,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.1 object-inspect: 1.12.3 - dev: true /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -12129,6 +13679,12 @@ packages: tslib: 2.6.1 dev: true + /sonic-boom@2.8.0: + resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} + dependencies: + atomic-sleep: 1.0.0 + dev: false + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -12186,7 +13742,11 @@ packages: /split-on-first@1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} - dev: true + + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -12196,6 +13756,7 @@ packages: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} hasBin: true + requiresBuild: true dependencies: asn1: 0.2.6 assert-plus: 1.0.0 @@ -12265,10 +13826,20 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /stream-shift@1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + dev: false + /strict-uri-encode@2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} - dev: true /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} @@ -12282,7 +13853,6 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} @@ -12333,18 +13903,20 @@ packages: /string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + requiresBuild: true dev: true optional: true /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + requiresBuild: true dependencies: safe-buffer: 5.2.1 - dev: true /strip-ansi@3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: ansi-regex: 2.1.1 dev: true @@ -12355,7 +13927,6 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - dev: true /strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} @@ -12411,9 +13982,19 @@ packages: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} dev: false + /superstruct@0.14.2: + resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + dev: false + + /superstruct@1.0.3: + resolution: {integrity: sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==} + engines: {node: '>=14.0.0'} + dev: false + /supports-color@2.0.0: resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} engines: {node: '>=0.8.0'} + requiresBuild: true dev: true optional: true @@ -12428,7 +14009,6 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: true /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} @@ -12484,6 +14064,7 @@ packages: /taffydb@2.7.3: resolution: {integrity: sha512-GQ3gtYFSOAxSMN/apGtDKKkbJf+8izz5YfbGqIsUc7AMiQOapARZ76dhilRY2h39cynYxBFdafQo5HUL5vgkrg==} + requiresBuild: true dev: true optional: true @@ -12554,13 +14135,22 @@ packages: minimatch: 3.1.2 dev: true + /text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + dev: false + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true + /thread-stream@0.15.2: + resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} + dependencies: + real-require: 0.1.0 + dev: false + /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true /tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} @@ -12599,6 +14189,7 @@ packages: /to-fast-properties@1.0.3: resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: true optional: true @@ -12617,6 +14208,10 @@ packages: resolution: {integrity: sha512-IfajhBTeg0HlMXu1f+VMbPef05QpDTsZ9X2Yn1+8npdaXsXg/+wrm9Ze1WG5OS1UDC3qJ5EQN/XOZ3gfXjPFCw==} dev: true + /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'} @@ -12630,6 +14225,7 @@ packages: /tough-cookie@2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} + requiresBuild: true dependencies: psl: 1.9.0 punycode: 2.3.0 @@ -12648,7 +14244,6 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true /tr46@4.1.1: resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} @@ -12660,6 +14255,7 @@ packages: /trim-right@1.0.1: resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: true optional: true @@ -12741,7 +14337,6 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} @@ -12762,6 +14357,7 @@ packages: /tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + requiresBuild: true dependencies: safe-buffer: 5.2.1 dev: true @@ -12769,12 +14365,14 @@ packages: /tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + requiresBuild: true dev: true optional: true /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} + requiresBuild: true dependencies: prelude-ls: 1.1.2 dev: true @@ -12858,6 +14456,12 @@ packages: is-typed-array: 1.1.12 dev: true + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: false + /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} @@ -12881,6 +14485,12 @@ packages: dev: true optional: true + /uint8arrays@3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} + dependencies: + multiformats: 9.9.0 + dev: false + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -13031,7 +14641,24 @@ packages: '@types/react': 18.2.18 react: 18.2.0 tslib: 2.6.1 - dev: true + + /use-context-selector@1.4.1(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0): + resolution: {integrity: sha512-Io2ArvcRO+6MWIhkdfMFt+WKQX+Vb++W8DS2l03z/Vw/rz3BclKpM0ynr4LYGyU85Eke+Yx5oIhTY++QR0ZDoA==} + peerDependencies: + react: '>=16.8.0' + react-dom: '*' + react-native: '*' + scheduler: '>=0.19.0' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + scheduler: 0.23.0 + dev: false /use-resize-observer@9.1.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} @@ -13058,7 +14685,6 @@ packages: detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.1 - dev: true /use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} @@ -13068,9 +14694,15 @@ packages: react: 18.2.0 dev: false + /utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.6.0 + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true /util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} @@ -13080,7 +14712,6 @@ packages: is-generator-function: 1.0.10 is-typed-array: 1.1.12 which-typed-array: 1.1.11 - dev: true /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} @@ -13091,9 +14722,15 @@ packages: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true + requiresBuild: true dev: true optional: true + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true @@ -13128,6 +14765,20 @@ packages: engines: {node: '>= 0.10'} dev: true + /valtio@1.11.0(react@18.2.0): + resolution: {integrity: sha512-65Yd0yU5qs86b5lN1eu/nzcTgQ9/6YnD6iO+DDaDbQLn1Zv2w12Gwk43WkPlUBxk5wL/6cD5YMFf7kj6HZ1Kpg==} + engines: {node: '>=12.20.0'} + peerDependencies: + react: '>=16.8' + peerDependenciesMeta: + react: + optional: true + dependencies: + proxy-compare: 2.5.1 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -13136,6 +14787,7 @@ packages: /verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} + requiresBuild: true dependencies: assert-plus: 1.0.0 core-util-is: 1.0.2 @@ -13143,6 +14795,31 @@ packages: dev: true optional: true + /viem@1.7.0(typescript@5.1.6): + resolution: {integrity: sha512-S4SclYe0Oca6TuPh2YPI3BzfC7a4UvN7TRDCWwpoVNnu9+4z2hqCZhW+6aF1yufgSwdezNsF14vztE/P4eMdBw==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.9.0 + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.0 + '@scure/bip32': 1.3.0 + '@scure/bip39': 1.2.0 + '@types/ws': 8.5.5 + '@wagmi/chains': 1.7.0(typescript@5.1.6) + abitype: 0.9.3(typescript@5.1.6) + isomorphic-ws: 5.0.0(ws@8.12.0) + typescript: 5.1.6 + ws: 8.12.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + /vite-node@0.34.1(@types/node@18.14.2): resolution: {integrity: sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==} engines: {node: '>=v14.18.0'} @@ -13362,6 +15039,39 @@ packages: xml-name-validator: 4.0.0 dev: true + /wagmi@1.3.10(@types/react@18.2.18)(immer@10.0.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6)(viem@1.7.0): + resolution: {integrity: sha512-MMGJcnxOmeUZWDmzUxgRGcB1cqxbJoSFSa+pNY4vBCWMz0n4ptpE5F8FKISLCx+BGoDwsaz2ldcMALcdJZ+29w==} + peerDependencies: + react: '>=17.0.0' + typescript: '>=5.0.4' + viem: '>=0.3.35' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@tanstack/query-sync-storage-persister': 4.33.0 + '@tanstack/react-query': 4.32.6(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-query-persist-client': 4.33.0(@tanstack/react-query@4.32.6) + '@wagmi/core': 1.3.9(@types/react@18.2.18)(immer@10.0.2)(react@18.2.0)(typescript@5.1.6)(viem@1.7.0) + abitype: 0.8.7(typescript@5.1.6) + react: 18.2.0 + typescript: 5.1.6 + use-sync-external-store: 1.2.0(react@18.2.0) + viem: 1.7.0(typescript@5.1.6) + 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 + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -13378,12 +15088,12 @@ packages: /webidl-conversions@2.0.1: resolution: {integrity: sha512-OZ7I/f0sM+T28T2/OXinNGfmvjm3KKptdyQy8NPRZyLfYBn+9vt72Bfr+uQaE9OvWyxJjQ5kHFygH2wOTUb76g==} + requiresBuild: true dev: true optional: true /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} @@ -13453,6 +15163,7 @@ packages: /whatwg-url-compat@0.6.5: resolution: {integrity: sha512-vbg5+JVNwGtHRI3GheZGWrcUlxF9BXHbA80dLa+2XqJjlV/BK6upoi2j8dIRW9FGPUUyaMm7Hf1pTexHnsk85g==} + requiresBuild: true dependencies: tr46: 0.0.3 dev: true @@ -13471,7 +15182,6 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -13492,6 +15202,10 @@ packages: is-weakset: 2.0.2 dev: true + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: false + /which-typed-array@1.1.11: resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} engines: {node: '>= 0.4'} @@ -13501,7 +15215,6 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -13523,6 +15236,7 @@ packages: /word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: true optional: true @@ -13530,6 +15244,15 @@ packages: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -13550,7 +15273,6 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} @@ -13560,7 +15282,33 @@ packages: signal-exit: 3.0.7 dev: true - /ws@8.13.0: + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.12.0: + resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10): resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} peerDependencies: @@ -13571,7 +15319,9 @@ packages: optional: true utf-8-validate: optional: true - dev: true + dependencies: + bufferutil: 4.0.7 + utf-8-validate: 5.0.10 /xcase@2.0.1: resolution: {integrity: sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==} @@ -13579,6 +15329,7 @@ packages: /xml-name-validator@2.0.1: resolution: {integrity: sha512-jRKe/iQYMyVJpzPH+3HL97Lgu5HrCfii+qSo+TfjKHtOnvbnvdVfMYrn9Q34YV81M2e5sviJlI6Ko9y+nByzvA==} + requiresBuild: true dev: true optional: true @@ -13594,7 +15345,10 @@ packages: /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - dev: true + + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: false /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} @@ -13607,12 +15361,19 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false + /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -13623,6 +15384,23 @@ packages: engines: {node: '>=12'} dev: true + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: false + /yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -13675,3 +15453,24 @@ packages: optionalDependencies: commander: 9.5.0 dev: true + + /zustand@4.4.1(@types/react@18.2.18)(immer@10.0.2)(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.18 + immer: 10.0.2 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false diff --git a/tsconfig.base.json b/tsconfig.base.json index fa7f24d88..77386f6e5 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -8,21 +8,58 @@ "emitDecoratorMetadata": true, "experimentalDecorators": true, "importHelpers": true, - "target": "es2015", + "target": "es2020", "module": "esnext", - "lib": ["es2020", "dom"], + "lib": [ + "es2020", + "dom" + ], "skipLibCheck": true, "skipDefaultLibCheck": true, "resolveJsonModule": true, + "strict": false, "baseUrl": ".", "paths": { - "@origin/defi/oeth": ["libs/defi/oeth/src/index.ts"], - "@origin/defi/ousd": ["libs/defi/ousd/src/index.ts"], - "@origin/shared/components": ["libs/shared/components/src/index.ts"], - "@origin/shared/data-access": ["libs/shared/data-access/src/index.ts"], - "@origin/shared/storybook": ["libs/shared/storybook/src/index.ts"], - "@origin/shared/theme": ["libs/shared/theme/src/index.ts"] + "@origin/defi/oeth": [ + "libs/defi/oeth/src/index.ts" + ], + "@origin/defi/ousd": [ + "libs/defi/ousd/src/index.ts" + ], + "@origin/oeth/history": [ + "libs/oeth/history/src/index.ts" + ], + "@origin/oeth/swap": [ + "libs/oeth/swap/src/index.ts" + ], + "@origin/oeth/wrap": [ + "libs/oeth/wrap/src/index.ts" + ], + "@origin/shared/components": [ + "libs/shared/components/src/index.ts" + ], + "@origin/shared/contracts": [ + "libs/shared/contracts/src/index.ts" + ], + "@origin/shared/data-access": [ + "libs/shared/data-access/src/index.ts" + ], + "@origin/shared/providers": [ + "libs/shared/providers/src/index.ts" + ], + "@origin/shared/storybook": [ + "libs/shared/storybook/src/index.ts" + ], + "@origin/shared/theme": [ + "libs/shared/theme/src/index.ts" + ], + "@origin/shared/utils": [ + "libs/shared/utils/src/index.ts" + ] } }, - "exclude": ["node_modules", "tmp"] + "exclude": [ + "node_modules", + "tmp" + ] }