diff --git a/.github/workflows/core.yaml b/.github/workflows/core.yaml index de42c2dc6..8dbe76ae6 100644 --- a/.github/workflows/core.yaml +++ b/.github/workflows/core.yaml @@ -7,6 +7,15 @@ on: paths: - "core/**" pull_request: + workflow_dispatch: + inputs: + environment: + description: "Testnet to deploy contracts to" + required: true + type: choice + options: + - "sepolia" + default: "sepolia" defaults: run: @@ -23,7 +32,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 @@ -35,7 +44,7 @@ jobs: run: pnpm install --prefer-offline --frozen-lockfile - name: Download Build Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: core-build path: core/ @@ -50,7 +59,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 @@ -71,7 +80,7 @@ jobs: run: pip3 install slither-analyzer==$SLITHER_VERSION - name: Download Build Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: core-build path: core/ @@ -86,7 +95,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 @@ -98,7 +107,7 @@ jobs: run: pnpm install --prefer-offline --frozen-lockfile - name: Download Build Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: core-build path: core/ @@ -113,7 +122,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 @@ -125,10 +134,57 @@ jobs: run: pnpm install --prefer-offline --frozen-lockfile - name: Download Build Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: core-build path: core/ - name: Deploy run: pnpm run deploy --no-compile + + core-deploy-testnet: + needs: [core-deploy-dry-run] + if: github.event_name == 'workflow_dispatch' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup PNPM + uses: pnpm/action-setup@v3 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version-file: "core/.nvmrc" + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --prefer-offline --frozen-lockfile + + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: core-build + path: core/ + + - name: Remove existing deployment artifacts for the selected network + run: rm -rf deployments/${{ github.event.inputs.environment }} + + - name: Deploy contracts + env: + ACCOUNTS_PRIVATE_KEYS: ${{ secrets.TESTNET_ETH_CONTRACT_OWNER_PRIVATE_KEY }} + CHAIN_API_URL: ${{ secrets.SEPOLIA_CHAIN_API_URL }} + ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} + run: | + pnpm run deploy --network ${{ github.event.inputs.environment }} + + - name: Upload deployed contracts as workflow artifact + # The step will be executed even if the previous step fails (can be + # useful for partially failed deployments). + if: always() + uses: actions/upload-artifact@v4 + with: + name: deployed-contracts-${{ github.event.inputs.environment }} + path: | + core/deployments/${{ github.event.inputs.environment }} + if-no-files-found: error diff --git a/.github/workflows/dapp.yaml b/.github/workflows/dapp.yaml index 4d845443c..c0afd2ac5 100644 --- a/.github/workflows/dapp.yaml +++ b/.github/workflows/dapp.yaml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 @@ -32,7 +32,7 @@ jobs: cache: "pnpm" - name: Download SDK Build Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: sdk-build path: sdk/dist @@ -50,7 +50,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 @@ -59,7 +59,7 @@ jobs: cache: "pnpm" - name: Download SDK Build Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: sdk-build path: sdk/dist diff --git a/.github/workflows/reusable-core-build.yaml b/.github/workflows/reusable-core-build.yaml index cb77ec17c..68269918b 100644 --- a/.github/workflows/reusable-core-build.yaml +++ b/.github/workflows/reusable-core-build.yaml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 @@ -27,7 +27,7 @@ jobs: run: pnpm run build - name: Upload Build Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: core-build path: | diff --git a/.github/workflows/reusable-sdk-build.yaml b/.github/workflows/reusable-sdk-build.yaml index 88f7bf702..fe0a3d5ab 100644 --- a/.github/workflows/reusable-sdk-build.yaml +++ b/.github/workflows/reusable-sdk-build.yaml @@ -16,7 +16,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 @@ -25,7 +25,7 @@ jobs: cache: "pnpm" - name: Download Core Build Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: core-build path: core/ @@ -37,7 +37,7 @@ jobs: run: pnpm run build - name: Upload Build Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: sdk-build path: sdk/dist/ diff --git a/.github/workflows/sdk.yaml b/.github/workflows/sdk.yaml index fbfd8c817..5898da5ee 100644 --- a/.github/workflows/sdk.yaml +++ b/.github/workflows/sdk.yaml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 @@ -32,7 +32,7 @@ jobs: cache: "pnpm" - name: Download Core Build Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: core-build path: core/ @@ -50,7 +50,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 @@ -59,7 +59,7 @@ jobs: cache: "pnpm" - name: Download Core Build Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: core-build path: core/ diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index c9064b398..317e6bd41 100644 --- a/.github/workflows/website.yaml +++ b/.github/workflows/website.yaml @@ -19,7 +19,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 @@ -36,7 +36,7 @@ jobs: - uses: actions/checkout@v4 - name: Set up pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 - name: Set up Node uses: actions/setup-node@v4 diff --git a/dapp/.eslintrc b/dapp/.eslintrc index 950c59770..3fd1b6e42 100644 --- a/dapp/.eslintrc +++ b/dapp/.eslintrc @@ -18,6 +18,16 @@ "react/require-default-props": [0], "no-console": ["error", { "allow": ["error"] }], }, + "overrides": [ + { + "files": [ + "src/store/**/*Slice.ts" + ], + "rules": { + "no-param-reassign": ["error", {"ignorePropertyModificationsFor": ["state"] }] + } + } + ], "settings": { "import/resolver": { "alias": { diff --git a/dapp/package.json b/dapp/package.json index 429603c06..c8cdf2427 100644 --- a/dapp/package.json +++ b/dapp/package.json @@ -21,6 +21,7 @@ "@emotion/styled": "^11.11.0", "@ledgerhq/wallet-api-client": "^1.5.0", "@ledgerhq/wallet-api-client-react": "^1.3.0", + "@reduxjs/toolkit": "^2.2.0", "@sentry/react": "^7.98.0", "@sentry/types": "^7.102.0", "@tanstack/react-table": "^8.11.3", @@ -32,6 +33,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-number-format": "^5.3.1", + "react-redux": "^9.1.0", "react-router-dom": "^6.22.0", "react-slick": "^0.30.2", "recharts": "^2.12.0" diff --git a/dapp/public/_redirects b/dapp/public/_redirects new file mode 100644 index 000000000..7797f7c6a --- /dev/null +++ b/dapp/public/_redirects @@ -0,0 +1 @@ +/* /index.html 200 diff --git a/dapp/src/DApp.tsx b/dapp/src/DApp.tsx index bece62291..71db1bc16 100644 --- a/dapp/src/DApp.tsx +++ b/dapp/src/DApp.tsx @@ -1,7 +1,9 @@ import React from "react" import { Box, ChakraProvider } from "@chakra-ui/react" +import { Provider as ReduxProvider } from "react-redux" import { RouterProvider } from "react-router-dom" -import { useInitializeAcreSdk } from "./hooks" +import { useInitApp } from "./hooks" +import { store } from "./store" import theme from "./theme" import { DocsDrawerContextProvider, @@ -15,13 +17,9 @@ import Sidebar from "./components/Sidebar" import DocsDrawer from "./components/DocsDrawer" import GlobalStyles from "./components/GlobalStyles" import { router } from "./router" -import { useSentry } from "./hooks/sentry" function DApp() { - // TODO: Let's uncomment when dark mode is ready - // useDetectThemeMode() - useSentry() - useInitializeAcreSdk() + useInitApp() return ( <> @@ -42,10 +40,12 @@ function DAppProviders() { - - - - + + + + + + diff --git a/dapp/src/components/Header/ConnectWallet.tsx b/dapp/src/components/Header/ConnectWallet.tsx index 038a069ff..7879363bf 100644 --- a/dapp/src/components/Header/ConnectWallet.tsx +++ b/dapp/src/components/Header/ConnectWallet.tsx @@ -9,7 +9,7 @@ import { import { CurrencyBalance } from "#/components/shared/CurrencyBalance" import { TextMd } from "#/components/shared/Typography" import { Bitcoin, EthereumIcon } from "#/assets/icons" -import { truncateAddress, asyncWrapper } from "#/utils" +import { truncateAddress, logPromiseFailure } from "#/utils" export type ConnectButtonsProps = { leftIcon: typeof Icon @@ -25,7 +25,7 @@ function ConnectButton({ const colorScheme = !account ? "error" : undefined const handleClick = () => { - asyncWrapper(requestAccount()) + logPromiseFailure(requestAccount()) } return ( diff --git a/dapp/src/components/TransactionModal/ActiveStakingStep/DepositBTCModal.tsx b/dapp/src/components/TransactionModal/ActiveStakingStep/DepositBTCModal.tsx index 935bc3ed5..1701afbe5 100644 --- a/dapp/src/components/TransactionModal/ActiveStakingStep/DepositBTCModal.tsx +++ b/dapp/src/components/TransactionModal/ActiveStakingStep/DepositBTCModal.tsx @@ -10,7 +10,7 @@ import { } from "#/hooks" import Alert from "#/components/shared/Alert" import { TextMd } from "#/components/shared/Typography" -import { asyncWrapper } from "#/utils" +import { logPromiseFailure } from "#/utils" import { PROCESS_STATUSES } from "#/types" import StakingStepsModalContent from "./StakingStepsModalContent" @@ -42,7 +42,7 @@ export default function DepositBTCModal() { // to make sure for the moment that it doesn't return an error about funds not found // TODO: Remove the delay when SDK is updated setTimeout(() => { - asyncWrapper(handleStake()) + logPromiseFailure(handleStake()) }, 10000) }, [setStatus, handleStake]) @@ -62,7 +62,7 @@ export default function DepositBTCModal() { // TODO: Display the correct message for the user if (response.verificationStatus !== "valid") return - asyncWrapper(sendBitcoinTransaction(tokenAmount?.amount, btcAddress)) + logPromiseFailure(sendBitcoinTransaction(tokenAmount?.amount, btcAddress)) }, [ btcAddress, depositReceipt, @@ -73,7 +73,7 @@ export default function DepositBTCModal() { ]) const handledDepositBTCWrapper = useCallback(() => { - asyncWrapper(handledDepositBTC()) + logPromiseFailure(handledDepositBTC()) }, [handledDepositBTC]) return ( diff --git a/dapp/src/components/TransactionModal/ActiveStakingStep/SignMessageModal.tsx b/dapp/src/components/TransactionModal/ActiveStakingStep/SignMessageModal.tsx index ac6fb44a9..84803da08 100644 --- a/dapp/src/components/TransactionModal/ActiveStakingStep/SignMessageModal.tsx +++ b/dapp/src/components/TransactionModal/ActiveStakingStep/SignMessageModal.tsx @@ -4,7 +4,7 @@ import { useModalFlowContext, useStakeFlowContext, } from "#/hooks" -import { asyncWrapper } from "#/utils" +import { logPromiseFailure } from "#/utils" import AlertReceiveSTBTC from "#/components/shared/AlertReceiveSTBTC" import { PROCESS_STATUSES } from "#/types" import StakingStepsModalContent from "./StakingStepsModalContent" @@ -15,7 +15,7 @@ export default function SignMessageModal() { const handleSignMessage = useExecuteFunction(signMessage, goNext) const handleSignMessageWrapper = useCallback(() => { - asyncWrapper(handleSignMessage()) + logPromiseFailure(handleSignMessage()) }, [handleSignMessage]) useEffect(() => { diff --git a/dapp/src/components/TransactionModal/ActiveUnstakingStep/SignMessageModal.tsx b/dapp/src/components/TransactionModal/ActiveUnstakingStep/SignMessageModal.tsx index dcf681c60..0f9bd1003 100644 --- a/dapp/src/components/TransactionModal/ActiveUnstakingStep/SignMessageModal.tsx +++ b/dapp/src/components/TransactionModal/ActiveUnstakingStep/SignMessageModal.tsx @@ -4,7 +4,7 @@ import { PROCESS_STATUSES } from "#/types" import { Button, ModalBody, ModalFooter, ModalHeader } from "@chakra-ui/react" import { TextMd } from "#/components/shared/Typography" import AlertReceiveSTBTC from "#/components/shared/AlertReceiveSTBTC" -import { asyncWrapper } from "#/utils" +import { logPromiseFailure } from "#/utils" export default function SignMessageModal() { const { setStatus } = useModalFlowContext() @@ -34,7 +34,7 @@ export default function SignMessageModal() { // TODO: Remove when SDK is ready setTimeout(() => { - asyncWrapper(handleSignMessage()) + logPromiseFailure(handleSignMessage()) }, 5000) }, [setStatus, handleSignMessage]) diff --git a/dapp/src/components/TransactionModal/ModalContentWrapper/ActionFormModal.tsx b/dapp/src/components/TransactionModal/ModalContentWrapper/ActionFormModal.tsx index 8a727d892..f900f85e2 100644 --- a/dapp/src/components/TransactionModal/ModalContentWrapper/ActionFormModal.tsx +++ b/dapp/src/components/TransactionModal/ModalContentWrapper/ActionFormModal.tsx @@ -16,7 +16,7 @@ import { } from "#/hooks" import { ACTION_FLOW_TYPES, ActionFlowType } from "#/types" import { TokenAmountFormValues } from "#/components/shared/TokenAmountForm/TokenAmountFormBase" -import { asyncWrapper } from "#/utils" +import { logPromiseFailure } from "#/utils" import StakeFormModal from "../ActiveStakingStep/StakeFormModal" import UnstakeFormModal from "../ActiveUnstakingStep/UnstakeFormModal" @@ -59,7 +59,8 @@ function ActionFormModal({ defaultType }: { defaultType: ActionFlowType }) { ) const handleSubmitFormWrapper = useCallback( - (values: TokenAmountFormValues) => asyncWrapper(handleSubmitForm(values)), + (values: TokenAmountFormValues) => + logPromiseFailure(handleSubmitForm(values)), [handleSubmitForm], ) diff --git a/dapp/src/components/TransactionModal/ModalContentWrapper/MissingAccountModal.tsx b/dapp/src/components/TransactionModal/ModalContentWrapper/MissingAccountModal.tsx index 21391e063..826dc325f 100644 --- a/dapp/src/components/TransactionModal/ModalContentWrapper/MissingAccountModal.tsx +++ b/dapp/src/components/TransactionModal/ModalContentWrapper/MissingAccountModal.tsx @@ -10,7 +10,7 @@ import { } from "@chakra-ui/react" import { TextMd } from "#/components/shared/Typography" import Alert from "#/components/shared/Alert" -import { asyncWrapper, getCurrencyByType } from "#/utils" +import { logPromiseFailure, getCurrencyByType } from "#/utils" import { CurrencyType, RequestAccountParams } from "#/types" type MissingAccountModalProps = { @@ -27,7 +27,7 @@ export default function MissingAccountModal({ const { name, symbol } = getCurrencyByType(currency) const handleClick = () => { - asyncWrapper(requestAccount()) + logPromiseFailure(requestAccount()) } return ( diff --git a/dapp/src/components/shared/CurrencyBalanceWithConversion/index.tsx b/dapp/src/components/shared/CurrencyBalanceWithConversion/index.tsx index b54cff5cb..5d19dd126 100644 --- a/dapp/src/components/shared/CurrencyBalanceWithConversion/index.tsx +++ b/dapp/src/components/shared/CurrencyBalanceWithConversion/index.tsx @@ -1,8 +1,7 @@ -import React, { useMemo } from "react" +import React from "react" +import { useCurrencyConversion } from "#/hooks" import { CurrencyBalance, CurrencyBalanceProps } from "../CurrencyBalance" -const MOCK_CONVERSION_AMOUNT = 100 - export function CurrencyBalanceWithConversion({ from, to, @@ -10,12 +9,7 @@ export function CurrencyBalanceWithConversion({ from: CurrencyBalanceProps to: CurrencyBalanceProps }) { - // TODO: Make the correct conversion - const conversionAmount = useMemo(() => { - if (!from.amount || BigInt(from.amount) < 0n) return undefined - - return MOCK_CONVERSION_AMOUNT - }, [from.amount]) + const conversionAmount = useCurrencyConversion({ from, to }) return ( <> diff --git a/dapp/src/components/shared/Form/FormTokenBalanceInput.tsx b/dapp/src/components/shared/Form/FormTokenBalanceInput.tsx index 5eefb5933..00fe36074 100644 --- a/dapp/src/components/shared/Form/FormTokenBalanceInput.tsx +++ b/dapp/src/components/shared/Form/FormTokenBalanceInput.tsx @@ -1,6 +1,6 @@ import React from "react" import { useField } from "formik" -import { asyncWrapper } from "#/utils" +import { logPromiseFailure } from "#/utils" import TokenBalanceInput, { TokenBalanceInputProps } from "../TokenBalanceInput" export type FormTokenBalanceInputProps = { @@ -13,7 +13,7 @@ export function FormTokenBalanceInput({ const [field, meta, helpers] = useField(name) const setAmount = (value?: bigint) => { - asyncWrapper(helpers.setValue(value)) + logPromiseFailure(helpers.setValue(value)) } return ( diff --git a/dapp/src/contexts/StakeFlowContext.tsx b/dapp/src/contexts/StakeFlowContext.tsx index 5fd80cbe5..8afe6870b 100644 --- a/dapp/src/contexts/StakeFlowContext.tsx +++ b/dapp/src/contexts/StakeFlowContext.tsx @@ -27,6 +27,7 @@ export function StakeFlowProvider({ children }: { children: React.ReactNode }) { initStake: acreInitStake, signMessage, btcAddress, + depositReceipt, stake, } = useStakeFlow() @@ -51,9 +52,10 @@ export function StakeFlowProvider({ children }: { children: React.ReactNode }) { initStake, signMessage, btcAddress, + depositReceipt, stake, }), - [initStake, signMessage, btcAddress, stake], + [initStake, signMessage, btcAddress, depositReceipt, stake], ) return ( diff --git a/dapp/src/hooks/index.ts b/dapp/src/hooks/index.ts index 56014a221..292568f86 100644 --- a/dapp/src/hooks/index.ts +++ b/dapp/src/hooks/index.ts @@ -1,3 +1,4 @@ +export * from "./store" export * from "./useDetectThemeMode" export * from "./useRequestBitcoinAccount" export * from "./useRequestEthereumAccount" @@ -12,4 +13,7 @@ export * from "./useInitializeAcreSdk" export * from "./useTransactionHistoryTable" export * from "./useExecuteFunction" export * from "./useStakeFlowContext" +export * from "./useInitApp" +export * from "./useCurrencyConversion" export * from "./useDepositTelemetry" +export * from "./useFetchBTCPriceUSD" diff --git a/dapp/src/hooks/store/index.ts b/dapp/src/hooks/store/index.ts new file mode 100644 index 000000000..20f33eb3c --- /dev/null +++ b/dapp/src/hooks/store/index.ts @@ -0,0 +1,2 @@ +export * from "./useAppDispatch" +export * from "./useAppSelector" diff --git a/dapp/src/hooks/store/useAppDispatch.ts b/dapp/src/hooks/store/useAppDispatch.ts new file mode 100644 index 000000000..ef697bd15 --- /dev/null +++ b/dapp/src/hooks/store/useAppDispatch.ts @@ -0,0 +1,4 @@ +import { useDispatch } from "react-redux" +import { AppDispatch } from "#/store" + +export const useAppDispatch = useDispatch.withTypes() diff --git a/dapp/src/hooks/store/useAppSelector.ts b/dapp/src/hooks/store/useAppSelector.ts new file mode 100644 index 000000000..9cbdbbe9f --- /dev/null +++ b/dapp/src/hooks/store/useAppSelector.ts @@ -0,0 +1,4 @@ +import { useSelector } from "react-redux" +import { RootState } from "#/store" + +export const useAppSelector = useSelector.withTypes() diff --git a/dapp/src/hooks/useCurrencyConversion.ts b/dapp/src/hooks/useCurrencyConversion.ts new file mode 100644 index 000000000..f3279c86e --- /dev/null +++ b/dapp/src/hooks/useCurrencyConversion.ts @@ -0,0 +1,39 @@ +import { CURRENCIES_BY_TYPE } from "#/constants" +import { selectBtcUsdPrice } from "#/store/btc" +import { bigIntToUserAmount } from "#/utils" +import { CurrencyType } from "#/types" +import { useMemo } from "react" +import { useAppSelector } from "./store" + +type CurrencyConversionType = { + currency: CurrencyType + amount?: number | string +} + +// TODO: should be updated to handle another currencies +const isBtcUsdConversion = ( + from: CurrencyConversionType, + to: CurrencyConversionType, +): boolean => from.currency === "bitcoin" && to.currency === "usd" + +export function useCurrencyConversion({ + from, + to, +}: { + from: CurrencyConversionType + to: CurrencyConversionType +}) { + const price = useAppSelector( + isBtcUsdConversion(from, to) ? selectBtcUsdPrice : () => undefined, + ) + const conversionAmount = useMemo(() => { + if (!from.amount || !price) return undefined + + const { amount, currency } = from + const { decimals, desiredDecimals } = CURRENCIES_BY_TYPE[currency] + + return bigIntToUserAmount(BigInt(amount), decimals, desiredDecimals) * price + }, [from, price]) + + return conversionAmount +} diff --git a/dapp/src/hooks/useFetchBTCPriceUSD.ts b/dapp/src/hooks/useFetchBTCPriceUSD.ts new file mode 100644 index 000000000..0bce617ca --- /dev/null +++ b/dapp/src/hooks/useFetchBTCPriceUSD.ts @@ -0,0 +1,12 @@ +import { useEffect } from "react" +import { fetchBTCPriceUSD } from "#/store/btc" +import { logPromiseFailure } from "#/utils" +import { useAppDispatch } from "./store" + +export function useFetchBTCPriceUSD() { + const dispatch = useAppDispatch() + + useEffect(() => { + logPromiseFailure(dispatch(fetchBTCPriceUSD())) + }, [dispatch]) +} diff --git a/dapp/src/hooks/useInitApp.ts b/dapp/src/hooks/useInitApp.ts new file mode 100644 index 000000000..bfa07283e --- /dev/null +++ b/dapp/src/hooks/useInitApp.ts @@ -0,0 +1,11 @@ +import { useSentry } from "./sentry" +import { useInitializeAcreSdk } from "./useInitializeAcreSdk" +import { useFetchBTCPriceUSD } from "./useFetchBTCPriceUSD" + +export function useInitApp() { + // TODO: Let's uncomment when dark mode is ready + // useDetectThemeMode() + useSentry() + useInitializeAcreSdk() + useFetchBTCPriceUSD() +} diff --git a/dapp/src/hooks/useInitializeAcreSdk.ts b/dapp/src/hooks/useInitializeAcreSdk.ts index eb1afce46..ab05a9aac 100644 --- a/dapp/src/hooks/useInitializeAcreSdk.ts +++ b/dapp/src/hooks/useInitializeAcreSdk.ts @@ -1,6 +1,6 @@ import { useEffect } from "react" import { ETHEREUM_NETWORK } from "#/constants" -import { asyncWrapper } from "#/utils" +import { logPromiseFailure } from "#/utils" import { useAcreContext } from "#/acre-react/hooks" import { useWalletContext } from "./useWalletContext" @@ -14,6 +14,6 @@ export function useInitializeAcreSdk() { const initSDK = async (ethAddress: string) => { await init(ethAddress, ETHEREUM_NETWORK) } - asyncWrapper(initSDK(ethAccount.address)) + logPromiseFailure(initSDK(ethAccount.address)) }, [ethAccount?.address, init]) } diff --git a/dapp/src/store/btc/btcSelector.ts b/dapp/src/store/btc/btcSelector.ts new file mode 100644 index 000000000..c8ae200ab --- /dev/null +++ b/dapp/src/store/btc/btcSelector.ts @@ -0,0 +1,3 @@ +import { RootState } from ".." + +export const selectBtcUsdPrice = (state: RootState) => state.btc.usdPrice diff --git a/dapp/src/store/btc/btcSlice.ts b/dapp/src/store/btc/btcSlice.ts new file mode 100644 index 000000000..84468710d --- /dev/null +++ b/dapp/src/store/btc/btcSlice.ts @@ -0,0 +1,34 @@ +import { PayloadAction, createSlice } from "@reduxjs/toolkit" +import { fetchBTCPriceUSD } from "./btcThunk" + +type BtcState = { + isLoadingPriceUSD: boolean + usdPrice: number +} + +const initialState: BtcState = { + isLoadingPriceUSD: false, + usdPrice: 0, +} + +// Store Bitcoin data such as balance, balance in usd and other related data to Bitcoin chain. +export const btcSlice = createSlice({ + name: "btc", + initialState, + reducers: {}, + extraReducers: (builder) => { + builder.addCase(fetchBTCPriceUSD.pending, (state) => { + state.isLoadingPriceUSD = true + }) + builder.addCase(fetchBTCPriceUSD.rejected, (state) => { + state.isLoadingPriceUSD = false + }) + builder.addCase( + fetchBTCPriceUSD.fulfilled, + (state, action: PayloadAction) => { + state.isLoadingPriceUSD = false + state.usdPrice = action.payload + }, + ) + }, +}) diff --git a/dapp/src/store/btc/btcThunk.ts b/dapp/src/store/btc/btcThunk.ts new file mode 100644 index 000000000..749c21fb8 --- /dev/null +++ b/dapp/src/store/btc/btcThunk.ts @@ -0,0 +1,15 @@ +import { createAsyncThunk } from "@reduxjs/toolkit" +import { fetchCryptoCurrencyPriceUSD } from "#/utils/exchangeApi" + +export const fetchBTCPriceUSD = createAsyncThunk( + "btc/fetchBTCPriceUSD", + async () => { + try { + const priceUSD = await fetchCryptoCurrencyPriceUSD("bitcoin") + return priceUSD + } catch (error) { + console.error(error) + return 0 + } + }, +) diff --git a/dapp/src/store/btc/index.ts b/dapp/src/store/btc/index.ts new file mode 100644 index 000000000..d0853dfb6 --- /dev/null +++ b/dapp/src/store/btc/index.ts @@ -0,0 +1,3 @@ +export * from "./btcSelector" +export * from "./btcSlice" +export * from "./btcThunk" diff --git a/dapp/src/store/index.ts b/dapp/src/store/index.ts new file mode 100644 index 000000000..fc68092ae --- /dev/null +++ b/dapp/src/store/index.ts @@ -0,0 +1,12 @@ +import { configureStore } from "@reduxjs/toolkit" +import { middleware } from "./middleware" +import { reducer } from "./reducer" + +export const store = configureStore({ + reducer, + middleware: (getDefaultMiddleware) => getDefaultMiddleware(middleware), + devTools: !import.meta.env.PROD, +}) + +export type RootState = ReturnType +export type AppDispatch = typeof store.dispatch diff --git a/dapp/src/store/middleware.ts b/dapp/src/store/middleware.ts new file mode 100644 index 000000000..451fd90f1 --- /dev/null +++ b/dapp/src/store/middleware.ts @@ -0,0 +1 @@ +export const middleware = {} diff --git a/dapp/src/store/reducer.ts b/dapp/src/store/reducer.ts new file mode 100644 index 000000000..a49f551e8 --- /dev/null +++ b/dapp/src/store/reducer.ts @@ -0,0 +1,6 @@ +import { combineReducers } from "@reduxjs/toolkit" +import { btcSlice } from "./btc/btcSlice" + +export const reducer = combineReducers({ + btc: btcSlice.reducer, +}) diff --git a/dapp/src/types/coingecko.ts b/dapp/src/types/coingecko.ts new file mode 100644 index 000000000..5d43c6fdc --- /dev/null +++ b/dapp/src/types/coingecko.ts @@ -0,0 +1,2 @@ +export type CoingeckoIdType = "bitcoin" +export type CoingeckoCurrencyType = "usd" diff --git a/dapp/src/types/index.ts b/dapp/src/types/index.ts index 6167106d2..12a5dc7b3 100644 --- a/dapp/src/types/index.ts +++ b/dapp/src/types/index.ts @@ -9,3 +9,4 @@ export * from "./action-flow" export * from "./location" export * from "./charts" export * from "./activity" +export * from "./coingecko" diff --git a/dapp/src/utils/async.ts b/dapp/src/utils/async.ts deleted file mode 100644 index df3657065..000000000 --- a/dapp/src/utils/async.ts +++ /dev/null @@ -1,8 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function asyncWrapper(func: Promise) { - return () => { - func.catch((error) => { - throw error - }) - } -} diff --git a/dapp/src/utils/exchangeApi.ts b/dapp/src/utils/exchangeApi.ts new file mode 100644 index 000000000..2f83c4ebf --- /dev/null +++ b/dapp/src/utils/exchangeApi.ts @@ -0,0 +1,20 @@ +import axios from "axios" +import { CoingeckoIdType, CoingeckoCurrencyType } from "#/types" + +const coingeckoApiURL = "https://api.coingecko.com/api/v3" + +type CoingeckoSimplePriceResponse = { + data: { + [id in CoingeckoIdType]: Record + } +} + +export const fetchCryptoCurrencyPriceUSD = async ( + coingeckoId: CoingeckoIdType, +): Promise => { + const response: CoingeckoSimplePriceResponse = await axios.get( + `${coingeckoApiURL}/simple/price?ids=${coingeckoId}&vs_currencies=usd`, + ) + + return response.data[coingeckoId].usd +} diff --git a/dapp/src/utils/index.ts b/dapp/src/utils/index.ts index 865b6211e..cb7034c47 100644 --- a/dapp/src/utils/index.ts +++ b/dapp/src/utils/index.ts @@ -5,5 +5,6 @@ export * from "./currency" export * from "./chain" export * from "./text" export * from "./time" -export * from "./async" +export * from "./promise" +export * from "./exchangeApi" export * from "./verifyDepositAddress" diff --git a/dapp/src/utils/promise.ts b/dapp/src/utils/promise.ts new file mode 100644 index 000000000..22f13c622 --- /dev/null +++ b/dapp/src/utils/promise.ts @@ -0,0 +1,12 @@ +/** + * If the promise fails, log the underlying error but maintain the failed + * promise. + * + * Does nothing to successful promises. + */ +export function logPromiseFailure(promise: Promise) { + promise.catch((error) => { + console.error(error) + throw error + }) +} diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 000000000..c21afb386 --- /dev/null +++ b/netlify.toml @@ -0,0 +1,2 @@ +[build] + ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF ':(exclude).github/' ':(exclude).vscode/' ':(exclude)core/' ':(exclude).git-blame-ignore-revs' ':(exclude).gitignore' ':(exclude).npmrc' ':(exclude).nvmrc' ':(exclude).pre-commit-config.yaml' ':(exclude).prettierignore' ':(exclude).prettierrc.js' ':(exclude).syncpackrc' ':(exclude)LICENSE' ':(exclude)README.md'" \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df065c1f5..32f507858 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: devDependencies: '@thesis/prettier-config': specifier: github:thesis/prettier-config - version: github.com/thesis/prettier-config/daeaac564056a7885e4366ce12bfde6fd823fc90(prettier@3.1.0) + version: github.com/thesis/prettier-config/daeaac564056a7885e4366ce12bfde6fd823fc90(prettier@3.1.0)(prettier@3.1.0)(prettier@3.1.0) prettier: specifier: ^3.1.0 version: 3.1.0 @@ -56,7 +56,7 @@ importers: version: 2.4.1(@nomicfoundation/hardhat-ethers@3.0.5)(@nomicfoundation/hardhat-verify@2.0.1)(ethers@6.8.1)(hardhat@2.19.1) '@thesis-co/eslint-config': specifier: github:thesis/eslint-config#7b9bc8c - version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) + version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2)(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2)(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) '@typechain/ethers-v6': specifier: ^0.5.1 version: 0.5.1(ethers@6.8.1)(typechain@8.3.2)(typescript@5.3.2) @@ -104,7 +104,7 @@ importers: version: 4.0.0 solhint-config-thesis: specifier: github:thesis/solhint-config - version: github.com/thesis/solhint-config/266de12d96d58f01171e20858b855ec80520de8d(solhint@4.0.0) + version: github.com/thesis/solhint-config/266de12d96d58f01171e20858b855ec80520de8d(solhint@4.0.0)(solhint@4.0.0)(solhint@4.0.0) solidity-coverage: specifier: ^0.8.5 version: 0.8.5(hardhat@2.19.1) @@ -141,6 +141,9 @@ importers: '@ledgerhq/wallet-api-client-react': specifier: ^1.3.0 version: 1.3.0(react@18.2.0) + '@reduxjs/toolkit': + specifier: ^2.2.0 + version: 2.2.1(react-redux@9.1.0)(react@18.2.0) '@sentry/react': specifier: ^7.98.0 version: 7.98.0(react@18.2.0) @@ -155,7 +158,7 @@ importers: version: 0.23.13 axios: specifier: ^1.6.7 - version: 1.6.7 + version: 1.6.7(debug@4.3.4) ethers: specifier: ^6.10.0 version: 6.10.0 @@ -174,6 +177,9 @@ importers: react-number-format: specifier: ^5.3.1 version: 5.3.1(react-dom@18.2.0)(react@18.2.0) + react-redux: + specifier: ^9.1.0 + version: 9.1.0(@types/react@18.2.38)(react@18.2.0)(redux@5.0.1) react-router-dom: specifier: ^6.22.0 version: 6.22.0(react-dom@18.2.0)(react@18.2.0) @@ -186,7 +192,7 @@ importers: devDependencies: '@thesis-co/eslint-config': specifier: github:thesis/eslint-config#7b9bc8c - version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) + version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2)(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2)(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) '@types/react': specifier: ^18.2.38 version: 18.2.38 @@ -241,7 +247,7 @@ importers: version: 7.23.7(@babel/core@7.23.3) '@thesis-co/eslint-config': specifier: github:thesis/eslint-config#7b9bc8c - version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) + version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2)(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2)(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) '@types/jest': specifier: ^29.5.11 version: 29.5.11 @@ -290,7 +296,7 @@ importers: devDependencies: '@thesis-co/eslint-config': specifier: github:thesis/eslint-config#7b9bc8c - version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) + version: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2)(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2)(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) '@types/node': specifier: ^20.9.4 version: 20.9.4 @@ -340,7 +346,6 @@ packages: /@ardatan/relay-compiler@12.0.0(graphql@16.8.1): resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} - hasBin: true peerDependencies: graphql: '*' dependencies: @@ -431,7 +436,7 @@ packages: '@babel/traverse': 7.23.4 '@babel/types': 7.23.4 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -685,7 +690,6 @@ packages: /@babel/parser@7.23.4: resolution: {integrity: sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.23.4 @@ -722,7 +726,6 @@ packages: /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.3): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -733,7 +736,6 @@ packages: /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.3): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -744,7 +746,6 @@ packages: /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.3): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -755,7 +756,6 @@ packages: /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.23.3): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -769,7 +769,6 @@ packages: /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.3): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1730,7 +1729,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.4 '@babel/types': 7.23.4 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -1756,7 +1755,6 @@ packages: /@builder.io/partytown@0.7.6: resolution: {integrity: sha512-snXIGNiZpqjno3XYQN2lbBB+05hsQR/LSttbtIW1c0gmZ7Kh/DIo0YrxlDxCDulAMFPFM8J+4voLwvYepSj3sw==} - hasBin: true /@celo/base@1.5.2: resolution: {integrity: sha512-KGf6Dl9E6D01vAfkgkjL2sG+zqAjspAogILIpWstljWdG5ifyA75jihrnDEHaMCoQS0KxHvTdP1XYS/GS6BEyQ==} @@ -1782,7 +1780,6 @@ packages: /@celo/contractkit@0.3.8: resolution: {integrity: sha512-lEXciI3tYnDKNdyazW6etR/ZFm0wrNlX1OxNgzv5D8HCPJcFSUF3Bi4fYtL/Ocx2oHNpK4k3eDZ6aj+ZbkRC+Q==} engines: {node: '>=8.13.0'} - deprecated: Versions less than 5.1 are deprecated and will no longer be able to submit transactions to celo in a future hardfork dependencies: '@celo/utils': 0.1.11 '@ledgerhq/hw-app-eth': 5.53.0 @@ -1810,7 +1807,6 @@ packages: /@celo/contractkit@1.5.2: resolution: {integrity: sha512-b0r5TlfYDEscxze1Ai2jyJayiVElA9jvEehMD6aOSNtVhfP8oirjFIIffRe0Wzw1MSDGkw+q1c4m0Yw5sEOlvA==} engines: {node: '>=8.13.0'} - deprecated: Versions less than 5.1 are deprecated and will no longer be able to submit transactions to celo in a future hardfork dependencies: '@celo/base': 1.5.2 '@celo/connect': 1.5.2(web3@1.3.6) @@ -3455,7 +3451,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 globals: 13.23.0 ignore: 5.3.0 @@ -3473,7 +3469,6 @@ packages: /@ethereumjs/rlp@4.0.1: resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} - hasBin: true dev: true /@ethereumjs/util@8.1.0: @@ -4044,7 +4039,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4917,7 +4912,6 @@ packages: /@nomicfoundation/ethereumjs-rlp@5.0.2: resolution: {integrity: sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==} engines: {node: '>=14'} - hasBin: true dev: true /@nomicfoundation/ethereumjs-statemanager@2.0.2: @@ -5298,7 +5292,6 @@ packages: /@openzeppelin/hardhat-upgrades@2.4.1(@nomicfoundation/hardhat-ethers@3.0.5)(@nomicfoundation/hardhat-verify@2.0.1)(ethers@6.8.1)(hardhat@2.19.1): resolution: {integrity: sha512-IF1nQ0Jbi9bUqGWAAaX6zP5CY5tgTM3jF+ipXXatPYLooFzyGbkk7wHHWzi/+9Rx64Ar7XQVtGlwVdAohMuRcw==} - hasBin: true peerDependencies: '@nomicfoundation/hardhat-ethers': ^3.0.0 '@nomicfoundation/hardhat-verify': ^1.1.0 @@ -5331,7 +5324,6 @@ packages: /@openzeppelin/upgrades-core@1.31.1: resolution: {integrity: sha512-BdkTZwvBxgZ9BYYfhOhuivmqZLOZ/bm6mK5eEDZ36I3Fy64a9BDL/NusaDV5XAoGn4La/j9dZSbTtgP/6d8jAQ==} - hasBin: true dependencies: cbor: 9.0.1 chalk: 4.1.2 @@ -5347,7 +5339,6 @@ packages: /@openzeppelin/upgrades@2.8.0: resolution: {integrity: sha512-LzjTQPeljPsgHDPdZyH9cMCbIHZILgd2cpNcYEkdsC2IylBYRHShlbEDXJV9snnqg9JWfzPiKIqyj3XVliwtqQ==} - deprecated: The OpenZeppelin SDK is no longer being developed. For smart contract upgrades check out the OpenZeppelin Upgrades Plugins. https://zpl.in/upgrades-plugins dependencies: '@types/cbor': 2.0.0 axios: 0.18.1 @@ -5862,6 +5853,25 @@ packages: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false + /@reduxjs/toolkit@2.2.1(react-redux@9.1.0)(react@18.2.0): + resolution: {integrity: sha512-8CREoqJovQW/5I4yvvijm/emUiCCmcs4Ev4XPWd4mizSO+dD3g5G6w34QK5AGeNrSH7qM8Fl66j4vuV7dpOdkw==} + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 + react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + dependencies: + immer: 10.0.3 + react: 18.2.0 + react-redux: 9.1.0(@types/react@18.2.38)(react@18.2.0)(redux@5.0.1) + redux: 5.0.1 + redux-thunk: 3.1.0(redux@5.0.1) + reselect: 5.1.0 + dev: false + /@remix-run/router@1.15.0: resolution: {integrity: sha512-HOil5aFtme37dVQTB6M34G95kPM3MMuqSmIRVCC52eKV+Y/tGSqw9P3rWhlAx6A+mz+MoX+XxsGsNJbaI5qCgQ==} engines: {node: '>=14.0.0'} @@ -6512,7 +6522,6 @@ packages: /@types/bignumber.js@5.0.0: resolution: {integrity: sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==} - deprecated: This is a stub types definition for bignumber.js (https://github.com/MikeMcl/bignumber.js/). bignumber.js provides its own type definitions, so you don't need @types/bignumber.js installed! dependencies: bignumber.js: 9.1.2 dev: false @@ -6892,6 +6901,10 @@ packages: /@types/tmp@0.0.33: resolution: {integrity: sha512-gVC1InwyVrO326wbBZw+AO3u2vRXz/iRWq9jYhpG4W8LXyIgDv3ZmcLQ5Q4Gs+gFMyqx+viFoFT+l3p61QFCmQ==} + /@types/use-sync-external-store@0.0.3: + resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} + dev: false + /@types/utf8@2.1.6: resolution: {integrity: sha512-pRs2gYF5yoKYrgSaira0DJqVg2tFuF+Qjp838xS7K+mJyY2jJzjsrl6y17GbIa4uMRogMbxs+ghNCvKg6XyNrA==} dev: false @@ -6953,7 +6966,7 @@ packages: '@typescript-eslint/type-utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.54.0 graphemer: 1.4.0 ignore: 5.3.0 @@ -6998,7 +7011,7 @@ packages: '@typescript-eslint/types': 6.12.0 '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.54.0 typescript: 5.3.2 transitivePeerDependencies: @@ -7049,7 +7062,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.54.0 ts-api-utils: 1.0.3(typescript@5.3.2) typescript: 5.3.2 @@ -7096,7 +7109,7 @@ packages: dependencies: '@typescript-eslint/types': 6.12.0 '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -7183,7 +7196,6 @@ packages: /@web3-js/scrypt-shim@0.1.0: resolution: {integrity: sha512-ZtZeWCc/s0nMcdx/+rZwY1EcuRdemOK9ag21ty9UsHkFxsNb/AaoucUz0iPuyGe0Ku+PFuRmWZG7Z7462p9xPw==} - deprecated: This package is deprecated, for a pure JS implementation please use scrypt-js requiresBuild: true dependencies: scryptsy: 2.1.0 @@ -7193,7 +7205,6 @@ packages: /@web3-js/websocket@1.0.30: resolution: {integrity: sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA==} engines: {node: '>=0.10.0'} - deprecated: The branch for this fork was merged upstream, please update your package to websocket@1.0.31 requiresBuild: true dependencies: debug: 2.6.9 @@ -7377,17 +7388,14 @@ packages: /acorn@6.4.2: resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} engines: {node: '>=0.4.0'} - hasBin: true /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} - hasBin: true /acorn@8.11.2: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} - hasBin: true /address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} @@ -7494,7 +7502,6 @@ packages: /ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} - hasBin: true /ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} @@ -7771,7 +7778,6 @@ packages: /autoprefixer@10.4.16(postcss@8.4.31): resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} engines: {node: ^10 || ^12 || >=14} - hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: @@ -7801,7 +7807,6 @@ packages: /axios@0.18.1: resolution: {integrity: sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==} - deprecated: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410 dependencies: follow-redirects: 1.5.10 is-buffer: 2.0.5 @@ -7816,16 +7821,6 @@ packages: transitivePeerDependencies: - debug - /axios@1.6.7: - resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} - dependencies: - follow-redirects: 1.15.5 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false - /axios@1.6.7(debug@4.3.4): resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} dependencies: @@ -7834,7 +7829,6 @@ packages: proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: true /axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} @@ -7843,7 +7837,6 @@ packages: /b4a@1.6.4: resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} - requiresBuild: true /babel-eslint@10.1.0(eslint@8.54.0): resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==} @@ -8242,7 +8235,6 @@ packages: /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - requiresBuild: true dependencies: buffer: 5.7.1 inherits: 2.0.4 @@ -8402,7 +8394,6 @@ packages: /browserslist@4.22.1: resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: caniuse-lite: 1.0.30001564 electron-to-chromium: 1.4.592 @@ -8412,7 +8403,6 @@ packages: /browserslist@4.22.2: resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: caniuse-lite: 1.0.30001574 electron-to-chromium: 1.4.622 @@ -8499,7 +8489,6 @@ packages: /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - requiresBuild: true dependencies: base64-js: 1.5.1 ieee754: 1.2.1 @@ -8668,7 +8657,6 @@ packages: /cbor@4.3.0: resolution: {integrity: sha512-CvzaxQlaJVa88sdtTWvLJ++MbdtPHtZOBBNjm7h3YKUHILMs9nQyD4AC6hvFZy7GBVB3I6bRibJcxeHydyT2IQ==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: bignumber.js: 9.1.2 commander: 3.0.2 @@ -8803,7 +8791,6 @@ packages: /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - requiresBuild: true /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} @@ -8820,7 +8807,6 @@ packages: /cids@0.7.5: resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} engines: {node: '>=4.0.0', npm: '>=3.0.0'} - deprecated: This module has been superseded by the multiformats module dependencies: buffer: 5.7.1 class-is: 1.1.0 @@ -8997,7 +8983,6 @@ packages: /color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - requiresBuild: true dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 @@ -9009,7 +8994,6 @@ packages: /color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} - requiresBuild: true dependencies: color-convert: 2.0.1 color-string: 1.9.1 @@ -9281,7 +9265,6 @@ packages: /crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} - hasBin: true dev: true /create-ecdh@4.0.4: @@ -9292,7 +9275,6 @@ packages: /create-gatsby@3.12.3: resolution: {integrity: sha512-N0K/Z/MD5LMRJcBy669WpSgrn+31zBV72Lv0RHolX0fXa77Yx58HsEiLWz83j/dtciGMQfEOEHFRetUqZhOggA==} - hasBin: true dependencies: '@babel/runtime': 7.23.4 @@ -9318,7 +9300,6 @@ packages: /create-jest@29.7.0(@types/node@20.9.4)(ts-node@10.9.1): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 @@ -9477,7 +9458,6 @@ packages: /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} - hasBin: true /cssnano-preset-default@5.2.14(postcss@8.4.31): resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} @@ -9689,17 +9669,6 @@ packages: dependencies: ms: 2.1.3 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -9916,12 +9885,10 @@ packages: /detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} - hasBin: true /detect-libc@2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} - requiresBuild: true /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} @@ -9935,7 +9902,6 @@ packages: /detect-port-alt@1.1.6: resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} engines: {node: '>= 4.2.1'} - hasBin: true dependencies: address: 1.2.2 debug: 2.6.9 @@ -9944,7 +9910,6 @@ packages: /detect-port@1.5.1: resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} - hasBin: true dependencies: address: 1.2.2 debug: 4.3.4(supports-color@8.1.1) @@ -10178,7 +10143,6 @@ packages: /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - requiresBuild: true dependencies: once: 1.4.0 @@ -10247,7 +10211,6 @@ packages: /envinfo@7.11.0: resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} engines: {node: '>=4'} - hasBin: true /eol@0.9.1: resolution: {integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==} @@ -10388,7 +10351,6 @@ packages: /esbuild@0.19.7: resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.19.7 @@ -10437,7 +10399,6 @@ packages: /escodegen@1.8.1: resolution: {integrity: sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==} engines: {node: '>=0.12.0'} - hasBin: true dependencies: esprima: 2.7.3 estraverse: 1.9.3 @@ -10499,7 +10460,6 @@ packages: /eslint-config-prettier@9.0.0(eslint@8.54.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} - hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: @@ -10800,7 +10760,6 @@ packages: /eslint@7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} - hasBin: true dependencies: '@babel/code-frame': 7.12.11 '@eslint/eslintrc': 0.4.3 @@ -10848,7 +10807,6 @@ packages: /eslint@8.54.0: resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) '@eslint-community/regexpp': 4.10.0 @@ -10861,7 +10819,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -10910,13 +10868,11 @@ packages: /esprima@2.7.3: resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==} engines: {node: '>=0.10.0'} - hasBin: true dev: true /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - hasBin: true /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} @@ -11071,12 +11027,10 @@ packages: /ethereumjs-common@1.5.2: resolution: {integrity: sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==} - deprecated: 'New package name format for new versions: @ethereumjs/common. Please update.' dev: false /ethereumjs-tx@2.1.2: resolution: {integrity: sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==} - deprecated: 'New package name format for new versions: @ethereumjs/tx. Please update.' dependencies: ethereumjs-common: 1.5.2 ethereumjs-util: 6.2.1 @@ -11304,7 +11258,6 @@ packages: /expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - requiresBuild: true /expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} @@ -11412,7 +11365,6 @@ packages: /fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - requiresBuild: true /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} @@ -11605,7 +11557,6 @@ packages: /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true /flatted@3.2.9: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} @@ -11634,16 +11585,6 @@ packages: dependencies: debug: 4.3.4(supports-color@8.1.1) - /follow-redirects@1.15.5: - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - /follow-redirects@1.15.5(debug@4.3.4): resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} engines: {node: '>=4.0'} @@ -11654,7 +11595,6 @@ packages: optional: true dependencies: debug: 4.3.4(supports-color@8.1.1) - dev: true /follow-redirects@1.5.10: resolution: {integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==} @@ -11796,7 +11736,6 @@ packages: /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - requiresBuild: true /fs-exists-cached@1.0.0: resolution: {integrity: sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==} @@ -11912,7 +11851,6 @@ packages: /gatsby-cli@5.12.4: resolution: {integrity: sha512-GD+otyd5LlgSbYK4ODrKyAise/k32G7Qy7H/k+gJ2P8DCG9sU+j//2zNwF7mY8C5dl0SpROqFTL+I0Y1DK4tmQ==} engines: {node: '>=18.0.0'} - hasBin: true requiresBuild: true dependencies: '@babel/code-frame': 7.23.4 @@ -12203,7 +12141,6 @@ packages: /gatsby@5.12.11(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2): resolution: {integrity: sha512-4XuN4bo6W6JnIYkvaCeV+5fKTzxv78aAgOTEW4doupP8/bD0bgLwuIHFwnvhEMHQiGdALoKukLkqhkgAShUK0w==} engines: {node: '>=18.0.0'} - hasBin: true requiresBuild: true peerDependencies: react: ^18.0.0 || ^0.0.0 @@ -12481,7 +12418,6 @@ packages: /ghost-testrpc@0.0.2: resolution: {integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==} - hasBin: true dependencies: chalk: 2.4.2 node-emoji: 1.11.0 @@ -12495,7 +12431,6 @@ packages: /github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - requiresBuild: true /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -12780,7 +12715,6 @@ packages: /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} - hasBin: true dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -12798,7 +12732,6 @@ packages: /har-validator@5.1.5: resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} engines: {node: '>=6'} - deprecated: this library is no longer supported dependencies: ajv: 6.12.6 har-schema: 2.0.0 @@ -12866,7 +12799,6 @@ packages: /hardhat@2.19.1(ts-node@10.9.1)(typescript@5.3.2): resolution: {integrity: sha512-bsWa63g1GB78ZyMN08WLhFElLPA+J+pShuKD1BFO2+88g3l+BL3R07vj9deIi9dMbssxgE714Gof1dBEDGqnCw==} - hasBin: true peerDependencies: ts-node: '*' typescript: '*' @@ -13016,7 +12948,6 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true /header-case@2.0.4: resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} @@ -13184,6 +13115,10 @@ packages: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} + /immer@10.0.3: + resolution: {integrity: sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==} + dev: false + /immer@9.0.21: resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} @@ -13209,7 +13144,6 @@ packages: /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} - hasBin: true dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 @@ -13333,7 +13267,6 @@ packages: /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - requiresBuild: true /is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} @@ -13369,7 +13302,6 @@ packages: /is-ci@2.0.0: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true dependencies: ci-info: 2.0.0 @@ -13387,12 +13319,10 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true dev: true /is-extglob@1.0.0: @@ -13450,7 +13380,6 @@ packages: /is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} - hasBin: true dependencies: is-docker: 3.0.0 dev: true @@ -13808,7 +13737,6 @@ packages: /jest-cli@29.7.0(@types/node@20.9.4)(ts-node@10.9.1): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -14176,7 +14104,6 @@ packages: /jest@29.7.0(@types/node@20.9.4)(ts-node@10.9.1): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -14231,14 +14158,12 @@ packages: /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 @@ -14248,12 +14173,10 @@ packages: /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} - hasBin: true /json-buffer@3.0.0: resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} @@ -14299,14 +14222,12 @@ packages: /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true dependencies: minimist: 1.2.8 /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} - hasBin: true /jsonfile@2.4.0: resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} @@ -14616,7 +14537,6 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true dependencies: js-tokens: 4.0.0 @@ -14821,7 +14741,6 @@ packages: /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -14839,12 +14758,10 @@ packages: /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} - hasBin: true /mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} - hasBin: true /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -14947,12 +14864,10 @@ packages: /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - requiresBuild: true /mkdirp-promise@5.0.1: resolution: {integrity: sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==} engines: {node: '>=4'} - deprecated: This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that. dependencies: mkdirp: 1.0.4 dev: false @@ -14967,14 +14882,12 @@ packages: /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true dependencies: minimist: 1.2.8 /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} - hasBin: true /mnemonist@0.38.5: resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} @@ -14985,7 +14898,6 @@ packages: /mocha@10.2.0: resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} engines: {node: '>= 14.0.0'} - hasBin: true dependencies: ansi-colors: 4.1.1 browser-stdout: 1.3.1 @@ -15067,7 +14979,6 @@ packages: /msgpackr-extract@3.0.2: resolution: {integrity: sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==} - hasBin: true requiresBuild: true dependencies: node-gyp-build-optional-packages: 5.0.7 @@ -15099,7 +15010,6 @@ packages: /multibase@0.6.1: resolution: {integrity: sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==} - deprecated: This module has been superseded by the multiformats module dependencies: base-x: 3.0.9 buffer: 5.7.1 @@ -15107,7 +15017,6 @@ packages: /multibase@0.7.0: resolution: {integrity: sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==} - deprecated: This module has been superseded by the multiformats module dependencies: base-x: 3.0.9 buffer: 5.7.1 @@ -15115,14 +15024,12 @@ packages: /multicodec@0.5.7: resolution: {integrity: sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==} - deprecated: This module has been superseded by the multiformats module dependencies: varint: 5.0.2 dev: false /multicodec@1.0.4: resolution: {integrity: sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==} - deprecated: This module has been superseded by the multiformats module dependencies: buffer: 5.7.1 varint: 5.0.2 @@ -15158,17 +15065,14 @@ packages: /nanoid@3.3.3: resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true dev: true /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true /napi-build-utils@1.0.2: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} - requiresBuild: true /napi-macros@2.2.2: resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} @@ -15202,7 +15106,6 @@ packages: /node-abi@3.51.0: resolution: {integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==} engines: {node: '>=10'} - requiresBuild: true dependencies: semver: 7.5.4 @@ -15214,7 +15117,6 @@ packages: /node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - requiresBuild: true /node-addon-api@7.0.0: resolution: {integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==} @@ -15250,17 +15152,14 @@ packages: /node-gyp-build-optional-packages@5.0.3: resolution: {integrity: sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==} - hasBin: true /node-gyp-build-optional-packages@5.0.7: resolution: {integrity: sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==} - hasBin: true requiresBuild: true optional: true /node-gyp-build@4.7.0: resolution: {integrity: sha512-PbZERfeFdrHQOOXiAKOY0VPbykZy90ndPKk0d+CFDegTKmWp1VgOTz2xACVbr1BjCWxrQp68CXtvNsveFhqDJg==} - hasBin: true /node-html-parser@5.4.2: resolution: {integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==} @@ -15326,7 +15225,6 @@ packages: /nopt@3.0.6: resolution: {integrity: sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==} - hasBin: true dependencies: abbrev: 1.0.9 dev: true @@ -16307,8 +16205,6 @@ packages: /prebuild-install@7.1.1: resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} engines: {node: '>=10'} - hasBin: true - requiresBuild: true dependencies: detect-libc: 2.0.2 expand-template: 2.0.3 @@ -16364,13 +16260,11 @@ packages: /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} - hasBin: true dev: true /prettier@3.1.0: resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} engines: {node: '>=14'} - hasBin: true dev: true /pretty-error@2.1.2: @@ -16538,7 +16432,6 @@ packages: /queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - requiresBuild: true /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} @@ -16589,7 +16482,6 @@ packages: /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true dependencies: deep-extend: 0.6.0 ini: 1.3.8 @@ -16715,6 +16607,28 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /react-redux@9.1.0(@types/react@18.2.38)(react@18.2.0)(redux@5.0.1): + resolution: {integrity: sha512-6qoDzIO+gbrza8h3hjMA9aq4nwVFCKFtY2iLxCtVT38Swyy2C/dJCGBXHeHLtx6qlg/8qzc2MrhOeduf5K32wQ==} + peerDependencies: + '@types/react': ^18.2.25 + react: ^18.0 + react-native: '>=0.69' + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-native: + optional: true + redux: + optional: true + dependencies: + '@types/react': 18.2.38 + '@types/use-sync-external-store': 0.0.3 + react: 18.2.0 + redux: 5.0.1 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} @@ -16958,11 +16872,23 @@ packages: dependencies: redux: 4.2.1 + /redux-thunk@3.1.0(redux@5.0.1): + resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} + peerDependencies: + redux: ^5.0.0 + dependencies: + redux: 5.0.1 + dev: false + /redux@4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} dependencies: '@babel/runtime': 7.23.4 + /redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + dev: false + /reflect.getprototypeof@1.0.4: resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} engines: {node: '>= 0.4'} @@ -17031,7 +16957,6 @@ packages: /regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true dependencies: jsesc: 0.5.0 @@ -17073,7 +16998,6 @@ packages: /request@2.88.2: resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 dependencies: aws-sign2: 0.7.0 aws4: 1.12.0 @@ -17111,6 +17035,10 @@ packages: /require-package-name@2.0.1: resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} + /reselect@5.1.0: + resolution: {integrity: sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg==} + dev: false + /resize-observer-polyfill@1.5.1: resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} dev: false @@ -17154,7 +17082,6 @@ packages: /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 @@ -17162,7 +17089,6 @@ packages: /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 @@ -17207,13 +17133,11 @@ packages: /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - hasBin: true dependencies: glob: 7.2.3 /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true dependencies: glob: 7.2.3 @@ -17225,14 +17149,12 @@ packages: /rlp@2.2.7: resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} - hasBin: true dependencies: bn.js: 5.2.1 /rollup@4.5.1: resolution: {integrity: sha512-0EQribZoPKpb5z1NW/QYm3XSR//Xr8BeEXU49Lc/mQmpmVVG5jPUVrpc2iptup/0WMrY9mzas0fxH+TjYvG2CA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true optionalDependencies: '@rollup/rollup-android-arm-eabi': 4.5.1 '@rollup/rollup-android-arm64': 4.5.1 @@ -17314,7 +17236,6 @@ packages: /sc-istanbul@0.4.6: resolution: {integrity: sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==} - hasBin: true dependencies: abbrev: 1.0.9 async: 1.5.2 @@ -17387,23 +17308,19 @@ packages: /seek-bzip@1.0.6: resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} - hasBin: true dependencies: commander: 2.20.3 dev: false /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 @@ -17506,7 +17423,6 @@ packages: /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 @@ -17567,7 +17483,6 @@ packages: /shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} engines: {node: '>=4'} - hasBin: true dependencies: glob: 7.2.3 interpret: 1.4.0 @@ -17589,7 +17504,6 @@ packages: /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - requiresBuild: true /simple-get@2.8.2: resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} @@ -17601,7 +17515,6 @@ packages: /simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - requiresBuild: true dependencies: decompress-response: 6.0.0 once: 1.4.0 @@ -17609,7 +17522,6 @@ packages: /simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - requiresBuild: true dependencies: is-arrayish: 0.3.2 @@ -17687,7 +17599,6 @@ packages: /solc@0.7.3(debug@4.3.4): resolution: {integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==} engines: {node: '>=8.0.0'} - hasBin: true dependencies: command-exists: 1.2.9 commander: 3.0.2 @@ -17704,7 +17615,6 @@ packages: /solhint@4.0.0: resolution: {integrity: sha512-bFViMcFvhqVd/HK3Roo7xZXX5nbujS7Bxeg5vnZc9QvH0yCWCrQ38Yrn1pbAY9tlKROc6wFr+rK1mxYgYrjZgA==} - hasBin: true dependencies: '@solidity-parser/parser': 0.16.2 ajv: 6.12.6 @@ -17740,7 +17650,6 @@ packages: /solidity-coverage@0.8.5(hardhat@2.19.1): resolution: {integrity: sha512-6C6N6OV2O8FQA0FWA95FdzVH+L16HU94iFgg5wAFZ29UpLFkgNI/DRR2HotG1bC0F4gAc/OMs2BJI44Q/DYlKQ==} - hasBin: true peerDependencies: hardhat: ^2.11.0 dependencies: @@ -17844,7 +17753,6 @@ packages: /sshpk@1.18.0: resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} - hasBin: true dependencies: asn1: 0.2.6 assert-plus: 1.0.0 @@ -17859,7 +17767,6 @@ packages: /stable@0.1.8: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' /stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} @@ -17907,7 +17814,6 @@ packages: /streamx@2.15.5: resolution: {integrity: sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==} - requiresBuild: true dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 @@ -17942,7 +17848,6 @@ packages: /string-similarity@1.2.2: resolution: {integrity: sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dependencies: lodash.every: 4.6.0 lodash.flattendeep: 4.4.0 @@ -18080,7 +17985,6 @@ packages: /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} - requiresBuild: true /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} @@ -18164,7 +18068,6 @@ packages: /svgo@2.8.0: resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} engines: {node: '>=10.13.0'} - hasBin: true dependencies: '@trysound/sax': 0.2.0 commander: 7.2.0 @@ -18246,7 +18149,6 @@ packages: /syncpack@11.2.1: resolution: {integrity: sha512-WoUtm+ZLmWUvy0cLJy8ds/smVRH3ivI6iANcGTPrsvareCc4SmRVMvr+TwjZyFm0FDGmEfMVsAX7z16+yxL6bQ==} engines: {node: '>=16'} - hasBin: true dependencies: '@effect/data': 0.17.1 '@effect/io': 0.38.0(@effect/data@0.17.1) @@ -18297,7 +18199,6 @@ packages: /tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - requiresBuild: true dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 @@ -18306,7 +18207,6 @@ packages: /tar-fs@3.0.4: resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} - requiresBuild: true dependencies: mkdirp-classic: 0.5.3 pump: 3.0.0 @@ -18328,7 +18228,6 @@ packages: /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - requiresBuild: true dependencies: bl: 4.1.0 end-of-stream: 1.4.4 @@ -18338,7 +18237,6 @@ packages: /tar-stream@3.1.6: resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} - requiresBuild: true dependencies: b4a: 1.6.4 fast-fifo: 1.3.2 @@ -18383,7 +18281,6 @@ packages: /terser@5.24.0: resolution: {integrity: sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==} engines: {node: '>=10'} - hasBin: true dependencies: '@jridgewell/source-map': 0.3.5 acorn: 8.11.2 @@ -18541,7 +18438,6 @@ packages: /truffle-flattener@1.6.0: resolution: {integrity: sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q==} - hasBin: true dependencies: '@resolver-engine/imports-fs': 0.2.2 '@solidity-parser/parser': 0.14.5 @@ -18562,7 +18458,6 @@ packages: /ts-command-line-args@2.5.1: resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} - hasBin: true dependencies: chalk: 4.1.2 command-line-args: 5.2.1 @@ -18581,7 +18476,6 @@ packages: /ts-jest@29.1.1(@babel/core@7.23.3)(jest@29.7.0)(typescript@5.3.2): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' '@jest/types': ^29.0.0 @@ -18614,7 +18508,6 @@ packages: /ts-node@10.9.1(@types/node@20.9.4)(typescript@5.3.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -18709,7 +18602,6 @@ packages: /tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - requiresBuild: true dependencies: safe-buffer: 5.2.1 @@ -18777,7 +18669,6 @@ packages: /typechain@8.3.2(typescript@5.3.2): resolution: {integrity: sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==} - hasBin: true peerDependencies: typescript: '>=4.3.0' dependencies: @@ -18851,7 +18742,6 @@ packages: /typescript@5.3.2: resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} engines: {node: '>=14.17'} - hasBin: true /typical@4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} @@ -18869,7 +18759,6 @@ packages: /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} - hasBin: true requiresBuild: true dev: true optional: true @@ -18973,7 +18862,6 @@ packages: /update-browserslist-db@1.0.13(browserslist@4.22.1): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -18983,7 +18871,6 @@ packages: /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: @@ -19083,6 +18970,14 @@ packages: tslib: 2.6.2 dev: false + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} @@ -19119,28 +19014,21 @@ packages: /uuid@2.0.1: resolution: {integrity: sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==} - 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. dev: false /uuid@3.3.2: resolution: {integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==} - 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 dev: false /uuid@3.4.0: 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 dev: false /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true dev: false /v8-compile-cache-lib@3.0.1: @@ -19227,7 +19115,6 @@ packages: /vite@5.0.2: resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==} engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true peerDependencies: '@types/node': ^18.0.0 || >=20.0.0 less: '*' @@ -20149,7 +20036,6 @@ packages: /webpack@5.89.0: resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} engines: {node: '>=10.13.0'} - hasBin: true peerDependencies: webpack-cli: '*' peerDependenciesMeta: @@ -20258,14 +20144,12 @@ packages: /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true dependencies: isexe: 2.0.0 /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 @@ -20707,9 +20591,9 @@ packages: - supports-color dev: false - github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2): + github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2)(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2)(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2): resolution: {tarball: https://codeload.github.com/thesis/eslint-config/tar.gz/7b9bc8c} - id: github.com/thesis/eslint-config/7b9bc8c + id: github.com/thesis/eslint-config/7b9bc8c(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2)(eslint@8.54.0)(prettier@3.1.0)(typescript@5.3.2) name: '@thesis-co/eslint-config' version: 0.8.0-pre engines: {node: '>=14.0.0'} @@ -20750,9 +20634,20 @@ packages: prettier: 3.1.0 dev: true - github.com/thesis/solhint-config/266de12d96d58f01171e20858b855ec80520de8d(solhint@4.0.0): + github.com/thesis/prettier-config/daeaac564056a7885e4366ce12bfde6fd823fc90(prettier@3.1.0)(prettier@3.1.0)(prettier@3.1.0): + resolution: {tarball: https://codeload.github.com/thesis/prettier-config/tar.gz/daeaac564056a7885e4366ce12bfde6fd823fc90} + id: github.com/thesis/prettier-config/daeaac564056a7885e4366ce12bfde6fd823fc90(prettier@3.1.0)(prettier@3.1.0) + name: '@thesis/prettier-config' + version: 0.0.2 + peerDependencies: + prettier: '>=2.3.0 <4' + dependencies: + prettier: 3.1.0 + dev: true + + github.com/thesis/solhint-config/266de12d96d58f01171e20858b855ec80520de8d(solhint@4.0.0)(solhint@4.0.0)(solhint@4.0.0): resolution: {tarball: https://codeload.github.com/thesis/solhint-config/tar.gz/266de12d96d58f01171e20858b855ec80520de8d} - id: github.com/thesis/solhint-config/266de12d96d58f01171e20858b855ec80520de8d + id: github.com/thesis/solhint-config/266de12d96d58f01171e20858b855ec80520de8d(solhint@4.0.0)(solhint@4.0.0) name: solhint-config-thesis version: 0.1.0 engines: {node: '>=0.10.0'}