diff --git a/.github/assets/tangle-banner.png b/.github/assets/tangle-banner.png new file mode 100644 index 0000000000..9347c3b386 Binary files /dev/null and b/.github/assets/tangle-banner.png differ diff --git a/.github/workflows/check-build.yml b/.github/workflows/check-build.yml index 110c863930..1839714e9b 100644 --- a/.github/workflows/check-build.yml +++ b/.github/workflows/check-build.yml @@ -20,7 +20,7 @@ jobs: uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/checkout@v4.1.4 + - uses: actions/checkout@v4.1.6 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: diff --git a/.github/workflows/check-lint.yml b/.github/workflows/check-lint.yml index de27b4b019..f48a6c43dd 100644 --- a/.github/workflows/check-lint.yml +++ b/.github/workflows/check-lint.yml @@ -18,7 +18,7 @@ jobs: uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/checkout@v4.1.4 + - uses: actions/checkout@v4.1.6 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: @@ -40,7 +40,7 @@ jobs: uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/checkout@v4.1.4 + - uses: actions/checkout@v4.1.6 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: @@ -58,7 +58,7 @@ jobs: uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/checkout@v4.1.4 + - uses: actions/checkout@v4.1.6 - name: Link Checker uses: lycheeverse/lychee-action@v1.10.0 with: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index eb6ad03534..92ee24823b 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -33,7 +33,7 @@ jobs: with: access_token: ${{ github.token }} - name: Checkout repository - uses: actions/checkout@v4.1.4 + uses: actions/checkout@v4.1.6 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. diff --git a/.github/workflows/deploy-bridge-dapp-dev.yml b/.github/workflows/deploy-bridge-dapp-dev.yml index 73599f92bd..51395bd014 100644 --- a/.github/workflows/deploy-bridge-dapp-dev.yml +++ b/.github/workflows/deploy-bridge-dapp-dev.yml @@ -24,7 +24,7 @@ jobs: uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4.1.4 + - uses: actions/checkout@v4.1.6 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: diff --git a/.github/workflows/deploy-faucet.yml b/.github/workflows/deploy-faucet.yml index 08817ef3e8..cf7167ff0e 100644 --- a/.github/workflows/deploy-faucet.yml +++ b/.github/workflows/deploy-faucet.yml @@ -29,7 +29,7 @@ jobs: with: access_token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/checkout@v4.1.4 + - uses: actions/checkout@v4.1.6 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: diff --git a/.github/workflows/deploy-stats-dapp-dev.yml b/.github/workflows/deploy-stats-dapp-dev.yml index 6145132e50..85660b481c 100644 --- a/.github/workflows/deploy-stats-dapp-dev.yml +++ b/.github/workflows/deploy-stats-dapp-dev.yml @@ -25,7 +25,7 @@ jobs: uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/checkout@v4.1.4 + - uses: actions/checkout@v4.1.6 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: diff --git a/.github/workflows/deploy-storybook-docs.yml b/.github/workflows/deploy-storybook-docs.yml index 5053e5d73e..5c9a4fb75d 100644 --- a/.github/workflows/deploy-storybook-docs.yml +++ b/.github/workflows/deploy-storybook-docs.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout 🛎️ - uses: actions/checkout@v4.1.4 + uses: actions/checkout@v4.1.6 with: persist-credentials: false - name: Install and Build 🔧 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0222bd6b25..cdf9f378a0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: #Check out - - uses: actions/checkout@v4.1.4 + - uses: actions/checkout@v4.1.6 with: fetch-depth: 100 diff --git a/.github/workflows/ui-review.yml b/.github/workflows/ui-review.yml index 1bbb11333e..7059edba32 100644 --- a/.github/workflows/ui-review.yml +++ b/.github/workflows/ui-review.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest # Job steps steps: - - uses: actions/checkout@v4.1.4 + - uses: actions/checkout@v4.1.6 with: fetch-depth: 0 - name: Install dependencies diff --git a/.husky/commit-msg b/.husky/commit-msg old mode 100755 new mode 100644 diff --git a/.husky/pre-push b/.husky/pre-push old mode 100755 new mode 100644 diff --git a/apps/bridge-dapp/src/components/Header/ActiveChainDropdown.tsx b/apps/bridge-dapp/src/components/Header/ActiveChainDropdown.tsx index a7ffdbd41a..50344559e4 100644 --- a/apps/bridge-dapp/src/components/Header/ActiveChainDropdown.tsx +++ b/apps/bridge-dapp/src/components/Header/ActiveChainDropdown.tsx @@ -1,4 +1,4 @@ -import { DropdownMenuTrigger as DropdownButton } from '@radix-ui/react-dropdown-menu'; +import { DropdownMenuTrigger } from '@radix-ui/react-dropdown-menu'; import { useWebContext, useConnectWallet, @@ -14,7 +14,7 @@ import { } from '@webb-tools/webb-ui-components/components/Dropdown'; import { MenuItem } from '@webb-tools/webb-ui-components/components/MenuItem'; import { ScrollArea } from '@webb-tools/webb-ui-components/components/ScrollArea'; -import ChainButtonCmp from '@webb-tools/webb-ui-components/components/buttons/ChainButton'; +import ChainOrTokenButton from '@webb-tools/webb-ui-components/components/buttons/ChainOrTokenButton'; import { useWebbUI } from '@webb-tools/webb-ui-components/hooks/useWebbUI'; import { useCallback, useMemo } from 'react'; import useChainsFromRoute from '../../hooks/useChainsFromRoute'; @@ -64,14 +64,15 @@ const ActiveChainDropdown = () => { return ( - - + - +
    diff --git a/apps/bridge-dapp/src/pages/Account/AccountSummaryCard.tsx b/apps/bridge-dapp/src/pages/Account/AccountSummaryCard.tsx index bb1b5cb1c7..c4bef04f1c 100644 --- a/apps/bridge-dapp/src/pages/Account/AccountSummaryCard.tsx +++ b/apps/bridge-dapp/src/pages/Account/AccountSummaryCard.tsx @@ -1,4 +1,4 @@ -import { DropdownMenuTrigger as DropdownButton } from '@radix-ui/react-dropdown-menu'; +import { DropdownMenuTrigger } from '@radix-ui/react-dropdown-menu'; import { useWebContext } from '@webb-tools/api-provider-environment'; import { ZERO_BIG_INT } from '@webb-tools/dapp-config/constants'; import ArrowLeftRightLineIcon from '@webb-tools/icons/ArrowLeftRightLineIcon'; @@ -174,7 +174,7 @@ function TotalShieldedBalance() { - - + diff --git a/apps/bridge-dapp/src/pages/Hubble/Bridge/SelectChain.tsx b/apps/bridge-dapp/src/pages/Hubble/Bridge/SelectChain.tsx index e7d3c43887..62c3247e58 100644 --- a/apps/bridge-dapp/src/pages/Hubble/Bridge/SelectChain.tsx +++ b/apps/bridge-dapp/src/pages/Hubble/Bridge/SelectChain.tsx @@ -128,9 +128,11 @@ const useChains = ( return []; } - return Object.keys(anchorRec).map((typedChainId) => { - return apiConfig.chains[parseInt(typedChainId)]; - }); + return Object.keys(anchorRec) + .map((typedChainId) => { + return apiConfig.chains[parseInt(typedChainId)]; + }) + .filter(Boolean); }; /** diff --git a/apps/hubble-stats/README.md b/apps/hubble-stats/README.md index a7694ca244..9ef4b0f42b 100644 --- a/apps/hubble-stats/README.md +++ b/apps/hubble-stats/README.md @@ -14,6 +14,36 @@

    -## Run the Hubble Stats +## Run Hubble Stats -TBD +Once the development environment is set up, you may proceed to install the required dependencies and run the dapp locally. + +1. Clone this repo + + ```bash + git clone git@github.com:webb-tools/webb-dapp.git + ``` + +2. Install dependencies by `yarn` + + ```bash + yarn install + ``` + +3. Start the dApp by the following command: + + ```bash + yarn nx serve hubble-stats + ``` + +Visit `http://localhost:4200/` to see the Hubble Stats app! + +Happy hacking! + +

    Need help?

    + +If you need help or you want to additional information please: + +- Refer to the [Webb Official Documentation](https://docs.webb.tools/). +- If you have feedback on how to improve the Webb Dapp interface or you have a specific question? Check out the [Webb Dapp Feedback Discussion](https://github.com/webb-tools/feedback/discussions/categories/webb-dapp-feedback). +- If you found a bug please [open an issue](https://github.com/webb-tools/webb-dapp/issues/new/choose) or [join our Discord](https://discord.gg/jUDeFpggrR) server to report it. diff --git a/apps/tangle-dapp/CHANGELOG.md b/apps/tangle-dapp/CHANGELOG.md index e485370ca7..c5f4a6876d 100644 --- a/apps/tangle-dapp/CHANGELOG.md +++ b/apps/tangle-dapp/CHANGELOG.md @@ -211,3 +211,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix cursor moves to the end when changing value in input - https://github.com/webb-tools/webb-dapp/pull/2234. - UI improvements on Tangle Dapp (Key Stats Item + Fix Footer bottom bound + Static Tangle Icon) - https://github.com/webb-tools/webb-dapp/pull/2256. - Fix account explorer link in wallet dropdown - https://github.com/webb-tools/webb-dapp/pull/2261. + +## [0.0.9] - 2024-05-27 + +### Added + +- Add # of Active Services and Restake Amount to Validators Table in Nomination - https://github.com/webb-tools/webb-dapp/pull/2283 +- Backend Integration for Service Info Card and Participants table - https://github.com/webb-tools/webb-dapp/pull/2285 +- Added Loading Account Page - https://github.com/webb-tools/webb-dapp/pull/2300 +- Get Permitted Caller for Tangle Dapp - https://github.com/webb-tools/webb-dapp/pull/2303 +- Integrate backend on Active Service table on Overview page - https://github.com/webb-tools/webb-dapp/pull/2304 +- Add new Bridge page to the site with current functionalities of Bridge Container: select and switch Source & Destination Chain - https://github.com/webb-tools/webb-dapp/pull/2307 +- Switch chains in EVM wallets when switching networks - https://github.com/webb-tools/webb-dapp/pull/2311 +- Update Substrate wallet metadata when appropriate - https://github.com/webb-tools/webb-dapp/pull/2314 +- Added payouts loading state - https://github.com/webb-tools/webb-dapp/pull/2315 +- Show longest vesting schedule info - https://github.com/webb-tools/webb-dapp/pull/2324 +- Setup the code logic to handle different scenarios of bridging - https://github.com/webb-tools/webb-dapp/pull/2329 + +### Changed + +- Update Chip for Restaking Service to normal case - https://github.com/webb-tools/webb-dapp/pull/2282 +- Font updated from Breeze Sans to Satoshi - https://github.com/webb-tools/webb-dapp/pull/2299 +- Transaction notification updates and Update HiddenValue to always display \*\*\*\* to increase privacy for users - https://github.com/webb-tools/webb-dapp/pull/2317 +- Update OpenGraph metadata and images - https://github.com/webb-tools/webb-dapp/pull/2323 +- README updated - https://github.com/webb-tools/webb-dapp/pull/2335 + +### Fixed + +- Improve Balance Display - https://github.com/webb-tools/webb-dapp/pull/2289 +- Resolve Maximum Nomination Amount Error - https://github.com/webb-tools/webb-dapp/pull/2290 +- Slow Rendering of Checkboxes When Clicked - https://github.com/webb-tools/webb-dapp/pull/2291 +- Adjusted the dropdown body to be scrollable on webb-ui-kit, fixed the wrong theme icon and updated the background color of the theme switcher to improve the visual on the sidebar, show the correct number of active nominators on the nomination page, show cached stats value (if existed) instead of loading animation on the nomination page and show the correct staked amounts on the validators table - https://github.com/webb-tools/webb-dapp/pull/2294 +- Fixed total unclaimed payouts rewards bug and actual staked percentage bug - https://github.com/webb-tools/webb-dapp/pull/2335 diff --git a/apps/tangle-dapp/README.md b/apps/tangle-dapp/README.md index f6a4682b4b..839faddf5b 100644 --- a/apps/tangle-dapp/README.md +++ b/apps/tangle-dapp/README.md @@ -1,19 +1,49 @@ -# Tangle dApp - EVM Staking UI +# Tangle dApp

    - EVM Staking UI + An interface for nominating validators on the Tangle network, managing account, bridging TNT, and more.

    -## Run the Tangle dApp +## Run Tangle dApp -TBD +Once the development environment is set up, you may proceed to install the required dependencies and run the dapp locally. + +1. Clone this repo + + ```bash + git clone git@github.com:webb-tools/webb-dapp.git + ``` + +2. Install dependencies by `yarn` + + ```bash + yarn install + ``` +⚠️ **REQUIRED:** Node.js version >= v18.19.0 + +3. Start the dApp by the following command: + + ```bash + yarn nx serve tangle-dapp + ``` + +Visit `http://localhost:4200/` to see the Tangle dApp! + +Happy hacking! + +

    Need help?

    + +If you need help or you want to additional information please: + +- Refer to the [Tangle Network Official Documentation](https://docs.tangle.tools/). +- If you have feedback on how to improve the Webb Dapp interface or you have a specific question? Check out the [Webb Dapp Feedback Discussion](https://github.com/webb-tools/feedback/discussions/categories/webb-dapp-feedback). +- If you found a bug please [open an issue](https://github.com/webb-tools/webb-dapp/issues/new/choose) or [join our Discord](https://discord.gg/jUDeFpggrR) server to report it. diff --git a/apps/tangle-dapp/app/bridge/AmountAndTokenInput.tsx b/apps/tangle-dapp/app/bridge/AmountAndTokenInput.tsx new file mode 100644 index 0000000000..fd331842ce --- /dev/null +++ b/apps/tangle-dapp/app/bridge/AmountAndTokenInput.tsx @@ -0,0 +1,74 @@ +'use client'; + +import { DropdownMenuTrigger as DropdownTrigger } from '@radix-ui/react-dropdown-menu'; +import { TokenIcon } from '@webb-tools/icons/TokenIcon'; +import ChainOrTokenButton from '@webb-tools/webb-ui-components/components/buttons/ChainOrTokenButton'; +import { + Dropdown, + DropdownBody, +} from '@webb-tools/webb-ui-components/components/Dropdown'; +import { MenuItem } from '@webb-tools/webb-ui-components/components/MenuItem'; +import { ScrollArea } from '@webb-tools/webb-ui-components/components/ScrollArea'; +import { FC } from 'react'; + +import AmountInput from '../../components/AmountInput/AmountInput'; +import { BRIDGE_SUPPORTED_TOKENS } from '../../constants/bridge'; +import { useBridge } from '../../context/BridgeContext'; + +const AmountAndTokenInput: FC = () => { + const { + amount, + setAmount, + selectedTokenId, + setSelectedTokenId, + tokenIdOptions, + } = useBridge(); + + return ( +
    + + + + + + + +
      + {tokenIdOptions.map((tokenId) => { + const token = BRIDGE_SUPPORTED_TOKENS[tokenId]; + return ( +
    • + } + onSelect={() => setSelectedTokenId(tokenId)} + className="px-3 normal-case" + > + {token.symbol} + +
    • + ); + })} +
    +
    +
    +
    +
    + ); +}; + +export default AmountAndTokenInput; diff --git a/apps/tangle-dapp/app/bridge/BridgeContainer.tsx b/apps/tangle-dapp/app/bridge/BridgeContainer.tsx new file mode 100644 index 0000000000..996bc3a9ad --- /dev/null +++ b/apps/tangle-dapp/app/bridge/BridgeContainer.tsx @@ -0,0 +1,64 @@ +'use client'; + +import Button from '@webb-tools/webb-ui-components/components/buttons/Button'; +import { FC } from 'react'; +import { twMerge } from 'tailwind-merge'; + +import AddressInput, { + AddressType, +} from '../../components/AddressInput/AddressInput'; +import { useBridge } from '../../context/BridgeContext'; +import AmountAndTokenInput from './AmountAndTokenInput'; +import ChainSelectors from './ChainSelectors'; +import useActionButton from './useActionButton'; + +interface BridgeContainerProps { + className?: string; +} + +const BridgeContainer: FC = ({ className }) => { + const { destinationAddress, setDestinationAddress } = useBridge(); + const { buttonAction, buttonText, isLoading } = useActionButton(); + + return ( +
    +
    +
    + + + + + + + {/* TODO: Tx Info (Fees & Estimated Time) */} +
    + +
    +
    + ); +}; + +export default BridgeContainer; diff --git a/apps/tangle-dapp/app/bridge/ChainSelectors.tsx b/apps/tangle-dapp/app/bridge/ChainSelectors.tsx new file mode 100644 index 0000000000..0c78df4f75 --- /dev/null +++ b/apps/tangle-dapp/app/bridge/ChainSelectors.tsx @@ -0,0 +1,142 @@ +'use client'; + +import { DropdownMenuTrigger as DropdownTrigger } from '@radix-ui/react-dropdown-menu'; +import { ChainConfig } from '@webb-tools/dapp-config/chains/chain-config.interface'; +import { ArrowRight } from '@webb-tools/icons/ArrowRight'; +import { ChainIcon } from '@webb-tools/icons/ChainIcon'; +import { calculateTypedChainId } from '@webb-tools/sdk-core/typed-chain-id'; +import ChainOrTokenButton from '@webb-tools/webb-ui-components/components/buttons/ChainOrTokenButton'; +import { + Dropdown, + DropdownBody, +} from '@webb-tools/webb-ui-components/components/Dropdown'; +import { MenuItem } from '@webb-tools/webb-ui-components/components/MenuItem'; +import { ScrollArea } from '@webb-tools/webb-ui-components/components/ScrollArea'; +import assert from 'assert'; +import { FC, useCallback } from 'react'; + +import { BRIDGE } from '../../constants/bridge'; +import { useBridge } from '../../context/BridgeContext'; + +interface ChainSelectorProps { + selectedChain: ChainConfig; + chainOptions: ChainConfig[]; + onSelectChain: (chain: ChainConfig) => void; + className?: string; +} + +const ChainSelectors: FC = () => { + const { + selectedSourceChain, + setSelectedSourceChain, + selectedDestinationChain, + setSelectedDestinationChain, + sourceChainOptions, + destinationChainOptions, + } = useBridge(); + + const onSwitchChains = useCallback(() => { + const newSelectedDestinationChain = selectedSourceChain; + const newSelectedSourceChain = selectedDestinationChain; + + assert( + sourceChainOptions.find( + (chain) => + calculateTypedChainId(chain.chainType, chain.id) === + calculateTypedChainId( + newSelectedSourceChain.chainType, + newSelectedSourceChain.id + ) + ) !== undefined, + 'New source chain is not available in source chain options when switching chains' + ); + setSelectedSourceChain(newSelectedSourceChain); + + const newDestinationChainOptions = + BRIDGE[ + calculateTypedChainId( + newSelectedSourceChain.chainType, + newSelectedSourceChain.id + ) + ]; + const newDestinationChainPresetTypedChainId = calculateTypedChainId( + newSelectedDestinationChain.chainType, + newSelectedDestinationChain.id + ); + assert( + newDestinationChainPresetTypedChainId in newDestinationChainOptions, + 'New destination chain is not available in destination chain options when switching chains' + ); + setSelectedDestinationChain(newSelectedDestinationChain); + }, [ + setSelectedSourceChain, + setSelectedDestinationChain, + selectedDestinationChain, + selectedSourceChain, + sourceChainOptions, + ]); + + return ( +
    + + +
    + +
    + + +
    + ); +}; + +const ChainSelector: FC = ({ + selectedChain, + chainOptions, + onSelectChain, + className, +}) => { + return ( + + + + + + +
      + {chainOptions.map((chain) => { + return ( +
    • + } + onSelect={() => onSelectChain(chain)} + > + {chain.name} + +
    • + ); + })} +
    +
    +
    +
    + ); +}; + +export default ChainSelectors; diff --git a/apps/tangle-dapp/app/bridge/hooks/useBridgeType.ts b/apps/tangle-dapp/app/bridge/hooks/useBridgeType.ts new file mode 100644 index 0000000000..d7bb97ee5c --- /dev/null +++ b/apps/tangle-dapp/app/bridge/hooks/useBridgeType.ts @@ -0,0 +1,59 @@ +'use client'; + +import { ChainType } from '@webb-tools/sdk-core/typed-chain-id'; + +import { useBridge } from '../../../context/BridgeContext'; +import { BridgeType } from '../../../types/bridge'; + +export default function useBridgeType() { + const { selectedSourceChain, selectedDestinationChain } = useBridge(); + + // EVM to EVM + if ( + isEVMChain(selectedSourceChain.chainType) && + isEVMChain(selectedDestinationChain.chainType) + ) { + return BridgeType.SYGMA_EVM_TO_EVM; + } + + // EVM to Substrate + if ( + isEVMChain(selectedSourceChain.chainType) && + isSubstrateChain(selectedDestinationChain.chainType) + ) { + return BridgeType.SYGMA_EVM_TO_SUBSTRATE; + } + + // Substrate to EVM + if ( + isSubstrateChain(selectedSourceChain.chainType) && + isEVMChain(selectedDestinationChain.chainType) + ) { + return BridgeType.SYGMA_SUBSTRATE_TO_EVM; + } + + // Substrate to Substrate + if ( + isSubstrateChain(selectedSourceChain.chainType) && + isSubstrateChain(selectedDestinationChain.chainType) + ) { + return BridgeType.SYGMA_SUBSTRATE_TO_SUBSTRATE; + } + + throw new Error('Unsupported bridge type'); +} + +function isSubstrateChain(chainType: ChainType) { + return ( + chainType === ChainType.Substrate || + chainType === ChainType.SubstrateDevelopment || + chainType === ChainType.PolkadotRelayChain || + chainType === ChainType.KusamaRelayChain || + chainType === ChainType.PolkadotParachain || + chainType === ChainType.KusamaParachain + ); +} + +function isEVMChain(chainType: ChainType) { + return chainType === ChainType.EVM; +} diff --git a/apps/tangle-dapp/app/bridge/layout.tsx b/apps/tangle-dapp/app/bridge/layout.tsx new file mode 100644 index 0000000000..be0bbdd8af --- /dev/null +++ b/apps/tangle-dapp/app/bridge/layout.tsx @@ -0,0 +1,9 @@ +import { FC, PropsWithChildren } from 'react'; + +import BridgeProvider from '../../context/BridgeContext'; + +const BridgeLayout: FC = ({ children }) => { + return {children}; +}; + +export default BridgeLayout; diff --git a/apps/tangle-dapp/app/bridge/page.tsx b/apps/tangle-dapp/app/bridge/page.tsx new file mode 100644 index 0000000000..aa2ef0e921 --- /dev/null +++ b/apps/tangle-dapp/app/bridge/page.tsx @@ -0,0 +1,19 @@ +import { Metadata } from 'next'; +import { FC } from 'react'; + +import createPageMetadata from '../../utils/createPageMetadata'; +import BridgeContainer from './BridgeContainer'; + +export const metadata: Metadata = createPageMetadata({ + title: 'Bridge', +}); + +const Bridge: FC = () => { + return ( +
    + +
    + ); +}; + +export default Bridge; diff --git a/apps/tangle-dapp/app/bridge/useActionButton.tsx b/apps/tangle-dapp/app/bridge/useActionButton.tsx new file mode 100644 index 0000000000..fa9f820664 --- /dev/null +++ b/apps/tangle-dapp/app/bridge/useActionButton.tsx @@ -0,0 +1,32 @@ +'use client'; + +import { + useConnectWallet, + useWebContext, +} from '@webb-tools/api-provider-environment'; +import { useCallback, useMemo } from 'react'; + +export default function useActionButton() { + const { activeAccount, activeWallet, loading, isConnecting } = + useWebContext(); + + const { toggleModal } = useConnectWallet(); + + const noActiveAccountOrWallet = useMemo(() => { + return !activeAccount || !activeWallet; + }, [activeAccount, activeWallet]); + + const openWalletModal = useCallback(() => { + toggleModal(true); + }, [toggleModal]); + + const bridgeTx = useCallback(() => { + // TODO: handle bridge Tx for each case from the source and destination chain + }, []); + + return { + isLoading: loading || isConnecting, + buttonAction: noActiveAccountOrWallet ? openWalletModal : bridgeTx, + buttonText: noActiveAccountOrWallet ? 'Connect' : 'Approve', + }; +} diff --git a/apps/tangle-dapp/app/claim/EligibleSection.tsx b/apps/tangle-dapp/app/claim/EligibleSection.tsx index f6fc4e067b..a37a750424 100644 --- a/apps/tangle-dapp/app/claim/EligibleSection.tsx +++ b/apps/tangle-dapp/app/claim/EligibleSection.tsx @@ -28,7 +28,7 @@ import ClaimRecipientInput from '../../components/claims/ClaimRecipientInput'; import useNetworkStore from '../../context/useNetworkStore'; import toAsciiHex from '../../utils/claims/toAsciiHex'; import getStatement, { Statement } from '../../utils/getStatement'; -import { getPolkadotApiPromise } from '../../utils/polkadot'; +import { getApiPromise } from '../../utils/polkadot'; import { formatTokenBalance } from '../../utils/polkadot/tokens'; import type { ClaimInfoType } from './types'; @@ -82,7 +82,7 @@ const EligibleSection: FC = ({ useEffect(() => { const fetchStatement = async () => { try { - const api = await getPolkadotApiPromise(rpcEndpoint); + const api = await getApiPromise(rpcEndpoint); const systemChain = await api.rpc.system.chain(); const statement = getStatement( systemChain.toHuman(), @@ -122,7 +122,7 @@ const EligibleSection: FC = ({ setIsClaiming(true); setStep(Step.SIGN); - const api = await getPolkadotApiPromise(rpcEndpoint); + const api = await getApiPromise(rpcEndpoint); const accountId = activeAccount.address; const isEvmRecipient = isEthereumAddress(recipient); const isEvmSigner = isEthereumAddress(accountId); @@ -143,6 +143,7 @@ const EligibleSection: FC = ({ setStep(Step.SENDING_TX); + // TODO: This needs to be changed to use the new hooks. const tx = api.tx.claims.claimAttest( isEvmRecipient ? { EVM: recipient } : { Native: recipient }, // destAccount isEvmSigner ? { EVM: accountId } : { Native: accountId }, // signer @@ -337,7 +338,8 @@ function preparePayload( function sendTransaction( tx: SubmittableExtrinsic<'promise', ISubmittableResult> ) { - console.log(`Sending transaction with args ${tx.args.toString()}`); + console.debug(`Sending transaction with args ${tx.args.toString()}`); + return new Promise((resolve, reject) => { tx.send(async (result) => { const status = result.status; diff --git a/apps/tangle-dapp/app/claim/page.tsx b/apps/tangle-dapp/app/claim/page.tsx index 9d1e7d0972..635e80750c 100644 --- a/apps/tangle-dapp/app/claim/page.tsx +++ b/apps/tangle-dapp/app/claim/page.tsx @@ -14,7 +14,7 @@ import { useEffect, useMemo, useState } from 'react'; import { combineLatest, Subscription } from 'rxjs'; import useNetworkStore from '../../context/useNetworkStore'; -import { getPolkadotApiRx } from '../../utils/polkadot'; +import { getApiRx } from '../../utils/polkadot'; import EligibleSection from './EligibleSection'; import NotEligibleSection from './NotEligibleSection'; import type { ClaimInfoType } from './types'; @@ -63,7 +63,7 @@ export default function ClaimPage() { const fetchClaimData = async () => { try { - const apiRx = await getPolkadotApiRx(rpcEndpoint); + const apiRx = await getApiRx(rpcEndpoint); const params = isEthereumAddress(accountAddress) ? { EVM: accountAddress } diff --git a/apps/tangle-dapp/app/claim/success/page.tsx b/apps/tangle-dapp/app/claim/success/page.tsx index 100b500502..c1c0f21eec 100644 --- a/apps/tangle-dapp/app/claim/success/page.tsx +++ b/apps/tangle-dapp/app/claim/success/page.tsx @@ -2,11 +2,11 @@ import { isHex } from '@polkadot/util'; import { redirect } from 'next/navigation'; import { PagePath } from '../../../types'; -import { getPolkadotApiPromise } from '../../../utils/polkadot'; +import { getApiPromise } from '../../../utils/polkadot'; import SuccessClient from './SuccessClient'; const isBlockHashExistOnChain = async ( - api: NonNullable>>, + api: NonNullable>>, blockHash: string ) => { try { @@ -30,7 +30,7 @@ const Page = async ({ return redirect(PagePath.CLAIM_AIRDROP); } - const api = await getPolkadotApiPromise(rpcEndpoint); + const api = await getApiPromise(rpcEndpoint); const isValidBlockHash = typeof blockHash === 'string' && diff --git a/apps/tangle-dapp/app/loading.tsx b/apps/tangle-dapp/app/loading.tsx new file mode 100644 index 0000000000..375787dca0 --- /dev/null +++ b/apps/tangle-dapp/app/loading.tsx @@ -0,0 +1,23 @@ +import SkeletonLoader from '@webb-tools/webb-ui-components/components/SkeletonLoader'; +import { Typography } from '@webb-tools/webb-ui-components/typography/Typography/Typography'; +import type { FC } from 'react'; + +const LoadingPage: FC = () => { + return ( +
    +
    + + + +
    + + + Balances + + + +
    + ); +}; + +export default LoadingPage; diff --git a/apps/tangle-dapp/app/nomination/[validatorAddress]/ValidatorBasicInfoCard.tsx b/apps/tangle-dapp/app/nomination/[validatorAddress]/InfoCard.tsx similarity index 52% rename from apps/tangle-dapp/app/nomination/[validatorAddress]/ValidatorBasicInfoCard.tsx rename to apps/tangle-dapp/app/nomination/[validatorAddress]/InfoCard.tsx index 72a0845de1..a1ebdf6e9a 100644 --- a/apps/tangle-dapp/app/nomination/[validatorAddress]/ValidatorBasicInfoCard.tsx +++ b/apps/tangle-dapp/app/nomination/[validatorAddress]/InfoCard.tsx @@ -9,36 +9,27 @@ import { Typography, } from '@webb-tools/webb-ui-components'; import { shortenString } from '@webb-tools/webb-ui-components/utils/shortenString'; -import { FC, useEffect, useMemo, useState } from 'react'; +import { FC } from 'react'; import { twMerge } from 'tailwind-merge'; import { SocialChip, TangleCard } from '../../../components'; import useNetworkStore from '../../../context/useNetworkStore'; -import useRestakingRoleLedger from '../../../data/restaking/useRestakingRoleLedger'; -import useCurrentEra from '../../../data/staking/useCurrentEra'; +import useValidatorInfoCard from '../../../data/validatorDetails/useValidatorInfoCard'; +import useFormatNativeTokenAmount from '../../../hooks/useFormatNativeTokenAmount'; import { ExplorerType } from '../../../types'; -import { - extractDataFromIdentityInfo, - formatTokenBalance, - IdentityDataType, -} from '../../../utils/polkadot'; -import { getPolkadotApiPromise } from '../../../utils/polkadot/api'; -import { - getProfileTypeFromRestakeRoleLedger, - getTotalRestakedFromRestakeRoleLedger, -} from '../../../utils/polkadot/restake'; import ValueSkeleton from './ValueSkeleton'; -interface ValidatorBasicInfoCardProps { +interface InfoCardProps { validatorAddress: string; className?: string; } -const ValidatorBasicInfoCard: FC = ({ +const InfoCard: FC = ({ validatorAddress, className, -}: ValidatorBasicInfoCardProps) => { - const { network, nativeTokenSymbol, rpcEndpoint } = useNetworkStore(); +}: InfoCardProps) => { + const { network, rpcEndpoint } = useNetworkStore(); + const formatNativeTokenAmount = useFormatNativeTokenAmount(); const { name, @@ -50,7 +41,7 @@ const ValidatorBasicInfoCard: FC = ({ email, web, isLoading, - } = useValidatorBasicInfo(rpcEndpoint, validatorAddress); + } = useValidatorInfoCard(rpcEndpoint, validatorAddress); return ( @@ -123,7 +114,7 @@ const ValidatorBasicInfoCard: FC = ({ className="whitespace-nowrap" > {totalRestaked - ? formatTokenBalance(totalRestaked, nativeTokenSymbol) + ? formatNativeTokenAmount(totalRestaked) : '--'} )} @@ -162,99 +153,4 @@ const ValidatorBasicInfoCard: FC = ({ ); }; -export default ValidatorBasicInfoCard; - -function useValidatorBasicInfo(rpcEndpoint: string, validatorAddress: string) { - const { data: currentEra } = useCurrentEra(); - const { data: ledgerOpt, isLoading: isLoadingLedgerOpt } = - useRestakingRoleLedger(validatorAddress); - - const [name, setName] = useState(null); - const [email, setEmail] = useState(null); - const [web, setWeb] = useState(null); - const [twitter, setTwitter] = useState(null); - const [nominations, setNominations] = useState(null); - const [isActive, setIsActive] = useState(null); - const [isLoading, setIsLoading] = useState(true); - - const restakingMethod = useMemo( - () => getProfileTypeFromRestakeRoleLedger(ledgerOpt), - [ledgerOpt] - ); - - const totalRestaked = useMemo( - () => getTotalRestakedFromRestakeRoleLedger(ledgerOpt), - [ledgerOpt] - ); - - useEffect(() => { - const fetchData = async () => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const fetchNameAndSocials = async () => { - const identityData = await api.query.identity.identityOf( - validatorAddress - ); - - if (identityData.isSome) { - const identity = identityData.unwrap(); - const info = identity[0]?.info; - if (info) { - setName(extractDataFromIdentityInfo(info, IdentityDataType.NAME)); - setEmail(extractDataFromIdentityInfo(info, IdentityDataType.EMAIL)); - setWeb(extractDataFromIdentityInfo(info, IdentityDataType.WEB)); - const twitterName = extractDataFromIdentityInfo( - info, - IdentityDataType.TWITTER - ); - setTwitter( - twitterName === null - ? null - : `https://twitter.com/${twitterName.substring(1)}` - ); - } - } - }; - - const fetchNominations = async () => { - if (currentEra === null || !api.query.staking?.erasStakersOverview) { - setNominations(null); - setIsActive(null); - return; - } - - const erasStakersOverviewData = - await api.query.staking.erasStakersOverview( - currentEra, - validatorAddress - ); - if (erasStakersOverviewData.isSome) { - const nominatorCount = - erasStakersOverviewData.unwrap().nominatorCount; - setNominations(nominatorCount.toNumber()); - setIsActive(true); - return; - } - - setNominations(null); - setIsActive(false); - }; - - await Promise.all([fetchNameAndSocials(), fetchNominations()]); - setIsLoading(false); - }; - - fetchData(); - }, [validatorAddress, rpcEndpoint, currentEra]); - - return { - name, - isActive, - totalRestaked, - restakingMethod, - nominations, - twitter, - email, - web, - isLoading: isLoading || isLoadingLedgerOpt, - }; -} +export default InfoCard; diff --git a/apps/tangle-dapp/app/nomination/[validatorAddress]/NodeSpecificationsTable.tsx b/apps/tangle-dapp/app/nomination/[validatorAddress]/NodeSpecificationsTable.tsx index 4796ee4345..7c91a6a128 100644 --- a/apps/tangle-dapp/app/nomination/[validatorAddress]/NodeSpecificationsTable.tsx +++ b/apps/tangle-dapp/app/nomination/[validatorAddress]/NodeSpecificationsTable.tsx @@ -19,7 +19,7 @@ import { FC, useMemo } from 'react'; import ContainerSkeleton from '../../../components/skeleton/ContainerSkeleton'; import { HeaderCell } from '../../../components/tableCells'; -import useNodeSpecifications from '../../../data/useNodeSpecifications'; +import useNodeSpecifications from '../../../data/validatorDetails/useNodeSpecifications'; import { NodeSpecification } from '../../../types'; interface NodeSpecificationsTableProps { diff --git a/apps/tangle-dapp/app/nomination/[validatorAddress]/RoleDistributionCard.tsx b/apps/tangle-dapp/app/nomination/[validatorAddress]/RoleDistributionCard.tsx index 82184ec34c..628a29e99e 100644 --- a/apps/tangle-dapp/app/nomination/[validatorAddress]/RoleDistributionCard.tsx +++ b/apps/tangle-dapp/app/nomination/[validatorAddress]/RoleDistributionCard.tsx @@ -11,11 +11,11 @@ import GlassCard from '../../../components/GlassCard/GlassCard'; import useRestakingRoleLedger from '../../../data/restaking/useRestakingRoleLedger'; import { RestakingProfileType } from '../../../types'; import assertRestakingService from '../../../utils/assertRestakingService'; -import getChartDataAreaColorByServiceType from '../../../utils/getChartDataAreaColorByServiceType'; import { getProfileTypeFromRestakeRoleLedger, getRoleDistributionFromRestakeRoleLedger, } from '../../../utils/polkadot/restake'; +import getChartDataAreaColorByServiceType from '../../../utils/restaking/getChartDataAreaColorByServiceType'; interface RoleDistributionCardProps { validatorAddress: string; @@ -26,7 +26,7 @@ const RoleDistributionCard: FC = ({ validatorAddress, className, }) => { - const { data: ledgerOpt, isLoading } = + const { result: ledgerOpt, isLoading } = useRestakingRoleLedger(validatorAddress); const profileType = useMemo( diff --git a/apps/tangle-dapp/app/nomination/[validatorAddress]/ServiceTableTabs.tsx b/apps/tangle-dapp/app/nomination/[validatorAddress]/ServiceTableTabs.tsx index 618d84b20b..c139ba4de5 100644 --- a/apps/tangle-dapp/app/nomination/[validatorAddress]/ServiceTableTabs.tsx +++ b/apps/tangle-dapp/app/nomination/[validatorAddress]/ServiceTableTabs.tsx @@ -8,7 +8,7 @@ import { ServiceTable, TableStatus, } from '../../../components'; -import useActiveServicesByValidator from '../../../data/ServiceTables/useActiveServicesByValidator'; +import useActiveServicesByValidator from '../../../data/validatorDetails/useActiveServicesByValidator'; interface ServiceTableTabsProps { validatorAddress: string; diff --git a/apps/tangle-dapp/app/nomination/[validatorAddress]/page.tsx b/apps/tangle-dapp/app/nomination/[validatorAddress]/page.tsx index 2a55c31949..9660a64a5f 100644 --- a/apps/tangle-dapp/app/nomination/[validatorAddress]/page.tsx +++ b/apps/tangle-dapp/app/nomination/[validatorAddress]/page.tsx @@ -1,10 +1,11 @@ import { isAddress } from '@polkadot/util-crypto'; import { notFound } from 'next/navigation'; +import { IS_PRODUCTION_ENV } from '../../../constants/env'; +import InfoCard from './InfoCard'; import NodeSpecificationsTable from './NodeSpecificationsTable'; import RoleDistributionCard from './RoleDistributionCard'; import ServiceTableTabs from './ServiceTableTabs'; -import ValidatorBasicInfoCard from './ValidatorBasicInfoCard'; // TODO: might need to add metadata here @@ -22,17 +23,17 @@ export default function ValidatorDetails({ return (
    - +
    - + {/* TODO: Hide this for now */} + {!IS_PRODUCTION_ENV && ( + + )}
    diff --git a/apps/tangle-dapp/app/nomination/layout.tsx b/apps/tangle-dapp/app/nomination/layout.tsx new file mode 100644 index 0000000000..3b589a5925 --- /dev/null +++ b/apps/tangle-dapp/app/nomination/layout.tsx @@ -0,0 +1,7 @@ +import { PropsWithChildren } from 'react'; + +import { BalancesProvider } from '../../context/BalancesContext'; + +export default function Layout({ children }: PropsWithChildren) { + return {children}; +} diff --git a/apps/tangle-dapp/app/page.tsx b/apps/tangle-dapp/app/page.tsx index b64c0a48c6..280b925c70 100644 --- a/apps/tangle-dapp/app/page.tsx +++ b/apps/tangle-dapp/app/page.tsx @@ -1,4 +1,5 @@ -import { SkeletonLoader, Typography } from '@webb-tools/webb-ui-components'; +import SkeletonLoader from '@webb-tools/webb-ui-components/components/SkeletonLoader'; +import { Typography } from '@webb-tools/webb-ui-components/typography/Typography/Typography'; import { Metadata } from 'next'; import { FC, Suspense } from 'react'; @@ -15,7 +16,7 @@ export const metadata: Metadata = createPageMetadata({ const AccountPage: FC = () => { return (
    -
    +
    diff --git a/apps/tangle-dapp/app/providers.tsx b/apps/tangle-dapp/app/providers.tsx index 9ea85f1be0..b50401e3fb 100644 --- a/apps/tangle-dapp/app/providers.tsx +++ b/apps/tangle-dapp/app/providers.tsx @@ -10,8 +10,6 @@ import { WebbUIProvider } from '@webb-tools/webb-ui-components'; import { type PropsWithChildren, type ReactNode } from 'react'; import z from 'zod'; -import { TxConfirmationProvider } from '../context/TxConfirmationContext'; - const appEvent = new AppEvent(); const envSchema = z.object({ @@ -38,7 +36,7 @@ const Providers = ({ children }: PropsWithChildren): ReactNode => { blockedRegions={blockedRegions} blockedCountryCodes={blockedCountryCodes} > - {children} + {children} diff --git a/apps/tangle-dapp/app/restake/OverviewCard/ActionButton.tsx b/apps/tangle-dapp/app/restake/OverviewCard/ActionButton.tsx index 140be105a9..eda37dc901 100644 --- a/apps/tangle-dapp/app/restake/OverviewCard/ActionButton.tsx +++ b/apps/tangle-dapp/app/restake/OverviewCard/ActionButton.tsx @@ -1,5 +1,6 @@ 'use client'; +import type { BN } from '@polkadot/util'; import { useConnectWallet, useWebContext, @@ -22,9 +23,11 @@ type Props = { hasExistingProfile: boolean | null; profileTypeOpt: Optional | null; isDataLoading?: boolean; + availableForRestake?: BN | null; }; const ActionButton: FC = ({ + availableForRestake = null, hasExistingProfile, profileTypeOpt, isDataLoading, @@ -56,7 +59,14 @@ const ActionButton: FC = ({ if (activeAccount && activeWallet) { return ( <> - diff --git a/apps/tangle-dapp/app/restake/OverviewCard/index.tsx b/apps/tangle-dapp/app/restake/OverviewCard/index.tsx index b5f9e632c4..87e4c2fa03 100644 --- a/apps/tangle-dapp/app/restake/OverviewCard/index.tsx +++ b/apps/tangle-dapp/app/restake/OverviewCard/index.tsx @@ -13,8 +13,10 @@ import { import { InfoIconWithTooltip } from '../../../components/InfoIconWithTooltip'; import TangleCard from '../../../components/TangleCard'; +import useRestakingAPY from '../../../data/restaking/useRestakingAPY'; import useRestakingLimits from '../../../data/restaking/useRestakingLimits'; import useRestakingProfile from '../../../data/restaking/useRestakingProfile'; +import useRestakingTotalRewards from '../../../data/restaking/useRestakingTotalRewards'; import useFormatNativeTokenAmount from '../../../hooks/useFormatNativeTokenAmount'; import { getTotalRestakedFromRestakeRoleLedger } from '../../../utils/polkadot/restake'; import ActionButton from './ActionButton'; @@ -22,13 +24,14 @@ import ActionButton from './ActionButton'; const OverviewCard = forwardRef, ComponentProps<'div'>>( (props, ref) => { const formatNativeTokenAmount = useFormatNativeTokenAmount(); - const { - hasExistingProfile, - profileTypeOpt, - earningsRecord, - ledgerOpt, - isLoading, - } = useRestakingProfile(); + + const { hasExistingProfile, profileTypeOpt, ledgerOpt, isLoading } = + useRestakingProfile(); + + const { result: totalRewards, isLoading: isTotalRewardLoading } = + useRestakingTotalRewards(); + + const apy = useRestakingAPY(); const { maxRestakingAmount } = useRestakingLimits(); const totalRestaked = useMemo( @@ -36,15 +39,6 @@ const OverviewCard = forwardRef, ComponentProps<'div'>>( [ledgerOpt] ); - const earnings = useMemo(() => { - if (isLoading || !earningsRecord) return null; - - return Object.values(earningsRecord).reduce( - (total, curr) => total.add(curr), - BN_ZERO - ); - }, [earningsRecord, isLoading]); - const availableForRestake = useMemo(() => { if (maxRestakingAmount !== null && totalRestaked !== null) { return maxRestakingAmount.gt(totalRestaked) @@ -79,18 +73,23 @@ const OverviewCard = forwardRef, ComponentProps<'div'>>( /> - + { const { ledgerOpt, profileTypeOpt, isLoading } = useRestakingProfile(); diff --git a/apps/tangle-dapp/app/restake/RolesEarningsCard.tsx b/apps/tangle-dapp/app/restake/RolesEarningsCard.tsx index 6c6489a171..f837b05b73 100644 --- a/apps/tangle-dapp/app/restake/RolesEarningsCard.tsx +++ b/apps/tangle-dapp/app/restake/RolesEarningsCard.tsx @@ -1,8 +1,10 @@ 'use client'; +import { TANGLE_TOKEN_DECIMALS } from '@webb-tools/dapp-config/constants/tangle'; import { Spinner } from '@webb-tools/icons'; import { Typography } from '@webb-tools/webb-ui-components/typography/Typography'; -import { FC, useMemo } from 'react'; +import { ComponentProps, FC, useMemo } from 'react'; +import { formatUnits } from 'viem'; import { RoleEarningsChart } from '../../components/charts'; import GlassCard from '../../components/GlassCard/GlassCard'; @@ -11,13 +13,13 @@ import useRestakingProfile from '../../data/restaking/useRestakingProfile'; const RolesEarningsCard: FC = () => { const { earningsRecord, isLoading } = useRestakingProfile(); - const data = useMemo(() => { + const data = useMemo['data']>(() => { if (!earningsRecord) return []; return Object.entries(earningsRecord).map(([era, reward]) => ({ era: +era, - // Recharts can only handle number, temporarily convert to number - reward: reward.toNumber(), + // Format to display already handled in the chart component + reward: +formatUnits(reward, TANGLE_TOKEN_DECIMALS), })); }, [earningsRecord]); @@ -28,7 +30,7 @@ const RolesEarningsCard: FC = () => { {isLoading ? ( -
    +
    ) : ( diff --git a/apps/tangle-dapp/app/services/ActiveServicesTable.tsx b/apps/tangle-dapp/app/services/ActiveServicesTable.tsx index 325b85cba4..704d4e2912 100644 --- a/apps/tangle-dapp/app/services/ActiveServicesTable.tsx +++ b/apps/tangle-dapp/app/services/ActiveServicesTable.tsx @@ -2,33 +2,30 @@ import { Typography } from '@webb-tools/webb-ui-components'; import { FC } from 'react'; -import useSWR from 'swr'; import { ContainerSkeleton, ServiceTable, TableStatus } from '../../components'; -import { getActiveServices } from '../../data/ServiceTables'; +import useServiceOverview from '../../data/serviceOverview/useServiceOverview'; const pageSize = 10; const ActiveServicesTable: FC = () => { - const { data: activeServicesData, isLoading: activeServicesDataLoading } = - useSWR([getActiveServices.name], getActiveServices); + const { services, isLoading } = useServiceOverview(); return (
    Active Services - {activeServicesData && activeServicesData.length === 0 ? ( + {services && services.length === 0 ? ( - ) : activeServicesDataLoading || !activeServicesData ? ( + ) : isLoading || !services ? ( ) : ( - // TODO: Handle lazy load when integrating with backend - + )}
    ); diff --git a/apps/tangle-dapp/app/services/[serviceId]/DetailTabs.tsx b/apps/tangle-dapp/app/services/[serviceId]/DetailTabs.tsx deleted file mode 100644 index 0c9e808dbe..0000000000 --- a/apps/tangle-dapp/app/services/[serviceId]/DetailTabs.tsx +++ /dev/null @@ -1,35 +0,0 @@ -'use client'; - -import { TabContent, TableAndChartTabs } from '@webb-tools/webb-ui-components'; -import { FC } from 'react'; -import { twMerge } from 'tailwind-merge'; - -import JobsListTable from './JobsListTable'; -import SigningRules from './SigningRules'; - -interface DetailTabsProps { - serviceId: string; - className?: string; -} - -const JOBS_LIST_TAB = 'Jobs List'; -const SIGNING_RULES_TAB = 'Signing Rules'; - -const DetailTabs: FC = ({ serviceId, className }) => { - return ( - - - - - - - - - ); -}; - -export default DetailTabs; diff --git a/apps/tangle-dapp/app/services/[serviceId]/InfoCard.tsx b/apps/tangle-dapp/app/services/[serviceId]/InfoCard.tsx index f60daa1256..ec4e583a5f 100644 --- a/apps/tangle-dapp/app/services/[serviceId]/InfoCard.tsx +++ b/apps/tangle-dapp/app/services/[serviceId]/InfoCard.tsx @@ -1,13 +1,17 @@ +'use client'; + import { Chip, - CopyWithTooltip, - TimeProgress, + formatDateToUtc, + Tooltip, + TooltipBody, + TooltipTrigger, Typography, } from '@webb-tools/webb-ui-components'; -import { shortenString } from '@webb-tools/webb-ui-components/utils/shortenString'; +import { FC } from 'react'; import { twMerge } from 'tailwind-merge'; -import { getServiceDetailsInfo } from '../../../data/ServiceDetails'; +import useServiceInfoCard from '../../../data/serviceDetails/useServiceInfoCard'; import { getChipColorOfServiceType } from '../../../utils'; interface InfoCardProps { @@ -15,9 +19,8 @@ interface InfoCardProps { className?: string; } -async function InfoCard({ serviceId, className }: InfoCardProps) { - const { serviceType, thresholds, key, startTimestamp, endTimestamp } = - await getServiceDetailsInfo(serviceId); +const InfoCard: FC = ({ serviceId, className }) => { + const { serviceType, threshold, endDate } = useServiceInfoCard(); return (
    Phase 1 ID: {serviceId} - - {serviceType} - - {thresholds && ( - - {thresholds} - - )} -
    - {key && ( -
    - - Key: - -
    -
    + {serviceType && ( + - - {shortenString(key, 4)} - -
    - -
    + {serviceType} + + )} + {threshold && ( + + + + {threshold} + + + Threshold + + )}
    +
    + + {endDate && ( + + {/* Check if the service has ended or not */} + {endDate.getTime() > new Date().getTime() + ? 'Expect to end at' + : 'Ended at'} + : {formatDateToUtc(endDate)} + )}
    - + /> */}
    ); -} +}; export default InfoCard; diff --git a/apps/tangle-dapp/app/services/[serviceId]/JobsListTable.tsx b/apps/tangle-dapp/app/services/[serviceId]/JobsListTable.tsx index bf1acd74cb..bc20248514 100644 --- a/apps/tangle-dapp/app/services/[serviceId]/JobsListTable.tsx +++ b/apps/tangle-dapp/app/services/[serviceId]/JobsListTable.tsx @@ -22,7 +22,7 @@ import { twMerge } from 'tailwind-merge'; import { SkeletonRow } from '../../../components/skeleton'; import { HeaderCell, StringCell } from '../../../components/tableCells'; import useNetworkStore from '../../../context/useNetworkStore'; -import { useServiceJobs } from '../../../data/ServiceDetails'; +import { useServiceJobs } from '../../../data/serviceDetails'; import { ExplorerType, ServiceJob } from '../../../types'; interface JobsListTableProps { @@ -31,6 +31,8 @@ interface JobsListTableProps { } const PAGE_SIZE = 10; + +// TODO: This is hardcoded to the testnet. const TANGLE_BLOCK_EXPLORER = chainsConfig[PresetTypedChainId.TangleTestnetNative].blockExplorers?.default .url; diff --git a/apps/tangle-dapp/app/services/[serviceId]/ParticipantsTable.tsx b/apps/tangle-dapp/app/services/[serviceId]/ParticipantsTable.tsx index 3860af0385..58be8defc4 100644 --- a/apps/tangle-dapp/app/services/[serviceId]/ParticipantsTable.tsx +++ b/apps/tangle-dapp/app/services/[serviceId]/ParticipantsTable.tsx @@ -5,9 +5,11 @@ import { getCoreRowModel, useReactTable, } from '@tanstack/react-table'; +import { getExplorerURI } from '@webb-tools/api-provider-environment/transaction/utils'; import { Avatar, CopyWithTooltip, + ExternalLinkIcon, fuzzyFilter, shortenString, Table, @@ -19,59 +21,76 @@ import { twMerge } from 'tailwind-merge'; import { SkeletonRow } from '../../../components/skeleton'; import SocialChip from '../../../components/SocialChip'; import { HeaderCell } from '../../../components/tableCells'; -import { useServiceParticipants } from '../../../data/ServiceDetails'; -import type { ServiceParticipant } from '../../../types'; +import useNetworkStore from '../../../context/useNetworkStore'; +import { useServiceParticipants } from '../../../data/serviceDetails'; +import { ExplorerType, ServiceParticipant } from '../../../types'; interface ParticipantTableProps { - serviceId: string; className?: string; } const columnHelper = createColumnHelper(); -const columns = [ - columnHelper.accessor('identity', { - header: () => , - cell: (props) => { - const address = props.row.original.address; - return ( -
    - +const addressColumn = columnHelper.accessor('address', { + header: () => , + cell: (props) => { + const { twitter, discord, email, web } = props.row.original; + return ( +
    + {twitter && } + {discord && } + {email && } + {web && } + {!twitter && !discord && !email && !web && ( - {props.getValue() ?? shortenString(address)} + {'--'} - -
    - ); - }, - }), - columnHelper.accessor('address', { - header: () => , - cell: (props) => { - const { twitter, discord, email, web } = props.row.original; - return ( -
    - {twitter && } - {discord && } - {email && } - {web && } -
    - ); - }, - }), -]; + )} +
    + ); + }, +}); + +const ParticipantsTable: FC = ({ className }) => { + const { network } = useNetworkStore(); + const { data, isLoading } = useServiceParticipants(); -const ParticipantsTable: FC = ({ - serviceId, - className, -}) => { - const { data, isLoading, error } = useServiceParticipants(serviceId); + const columns = [ + columnHelper.accessor('identity', { + header: () => , + cell: (props) => { + const address = props.row.original.address; + const accountExplorerLink = getExplorerURI( + network.polkadotExplorerUrl, + address, + 'address', + ExplorerType.Substrate + ).toString(); + return ( +
    + + + {props.getValue() ?? shortenString(address)} + + + + + +
    + ); + }, + }), + addressColumn, + ]; const table = useReactTable({ - data: data ?? [], + data: data, columns, filterFns: { fuzzy: fuzzyFilter, @@ -92,8 +111,7 @@ const ParticipantsTable: FC = ({ 'border border-mono-0 dark:border-mono-160' )} > - {/* Successfully get data */} - {data && !isLoading && !error && ( + {!isLoading ? ( = ({ className="h-full flex flex-col" tableWrapperClassName="h-full overflow-y-auto" /> - )} - - {/* Loading */} - {isLoading && } - - {/* Error */} - {!isLoading && !data && error && ( - Error + ) : ( + )} diff --git a/apps/tangle-dapp/app/services/[serviceId]/PermittedCaller.tsx b/apps/tangle-dapp/app/services/[serviceId]/PermittedCaller.tsx new file mode 100644 index 0000000000..37c8f9a210 --- /dev/null +++ b/apps/tangle-dapp/app/services/[serviceId]/PermittedCaller.tsx @@ -0,0 +1,112 @@ +'use client'; + +import { getExplorerURI } from '@webb-tools/api-provider-environment/transaction/utils'; +import { + CodeFile, + CopyWithTooltip, + ExternalLinkIcon, + shortenHex, + Typography, +} from '@webb-tools/webb-ui-components'; +import { FC } from 'react'; +import { twMerge } from 'tailwind-merge'; + +import SkeletonRow from '../../../components/skeleton/SkeletonRow'; +import useNetworkStore from '../../../context/useNetworkStore'; +import { usePermittedCaller } from '../../../data/serviceDetails'; + +interface PermittedCallerProps { + className?: string; +} + +const PermittedCaller: FC = ({ className }) => { + const { network } = useNetworkStore(); + const { permittedCaller, codeData, isLoading, error } = usePermittedCaller(); + + return ( +
    +
    + + Permitted Caller + + {permittedCaller && ( +
    + + {shortenHex(permittedCaller)} + + + {network.evmExplorerUrl && ( + + )} +
    + )} +
    +
    + {/* Loading */} + {isLoading && } + + {/* Error */} + {!isLoading && error !== null && ( + + Error + + )} + + {/* No Permitted Caller */} + {!isLoading && + error === null && + permittedCaller === null && + codeData === null && ( + + No Permitted Caller was provided + + )} + + {/* Permitted Caller available but not a contract */} + {!isLoading && + error === null && + permittedCaller !== null && + codeData === null && ( + + The code for Permitted Caller is not available since it is not a + smart contract. + + )} + + {/* Permitted Caller is a contract */} + {!isLoading && + error === null && + permittedCaller !== null && + codeData !== null && ( + + )} +
    +
    + ); +}; + +export default PermittedCaller; diff --git a/apps/tangle-dapp/app/services/[serviceId]/SigningRules.tsx b/apps/tangle-dapp/app/services/[serviceId]/SigningRules.tsx deleted file mode 100644 index 937580a2e2..0000000000 --- a/apps/tangle-dapp/app/services/[serviceId]/SigningRules.tsx +++ /dev/null @@ -1,69 +0,0 @@ -'use client'; - -import { CodeFile, Typography } from '@webb-tools/webb-ui-components'; -import { FC, useEffect, useState } from 'react'; -import { twMerge } from 'tailwind-merge'; - -import { getSigningRules } from '../../../data/ServiceDetails'; - -interface SigningRulesProps { - serviceId: string; - className?: string; -} - -const SigningRules: FC = ({ className }) => { - const [signingRulesContractAddr, setSigningRulesContractAddr] = useState< - string | null - >(null); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - - useEffect(() => { - // TODO: get permitted caller - // TODO: check if permitted caller is a contract or not - setSigningRulesContractAddr(''); - setIsLoading(false); - setError(null); - }, []); - - if (isLoading) { - return
    Loading...
    ; - } - - if (error !== null) { - return ( - - Error - - ); - } - - if (signingRulesContractAddr === null) { - return ( - - No Signing Rules associated with this service - - ); - } - - return ( -
    - getSigningRules(signingRulesContractAddr)} - isInNextProject - className="bg-mono-20 dark:bg-mono-200 overflow-auto max-h-[740px]" - // smart contract language: Solidity - language="sol" - /> -
    - ); -}; - -export default SigningRules; diff --git a/apps/tangle-dapp/app/services/[serviceId]/layout.tsx b/apps/tangle-dapp/app/services/[serviceId]/layout.tsx new file mode 100644 index 0000000000..1a58a8f854 --- /dev/null +++ b/apps/tangle-dapp/app/services/[serviceId]/layout.tsx @@ -0,0 +1,18 @@ +import { ReactNode } from 'react'; + +import ServiceDetailsProvider from '../../../context/ServiceDetailsContext'; + +export default function ServiceDetailsLayout({ + children, + params, +}: { + children: ReactNode; + params: { serviceId: string }; +}) { + const { serviceId } = params; + return ( + + {children} + + ); +} diff --git a/apps/tangle-dapp/app/services/[serviceId]/page.tsx b/apps/tangle-dapp/app/services/[serviceId]/page.tsx index 0a61842ad5..f1f8e053b2 100644 --- a/apps/tangle-dapp/app/services/[serviceId]/page.tsx +++ b/apps/tangle-dapp/app/services/[serviceId]/page.tsx @@ -1,6 +1,6 @@ -import DetailTabs from './DetailTabs'; import InfoCard from './InfoCard'; import ParticipantsTable from './ParticipantsTable'; +import PermittedCaller from './PermittedCaller'; export default function ServiceDetails({ params, @@ -8,20 +8,15 @@ export default function ServiceDetails({ params: { serviceId: string }; }) { const { serviceId } = params; + return (
    - + - +
    ); diff --git a/apps/tangle-dapp/app/services/hooks/useRoleDistribution.ts b/apps/tangle-dapp/app/services/hooks/useRoleDistribution.ts index 2a0379afb1..0d2af8f598 100644 --- a/apps/tangle-dapp/app/services/hooks/useRoleDistribution.ts +++ b/apps/tangle-dapp/app/services/hooks/useRoleDistribution.ts @@ -4,7 +4,7 @@ import { BN } from '@polkadot/util'; import type { PieChartItem } from '../../../components/charts/types'; import { RestakingService } from '../../../types'; -import getChartDataAreaColorByServiceType from '../../../utils/getChartDataAreaColorByServiceType'; +import getChartDataAreaColorByServiceType from '../../../utils/restaking/getChartDataAreaColorByServiceType'; export default function useRoleDistribution(): PieChartItem[] { const data = [ diff --git a/apps/tangle-dapp/app/services/layout.tsx b/apps/tangle-dapp/app/services/layout.tsx new file mode 100644 index 0000000000..b0a0c6c169 --- /dev/null +++ b/apps/tangle-dapp/app/services/layout.tsx @@ -0,0 +1,11 @@ +import { ReactNode } from 'react'; + +import ServiceOverviewContext from '../../context/ServiceOverviewContext'; + +export default function ServiceDetailsLayout({ + children, +}: { + children: ReactNode; +}) { + return {children}; +} diff --git a/apps/tangle-dapp/components/AmountInput/AmountInput.tsx b/apps/tangle-dapp/components/AmountInput/AmountInput.tsx index f297fb597b..923cc7c366 100644 --- a/apps/tangle-dapp/components/AmountInput/AmountInput.tsx +++ b/apps/tangle-dapp/components/AmountInput/AmountInput.tsx @@ -20,6 +20,10 @@ export type AmountInputProps = { errorOnEmptyValue?: boolean; setAmount: (newAmount: BN | null) => void; setErrorMessage?: (error: string | null) => void; + placeholder?: string; + wrapperClassName?: string; + bodyClassName?: string; + dropdownBodyClassName?: string; }; const AmountInput: FC = ({ @@ -36,6 +40,10 @@ const AmountInput: FC = ({ baseInputOverrides, errorOnEmptyValue = false, setErrorMessage, + placeholder, + wrapperClassName, + bodyClassName, + dropdownBodyClassName, }) => { const inputRef = useRef(null); const { nativeTokenSymbol } = useNetworkStore(); @@ -93,13 +101,16 @@ const AmountInput: FC = ({ isDisabled={isDisabled} {...baseInputOverrides} actions={actions} + wrapperClassName={wrapperClassName} + bodyClassName={bodyClassName} + dropdownBodyClassName={dropdownBodyClassName} > = { + includeCommas: false, + fractionLength: undefined, +}; + const useInputAmount = ( amount: BN | null, min: BN | null, @@ -58,7 +65,7 @@ const useInputAmount = ( const [errorMessage, setErrorMessage] = useState(null); const [displayAmount, setDisplayAmount] = useState( - amount !== null ? formatBnToDisplayAmount(amount) : '' + amount !== null ? formatBnToDisplayAmount(amount, INPUT_AMOUNT_FORMAT) : '' ); const handleChange = useCallback( @@ -110,7 +117,9 @@ const useInputAmount = ( ); const refreshDisplayAmount = useCallback((newDisplayAmount: BN) => { - setDisplayAmount(formatBnToDisplayAmount(newDisplayAmount)); + setDisplayAmount( + formatBnToDisplayAmount(newDisplayAmount, INPUT_AMOUNT_FORMAT) + ); }, []); return { diff --git a/apps/tangle-dapp/components/Breadcrumbs/Breadcrumbs.tsx b/apps/tangle-dapp/components/Breadcrumbs/Breadcrumbs.tsx index f9ceff2679..a143765887 100644 --- a/apps/tangle-dapp/components/Breadcrumbs/Breadcrumbs.tsx +++ b/apps/tangle-dapp/components/Breadcrumbs/Breadcrumbs.tsx @@ -2,6 +2,7 @@ import { isAddress } from '@polkadot/util-crypto'; import { + ArrowLeftRightLineIcon, CheckboxBlankCircleLine, CodeFill, FundsLine, @@ -30,6 +31,7 @@ const BREADCRUMB_ICONS: Record = { services: , restake: , nomination: , + bridge: , }; // TODO: Need to statically link the breadcrumb labels to the page path for better type safety and to enable fearless refactoring in the future. diff --git a/apps/tangle-dapp/components/DelegatorTable/index.ts b/apps/tangle-dapp/components/DelegatorTable/index.ts deleted file mode 100644 index 7d2aa0e533..0000000000 --- a/apps/tangle-dapp/components/DelegatorTable/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as DelegatorTable } from './DelegatorTable'; diff --git a/apps/tangle-dapp/components/DelegatorTable/types.ts b/apps/tangle-dapp/components/DelegatorTable/types.ts deleted file mode 100644 index 2cdb2a3629..0000000000 --- a/apps/tangle-dapp/components/DelegatorTable/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Delegator } from '../../types'; - -export interface DelegatorTableProps { - data?: Delegator[]; - pageSize: number; -} diff --git a/apps/tangle-dapp/components/HeaderChip/ChipText.tsx b/apps/tangle-dapp/components/HeaderChip/ChipText.tsx index dca35a1e50..74476457c6 100644 --- a/apps/tangle-dapp/components/HeaderChip/ChipText.tsx +++ b/apps/tangle-dapp/components/HeaderChip/ChipText.tsx @@ -3,7 +3,6 @@ import { notificationApi } from '@webb-tools/webb-ui-components'; import SkeletonLoader from '@webb-tools/webb-ui-components/components/SkeletonLoader'; -import getRoundedDownNumberWith2Decimals from '../../utils/getRoundedDownNumberWith2Decimals'; import dataHooks from './dataHooks'; import type { HeaderChipItemProps } from './types'; @@ -23,11 +22,11 @@ const ChipText = ({ label }: Props) => { <> {label}:{' '} {isLoading ? ( - + ) : error ? ( 'Error' ) : data === null ? null : ( - getRoundedDownNumberWith2Decimals(data) + data )} ); diff --git a/apps/tangle-dapp/components/KeyStatsItem/KeyStatsItem.tsx b/apps/tangle-dapp/components/KeyStatsItem/KeyStatsItem.tsx index 92014037d8..6ffa082b5c 100644 --- a/apps/tangle-dapp/components/KeyStatsItem/KeyStatsItem.tsx +++ b/apps/tangle-dapp/components/KeyStatsItem/KeyStatsItem.tsx @@ -22,6 +22,7 @@ export type KeyStatsItemProps = { suffix?: string; tooltip?: string; className?: string; + showDataBeforeLoading?: boolean; children?: ReactNode; error: Error | null; isLoading: boolean; @@ -32,6 +33,7 @@ const KeyStatsItem: FC = ({ title, tooltip, className, + showDataBeforeLoading, prefix, suffix, children, @@ -69,7 +71,7 @@ const KeyStatsItem: FC = ({
    - {isLoading ? ( + {isLoading && !showDataBeforeLoading ? ( ) : error !== null ? ( 'Error' diff --git a/apps/tangle-dapp/components/NetworkSelector/CustomRpcEndpointInput.tsx b/apps/tangle-dapp/components/NetworkSelector/CustomRpcEndpointInput.tsx index d9770cd4dd..db7f37f3c6 100644 --- a/apps/tangle-dapp/components/NetworkSelector/CustomRpcEndpointInput.tsx +++ b/apps/tangle-dapp/components/NetworkSelector/CustomRpcEndpointInput.tsx @@ -1,6 +1,6 @@ import { Save, SaveWithBg } from '@webb-tools/icons'; import { Input } from '@webb-tools/webb-ui-components'; -import { FC, useCallback, useEffect, useState } from 'react'; +import { FC, useCallback, useEffect, useRef, useState } from 'react'; import useLocalStorage, { LocalStorageKey } from '../../hooks/useLocalStorage'; @@ -15,11 +15,12 @@ const CustomRpcEndpointInput: FC = ({ placeholder, setCustomNetwork, }) => { - const { get: getCachedCustomRpcEndpoint } = useLocalStorage( + const { refresh: getCachedCustomRpcEndpoint } = useLocalStorage( LocalStorageKey.CUSTOM_RPC_ENDPOINT ); const [value, setValue] = useState(''); + const wasValueSetRef = useRef(false); const handleSave = useCallback( () => setCustomNetwork(value), @@ -29,12 +30,18 @@ const CustomRpcEndpointInput: FC = ({ // On mount, load the cached custom RPC endpoint. If it // exists, set it as the initial value of the input. useEffect(() => { + // Don't set the value more than once. + if (wasValueSetRef.current) { + return; + } + const cachedCustomRpcEndpoint = getCachedCustomRpcEndpoint(); - if (cachedCustomRpcEndpoint !== null) { - setValue(cachedCustomRpcEndpoint); + if (cachedCustomRpcEndpoint.value !== null && value === '') { + setValue(cachedCustomRpcEndpoint.value); + wasValueSetRef.current = true; } - }, [getCachedCustomRpcEndpoint]); + }, [getCachedCustomRpcEndpoint, value]); return ( = ({
    {/* Mainnet network */} onNetworkChange(TANGLE_MAINNET_NETWORK)} /> {/* Testnet network */} onNetworkChange(TANGLE_TESTNET_NATIVE_NETWORK)} /> @@ -49,7 +47,7 @@ export const NetworkSelectorDropdown: FC = ({ {/* Local dev network */} onNetworkChange(TANGLE_LOCAL_DEV_NETWORK)} tooltip={ diff --git a/apps/tangle-dapp/components/DelegatorTable/DelegatorTable.tsx b/apps/tangle-dapp/components/NominationsTable/NominationsTable.tsx similarity index 71% rename from apps/tangle-dapp/components/DelegatorTable/DelegatorTable.tsx rename to apps/tangle-dapp/components/NominationsTable/NominationsTable.tsx index 339053ef05..ebd5f1a5f5 100644 --- a/apps/tangle-dapp/components/DelegatorTable/DelegatorTable.tsx +++ b/apps/tangle-dapp/components/NominationsTable/NominationsTable.tsx @@ -19,18 +19,19 @@ import { } from '@webb-tools/webb-ui-components'; import { type FC } from 'react'; -import { Delegator } from '../../types'; +import { Nominee } from '../../types'; +import calculateCommission from '../../utils/calculateCommission'; import { HeaderCell, StringCell } from '../tableCells'; -import { DelegatorTableProps } from './types'; +import TokenAmountCell from '../tableCells/TokenAmountCell'; -const columnHelper = createColumnHelper(); +const columnHelper = createColumnHelper(); const columns = [ columnHelper.accessor('address', { header: () => , cell: (props) => { const address = props.getValue(); - const identity = props.row.original.identity; + const identityName = props.row.original.identityName; return (
    @@ -39,7 +40,9 @@ const columns = [ - {identity === address ? shortenString(address, 6) : identity} + {identityName === address + ? shortenString(address, 6) + : identityName} , - cell: (props) => ( - - ), + cell: (props) => , }), - columnHelper.accessor('effectiveAmountStaked', { + columnHelper.accessor('totalStakeAmount', { header: () => ( ), - cell: (props) => ( - - ), + cell: (props) => , }), - columnHelper.accessor('delegations', { + columnHelper.accessor('nominatorCount', { header: () => , cell: (props) => ( - + ), }), columnHelper.accessor('commission', { header: () => , cell: (props) => ( ), }), ]; -const DelegatorTable: FC = ({ data = [], pageSize }) => { +export type NominationsTableProps = { + nominees: Nominee[]; + pageSize: number; +}; + +const NominationsTable: FC = ({ + nominees, + pageSize, +}) => { const table = useReactTable({ - data, + data: nominees, columns, initialState: { pagination: { @@ -119,10 +126,10 @@ const DelegatorTable: FC = ({ data = [], pageSize }) => { paginationClassName="bg-mono-0 dark:bg-mono-180 pl-6" tableProps={table} isPaginated - totalRecords={data.length} + totalRecords={nominees.length} />
    ); }; -export default DelegatorTable; +export default NominationsTable; diff --git a/apps/tangle-dapp/components/NominationsTable/index.ts b/apps/tangle-dapp/components/NominationsTable/index.ts new file mode 100644 index 0000000000..c766fd6e33 --- /dev/null +++ b/apps/tangle-dapp/components/NominationsTable/index.ts @@ -0,0 +1 @@ +export { default as NominationsTable } from './NominationsTable'; diff --git a/apps/tangle-dapp/components/NominatorStatsItem/NominatorStatsItem.tsx b/apps/tangle-dapp/components/NominatorStatsItem/NominatorStatsItem.tsx index f9fb2ec00c..44d846ebe1 100644 --- a/apps/tangle-dapp/components/NominatorStatsItem/NominatorStatsItem.tsx +++ b/apps/tangle-dapp/components/NominatorStatsItem/NominatorStatsItem.tsx @@ -1,25 +1,44 @@ -import { Typography } from '@webb-tools/webb-ui-components'; +import { SkeletonLoader, Typography } from '@webb-tools/webb-ui-components'; import type { FC } from 'react'; import { twMerge } from 'tailwind-merge'; import { InfoIconWithTooltip } from '..'; -import NominatorStatsItemText from './NominatorStatsItemText'; import { NominatorStatsItemProps } from './types'; export const NominatorStatsItem: FC = ({ title, tooltip, className, - ...restProps + children, + isError, }) => { return (
    - +
    +
    + {children === null ? ( + + ) : isError ? ( + 'Error' + ) : ( +
    + + {children} + +
    + )} +
    +
    {title} + {tooltip && }
    diff --git a/apps/tangle-dapp/components/NominatorStatsItem/NominatorStatsItemText.tsx b/apps/tangle-dapp/components/NominatorStatsItem/NominatorStatsItemText.tsx deleted file mode 100644 index 35455e5969..0000000000 --- a/apps/tangle-dapp/components/NominatorStatsItem/NominatorStatsItemText.tsx +++ /dev/null @@ -1,54 +0,0 @@ -'use client'; - -import { notificationApi } from '@webb-tools/webb-ui-components'; -import SkeletonLoader from '@webb-tools/webb-ui-components/components/SkeletonLoader'; -import { Typography } from '@webb-tools/webb-ui-components/typography/Typography'; -import { useEffect } from 'react'; - -import useNetworkStore from '../../context/useNetworkStore'; -import { formatTokenBalance } from '../../utils/polkadot'; -import dataHooks from './dataHooks'; -import type { NominatorStatsItemProps } from './types'; - -type Props = Pick; - -const NominatorStatsItemText = ({ address, type }: Props) => { - const { nativeTokenSymbol } = useNetworkStore(); - const { isLoading, error, data } = dataHooks[type](address); - - useEffect(() => { - if (error) { - notificationApi({ - variant: 'error', - message: error.message, - key: error.message, - }); - } - }, [error]); - - return ( -
    -
    - {isLoading ? ( - - ) : error ? ( - 'Error' - ) : data === null ? null : ( -
    - - {data.value1 - ? formatTokenBalance(data.value1, nativeTokenSymbol) - : '-'} - -
    - )} -
    -
    - ); -}; - -export default NominatorStatsItemText; diff --git a/apps/tangle-dapp/components/NominatorStatsItem/dataHooks.ts b/apps/tangle-dapp/components/NominatorStatsItem/dataHooks.ts index 34f2cb979f..424c5fdbde 100644 --- a/apps/tangle-dapp/components/NominatorStatsItem/dataHooks.ts +++ b/apps/tangle-dapp/components/NominatorStatsItem/dataHooks.ts @@ -1,11 +1,13 @@ import useTokenWalletFreeBalance from '../../data/NominatorStats/useTokenWalletFreeBalance'; +import useTotalPayoutRewards from '../../data/NominatorStats/useTotalPayoutRewards'; import useTotalStakedAmountSubscription from '../../data/NominatorStats/useTotalStakedAmountSubscription'; -import useUnbondingAmountSubscription from '../../data/NominatorStats/useUnbondingAmountSubscription'; +import useUnbondingAmountSubscription from '../../data/NominatorStats/useUnbondingAmount'; const dataHooks = { 'Wallet Balance': useTokenWalletFreeBalance, 'Total Staked': useTotalStakedAmountSubscription, 'Unbonding Amount': useUnbondingAmountSubscription, + 'Total Payout Rewards': useTotalPayoutRewards, } as const; export default dataHooks; diff --git a/apps/tangle-dapp/components/NominatorStatsItem/types.ts b/apps/tangle-dapp/components/NominatorStatsItem/types.ts index dabd4fece3..98ee8fd4be 100644 --- a/apps/tangle-dapp/components/NominatorStatsItem/types.ts +++ b/apps/tangle-dapp/components/NominatorStatsItem/types.ts @@ -1,11 +1,9 @@ import React from 'react'; -export type StatsType = 'Wallet Balance' | 'Total Staked' | 'Unbonding Amount'; - export interface NominatorStatsItemProps { title: string; - type: StatsType; tooltip?: string | React.ReactNode; - address: string; className?: string; + children: React.ReactNode | null; + isError: boolean; } diff --git a/apps/tangle-dapp/components/PayoutTable/PayoutTable.tsx b/apps/tangle-dapp/components/PayoutTable/PayoutTable.tsx index 75a83f7f01..6357c40364 100644 --- a/apps/tangle-dapp/components/PayoutTable/PayoutTable.tsx +++ b/apps/tangle-dapp/components/PayoutTable/PayoutTable.tsx @@ -12,7 +12,6 @@ import { WalletPayIcon } from '@webb-tools/icons'; import { Avatar, AvatarGroup, - Chip, CopyWithTooltip, fuzzyFilter, shortenString, @@ -24,6 +23,7 @@ import { type FC, useState } from 'react'; import PayoutTxContainer from '../../containers/PayoutTxContainer/PayoutTxContainer'; import { AddressWithIdentity, Payout } from '../../types'; import { HeaderCell, StringCell } from '../tableCells'; +import TokenAmountCell from '../tableCells/TokenAmountCell'; import { PayoutTableProps } from './types'; const columnHelper = createColumnHelper(); @@ -32,14 +32,18 @@ const PayoutTable: FC = ({ data = [], pageSize, updateData, + sessionProgress, + historyDepth, }) => { const [isModalOpen, setIsModalOpen] = useState(false); + const [payoutTxProps, setPayoutTxProps] = useState<{ validatorAddress: string; - era: string; + era: number; }>({ + // TODO: Should be using `null` for both values. Avoid using empty strings to circumvent TypeScript type checking. validatorAddress: '', - era: '', + era: 0, }); const table = useReactTable({ @@ -86,7 +90,7 @@ const PayoutTable: FC = ({ ), cell: (props) => ( - + ), }), columnHelper.accessor('nominators', { @@ -115,22 +119,42 @@ const PayoutTable: FC = ({ ), cell: (props) => ( - + ), }), columnHelper.accessor('nominatorTotalReward', { header: () => ( ), - cell: (props) => ( - - ), + cell: (props) => { + return ( + + ); + }, }), - columnHelper.accessor('status', { + columnHelper.display({ + id: 'remaining', header: () => ( - + ), - cell: (props) => {props.getValue()}, + cell: (props) => { + const rowData = props.row.original; + + const remainingErasToClaim = Math.abs( + sessionProgress && historyDepth + ? sessionProgress.currentEra.toNumber() - + historyDepth.toNumber() - + rowData.era + : 0 + ); + + return ( + + ); + }, }), columnHelper.display({ id: 'claim', @@ -143,7 +167,7 @@ const PayoutTable: FC = ({ onClick={() => { setPayoutTxProps({ validatorAddress: rowData.validator.address, - era: rowData.era.toString(), + era: rowData.era, }); setIsModalOpen(true); }} diff --git a/apps/tangle-dapp/components/PayoutTable/types.ts b/apps/tangle-dapp/components/PayoutTable/types.ts index e5e9ee4a9e..a1d56d1afd 100644 --- a/apps/tangle-dapp/components/PayoutTable/types.ts +++ b/apps/tangle-dapp/components/PayoutTable/types.ts @@ -1,7 +1,12 @@ -import { Payout } from '../../types'; +import { DeriveSessionProgress } from '@polkadot/api-derive/types'; +import { BN } from '@polkadot/util'; +import { Payout } from '../../types'; export interface PayoutTableProps { data?: Payout[]; pageSize: number; updateData: (data: Payout[]) => void; + sessionProgress: DeriveSessionProgress | null; + historyDepth: BN | null; + epochDuration: number | null; } diff --git a/apps/tangle-dapp/components/ServiceTable/ServiceTable.tsx b/apps/tangle-dapp/components/ServiceTable/ServiceTable.tsx index 0758808f3a..1dc8beaf0f 100644 --- a/apps/tangle-dapp/components/ServiceTable/ServiceTable.tsx +++ b/apps/tangle-dapp/components/ServiceTable/ServiceTable.tsx @@ -30,7 +30,10 @@ const staticColumns = [ columnHelper.accessor('serviceType', { header: () => , cell: (props) => ( - + {props.getValue()} ), @@ -45,7 +48,7 @@ const staticColumns = [ header: () => ( ), - cell: (props) => {props.getValue()}, + cell: (props) => {props.getValue().length}, }), columnHelper.accessor('threshold', { header: () => , @@ -71,7 +74,10 @@ const staticColumns = [ ), cell: (props) => ( - + ), }), columnHelper.accessor('id', { diff --git a/apps/tangle-dapp/components/Sidebar/sidebarProps.ts b/apps/tangle-dapp/components/Sidebar/sidebarProps.ts index 9b183f032e..73f2cfde2b 100644 --- a/apps/tangle-dapp/components/Sidebar/sidebarProps.ts +++ b/apps/tangle-dapp/components/Sidebar/sidebarProps.ts @@ -1,6 +1,7 @@ import { isAppEnvironmentType } from '@webb-tools/dapp-config/types'; import { AppsLine, + ArrowLeftRightLineIcon, DocumentationIcon, FundsLine, GiftLineIcon, @@ -33,6 +34,15 @@ const SIDEBAR_STATIC_ITEMS: SideBarItemProps[] = [ Icon: UserLineIcon, subItems: [], }, + { + name: 'Bridge', + href: PagePath.BRIDGE, + isInternal: true, + isNext: true, + Icon: ArrowLeftRightLineIcon, + subItems: [], + environments: ['development', 'staging', 'test'], + }, { name: 'Services', href: '', diff --git a/apps/tangle-dapp/components/TxConfirmationModal/TxConfirmationModal.tsx b/apps/tangle-dapp/components/TxConfirmationModal/TxConfirmationModal.tsx deleted file mode 100644 index d972b4d7ed..0000000000 --- a/apps/tangle-dapp/components/TxConfirmationModal/TxConfirmationModal.tsx +++ /dev/null @@ -1,108 +0,0 @@ -'use client'; - -import { - ExternalLinkLine, - ShieldedCheckLineIcon, - SpamLineIcon, -} from '@webb-tools/icons'; -import { - Button, - Modal, - ModalContent, - ModalFooter, - ModalHeader, - Typography, -} from '@webb-tools/webb-ui-components'; -import { KeyValueWithButton } from '@webb-tools/webb-ui-components/components/KeyValueWithButton'; -import { FC, useCallback } from 'react'; - -import useExplorerUrl from '../../hooks/useExplorerUrl'; -import { ExplorerType } from '../../types'; -import { TxConfirmationModalProps } from './types'; - -export const TxConfirmationModal: FC = ({ - isModalOpen, - setIsModalOpen, - txStatus, - txHash, - txType, -}) => { - const getExplorerUrl = useExplorerUrl(); - - const txExplorerUrl = getExplorerUrl( - txHash, - 'tx', - txType === 'evm' ? ExplorerType.EVM : ExplorerType.Substrate - ); - - const closeModal = useCallback(() => { - setIsModalOpen(false); - }, [setIsModalOpen]); - - return ( - - - - Transaction {txStatus === 'success' ? 'Successful' : 'Failed'} - - -
    - {txStatus === 'success' ? ( - - ) : ( - - )} - - - {txStatus === 'success' - ? 'Your transaction has been submitted to the network.' - : 'Your transaction has failed to be submitted to the network.'} - -
    - - - - - {txExplorerUrl !== null ? ( - - ) : txHash ? ( - - ) : null} - -
    -
    - ); -}; diff --git a/apps/tangle-dapp/components/TxConfirmationModal/index.ts b/apps/tangle-dapp/components/TxConfirmationModal/index.ts deleted file mode 100644 index e6ba38e56e..0000000000 --- a/apps/tangle-dapp/components/TxConfirmationModal/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './TxConfirmationModal'; -export * from './types'; diff --git a/apps/tangle-dapp/components/TxConfirmationModal/types.ts b/apps/tangle-dapp/components/TxConfirmationModal/types.ts deleted file mode 100644 index a2ee99132a..0000000000 --- a/apps/tangle-dapp/components/TxConfirmationModal/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type TxConfirmationModalProps = { - isModalOpen: boolean; - setIsModalOpen: (isModalOpen: boolean) => void; - txStatus: 'success' | 'error'; - txHash: string; - txType: 'evm' | 'substrate'; -}; diff --git a/apps/tangle-dapp/components/UnbondingStatsItem/UnbondingStatsItem.tsx b/apps/tangle-dapp/components/UnbondingStatsItem/UnbondingStatsItem.tsx index d6bdf54ea4..da3940741b 100644 --- a/apps/tangle-dapp/components/UnbondingStatsItem/UnbondingStatsItem.tsx +++ b/apps/tangle-dapp/components/UnbondingStatsItem/UnbondingStatsItem.tsx @@ -1,63 +1,75 @@ 'use client'; -import { notificationApi } from '@webb-tools/webb-ui-components'; -import { type FC, Fragment, useMemo } from 'react'; +import { BN_ZERO } from '@polkadot/util'; +import { type FC, useMemo } from 'react'; +import useActiveAccountAddress from '../..//hooks/useActiveAccountAddress'; import useNetworkStore from '../../context/useNetworkStore'; -import useUnbondingRemainingErasSubscription from '../../data/NominatorStats/useUnbondingRemainingErasSubscription'; +import useUnbondingAmount from '../../data/NominatorStats/useUnbondingAmount'; +import useUnbonding from '../../data/staking/useUnbonding'; +import { formatBnWithCommas } from '../../utils/formatBnWithCommas'; import { formatTokenBalance } from '../../utils/polkadot'; import { NominatorStatsItem } from '../NominatorStatsItem'; -const UnbondingStatsItem: FC<{ address: string }> = ({ address }) => { +const UnbondingStatsItem: FC = () => { + const activeAccountAddress = useActiveAccountAddress(); const { nativeTokenSymbol } = useNetworkStore(); - const { - data: unbondingRemainingErasData, - error: unbondingRemainingErasError, - } = useUnbondingRemainingErasSubscription(address); + const { result: unbondingEntriesOpt, error: unbondingEntriesError } = + useUnbonding(); - const unbondingRemainingErasTooltip = useMemo(() => { - if (unbondingRemainingErasError) { - notificationApi({ - variant: 'error', - message: unbondingRemainingErasError.message, - }); - } - - if (!unbondingRemainingErasData?.value1) return null; + const { result: totalUnbondingAmount, error: unbondingAmountError } = + useUnbondingAmount(); - if (unbondingRemainingErasData.value1.length === 0) { + const unbondingRemainingErasTooltip = useMemo(() => { + if (unbondingEntriesOpt === null) { + return null; + } else if ( + unbondingEntriesOpt.value === null || + unbondingEntriesOpt.value.length === 0 + ) { return 'You have no unbonding tokens.'; } - const elements = unbondingRemainingErasData.value1.map((era, index) => { + const elements = unbondingEntriesOpt.value.map((entry, index) => { return ( - -
    -

    - {era.remainingEras > 0 ? 'Unbonding' : 'Unbonded'}{' '} - {formatTokenBalance(era.amount, nativeTokenSymbol)} -

    - {era.remainingEras > 0 &&

    {era.remainingEras} eras remaining

    } -
    -
    +
    +

    + {entry.remainingEras.gtn(0) ? 'Unbonding' : 'Unbonded'}{' '} + {formatTokenBalance(entry.amount, nativeTokenSymbol)} +

    + + {entry.remainingEras.gtn(0) && ( +

    {formatBnWithCommas(entry.remainingEras)} eras remaining.

    + )} +
    ); }); return <>{elements}; - }, [ - unbondingRemainingErasError, - unbondingRemainingErasData?.value1, - nativeTokenSymbol, - ]); + }, [unbondingEntriesOpt, nativeTokenSymbol]); + + const balance = + // No account is active. + activeAccountAddress === null + ? '--' + : // Amount is still loading. + totalUnbondingAmount === null + ? null + : // Amount is loaded and there is an active account. + formatTokenBalance( + totalUnbondingAmount.value ?? BN_ZERO, + nativeTokenSymbol + ); return ( + tooltip={unbondingRemainingErasTooltip ?? undefined} + isError={unbondingEntriesError !== null || unbondingAmountError !== null} + > + {balance} + ); }; diff --git a/apps/tangle-dapp/components/UpdateMetadataButton.tsx b/apps/tangle-dapp/components/UpdateMetadataButton.tsx new file mode 100644 index 0000000000..46c68c5934 --- /dev/null +++ b/apps/tangle-dapp/components/UpdateMetadataButton.tsx @@ -0,0 +1,170 @@ +import { + InjectedExtension, + MetadataDef, +} from '@polkadot/extension-inject/types'; +import { HexString } from '@polkadot/util/types'; +import { TANGLE_TOKEN_DECIMALS } from '@webb-tools/dapp-config'; +import { RefreshLineIcon } from '@webb-tools/icons'; +import { + IconButton, + Tooltip, + TooltipBody, + TooltipTrigger, +} from '@webb-tools/webb-ui-components'; +import { NetworkId } from '@webb-tools/webb-ui-components/constants/networks'; +import _ from 'lodash'; +import { FC, useCallback, useMemo, useState } from 'react'; + +import useNetworkStore from '../context/useNetworkStore'; +import useActiveAccountAddress from '../hooks/useActiveAccountAddress'; +import useLocalStorage, { + LocalStorageKey, + SubstrateWalletsMetadataEntry, +} from '../hooks/useLocalStorage'; +import usePromise from '../hooks/usePromise'; +import { findInjectorForAddress, getApiPromise } from '../utils/polkadot'; + +const UpdateMetadataButton: FC = () => { + const [isHidden, setIsHidden] = useState(false); + + const activeAccountAddress = useActiveAccountAddress(); + const { network } = useNetworkStore(); + + const { result: injector } = usePromise( + useCallback(() => { + if (activeAccountAddress === null) { + return Promise.resolve(null); + } + + return findInjectorForAddress(activeAccountAddress); + }, [activeAccountAddress]), + null + ); + + const { result: apiPromise } = usePromise( + useCallback( + () => getApiPromise(network.wsRpcEndpoint), + [network.wsRpcEndpoint] + ), + null + ); + + const { setWithPreviousValue: setCache, valueOpt: cachedMetadata } = + useLocalStorage(LocalStorageKey.SUBSTRATE_WALLETS_METADATA, true); + + const updateCache = useCallback( + (genesisHash: HexString, metadata: SubstrateWalletsMetadataEntry) => { + setCache((cache) => ({ + ...cache, + [genesisHash]: metadata, + })); + }, + [setCache] + ); + + const isMetadataUpToDate = useMemo(() => { + // Only update metadata for the mainnet. This is because + // the testnet and local networks have the same genesis hash, + // so they represent the same network. Only the mainnet's metadata + // is relevant. + if (apiPromise === null || network.id !== NetworkId.TANGLE_MAINNET) { + return null; + } + + const genesisHash = apiPromise.genesisHash.toHex(); + const cachedEntry = cachedMetadata?.value?.[genesisHash]; + + if (cachedEntry === undefined) { + return false; + } + + return _.isEqual(cachedEntry, { + ss58Prefix: network.ss58Prefix, + tokenSymbol: network.tokenSymbol, + tokenDecimals: TANGLE_TOKEN_DECIMALS, + }); + }, [ + apiPromise, + cachedMetadata?.value, + network.id, + network.ss58Prefix, + network.tokenSymbol, + ]); + + const handleClick = async () => { + if ( + injector === null || + activeAccountAddress === null || + network.ss58Prefix === undefined + ) { + return; + } + + const api = await getApiPromise(network.wsRpcEndpoint); + const genesisHash = api.genesisHash.toHex(); + + const metadata: MetadataDef = { + tokenDecimals: TANGLE_TOKEN_DECIMALS, + tokenSymbol: network.tokenSymbol, + genesisHash, + specVersion: api.runtimeVersion.specVersion.toNumber(), + icon: 'substrate', + ss58Format: network.ss58Prefix, + types: {}, + chain: api.runtimeChain.toString(), + }; + + // The 'provide' request will throw an error if the user + // rejects the request. Leniently catch the error and log it. + const handleError = (error: unknown) => { + console.error( + `Failed to provide updated metadata to injected extension: ${error}` + ); + }; + + await injector.metadata + ?.provide(metadata) + // Only update the cache if the metadata was successfully + // provided. + .then(() => { + if (network.ss58Prefix === undefined) { + return; + } + + updateCache(genesisHash, { + ss58Prefix: network.ss58Prefix, + tokenSymbol: network.tokenSymbol, + tokenDecimals: TANGLE_TOKEN_DECIMALS, + }); + + // Hide the button after the metadata has been updated. + setIsHidden(true); + }) + .catch(handleError); + }; + + // Hide the button if the metadata is up-to-date, if it's not yet known, + // and after metadata has been updated. + if (isMetadataUpToDate === null || isMetadataUpToDate || isHidden) { + return null; + } + + return ( + + + + + + + + + Update metadata for Substrate wallets + + + ); +}; + +export default UpdateMetadataButton; diff --git a/apps/tangle-dapp/components/ValidatorList/ValidatorList.tsx b/apps/tangle-dapp/components/ValidatorList/ValidatorList.tsx deleted file mode 100644 index 2261816af2..0000000000 --- a/apps/tangle-dapp/components/ValidatorList/ValidatorList.tsx +++ /dev/null @@ -1,295 +0,0 @@ -'use client'; - -import { - createColumnHelper, - getCoreRowModel, - getFilteredRowModel, - getPaginationRowModel, - useReactTable, -} from '@tanstack/react-table'; -import { ArrowDropDownFill, ArrowDropUpFill, Search } from '@webb-tools/icons'; -import { - Avatar, - CheckBox, - Chip, - CopyWithTooltip, - fuzzyFilter, - Input, - shortenString, - Table, - Typography, -} from '@webb-tools/webb-ui-components'; -import React, { FC, useCallback, useMemo, useState } from 'react'; - -import { ContainerSkeleton } from '../../components'; -import { Validator } from '../../types'; -import { HeaderCell } from '../tableCells'; -import { SortableKeys, SortBy, ValidatorListTableProps } from './types'; - -const columnHelper = createColumnHelper(); - -export const ValidatorListTable: FC = ({ - data, - selectedValidators, - setSelectedValidators, -}) => { - const [searchValue, setSearchValue] = useState(''); - const [totalStakeSortBy, setTotalStakeSortBy] = useState('dsc'); - const [nominationsSortBy, setNominationsSortBy] = useState('dsc'); - const [commissionSortBy, setCommissionSortBy] = useState('dsc'); - const [sortBy, setSortBy] = useState('effectiveAmountStaked'); - - const sortedData = useMemo(() => { - const selectedData = data.filter((validator) => - selectedValidators.includes(validator.address) - ); - const unselectedData = data.filter( - (validator) => !selectedValidators.includes(validator.address) - ); - - const sortData = ( - data: Validator[], - sortBy: SortableKeys, - sortOrder: SortBy - ) => { - return [...data].sort((a, b) => { - const valueA = sortOrder === 'asc' ? a[sortBy] : b[sortBy]; - const valueB = sortOrder === 'asc' ? b[sortBy] : a[sortBy]; - return parseFloat(valueA) - parseFloat(valueB); - }); - }; - - const sortedSelectedData = sortData( - selectedData, - sortBy, - sortBy === 'effectiveAmountStaked' - ? totalStakeSortBy - : sortBy === 'delegations' - ? nominationsSortBy - : commissionSortBy - ); - - const sortedUnselectedData = sortData( - unselectedData, - sortBy, - sortBy === 'effectiveAmountStaked' - ? totalStakeSortBy - : sortBy === 'delegations' - ? nominationsSortBy - : commissionSortBy - ); - - return [...sortedSelectedData, ...sortedUnselectedData]; - }, [ - data, - selectedValidators, - sortBy, - totalStakeSortBy, - nominationsSortBy, - commissionSortBy, - ]); - - const filteredData = useMemo( - () => - sortedData.filter( - (validator) => - validator.identityName - .toLowerCase() - .includes(searchValue.toLowerCase()) || - validator.address.toLowerCase().includes(searchValue.toLowerCase()) - ), - [searchValue, sortedData] - ); - - const handleValidatorToggle = useCallback( - (address: string, isSelected: boolean) => { - if (isSelected) { - setSelectedValidators( - selectedValidators.filter( - (selectedValidator) => selectedValidator !== address - ) - ); - } else { - setSelectedValidators([...selectedValidators, address]); - } - }, - [selectedValidators, setSelectedValidators] - ); - - const columns = [ - columnHelper.accessor('address', { - header: () => , - cell: (props) => { - const address = props.getValue(); - const identity = props.row.original.identityName; - - return ( -
    - - handleValidatorToggle( - address, - selectedValidators.includes(address) - ) - } - /> - -
    - - hello - - - - {identity === address ? shortenString(address, 6) : identity} - - - -
    -
    - ); - }, - }), - columnHelper.accessor('effectiveAmountStaked', { - header: () => ( -
    - - - {totalStakeSortBy === 'asc' ? ( - { - setTotalStakeSortBy('dsc'); - setSortBy('effectiveAmountStaked'); - }} - /> - ) : ( - { - setTotalStakeSortBy('asc'); - setSortBy('effectiveAmountStaked'); - }} - /> - )} -
    - ), - cell: (props) => ( -
    - {props.getValue()} -
    - ), - }), - columnHelper.accessor('delegations', { - header: () => ( -
    - - - {nominationsSortBy === 'asc' ? ( - { - setNominationsSortBy('dsc'); - setSortBy('delegations'); - }} - /> - ) : ( - { - setNominationsSortBy('asc'); - setSortBy('delegations'); - }} - /> - )} -
    - ), - cell: (props) => ( -
    - {props.getValue()} -
    - ), - }), - columnHelper.accessor('commission', { - header: () => ( -
    - - - {commissionSortBy === 'asc' ? ( - { - setCommissionSortBy('dsc'); - setSortBy('commission'); - }} - /> - ) : ( - { - setCommissionSortBy('asc'); - setSortBy('commission'); - }} - /> - )} -
    - ), - cell: (props) => ( -
    - {Number(props.getValue()).toFixed(2)}% -
    - ), - }), - ]; - - const table = useReactTable({ - data: filteredData, - columns, - filterFns: { - fuzzy: fuzzyFilter, - }, - globalFilterFn: fuzzyFilter, - getCoreRowModel: getCoreRowModel(), - getFilteredRowModel: getFilteredRowModel(), - getPaginationRowModel: getPaginationRowModel(), - }); - - return ( -
    - } - placeholder="Search validators..." - value={searchValue} - onChange={(val) => setSearchValue(val)} - className="mb-1" - /> - - {filteredData.length === 0 ? ( - - ) : ( -
    - )} - - ); -}; diff --git a/apps/tangle-dapp/components/ValidatorList/index.ts b/apps/tangle-dapp/components/ValidatorList/index.ts deleted file mode 100644 index 977593fd7b..0000000000 --- a/apps/tangle-dapp/components/ValidatorList/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ValidatorList'; diff --git a/apps/tangle-dapp/components/ValidatorList/types.ts b/apps/tangle-dapp/components/ValidatorList/types.ts index 4ab42ada1b..aa1a9e7c96 100644 --- a/apps/tangle-dapp/components/ValidatorList/types.ts +++ b/apps/tangle-dapp/components/ValidatorList/types.ts @@ -1,14 +1,9 @@ -import { Validator } from '../../types'; +import type { Dispatch, SetStateAction } from 'react'; + +import type { Validator } from '../../types'; export interface ValidatorListTableProps { data: Validator[]; - selectedValidators: string[]; - setSelectedValidators: (selectedValidators: string[]) => void; + pageSize: number; + setSelectedValidators: Dispatch>>; } - -export type SortBy = 'asc' | 'dsc'; - -export type SortableKeys = - | 'effectiveAmountStaked' - | 'delegations' - | 'commission'; diff --git a/apps/tangle-dapp/components/ValidatorSelectionTable/ValidatorSelectionTable.tsx b/apps/tangle-dapp/components/ValidatorSelectionTable/ValidatorSelectionTable.tsx new file mode 100644 index 0000000000..8dc2085d32 --- /dev/null +++ b/apps/tangle-dapp/components/ValidatorSelectionTable/ValidatorSelectionTable.tsx @@ -0,0 +1,359 @@ +'use client'; + +import { BN } from '@polkadot/util'; +import { + type Column, + createColumnHelper, + getCoreRowModel, + getFilteredRowModel, + getPaginationRowModel, + getSortedRowModel, + type PaginationState, + type Row, + type RowSelectionState, + type SortingColumn, + type SortingState, + type TableOptions, + useReactTable, +} from '@tanstack/react-table'; +import { ArrowDropDownFill, ArrowDropUpFill, Search } from '@webb-tools/icons'; +import { + Avatar, + CheckBox, + Chip, + CopyWithTooltip, + fuzzyFilter, + Input, + shortenString, + Table, + Typography, +} from '@webb-tools/webb-ui-components'; +import cx from 'classnames'; +import React, { + FC, + startTransition, + useEffect, + useMemo, + useRef, + useState, +} from 'react'; + +import { Validator } from '../../types'; +import calculateCommission from '../../utils/calculateCommission'; +import { ContainerSkeleton } from '..'; +import { HeaderCell } from '../tableCells'; +import TokenAmountCell from '../tableCells/TokenAmountCell'; +import { ValidatorSelectionTableProps } from './types'; + +const DEFAULT_PAGINATION: PaginationState = { + pageIndex: 0, + pageSize: 20, +}; + +const columnHelper = createColumnHelper(); + +const ValidatorSelectionTable: FC = ({ + allValidators, + setSelectedValidators, +}) => { + const [searchValue, setSearchValue] = useState(''); + const [rowSelection, setRowSelection] = useState({}); + const [sorting, setSorting] = useState([]); + + const [pagination, setPagination] = + useState(DEFAULT_PAGINATION); + + const toggleSortSelectionHandlerRef = useRef< + SortingColumn['toggleSorting'] | null + >(null); + + // Sync the selected validators with the parent state + useEffect(() => { + startTransition(() => { + setSelectedValidators(new Set(Object.keys(rowSelection))); + }); + }, [rowSelection, setSelectedValidators]); + + const columns = useMemo( + () => [ + columnHelper.accessor('address', { + header: ({ header }) => { + toggleSortSelectionHandlerRef.current = header.column.toggleSorting; + return ; + }, + cell: (props) => { + const address = props.getValue(); + const identity = props.row.original.identityName; + + return ( +
    + + +
    + + + + {identity === address ? shortenString(address, 6) : identity} + + + +
    +
    + ); + }, + // Sort the selected validators first + sortingFn: (rowA, rowB) => { + const rowASelected = rowA.getIsSelected(); + const rowBSelected = rowB.getIsSelected(); + + if (rowASelected && !rowBSelected) { + return -1; + } + + if (!rowASelected && rowBSelected) { + return 1; + } + + return 0; + }, + }), + columnHelper.accessor('totalStakeAmount', { + header: ({ header }) => ( +
    + + + +
    + ), + cell: (props) => ( +
    + + + +
    + ), + sortingFn, + }), + columnHelper.accessor('nominatorCount', { + header: ({ header }) => ( +
    + + + +
    + ), + cell: (props) => ( +
    + {props.getValue()} +
    + ), + sortingFn, + }), + columnHelper.accessor('commission', { + header: ({ header }) => ( +
    + + + +
    + ), + cell: (props) => ( +
    + + {calculateCommission(props.getValue()).toFixed(2)}% + +
    + ), + sortingFn, + }), + columnHelper.accessor('identityName', { + header: () => , + cell: (props) => props.getValue(), + }), + ], + [] + ); + + const tableProps = useMemo>( + () => ({ + data: allValidators, + columns, + state: { + columnVisibility: { + identityName: false, + }, + sorting, + rowSelection, + pagination, + globalFilter: searchValue, + }, + enableRowSelection: true, + onPaginationChange: setPagination, + onGlobalFilterChange: (props) => { + setPagination(DEFAULT_PAGINATION); + setSearchValue(props); + }, + onRowSelectionChange: (props) => { + toggleSortSelectionHandlerRef.current?.(false); + setRowSelection(props); + }, + onSortingChange: (updaterOrValue) => { + if (typeof updaterOrValue === 'function') { + setSorting((prev) => { + const newSorting = updaterOrValue(prev); + + // Modify the sorting state to always sort by the selected validators first + if (newSorting.length === 0) { + return [ + { + id: 'address', + desc: false, + }, + ]; + } else if (newSorting[0].id === 'address') { + return newSorting; + } else { + return [ + { + id: 'address', + desc: false, + }, + ...newSorting, + ]; + } + }); + } else { + setSorting(updaterOrValue); + } + }, + filterFns: { + fuzzy: fuzzyFilter, + }, + globalFilterFn: fuzzyFilter, + getCoreRowModel: getCoreRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.address, + autoResetPageIndex: false, + }), + [columns, allValidators, pagination, rowSelection, searchValue, sorting] + ); + + const table = useReactTable(tableProps); + + return ( + <> +
    + } + placeholder="Search validators..." + value={searchValue} + onChange={(val) => setSearchValue(val)} + className="mb-1" + /> + + {allValidators.length === 0 ? ( + + ) : ( +
    + )} + + + + Selected: {Object.keys(rowSelection).length}/ + {table.getPreFilteredRowModel().rows.length} + + + ); +}; + +type ColumnIdAssertFn = ( + columnId: string +) => asserts columnId is keyof Validator; + +const assertColumnId: ColumnIdAssertFn = (columnId) => { + if ( + !['address', 'effectiveAmountStaked', 'delegations', 'commission'].includes( + columnId + ) + ) { + throw new Error(`Invalid columnId: ${columnId}`); + } +}; + +const sortingFn = ( + rowA: Row, + rowB: Row, + columnId: string +) => { + assertColumnId(columnId); + + if (columnId === 'totalStakeAmount') { + const totalStakedA = rowA.original.totalStakeAmount; + const totalStakedB = rowB.original.totalStakeAmount; + const result = totalStakedA.sub(totalStakedB); + + return result.ltn(0) ? -1 : result.gtn(0) ? 1 : 0; + } + + // TODO: Avoid using Number() here, if it is a BN value, it should be compared as such. + const rowAValue = Number(rowA.original[columnId]); + const rowBValue = Number(rowB.original[columnId]); + + return rowAValue - rowBValue; +}; + +const SortArrow: FC<{ column: Column }> = ({ + column, +}) => { + const isSorted = column.getIsSorted(); + + if (!isSorted) { + return null; + } + + return isSorted === 'asc' ? ( + + ) : ( + + ); +}; + +export default React.memo(ValidatorSelectionTable); diff --git a/apps/tangle-dapp/components/ValidatorSelectionTable/index.ts b/apps/tangle-dapp/components/ValidatorSelectionTable/index.ts new file mode 100644 index 0000000000..bd17db84aa --- /dev/null +++ b/apps/tangle-dapp/components/ValidatorSelectionTable/index.ts @@ -0,0 +1 @@ +export * from './ValidatorSelectionTable'; diff --git a/apps/tangle-dapp/components/ValidatorSelectionTable/types.ts b/apps/tangle-dapp/components/ValidatorSelectionTable/types.ts new file mode 100644 index 0000000000..05661d7f96 --- /dev/null +++ b/apps/tangle-dapp/components/ValidatorSelectionTable/types.ts @@ -0,0 +1,15 @@ +import { Dispatch, SetStateAction } from 'react'; + +import { Validator } from '../../types'; + +export type ValidatorSelectionTableProps = { + allValidators: Validator[]; + setSelectedValidators: Dispatch>>; +}; + +export type SortBy = 'asc' | 'dsc'; + +export type SortableKeys = keyof Pick< + Validator, + 'commission' | 'nominatorCount' | 'totalStakeAmount' +>; diff --git a/apps/tangle-dapp/components/ValidatorTable/ValidatorTable.tsx b/apps/tangle-dapp/components/ValidatorTable/ValidatorTable.tsx index 65242051f4..209af6c2f4 100644 --- a/apps/tangle-dapp/components/ValidatorTable/ValidatorTable.tsx +++ b/apps/tangle-dapp/components/ValidatorTable/ValidatorTable.tsx @@ -12,6 +12,7 @@ import { getExplorerURI } from '@webb-tools/api-provider-environment/transaction import { Avatar, Button, + Chip, CopyWithTooltip, ExternalLinkIcon, fuzzyFilter, @@ -22,59 +23,91 @@ import { import Link from 'next/link'; import { FC, useMemo } from 'react'; +import { IS_PRODUCTION_ENV } from '../../constants/env'; import useNetworkStore from '../../context/useNetworkStore'; import { ExplorerType, PagePath, Validator } from '../../types'; +import calculateCommission from '../../utils/calculateCommission'; import { HeaderCell, StringCell } from '../tableCells'; +import TokenAmountCell from '../tableCells/TokenAmountCell'; import { ValidatorTableProps } from './types'; const columnHelper = createColumnHelper(); -const staticColumns = [ - columnHelper.accessor('selfStaked', { - header: () => , - cell: (props) => ( - - ), - }), - columnHelper.accessor('effectiveAmountStaked', { - header: () => ( - - ), - cell: (props) => ( - - ), - }), - columnHelper.accessor('delegations', { +const getStaticColumns = (isWaiting?: boolean) => [ + // TODO: Hide this for live app for now + ...(IS_PRODUCTION_ENV + ? [] + : [ + columnHelper.accessor('activeServicesCount', { + header: () => , + cell: (props) => ( +
    + {props.getValue()} +
    + ), + }), + columnHelper.accessor('restakedAmount', { + header: () => , + cell: (props) => , + }), + ]), + // Hide the effective amount staked and self-staked columns on waiting validators tab + // as they don't have values for these columns + ...(isWaiting + ? [] + : [ + columnHelper.accessor('totalStakeAmount', { + header: () => ( + + ), + cell: (props) => , + }), + columnHelper.accessor('selfStakeAmount', { + header: () => ( + + ), + cell: (props) => , + }), + ]), + columnHelper.accessor('nominatorCount', { header: () => , cell: (props) => ( - + ), }), columnHelper.accessor('commission', { - header: () => , + header: () => , cell: (props) => ( ), }), - columnHelper.accessor('address', { - id: 'details', - header: () => null, - cell: (props) => ( -
    - - - -
    - ), - }), + // TODO: Hide this for live app for now + ...(IS_PRODUCTION_ENV + ? [] + : [ + columnHelper.accessor('address', { + id: 'details', + header: () => null, + cell: (props) => ( +
    + + + +
    + ), + }), + ]), ]; -const ValidatorTable: FC = ({ data }) => { +const ValidatorTable: FC = ({ data, isWaiting }) => { const { network } = useNetworkStore(); const columns = useMemo( @@ -120,9 +153,9 @@ const ValidatorTable: FC = ({ data }) => { ); }, }), - ...staticColumns, + ...getStaticColumns(isWaiting), ], - [network.polkadotExplorerUrl] + [isWaiting, network.polkadotExplorerUrl] ); const table = useReactTable({ @@ -142,9 +175,7 @@ const ValidatorTable: FC = ({ data }) => {
    = ({ return isDisplayingEvmAddress ? activeAddress - : evmToSubstrateAddress(activeAddress); + : toSubstrateAddress(activeAddress); }, [activeAddress, isDisplayingEvmAddress]); const possiblyHiddenAddress = useMemo( diff --git a/apps/tangle-dapp/components/account/Actions.tsx b/apps/tangle-dapp/components/account/Actions.tsx index 109d872006..70bc1fcf9d 100644 --- a/apps/tangle-dapp/components/account/Actions.tsx +++ b/apps/tangle-dapp/components/account/Actions.tsx @@ -1,6 +1,5 @@ 'use client'; -import { ZERO_BIG_INT } from '@webb-tools/dapp-config/constants'; import { ArrowLeftRightLineIcon, CoinsLineIcon, @@ -13,7 +12,6 @@ import { FC, useState } from 'react'; import TransferTxContainer from '../../containers/TransferTxContainer/TransferTxContainer'; import useNetworkStore from '../../context/useNetworkStore'; import useBalances from '../../data/balances/useBalances'; -import usePendingEVMBalance from '../../data/balances/usePendingEVMBalance'; import useAirdropEligibility from '../../data/claims/useAirdropEligibility'; import usePayoutsAvailability from '../../data/payouts/usePayoutsAvailability'; import useVestingInfo from '../../data/vesting/useVestingInfo'; @@ -23,7 +21,7 @@ import { TxStatus } from '../../hooks/useSubstrateTx'; import { PagePath, StaticSearchQueryPath } from '../../types'; import { formatTokenBalance } from '../../utils/polkadot'; import ActionItem from './ActionItem'; -import WithdrawEVMBalanceAction from './WithdrawEVMBalanceAction'; +import WithdrawEvmBalanceAction from './WithdrawEvmBalanceAction'; const Actions: FC = () => { const { nativeTokenSymbol } = useNetworkStore(); @@ -37,8 +35,6 @@ const Actions: FC = () => { const { transferable: transferableBalance } = useBalances(); - const { balance, ...restPendingEVMBalanceProps } = usePendingEVMBalance(); - const { isVesting, hasClaimableTokens: hasClaimableVestingTokens, @@ -119,7 +115,7 @@ const Actions: FC = () => { ) : ( <> - There are vesting schedules in your account, but no tokens + There are vesting schedules in this account, but no tokens have vested yet. ) @@ -127,12 +123,7 @@ const Actions: FC = () => { /> )} - {balance !== null && balance > ZERO_BIG_INT && ( - - )} + {/* TODO: Might be better to use a hook instead of doing it this way. */} diff --git a/apps/tangle-dapp/components/account/Balance.tsx b/apps/tangle-dapp/components/account/Balance.tsx index 9faa9eccfa..ac66e5ae8a 100644 --- a/apps/tangle-dapp/components/account/Balance.tsx +++ b/apps/tangle-dapp/components/account/Balance.tsx @@ -3,13 +3,11 @@ import { HiddenValueEye, Typography, } from '@webb-tools/webb-ui-components'; -import { FC, useMemo } from 'react'; +import { FC } from 'react'; import useNetworkStore from '../../context/useNetworkStore'; import useBalances from '../../data/balances/useBalances'; -import formatBnToDisplayAmount from '../../utils/formatBnToDisplayAmount'; import { formatTokenBalance } from '../../utils/polkadot'; -import { InfoIconWithTooltip } from '..'; const Balance: FC = () => { const { transferable: balance } = useBalances(); @@ -22,21 +20,6 @@ const Balance: FC = () => { const prefix = parts?.[0] ?? '--'; const suffix = parts?.[1] ?? nativeTokenSymbol; - const formattedExtendedBalance = useMemo(() => { - if (balance === null) { - return null; - } - - const amount = formatBnToDisplayAmount(balance, { - // Show up to 4 decimal places. - fractionLength: 4, - includeCommas: true, - padZerosInFraction: true, - }); - - return `${amount} ${nativeTokenSymbol}`; - }, [balance, nativeTokenSymbol]); - return (
    @@ -63,10 +46,6 @@ const Balance: FC = () => { className="!leading-none pb-1 flex gap-2" > {suffix} - - {balance !== null && !balance.isZero() && ( - - )}
    diff --git a/apps/tangle-dapp/components/account/WithdrawEVMBalanceAction.tsx b/apps/tangle-dapp/components/account/WithdrawEVMBalanceAction.tsx deleted file mode 100644 index 042aab6c19..0000000000 --- a/apps/tangle-dapp/components/account/WithdrawEVMBalanceAction.tsx +++ /dev/null @@ -1,77 +0,0 @@ -'use client'; - -import RefundLineIcon from '@webb-tools/icons/RefundLineIcon'; -import Spinner from '@webb-tools/icons/Spinner'; -import { useWebbUI } from '@webb-tools/webb-ui-components/hooks/useWebbUI'; -import { FC, useCallback, useEffect } from 'react'; - -import useNetworkStore from '../../context/useNetworkStore'; -import usePendingEVMBalance from '../../data/balances/usePendingEVMBalance'; -import { TxStatus } from '../../hooks/useSubstrateTx'; -import { formatTokenBalance } from '../../utils/polkadot/tokens'; -import ActionItem from './ActionItem'; - -type WithdrawEVMBalanceActionProps = ReturnType & { - balance: bigint; -}; - -const WithdrawEVMBalanceAction: FC = ({ - balance, - execute, - status, - error, -}) => { - const { nativeTokenSymbol } = useNetworkStore(); - const { notificationApi } = useWebbUI(); - - const handleWithdraw = useCallback(() => execute?.(), [execute]); - - const formattedBalance = formatTokenBalance(balance, nativeTokenSymbol); - - useEffect(() => { - if (status === TxStatus.COMPLETE) { - notificationApi({ - message: 'Withdraw successful', - secondaryMessage: `You have successfully withdrawn ${formattedBalance}`, - variant: 'success', - }); - } - - if (status === TxStatus.ERROR) { - notificationApi({ - message: `Withdraw failed`, - secondaryMessage: error?.message ?? 'Failed to withdraw funds', - variant: 'error', - }); - } - }, [error?.message, notificationApi, status, formattedBalance]); - - // If withdraw is successful, don't show the action item - if (status === TxStatus.COMPLETE) { - return null; - } - - return ( - - : RefundLineIcon - } - tooltip={ - status === TxStatus.ERROR ? ( - <>Oops, something went wrong. Please try again. - ) : ( - <>You have {formattedBalance} to withdraw, click to withdraw. - ) - } - isDisabled={status === TxStatus.PROCESSING} - onClick={handleWithdraw} - /> - ); -}; - -export default WithdrawEVMBalanceAction; diff --git a/apps/tangle-dapp/components/account/WithdrawEvmBalanceAction.tsx b/apps/tangle-dapp/components/account/WithdrawEvmBalanceAction.tsx new file mode 100644 index 0000000000..04146b54ef --- /dev/null +++ b/apps/tangle-dapp/components/account/WithdrawEvmBalanceAction.tsx @@ -0,0 +1,87 @@ +'use client'; + +import { ZERO_BIG_INT } from '@webb-tools/dapp-config'; +import RefundLineIcon from '@webb-tools/icons/RefundLineIcon'; +import Spinner from '@webb-tools/icons/Spinner'; +import { FC, useCallback, useMemo } from 'react'; + +import useNetworkStore from '../../context/useNetworkStore'; +import useEvmBalanceWithdrawTx from '../../data/balances/useEvmBalanceWithdrawTx'; +import usePendingEvmBalance from '../../data/balances/usePendingEvmBalance'; +import useAgnosticAccountInfo from '../../hooks/useAgnosticAccountInfo'; +import { TxStatus } from '../../hooks/useSubstrateTx'; +import { formatTokenBalance } from '../../utils/polkadot'; +import { toEvmAddress20 } from '../../utils/toEvmAddress20'; +import ActionItem from './ActionItem'; + +const WithdrawEvmBalanceAction: FC = () => { + const { nativeTokenSymbol } = useNetworkStore(); + const { substrateAddress, isEvm } = useAgnosticAccountInfo(); + const pendingEvmBalance = usePendingEvmBalance(); + + const evmAddress20 = useMemo(() => { + // Only Substrate accounts can withdraw EVM balances. + if (substrateAddress === null || isEvm) { + return null; + } + + return toEvmAddress20(substrateAddress); + }, [isEvm, substrateAddress]); + + const tokenAmountStr = useMemo( + () => + pendingEvmBalance + ? formatTokenBalance(pendingEvmBalance, nativeTokenSymbol) + : null, + [pendingEvmBalance, nativeTokenSymbol] + ); + + const { execute, status } = useEvmBalanceWithdrawTx(tokenAmountStr); + + const handleWithdraw = useCallback(async () => { + await execute({ + pendingEvmBalance, + evmAddress20, + }); + }, [execute, pendingEvmBalance, evmAddress20]); + + // If withdraw was successful, don't show the action item. + if (status === TxStatus.COMPLETE) { + return null; + } + // Nothing to withdraw or not available. + else if ( + pendingEvmBalance === null || + pendingEvmBalance === ZERO_BIG_INT || + tokenAmountStr === null + ) { + return null; + } + + return ( + + : RefundLineIcon + } + tooltip={ + status === TxStatus.ERROR ? ( + <>Oops, something went wrong. Please try again. + ) : ( + <> + {tokenAmountStr} is available to withdraw. Use this + action to release the funds. + + ) + } + /> + ); +}; + +export default WithdrawEvmBalanceAction; diff --git a/apps/tangle-dapp/components/index.ts b/apps/tangle-dapp/components/index.ts index 18dc3ed271..014b99cdda 100644 --- a/apps/tangle-dapp/components/index.ts +++ b/apps/tangle-dapp/components/index.ts @@ -1,10 +1,11 @@ export * from './BondedTokensBalanceInfo'; export * from './Breadcrumbs'; -export * from './DelegatorTable'; export { default as GlassCard } from './GlassCard'; export * from './HeaderChip'; export * from './InfoIconWithTooltip'; export * from './KeyStatsItem'; +export * from './NominationsTable'; +export * from './NominationsTable'; export * from './NominatorStatsItem'; export * from './PayoutTable'; export * from './ServicesKeyMetricItem'; @@ -16,6 +17,6 @@ export * from './TableStatus'; export { default as TangleBigLogo } from './TangleBigLogo'; export { default as TangleCard } from './TangleCard'; export * from './UnbondingStatsItem'; -export * from './ValidatorList'; +export * from './ValidatorSelectionTable'; export * from './ValidatorTable'; export * from './WalletDropdown'; diff --git a/apps/tangle-dapp/components/tableCells/HeaderCell.tsx b/apps/tangle-dapp/components/tableCells/HeaderCell.tsx index ba840d8868..dbb1876214 100644 --- a/apps/tangle-dapp/components/tableCells/HeaderCell.tsx +++ b/apps/tangle-dapp/components/tableCells/HeaderCell.tsx @@ -11,12 +11,13 @@ const HeaderCell: FC = ({ title, tooltip, className }) => { variant="body1" fw="bold" className={twMerge( - 'text-mono-140 dark:text-mono-40 flex-[1] whitespace-nowrap', - 'flex items-center justify-center gap-0.5', + 'whitespace-nowrap text-mono-140 dark:text-mono-40 flex-[1]', + 'flex items-center gap-0.5', className )} > {title} + {tooltip && } ); diff --git a/apps/tangle-dapp/components/tableCells/TokenAmountCell.tsx b/apps/tangle-dapp/components/tableCells/TokenAmountCell.tsx new file mode 100644 index 0000000000..6f365a767a --- /dev/null +++ b/apps/tangle-dapp/components/tableCells/TokenAmountCell.tsx @@ -0,0 +1,37 @@ +import { BN } from '@polkadot/util'; +import { FC } from 'react'; +import { twMerge } from 'tailwind-merge'; + +import useNetworkStore from '../../context/useNetworkStore'; +import { formatTokenBalance } from '../../utils/polkadot'; + +export type TokenAmountCellProps = { + amount: BN; + className?: string; +}; + +const TokenAmountCell: FC = ({ amount, className }) => { + const { nativeTokenSymbol } = useNetworkStore(); + const formattedBalance = formatTokenBalance(amount); + + const parts = formattedBalance.split('.'); + const integerPart = parts[0]; + const decimalPart = parts.at(1); + + return ( + + {integerPart} + + + {decimalPart !== undefined && `.${decimalPart}`} {nativeTokenSymbol} + + + ); +}; + +export default TokenAmountCell; diff --git a/apps/tangle-dapp/constants/bridge.ts b/apps/tangle-dapp/constants/bridge.ts new file mode 100644 index 0000000000..5fab56bd6b --- /dev/null +++ b/apps/tangle-dapp/constants/bridge.ts @@ -0,0 +1,81 @@ +import { PresetTypedChainId } from '@webb-tools/dapp-types'; + +import { BridgeTokenId, BridgeTokenType, ChainId } from '../types/bridge'; + +export const BRIDGE_SUPPORTED_TOKENS: Record = { + tTNT: { + id: 'tTNT', + symbol: 'tTNT', + existentialDeposit: {}, + destChainTransactionFee: {}, + }, + TNT: { + id: 'TNT', + symbol: 'TNT', + existentialDeposit: {}, + destChainTransactionFee: {}, + }, +}; + +// A Map with key as source chain id and value as another map +// with key as destination chain id and value as supported tokens +type BridgeType = Record< + ChainId, // Source Chain Id + Record< + ChainId, // Destination Chain Id + { + supportedTokens: BridgeTokenId[]; + } + > +>; + +// TODO: This is a dummy data for now +export const BRIDGE: BridgeType = { + [PresetTypedChainId.Sepolia]: { + [PresetTypedChainId.TangleMainnetEVM]: { + supportedTokens: ['TNT'], + }, + [PresetTypedChainId.TangleTestnetEVM]: { + supportedTokens: ['tTNT'], + }, + [PresetTypedChainId.Polkadot]: { + supportedTokens: ['tTNT', 'TNT'], + }, + }, + + [PresetTypedChainId.Polkadot]: { + [PresetTypedChainId.TangleTestnetEVM]: { + supportedTokens: ['tTNT'], + }, + [PresetTypedChainId.TangleMainnetEVM]: { + supportedTokens: ['TNT'], + }, + [PresetTypedChainId.Sepolia]: { + supportedTokens: ['tTNT', 'TNT'], + }, + }, + + [PresetTypedChainId.TangleMainnetEVM]: { + [PresetTypedChainId.TangleTestnetEVM]: { + supportedTokens: ['tTNT', 'TNT'], + }, + [PresetTypedChainId.Sepolia]: { + supportedTokens: ['TNT'], + }, + [PresetTypedChainId.Polkadot]: { + supportedTokens: ['TNT'], + }, + }, + + [PresetTypedChainId.TangleTestnetEVM]: { + [PresetTypedChainId.TangleMainnetEVM]: { + supportedTokens: ['tTNT', 'TNT'], + }, + [PresetTypedChainId.Sepolia]: { + supportedTokens: ['TNT'], + }, + [PresetTypedChainId.Polkadot]: { + supportedTokens: ['tTNT', 'TNT'], + }, + }, +}; diff --git a/apps/tangle-dapp/constants/env.ts b/apps/tangle-dapp/constants/env.ts new file mode 100644 index 0000000000..15783da71f --- /dev/null +++ b/apps/tangle-dapp/constants/env.ts @@ -0,0 +1 @@ +export const IS_PRODUCTION_ENV = process.env.NODE_ENV === 'production'; diff --git a/apps/tangle-dapp/constants/evmPrecompiles.ts b/apps/tangle-dapp/constants/evmPrecompiles.ts index 3d8bf5d909..6dd41501ce 100644 --- a/apps/tangle-dapp/constants/evmPrecompiles.ts +++ b/apps/tangle-dapp/constants/evmPrecompiles.ts @@ -56,6 +56,7 @@ type InputOutputDef = { type: AbiTypeSuper; }; +// TODO: Use Viem ABI types instead, as they already handle this + providing argument type inference: https://viem.sh/docs/typescript#utilities export type AbiFunction = { inputs: InputOutputDef[]; name: AbiFunctionName; @@ -521,7 +522,7 @@ export const BALANCES_ERC20_PRECOMPILE_ABI: AbiFunction[] { switch (precompile) { diff --git a/apps/tangle-dapp/constants/index.ts b/apps/tangle-dapp/constants/index.ts index 1afd078381..80bad3b3fd 100644 --- a/apps/tangle-dapp/constants/index.ts +++ b/apps/tangle-dapp/constants/index.ts @@ -4,7 +4,11 @@ import { TanglePrimitivesRolesZksaasZeroKnowledgeRoleType, } from '@polkadot/types/lookup'; -import { RestakingService } from '../types'; +import { + RestakingService, + StakingRewardsDestination, + StakingRewardsDestinationDisplayText, +} from '../types'; /** * The lock ids are always 8 characters long, due to their representation @@ -22,25 +26,6 @@ export enum SubstrateLockId { OTHER = '?other', } -/** - * Stale-while-revalidate (SWR) is a strategy for caching fetch requests. - * - * It helps automatically avoid redundant requests if made again before - * a specified period has elapsed. This can be particularly useful for - * Polkadot API requests that return Promise objects. - * - * Since these requests don't always require real-time data and their - * responses might not change frequently, caching them for a particular - * duration can be efficient. - * - * [Learn more about SWR](https://swr.vercel.app/) - */ -export enum SwrBaseKey { - ACTIVE_VALIDATORS = 'active-validators', - WAITING_VALIDATORS = 'waiting-validators', - ACTIVE_VALIDATORS_PAGINATED = 'active-validator-paginated', -} - export enum StaticAssetPath { RESTAKING_METHOD_INDEPENDENT_DARK = '/static/assets/restaking/method-independent-dark.svg', RESTAKING_METHOD_SHARED_DARK = '/static/assets/restaking/method-shared-dark.svg', @@ -71,10 +56,58 @@ export enum ChartColor { LAVENDER = '#E7E2FF', } -export const PAYMENT_DESTINATION_OPTIONS = [ - 'Staked (increase the amount at stake)', - 'Stash (do not increase the amount at stake)', -]; +export enum TxName { + PAYOUT_ALL = 'payout all stakers', + PAYOUT_STAKERS = 'payout stakers', + VEST = 'vest', + BOND = 'bond', + REBOND = 'rebond', + UNBOND = 'unbond', + BOND_EXTRA = 'bond extra', + WITHDRAW_UNBONDED = 'withdraw unbonded', + SET_PAYEE = 'set payee', + TRANSFER = 'transfer', + CHILL = 'chill', + NOMINATE = 'nominate', + SETUP_NOMINATOR = 'setup nominator', + UPDATE_NOMINATOR = 'update nominator', + WITHDRAW_EVM_BALANCE = 'withdraw', + UPDATE_RESTAKE_PROFILE = 'update restake profile', +} + +export const PAYMENT_DESTINATION_OPTIONS: StakingRewardsDestinationDisplayText[] = + [ + StakingRewardsDestinationDisplayText.STAKED, + StakingRewardsDestinationDisplayText.STASH, + ]; + +export const STAKING_PAYEE_TEXT_TO_VALUE_MAP: Record< + StakingRewardsDestinationDisplayText, + StakingRewardsDestination +> = { + [StakingRewardsDestinationDisplayText.STAKED]: + StakingRewardsDestination.STAKED, + [StakingRewardsDestinationDisplayText.STASH]: StakingRewardsDestination.STASH, + [StakingRewardsDestinationDisplayText.CONTROLLER]: + StakingRewardsDestination.CONTROLLER, + [StakingRewardsDestinationDisplayText.ACCOUNT]: + StakingRewardsDestination.ACCOUNT, + [StakingRewardsDestinationDisplayText.NONE]: StakingRewardsDestination.NONE, +}; + +export const STAKING_PAYEE_VALUE_TO_TEXT_MAP: Record< + StakingRewardsDestination, + StakingRewardsDestinationDisplayText +> = { + [StakingRewardsDestination.STAKED]: + StakingRewardsDestinationDisplayText.STAKED, + [StakingRewardsDestination.STASH]: StakingRewardsDestinationDisplayText.STASH, + [StakingRewardsDestination.CONTROLLER]: + StakingRewardsDestinationDisplayText.CONTROLLER, + [StakingRewardsDestination.ACCOUNT]: + StakingRewardsDestinationDisplayText.ACCOUNT, + [StakingRewardsDestination.NONE]: StakingRewardsDestinationDisplayText.NONE, +}; /** * The values are based off [Tangle's `RoleType` enum](https://github.com/webb-tools/tangle/blob/2a60f0382db2a1234c490766381872d2c7243f5e/primitives/src/roles/mod.rs#L40). diff --git a/apps/tangle-dapp/constants/networks.ts b/apps/tangle-dapp/constants/networks.ts index f994f48d74..9013b43b01 100644 --- a/apps/tangle-dapp/constants/networks.ts +++ b/apps/tangle-dapp/constants/networks.ts @@ -1,13 +1,17 @@ import { + NetworkId, TANGLE_MAINNET_NETWORK, - TANGLE_TESTNET_NATIVE_NETWORK, } from '@webb-tools/webb-ui-components/constants/networks'; import { NetworkFeature } from '../types'; export const DEFAULT_NETWORK = TANGLE_MAINNET_NETWORK; -export const NETWORK_FEATURE_MAP: Record = - { - [TANGLE_TESTNET_NATIVE_NETWORK.name]: [NetworkFeature.Faucet], - }; +export const NETWORK_FEATURE_MAP: Record = { + [NetworkId.TANGLE_TESTNET]: [NetworkFeature.Faucet], + [NetworkId.TANGLE_MAINNET]: [NetworkFeature.EraStakersOverview], + // Assume that local and custom endpoints are using an updated runtime + // version which includes support for the era stakers overview query. + [NetworkId.TANGLE_LOCAL_DEV]: [NetworkFeature.EraStakersOverview], + [NetworkId.CUSTOM]: [NetworkFeature.EraStakersOverview], +}; diff --git a/apps/tangle-dapp/constants/openGraph.ts b/apps/tangle-dapp/constants/openGraph.ts index 3fe585b9fa..895d76a20f 100644 --- a/apps/tangle-dapp/constants/openGraph.ts +++ b/apps/tangle-dapp/constants/openGraph.ts @@ -13,7 +13,7 @@ export const APP_NAME = 'Tangle dApp'; export const APP_SUBTITLE = 'Kickstarting Blockchain Innovation with MPC'; export const APP_DESCRIPTION = - 'Your portal to managing Tangle Network assets and multi-party computation (MPC) services, kickstarting advanced cryptographic developments and innovations in blockchain.'; + "Your portal to managing Tangle Network assets and upcoming AVS Blueprints in Tangle's modular restaking infrastructure."; export const DEFAULT_OPENGRAPH_METADATA = { title: { diff --git a/apps/tangle-dapp/containers/ApiDevStatsContainer/ApiDevStatsContainer.tsx b/apps/tangle-dapp/containers/ApiDevStatsContainer/ApiDevStatsContainer.tsx index 2d8ab2b8b2..9d5b265512 100644 --- a/apps/tangle-dapp/containers/ApiDevStatsContainer/ApiDevStatsContainer.tsx +++ b/apps/tangle-dapp/containers/ApiDevStatsContainer/ApiDevStatsContainer.tsx @@ -6,7 +6,7 @@ import { FC, useCallback, useEffect, useState } from 'react'; import useNetworkStore from '../../context/useNetworkStore'; import usePromise from '../../hooks/usePromise'; -import { getPolkadotApiPromise, getPolkadotApiRx } from '../../utils/polkadot'; +import { getApiPromise, getApiRx } from '../../utils/polkadot'; /** * Format bytes to megabytes, rounded to two decimal places @@ -24,12 +24,12 @@ const ApiDevStats: FC = () => { const { rpcEndpoint } = useNetworkStore(); const { result: api } = usePromise( - useCallback(() => getPolkadotApiPromise(rpcEndpoint), [rpcEndpoint]), + useCallback(() => getApiPromise(rpcEndpoint), [rpcEndpoint]), null ); const { result: apiRx } = usePromise( - useCallback(() => getPolkadotApiRx(rpcEndpoint), [rpcEndpoint]), + useCallback(() => getApiRx(rpcEndpoint), [rpcEndpoint]), null ); diff --git a/apps/tangle-dapp/containers/BalancesTableContainer/BalanceCell.tsx b/apps/tangle-dapp/containers/BalancesTableContainer/BalanceCell.tsx index 17ee8b04a2..45379e8cc9 100644 --- a/apps/tangle-dapp/containers/BalancesTableContainer/BalanceCell.tsx +++ b/apps/tangle-dapp/containers/BalancesTableContainer/BalanceCell.tsx @@ -30,7 +30,7 @@ const BalanceCell: FC<{ {formattedBalance !== null ? ( // If the balance is not null, display it. - {formattedBalance} + {formattedBalance} ) : isAccountActive ? ( // If there is an active account, but the balance is null, diff --git a/apps/tangle-dapp/containers/BalancesTableContainer/BalancesTableContainer.tsx b/apps/tangle-dapp/containers/BalancesTableContainer/BalancesTableContainer.tsx index 83f92bca0a..93b3113c69 100644 --- a/apps/tangle-dapp/containers/BalancesTableContainer/BalancesTableContainer.tsx +++ b/apps/tangle-dapp/containers/BalancesTableContainer/BalancesTableContainer.tsx @@ -15,8 +15,8 @@ import TangleTokenIcon from '../../components/TangleTokenIcon'; import useNetworkStore from '../../context/useNetworkStore'; import useBalances from '../../data/balances/useBalances'; import useVestingInfo from '../../data/vesting/useVestingInfo'; +import useApiRx from '../../hooks/useApiRx'; import useLocalStorage, { LocalStorageKey } from '../../hooks/useLocalStorage'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; import useSubstrateAddress from '../../hooks/useSubstrateAddress'; import { StaticSearchQueryPath } from '../../types'; import TransferTxContainer from '../TransferTxContainer/TransferTxContainer'; @@ -24,21 +24,29 @@ import BalanceAction from './BalanceAction'; import BalanceCell from './BalanceCell'; import HeaderCell from './HeaderCell'; import LockedBalanceDetails from './LockedBalanceDetails/LockedBalanceDetails'; +import useLongestVestingScheduleTime from './useLongestVestingScheduleTime'; import VestBalanceAction from './VestBalanceAction'; const BalancesTableContainer: FC = () => { - const { locked, transferable } = useBalances(); - const activeSubstrateAddress = useSubstrateAddress(); const [isTransferModalOpen, setIsTransferModalOpen] = useState(false); const [isDetailsCollapsed, setIsDetailsCollapsed] = useState(false); + const { locked, transferable } = useBalances(); + const activeSubstrateAddress = useSubstrateAddress(); + const longestVestingScheduleTime = useLongestVestingScheduleTime(); + const { hasClaimableTokens: hasVestedAmount, claimableAmount: vestedAmount } = useVestingInfo(); - const { set: setCachedIsDetailsCollapsed, get: getCachedIsDetailsCollapsed } = - useLocalStorage(LocalStorageKey.IS_BALANCES_TABLE_DETAILS_COLLAPSED, false); + const { + set: setCachedIsDetailsCollapsed, + valueOpt: cachedIsDetailsCollapsedOpt, + } = useLocalStorage( + LocalStorageKey.IS_BALANCES_TABLE_DETAILS_COLLAPSED, + false + ); - const { data: locks } = usePolkadotApiRx( + const { result: locks } = useApiRx( useCallback( (api) => { if (!activeSubstrateAddress) return null; @@ -50,12 +58,13 @@ const BalancesTableContainer: FC = () => { // Load the cached collapsed state from local storage on mount. useEffect(() => { - const cachedIsDetailsCollapsed = getCachedIsDetailsCollapsed(); - - if (cachedIsDetailsCollapsed !== null) { - setIsDetailsCollapsed(cachedIsDetailsCollapsed); + if ( + cachedIsDetailsCollapsedOpt !== null && + cachedIsDetailsCollapsedOpt.value !== null + ) { + setIsDetailsCollapsed(cachedIsDetailsCollapsedOpt.value); } - }, [getCachedIsDetailsCollapsed]); + }, [cachedIsDetailsCollapsedOpt]); const handleToggleDetails = useCallback(() => { setIsDetailsCollapsed((prev) => { @@ -85,7 +94,7 @@ const BalancesTableContainer: FC = () => { {hasVestedAmount && ( )} @@ -123,7 +132,10 @@ const BalancesTableContainer: FC = () => { {/* Vested balance */} {hasVestedAmount && (
    - +
    diff --git a/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/DemocracyUnlockingAt.tsx b/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/DemocracyUnlockingAt.tsx index 1f83d41fa3..b2e486ea5c 100644 --- a/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/DemocracyUnlockingAt.tsx +++ b/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/DemocracyUnlockingAt.tsx @@ -2,9 +2,10 @@ import { formatDecimal } from '@polkadot/util'; import { FC, useCallback } from 'react'; import useDemocracy from '../../../data/democracy/useDemocracy'; -import usePolkadotApi from '../../../hooks/usePolkadotApi'; -import usePolkadotApiRx from '../../../hooks/usePolkadotApiRx'; +import useApi from '../../../hooks/useApi'; +import useApiRx from '../../../hooks/useApiRx'; import calculateTimeRemaining from '../../../utils/calculateTimeRemaining'; +import getBlockDate from '../../../utils/getBlockDate'; import TextCell from './TextCell'; const DemocracyUnlockingAt: FC = () => { @@ -13,12 +14,12 @@ const DemocracyUnlockingAt: FC = () => { latestReferendum: latestDemocracyReferendum, } = useDemocracy(); - const { data: currentBlockNumber } = usePolkadotApiRx( + const { result: currentBlockNumber } = useApiRx( useCallback((api) => api.derive.chain.bestNumber(), []) ); - const { value: babeExpectedBlockTime } = usePolkadotApi( - useCallback((api) => Promise.resolve(api.consts.babe.expectedBlockTime), []) + const { result: babeExpectedBlockTime } = useApi( + useCallback((api) => api.consts.babe.expectedBlockTime, []) ); const isInDemocracy = @@ -33,12 +34,16 @@ const DemocracyUnlockingAt: FC = () => { return; } - const timeRemaining = calculateTimeRemaining( + const democracyLockEndBlockDate = getBlockDate( babeExpectedBlockTime, currentBlockNumber, democracyLockEndBlock ); + const timeRemaining = democracyLockEndBlockDate + ? calculateTimeRemaining(democracyLockEndBlockDate) + : null; + return ( { const { schedulesOpt: vestingSchedulesOpt } = useVestingInfo(); const { isInDemocracy } = useDemocracy(); - const { data: currentEra } = useCurrentEra(); - const { data: unbondingEntries } = useUnbonding(); + const { result: currentEra } = useCurrentEra(); + const { result: unbondingEntriesOpt } = useUnbonding(); const { amount: stakingLockedBalance } = useBalancesLock( SubstrateLockId.STAKING ); + const unbondingEntries = useMemo(() => { + if (unbondingEntriesOpt === null || unbondingEntriesOpt.value === null) { + return null; + } + + return unbondingEntriesOpt.value; + }, [unbondingEntriesOpt]); + const showNomination = stakingLockedBalance !== null && stakingLockedBalance.gt(BN_ZERO); diff --git a/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingRemainingBalances.tsx b/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingRemainingBalances.tsx index e9d08ab6cd..c683b23fe5 100644 --- a/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingRemainingBalances.tsx +++ b/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingRemainingBalances.tsx @@ -2,14 +2,14 @@ import { BN, BN_ZERO } from '@polkadot/util'; import { FC, useCallback } from 'react'; import useVestingInfo from '../../../data/vesting/useVestingInfo'; -import usePolkadotApiRx from '../../../hooks/usePolkadotApiRx'; +import useApiRx from '../../../hooks/useApiRx'; import BalanceCell from '../BalanceCell'; import { sortVestingSchedulesAscending } from './VestingScheduleBalances'; const VestingRemainingBalances: FC = () => { const { schedulesOpt: vestingSchedulesOpt } = useVestingInfo(); - const { data: currentBlockNumber } = usePolkadotApiRx( + const { result: currentBlockNumber } = useApiRx( useCallback((api) => api.derive.chain.bestNumber(), []) ); diff --git a/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingScheduleBalances.tsx b/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingScheduleBalances.tsx index 635f177b5d..a1e2bcda78 100644 --- a/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingScheduleBalances.tsx +++ b/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingScheduleBalances.tsx @@ -3,7 +3,7 @@ import { BN, BN_ZERO, formatDecimal } from '@polkadot/util'; import { FC, useCallback } from 'react'; import useVestingInfo from '../../../data/vesting/useVestingInfo'; -import usePolkadotApiRx from '../../../hooks/usePolkadotApiRx'; +import useApiRx from '../../../hooks/useApiRx'; import { formatTokenBalance } from '../../../utils/polkadot'; import BalanceCell from '../BalanceCell'; @@ -25,7 +25,7 @@ export const sortVestingSchedulesAscending = ( const VestingScheduleBalances: FC = () => { const { schedulesOpt: vestingSchedulesOpt } = useVestingInfo(); - const { data: currentBlockNumber } = usePolkadotApiRx( + const { result: currentBlockNumber } = useApiRx( useCallback((api) => api.derive.chain.bestNumber(), []) ); diff --git a/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingSchedulesUnlockingAt.tsx b/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingSchedulesUnlockingAt.tsx index 0065bb6017..163a8166b1 100644 --- a/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingSchedulesUnlockingAt.tsx +++ b/apps/tangle-dapp/containers/BalancesTableContainer/LockedBalanceDetails/VestingSchedulesUnlockingAt.tsx @@ -2,21 +2,22 @@ import { formatDecimal } from '@polkadot/util'; import { FC, useCallback } from 'react'; import useVestingInfo from '../../../data/vesting/useVestingInfo'; -import usePolkadotApi from '../../../hooks/usePolkadotApi'; -import usePolkadotApiRx from '../../../hooks/usePolkadotApiRx'; +import useApi from '../../../hooks/useApi'; +import useApiRx from '../../../hooks/useApiRx'; import calculateTimeRemaining from '../../../utils/calculateTimeRemaining'; +import getBlockDate from '../../../utils/getBlockDate'; import TextCell from './TextCell'; import { sortVestingSchedulesAscending } from './VestingScheduleBalances'; const VestingSchedulesUnlockingAt: FC = () => { const { schedulesOpt: vestingSchedulesOpt } = useVestingInfo(); - const { data: currentBlockNumber } = usePolkadotApiRx( + const { result: currentBlockNumber } = useApiRx( useCallback((api) => api.derive.chain.bestNumber(), []) ); - const { value: babeExpectedBlockTime } = usePolkadotApi( - useCallback((api) => Promise.resolve(api.consts.babe.expectedBlockTime), []) + const { result: babeExpectedBlockTime } = useApi( + useCallback((api) => api.consts.babe.expectedBlockTime, []) ); if ( @@ -36,12 +37,16 @@ const VestingSchedulesUnlockingAt: FC = () => { schedule.locked.div(schedule.perBlock) ); - const timeRemaining = calculateTimeRemaining( + const endingBlockDate = getBlockDate( babeExpectedBlockTime, currentBlockNumber, endingBlockNumber ); + const timeRemaining = endingBlockDate + ? calculateTimeRemaining(endingBlockDate) + : null; + const isComplete = currentBlockNumber.gte(endingBlockNumber); const progressText = isComplete diff --git a/apps/tangle-dapp/containers/BalancesTableContainer/useLongestVestingScheduleTime.ts b/apps/tangle-dapp/containers/BalancesTableContainer/useLongestVestingScheduleTime.ts new file mode 100644 index 0000000000..9b076044ca --- /dev/null +++ b/apps/tangle-dapp/containers/BalancesTableContainer/useLongestVestingScheduleTime.ts @@ -0,0 +1,69 @@ +import { formatDecimal } from '@polkadot/util'; +import { useCallback } from 'react'; + +import useVestingInfo from '../../data/vesting/useVestingInfo'; +import useApi from '../../hooks/useApi'; +import useApiRx from '../../hooks/useApiRx'; +import calculateTimeRemaining from '../../utils/calculateTimeRemaining'; +import getBlockDate from '../../utils/getBlockDate'; +import { sortVestingSchedulesAscending } from './LockedBalanceDetails/VestingScheduleBalances'; + +const useLongestVestingScheduleTime = () => { + const { result: babeExpectedBlockTime } = useApi( + useCallback((api) => api.consts.babe.expectedBlockTime, []) + ); + + const { result: currentBlockNumber } = useApiRx( + useCallback((api) => api.derive.chain.bestNumber(), []) + ); + + const { schedulesOpt: vestingSchedulesOpt } = useVestingInfo(); + + if ( + babeExpectedBlockTime === null || + currentBlockNumber === null || + vestingSchedulesOpt === null || + vestingSchedulesOpt.isNone + ) { + return null; + } + + const vestingSchedules = vestingSchedulesOpt.unwrap(); + + if (vestingSchedules.length === 0) { + return null; + } + + const sortedVestingSchedules = vestingSchedules.toSorted( + sortVestingSchedulesAscending + ); + + const longestVestingSchedule = + sortedVestingSchedules[sortedVestingSchedules.length - 1]; + + const endingBlockNumber = longestVestingSchedule.startingBlock.add( + longestVestingSchedule.locked.div(longestVestingSchedule.perBlock) + ); + + const endingBlockDate = getBlockDate( + babeExpectedBlockTime, + currentBlockNumber, + endingBlockNumber + ); + + const timeRemaining = endingBlockDate + ? calculateTimeRemaining(endingBlockDate) + : null; + + const isComplete = currentBlockNumber.gte(endingBlockNumber); + + return isComplete + ? null + : `${timeRemaining} remaining until the full amount across all vesting schedules is unlocked. Currently at block #${formatDecimal( + currentBlockNumber.toString() + )}, with ${formatDecimal( + endingBlockNumber.sub(currentBlockNumber).toString() + )} blocks left.`; +}; + +export default useLongestVestingScheduleTime; diff --git a/apps/tangle-dapp/containers/BondMoreTxContainer/BondMoreTxContainer.tsx b/apps/tangle-dapp/containers/BondMoreTxContainer/BondMoreTxContainer.tsx index 8135ebce99..7f888bd007 100644 --- a/apps/tangle-dapp/containers/BondMoreTxContainer/BondMoreTxContainer.tsx +++ b/apps/tangle-dapp/containers/BondMoreTxContainer/BondMoreTxContainer.tsx @@ -1,7 +1,6 @@ 'use client'; import { BN, BN_ZERO } from '@polkadot/util'; -import { useWebContext } from '@webb-tools/api-provider-environment'; import { Button, Modal, @@ -13,15 +12,11 @@ import { } from '@webb-tools/webb-ui-components'; import { WEBB_TANGLE_DOCS_STAKING_URL } from '@webb-tools/webb-ui-components/constants'; import Link from 'next/link'; -import { type FC, useCallback, useEffect, useMemo, useState } from 'react'; +import { type FC, useCallback, useEffect, useState } from 'react'; import AmountInput from '../../components/AmountInput/AmountInput'; -import useNetworkStore from '../../context/useNetworkStore'; import useTokenWalletFreeBalance from '../../data/NominatorStats/useTokenWalletFreeBalance'; -import useExecuteTxWithNotification from '../../hooks/useExecuteTxWithNotification'; -import { bondExtraTokens as bondExtraTokensEvm } from '../../utils/evm'; -import formatBnToDisplayAmount from '../../utils/formatBnToDisplayAmount'; -import { bondExtraTokens as bondExtraTokensSubstrate } from '../../utils/polkadot'; +import useBondExtraTx from '../../data/staking/useBondExtraTx'; import { BondMoreTxContainerProps } from './types'; const BondMoreTxContainer: FC = ({ @@ -29,23 +24,12 @@ const BondMoreTxContainer: FC = ({ setIsModalOpen, }) => { const { notificationApi } = useWebbUI(); - const { activeAccount } = useWebContext(); - const executeTx = useExecuteTxWithNotification(); const [amountToBond, setAmountToBond] = useState(null); - const { rpcEndpoint, nativeTokenSymbol } = useNetworkStore(); const [isBondMoreTxLoading, setIsBondMoreTxLoading] = useState(false); const [hasErrors, setHasErrors] = useState(false); - const walletAddress = useMemo(() => { - if (!activeAccount?.address) { - return '0x0'; - } - - return activeAccount.address; - }, [activeAccount?.address]); - const { data: walletBalance, error: walletBalanceError } = - useTokenWalletFreeBalance(walletAddress); + useTokenWalletFreeBalance(); useEffect(() => { if (walletBalanceError) { @@ -63,48 +47,35 @@ const BondMoreTxContainer: FC = ({ [setHasErrors] ); - const continueToSignAndSubmitTx = useMemo(() => { - return ( - amountToBond !== null && - amountToBond.gt(BN_ZERO) && - walletAddress !== '0x0' && - !hasErrors - ); - }, [amountToBond, walletAddress, hasErrors]); - - const closeModal = useCallback(() => { + const closeModalAndReset = useCallback(() => { setIsBondMoreTxLoading(false); setIsModalOpen(false); setAmountToBond(null); setHasErrors(false); }, [setIsModalOpen]); + const { execute: executeBondExtraTx } = useBondExtraTx(); + const submitAndSignTx = useCallback(async () => { + if (executeBondExtraTx === null || amountToBond === null) { + return; + } + setIsBondMoreTxLoading(true); try { - if (amountToBond === null) return; - const bondingAmount = +formatBnToDisplayAmount(amountToBond); - await executeTx( - () => bondExtraTokensEvm(walletAddress, bondingAmount), - () => - bondExtraTokensSubstrate(rpcEndpoint, walletAddress, bondingAmount), - `Successfully bonded ${bondingAmount} ${nativeTokenSymbol}.`, - 'Failed to bond extra tokens!' - ); - - closeModal(); + await executeBondExtraTx({ + amount: amountToBond, + }); + + closeModalAndReset(); } catch { setIsBondMoreTxLoading(false); } - }, [ - amountToBond, - closeModal, - executeTx, - rpcEndpoint, - walletAddress, - nativeTokenSymbol, - ]); + }, [executeBondExtraTx, amountToBond, closeModalAndReset]); + + const canSubmitTx = + amountToBond !== null && amountToBond.gt(BN_ZERO) && !hasErrors; return ( @@ -113,11 +84,11 @@ const BondMoreTxContainer: FC = ({ isOpen={isModalOpen} className="w-full max-w-[416px] rounded-2xl bg-mono-0 dark:bg-mono-180" > - + Add Stake -
    +
    = ({ - ) : ( - - )} + + {delegateTxStep === DelegateTxSteps.BOND_TOKENS ? ( + + ) : ( + + )} - {delegateTxStep === DelegateTxSteps.BOND_TOKENS ? ( - - ) : ( - - )} - - - - - - + }} + > + Next + + ) : ( + + )} + + + ); }; diff --git a/apps/tangle-dapp/containers/DelegateTxContainer/types.ts b/apps/tangle-dapp/containers/DelegateTxContainer/types.ts index 35299bc580..f6984e4066 100644 --- a/apps/tangle-dapp/containers/DelegateTxContainer/types.ts +++ b/apps/tangle-dapp/containers/DelegateTxContainer/types.ts @@ -1,6 +1,10 @@ import { BN } from '@polkadot/util'; -import { Validator } from '../../types'; +import { + StakingRewardsDestination, + StakingRewardsDestinationDisplayText, + Validator, +} from '../../types'; export type DelegateTxContainerProps = { isModalOpen: boolean; @@ -8,15 +12,15 @@ export type DelegateTxContainerProps = { }; export type BondTokensProps = { - isFirstTimeNominator: boolean; + isBondedOrNominating: boolean; nominatorAddress: string; + amountToBondError?: string; + payeeOptions: StakingRewardsDestinationDisplayText[]; + payee: StakingRewardsDestination; amountToBond: BN | null; - setAmountToBond: (amount: BN | null) => void; - paymentDestinationOptions: string[]; - paymentDestination: string; - setPaymentDestination: (paymentDestination: string) => void; tokenSymbol: string; - walletBalance: BN | null; + setPayee: (payee: StakingRewardsDestination) => void; + setAmountToBond: (amount: BN | null) => void; handleAmountToBondError: (error: string | null) => void; }; diff --git a/apps/tangle-dapp/containers/KeyStatsContainer/ActiveValidatorsKeyStat.tsx b/apps/tangle-dapp/containers/KeyStatsContainer/ActiveValidatorsKeyStat.tsx index 3a15e22776..9d5b9b3105 100644 --- a/apps/tangle-dapp/containers/KeyStatsContainer/ActiveValidatorsKeyStat.tsx +++ b/apps/tangle-dapp/containers/KeyStatsContainer/ActiveValidatorsKeyStat.tsx @@ -12,10 +12,11 @@ const ActiveValidatorsKeyStat: FC = () => { - {data?.value1}/{data?.value2} + {data?.value1 ?? '--'}/{data?.value2 ?? '--'} ); }; diff --git a/apps/tangle-dapp/containers/KeyStatsContainer/ActualStakedPercentageKeyStat.tsx b/apps/tangle-dapp/containers/KeyStatsContainer/ActualStakedPercentageKeyStat.tsx index 9e517d1aff..a2697ed0c3 100644 --- a/apps/tangle-dapp/containers/KeyStatsContainer/ActualStakedPercentageKeyStat.tsx +++ b/apps/tangle-dapp/containers/KeyStatsContainer/ActualStakedPercentageKeyStat.tsx @@ -17,9 +17,7 @@ const ActualStakedPercentageKeyStat: FC = () => { isLoading={actualStakedPercentage === null} error={null} > - {actualStakedPercentage !== null - ? actualStakedPercentage * 100 - : undefined} + {actualStakedPercentage !== null ? actualStakedPercentage : undefined} ); }; diff --git a/apps/tangle-dapp/containers/KeyStatsContainer/IdealStakedPercentageKeyStat.tsx b/apps/tangle-dapp/containers/KeyStatsContainer/IdealStakedPercentageKeyStat.tsx index a35694de8d..f473375786 100644 --- a/apps/tangle-dapp/containers/KeyStatsContainer/IdealStakedPercentageKeyStat.tsx +++ b/apps/tangle-dapp/containers/KeyStatsContainer/IdealStakedPercentageKeyStat.tsx @@ -14,10 +14,11 @@ const IdealStakedPercentageKeyStat: FC = () => { tooltip="Ideal proportion of tokens staked to secure the network and sustain active token trade and usage." className="!border-b-0" suffix="%" + showDataBeforeLoading isLoading={isLoading} error={error} > - {data?.value1} + {data?.value1 ?? '--'} ); }; diff --git a/apps/tangle-dapp/containers/KeyStatsContainer/ValidatorCountKeyStat.tsx b/apps/tangle-dapp/containers/KeyStatsContainer/ValidatorCountKeyStat.tsx index 78e294fbaf..70dc152032 100644 --- a/apps/tangle-dapp/containers/KeyStatsContainer/ValidatorCountKeyStat.tsx +++ b/apps/tangle-dapp/containers/KeyStatsContainer/ValidatorCountKeyStat.tsx @@ -16,10 +16,11 @@ const ValidatorCountKeyStat: FC = () => { - {validatorCount?.value1}/{validatorCount?.value2} + {validatorCount?.value1 ?? '--'}/{validatorCount?.value2 ?? '--'} ); }; diff --git a/apps/tangle-dapp/containers/KeyStatsContainer/WaitingValidatorsKeyStat.tsx b/apps/tangle-dapp/containers/KeyStatsContainer/WaitingValidatorsKeyStat.tsx index ceeedb1fcf..65f7f9ee5c 100644 --- a/apps/tangle-dapp/containers/KeyStatsContainer/WaitingValidatorsKeyStat.tsx +++ b/apps/tangle-dapp/containers/KeyStatsContainer/WaitingValidatorsKeyStat.tsx @@ -13,10 +13,11 @@ const WaitingValidatorsKeyStat: FC = () => { title="Waiting" tooltip="Nodes waiting in line to become active validators." className="!border-r-0 lg:!border-r" + showDataBeforeLoading error={error} isLoading={isLoading} > - {data?.value1} + {data?.value1 ?? '--'} ); }; diff --git a/apps/tangle-dapp/containers/Layout/FeedbackBanner.tsx b/apps/tangle-dapp/containers/Layout/FeedbackBanner.tsx index ef665024d9..34db568dbe 100644 --- a/apps/tangle-dapp/containers/Layout/FeedbackBanner.tsx +++ b/apps/tangle-dapp/containers/Layout/FeedbackBanner.tsx @@ -15,8 +15,8 @@ const FeedbackBanner: FC = () => { const { isSet: isBannerDismissalCacheSet, - get: getCachedWasBannerDismissed, set: setCachedWasBannerDismissed, + valueOpt: wasBannerDismissedOpt, } = useLocalStorage(LocalStorageKey.WAS_BANNER_DISMISSED); // If there is no cache key, show the banner by default. @@ -29,10 +29,10 @@ const FeedbackBanner: FC = () => { // If the banner was dismissed, do not show it to prevent // annoying the user. useEffect(() => { - if (getCachedWasBannerDismissed() === true) { + if (wasBannerDismissedOpt?.value === true) { setShowBanner(false); } - }, [getCachedWasBannerDismissed]); + }, [wasBannerDismissedOpt?.value]); const onCloseHandler = useCallback(() => { setShowBanner(false); diff --git a/apps/tangle-dapp/containers/Layout/Layout.tsx b/apps/tangle-dapp/containers/Layout/Layout.tsx index 3c6ec82a3d..456bbae6e1 100644 --- a/apps/tangle-dapp/containers/Layout/Layout.tsx +++ b/apps/tangle-dapp/containers/Layout/Layout.tsx @@ -1,17 +1,16 @@ import { Footer } from '@webb-tools/webb-ui-components'; import { bottomLinks, - TANGLE_GITHUB_URL, TANGLE_PRIVACY_POLICY_URL, + TANGLE_SOCIAL_URLS_RECORD, TANGLE_TERMS_OF_SERVICE_URL, - TANGLE_TWITTER_URL, WEBB_AVAILABLE_SOCIALS, } from '@webb-tools/webb-ui-components/constants'; import { getSidebarStateFromCookie } from '@webb-tools/webb-ui-components/next-utils'; -import React, { type FC, type PropsWithChildren } from 'react'; +import { type FC, type PropsWithChildren } from 'react'; import { Breadcrumbs, Sidebar, SidebarMenu } from '../../components'; -import { TxConfirmationModalContainer } from '../../containers'; +import { IS_PRODUCTION_ENV } from '../../constants/env'; import ApiDevStatsContainer from '../ApiDevStatsContainer'; import WalletAndChainContainer from '../WalletAndChainContainer/WalletAndChainContainer'; import { WalletModalContainer } from '../WalletModalContainer'; @@ -21,10 +20,7 @@ import FeedbackBanner from './FeedbackBanner'; // footer in Tangle dApp, since it defaults to the Webb socials. const SOCIAL_LINK_OVERRIDES: Partial< Record<(typeof WEBB_AVAILABLE_SOCIALS)[number], string> -> = { - twitter: TANGLE_TWITTER_URL, - github: TANGLE_GITHUB_URL, -}; +> = TANGLE_SOCIAL_URLS_RECORD; const BOTTOM_LINK_OVERRIDES: Partial< Record<(typeof bottomLinks)[number]['name'], string> @@ -35,14 +31,14 @@ const BOTTOM_LINK_OVERRIDES: Partial< const Layout: FC = ({ children }) => { const isSidebarInitiallyExpanded = getSidebarStateFromCookie(); - const isDevelopment = process.env.NODE_ENV === 'development'; return ( -
    +
    +
    @@ -71,9 +67,7 @@ const Layout: FC = ({ children }) => {
    - - - {isDevelopment && } + {!IS_PRODUCTION_ENV && }
    ); }; diff --git a/apps/tangle-dapp/containers/ManageProfileModalContainer/ConfirmAllocationsStep.tsx b/apps/tangle-dapp/containers/ManageProfileModalContainer/ConfirmAllocationsStep.tsx index 484eb6ed68..14dfb789a6 100644 --- a/apps/tangle-dapp/containers/ManageProfileModalContainer/ConfirmAllocationsStep.tsx +++ b/apps/tangle-dapp/containers/ManageProfileModalContainer/ConfirmAllocationsStep.tsx @@ -6,7 +6,11 @@ import { FC } from 'react'; import { twMerge } from 'tailwind-merge'; import useNetworkStore from '../../context/useNetworkStore'; -import { RestakingProfileType, RestakingService } from '../../types'; +import { + RestakingProfileType, + RestakingService, + TokenSymbol, +} from '../../types'; import { getChipColorOfServiceType } from '../../utils'; import { formatTokenBalance } from '../../utils/polkadot'; import { filterAllocations } from './Independent/IndependentAllocationStep'; @@ -182,7 +186,7 @@ const ConfirmAllocationsStep: FC = ({ type AllocationItemProps = { services: RestakingService[]; amount?: BN; - tokenSymbol: string; + tokenSymbol: TokenSymbol; }; /** @internal */ diff --git a/apps/tangle-dapp/containers/ManageProfileModalContainer/Independent/IndependentAllocationStep.tsx b/apps/tangle-dapp/containers/ManageProfileModalContainer/Independent/IndependentAllocationStep.tsx index 61bd942c87..8ba95a9c06 100644 --- a/apps/tangle-dapp/containers/ManageProfileModalContainer/Independent/IndependentAllocationStep.tsx +++ b/apps/tangle-dapp/containers/ManageProfileModalContainer/Independent/IndependentAllocationStep.tsx @@ -13,7 +13,7 @@ import { z } from 'zod'; import useNetworkStore from '../../../context/useNetworkStore'; import useRestakingLimits from '../../../data/restaking/useRestakingLimits'; -import usePolkadotApi from '../../../hooks/usePolkadotApi'; +import useApi from '../../../hooks/useApi'; import { RestakingService } from '../../../types'; import { formatTokenBalance } from '../../../utils/polkadot'; import { AllocationChartVariant } from '../AllocationChart'; @@ -56,11 +56,8 @@ const IndependentAllocationStep: FC = ({ null ); - const { value: maxRolesPerAccount } = usePolkadotApi( - useCallback( - (api) => Promise.resolve(api.consts.roles.maxRolesPerAccount), - [] - ) + const { result: maxRolesPerAccount } = useApi( + useCallback((api) => api.consts.roles.maxRolesPerAccount, []) ); const [newAllocationRole, setNewAllocationRole] = diff --git a/apps/tangle-dapp/containers/ManageProfileModalContainer/ManageProfileModalContainer.tsx b/apps/tangle-dapp/containers/ManageProfileModalContainer/ManageProfileModalContainer.tsx index eb84262e16..b6196322bc 100644 --- a/apps/tangle-dapp/containers/ManageProfileModalContainer/ManageProfileModalContainer.tsx +++ b/apps/tangle-dapp/containers/ManageProfileModalContainer/ManageProfileModalContainer.tsx @@ -143,7 +143,7 @@ const ManageProfileModalContainer: FC = ({ executeForIndependentProfile: executeUpdateIndependentProfileTx, executeForSharedProfile: executeUpdateSharedProfileTx, status: updateProfileTxStatus, - } = useUpdateRestakingProfileTx(profileType, true, true); + } = useUpdateRestakingProfileTx(profileType, true); const handlePreviousStep = useCallback(() => { const diff = getStepDiff(step, false); diff --git a/apps/tangle-dapp/containers/ManageProfileModalContainer/Shared/SharedRolesInput.tsx b/apps/tangle-dapp/containers/ManageProfileModalContainer/Shared/SharedRolesInput.tsx index 1037a9c890..26cf24a712 100644 --- a/apps/tangle-dapp/containers/ManageProfileModalContainer/Shared/SharedRolesInput.tsx +++ b/apps/tangle-dapp/containers/ManageProfileModalContainer/Shared/SharedRolesInput.tsx @@ -5,7 +5,7 @@ import { twMerge } from 'tailwind-merge'; import BaseInput from '../../../components/AmountInput/BaseInput'; import useRestakingJobs from '../../../data/restaking/useRestakingJobs'; -import usePolkadotApi from '../../../hooks/usePolkadotApi'; +import useApi from '../../../hooks/useApi'; import { RestakingService } from '../../../types'; import { getChartDataAreaColorByServiceType, @@ -31,7 +31,7 @@ const SharedRolesInput: FC = ({ const [isDropdownVisible, setIsDropdownVisible] = useState(false); const { servicesWithJobs } = useRestakingJobs(); - const { value: maxRolesPerAccount } = usePolkadotApi( + const { result: maxRolesPerAccount } = useApi( useCallback( (api) => Promise.resolve(api.consts.roles.maxRolesPerAccount), [] diff --git a/apps/tangle-dapp/containers/NominationsPayoutsContainer/NominationsPayoutsContainer.tsx b/apps/tangle-dapp/containers/NominationsPayoutsContainer/NominationsPayoutsContainer.tsx index 1b56c3be46..610f01ffc5 100644 --- a/apps/tangle-dapp/containers/NominationsPayoutsContainer/NominationsPayoutsContainer.tsx +++ b/apps/tangle-dapp/containers/NominationsPayoutsContainer/NominationsPayoutsContainer.tsx @@ -4,7 +4,6 @@ import { useConnectWallet, useWebContext, } from '@webb-tools/api-provider-environment'; -import { isSubstrateAddress } from '@webb-tools/dapp-types'; import { ActionsDropdown, Button, @@ -12,16 +11,32 @@ import { TableAndChartTabs, useCheckMobile, } from '@webb-tools/webb-ui-components'; -import { type FC, useEffect, useMemo, useRef, useState } from 'react'; +import { TANGLE_DOCS_URL } from '@webb-tools/webb-ui-components/constants'; +import { + type FC, + useCallback, + useEffect, + useMemo, + useRef, + useState, +} from 'react'; -import { DelegatorTable, TableStatus } from '../../components'; +import { + ContainerSkeleton, + NominationsTable, + PayoutTable, + TableStatus, +} from '../../components'; import useNominations from '../../data/NominationsPayouts/useNominations'; import usePayouts from '../../data/NominationsPayouts/usePayouts'; -import useIsFirstTimeNominator from '../../hooks/useIsFirstTimeNominator'; -import useNetworkState from '../../hooks/useNetworkState'; +import useIsBondedOrNominating from '../../data/staking/useIsBondedOrNominating'; +import useApi from '../../hooks/useApi'; import useQueryParamKey from '../../hooks/useQueryParamKey'; -import { DelegationsAndPayoutsTab, Payout, QueryParamKey } from '../../types'; -import { evmToSubstrateAddress } from '../../utils'; +import { + DelegationsAndPayoutsTab as NominationsAndPayoutsTab, + Payout, + QueryParamKey, +} from '../../types'; import { DelegateTxContainer } from '../DelegateTxContainer'; import { PayoutAllTxContainer } from '../PayoutAllTxContainer'; import { StopNominationTxContainer } from '../StopNominationTxContainer'; @@ -30,16 +45,16 @@ import { UpdatePayeeTxContainer } from '../UpdatePayeeTxContainer'; const PAGE_SIZE = 10; -function assertTab(tab: string): DelegationsAndPayoutsTab { +function assertTab(tab: string): NominationsAndPayoutsTab { if ( - !Object.values(DelegationsAndPayoutsTab).includes( - tab as DelegationsAndPayoutsTab + !Object.values(NominationsAndPayoutsTab).includes( + tab as NominationsAndPayoutsTab ) ) { throw new Error(`Invalid tab: ${tab}`); } - return tab as DelegationsAndPayoutsTab; + return tab as NominationsAndPayoutsTab; } const DelegationsPayoutsContainer: FC = () => { @@ -51,7 +66,17 @@ const DelegationsPayoutsContainer: FC = () => { const [isPayoutAllModalOpen, setIsPayoutAllModalOpen] = useState(false); const [isUpdatePayeeModalOpen, setIsUpdatePayeeModalOpen] = useState(false); - const { network } = useNetworkState(); + const { result: historyDepth } = useApi( + useCallback(async (api) => api.consts.staking.historyDepth.toBn(), []) + ); + + const { result: progress } = useApi( + useCallback((api) => api.derive.session.progress(), []) + ); + + const { result: epochDuration } = useApi( + useCallback(async (api) => api.consts.babe.epochDuration.toNumber(), []) + ); const { value: queryParamsTab } = useQueryParamKey( QueryParamKey.DELEGATIONS_AND_PAYOUTS_TAB @@ -61,7 +86,7 @@ const DelegationsPayoutsContainer: FC = () => { // Default to the nominations tab if no matching browser URL // hash is present. const [activeTab, setActiveTab] = useState( - queryParamsTab ?? DelegationsAndPayoutsTab.NOMINATIONS + queryParamsTab ?? NominationsAndPayoutsTab.NOMINATIONS ); const [isUpdateNominationsModalOpen, setIsUpdateNominationsModalOpen] = @@ -70,46 +95,32 @@ const DelegationsPayoutsContainer: FC = () => { const [isStopNominationModalOpen, setIsStopNominationModalOpen] = useState(false); - const substrateAddress = useMemo(() => { - if (!activeAccount?.address) { - return ''; - } else if (isSubstrateAddress(activeAccount?.address)) { - return activeAccount.address; - } + const nomineesOpt = useNominations(); + const isBondedOrNominating = useIsBondedOrNominating(); + const { data: payoutsData } = usePayouts(); - return evmToSubstrateAddress(activeAccount.address); - }, [activeAccount?.address]); + const currentNominationAddresses = useMemo(() => { + if (nomineesOpt === null) { + return null; + } - const { data: delegatorsData } = useNominations(substrateAddress); - const { isFirstTimeNominator } = useIsFirstTimeNominator(); - const { data: payoutsData } = usePayouts(substrateAddress); + return nomineesOpt.map((nominees) => + nominees.map((nominee) => nominee.address) + ); + }, [nomineesOpt]); - const currentNominations = useMemo(() => { - if (!delegatorsData?.delegators) { - return []; + const fetchedPayouts = useMemo(() => { + if (payoutsData !== null) { + setPayouts(payoutsData); + return payoutsData; } + }, [payoutsData]); - return delegatorsData.delegators.map((delegator) => delegator.address); - }, [delegatorsData?.delegators]); - - // const { valueAfterMount: cachedPayouts } = useLocalStorage( - // LocalStorageKey.Payouts, - // true - // ); - - // const fetchedPayouts = useMemo(() => { - // if (payoutsData !== null) { - // return payoutsData.payouts; - // } else if (cachedPayouts) { - // return cachedPayouts[substrateAddress] ?? []; - // } - // }, [cachedPayouts, payoutsData, substrateAddress]); - - const fetchedNominations = useMemo(() => { - if (delegatorsData !== null) { - return delegatorsData.delegators; + useEffect(() => { + if (updatedPayouts.length > 0) { + setPayouts(updatedPayouts); } - }, [delegatorsData]); + }, [updatedPayouts]); // Scroll to the table when the tab changes, or when the page // is first loaded with a tab query parameter present. @@ -121,19 +132,11 @@ const DelegationsPayoutsContainer: FC = () => { tableRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [queryParamsTab]); - useEffect(() => { - if (updatedPayouts.length > 0) { - setPayouts(updatedPayouts); - } else if (payoutsData && payoutsData.payouts) { - setPayouts(payoutsData.payouts); - } - }, [payoutsData, updatedPayouts]); - const validatorAndEras = useMemo( () => payouts.map((payout) => ({ - validatorAddress: payout.validator.address, - era: payout.era.toString(), + validatorSubstrateAddress: payout.validator.address, + era: payout.era, })), [payouts] ); @@ -154,11 +157,11 @@ const DelegationsPayoutsContainer: FC = () => { setActiveTab(assertTab(tabString))} - tabs={[...Object.values(DelegationsAndPayoutsTab)]} + tabs={[...Object.values(NominationsAndPayoutsTab)]} headerClassName="w-full overflow-x-auto" filterComponent={ - activeAccount?.address && !isFirstTimeNominator ? ( - activeTab === DelegationsAndPayoutsTab.NOMINATIONS ? ( + activeAccount?.address && isBondedOrNominating ? ( + activeTab === NominationsAndPayoutsTab.NOMINATIONS ? ( setIsUpdateNominationsModalOpen(true) @@ -173,7 +176,7 @@ const DelegationsPayoutsContainer: FC = () => { - {isFirstTimeNominator && ( + {/* Only allow nominator setup if not already nominating or bonded */} + {isBondedOrNominating === false && (
    - {!isFirstTimeNominator ? ( + {isBondedOrNominating === true ? ( <> -
    +
    -
    +
    - {isDelegateModalOpen && ( - - )} + = ({ @@ -27,9 +25,6 @@ const PayoutAllTxContainer: FC = ({ updatePayouts, }) => { const { activeAccount } = useWebContext(); - const executeTx = useExecuteTxWithNotification(); - const { rpcEndpoint } = useNetworkStore(); - const [isPayoutAllTxLoading, setIsPayoutAllTxLoading] = useState(false); const walletAddress = useMemo(() => { if (!activeAccount?.address) { @@ -39,15 +34,17 @@ const PayoutAllTxContainer: FC = ({ return activeAccount.address; }, [activeAccount?.address]); - const continueToSignAndSubmitTx = validatorsAndEras.length > 0; - const payoutValidatorsAndEras = useMemo( () => validatorsAndEras.slice(0, 10), [validatorsAndEras] ); const allValidators = useMemo( - () => [...new Set(payoutValidatorsAndEras.map((v) => v.validatorAddress))], + () => [ + ...new Set( + payoutValidatorsAndEras.map((v) => v.validatorSubstrateAddress) + ), + ], [payoutValidatorsAndEras] ); @@ -58,51 +55,43 @@ const PayoutAllTxContainer: FC = ({ }, [payoutValidatorsAndEras]); const closeModal = useCallback(() => { - setIsPayoutAllTxLoading(false); setIsModalOpen(false); }, [setIsModalOpen]); - const submitAndSignTx = useCallback(async () => { - setIsPayoutAllTxLoading(true); - - try { - await executeTx( - () => batchPayoutStakersEvm(walletAddress, payoutValidatorsAndEras), - () => - batchPayoutStakersSubstrate( - rpcEndpoint, - walletAddress, - payoutValidatorsAndEras - ), - `Successfully claimed rewards for all stakers!`, - 'Failed to payout all stakers!' - ); - - const updatedPayouts = payouts.filter( - (payout) => - !payoutValidatorsAndEras.find( - (v) => - v.validatorAddress === payout.validator.address && - v.era === payout.era.toString() - ) - ); - - updatePayouts(updatedPayouts); - } catch { - setIsPayoutAllTxLoading(false); - } finally { - closeModal(); + const { execute: executePayoutAllTx, status: payoutAllTxStatus } = + usePayoutAllTx(); + + const submitTx = useCallback(async () => { + if (executePayoutAllTx === null) { + return; } + + await executePayoutAllTx({ + validatorEraPairs: payoutValidatorsAndEras, + }); + + const updatedPayouts = payouts.filter( + (payout) => + !payoutValidatorsAndEras.find( + (v) => + v.validatorSubstrateAddress === payout.validator.address && + v.era === payout.era + ) + ); + + updatePayouts(updatedPayouts); + closeModal(); }, [ - executeTx, + executePayoutAllTx, + payoutValidatorsAndEras, payouts, updatePayouts, - walletAddress, - payoutValidatorsAndEras, - rpcEndpoint, closeModal, ]); + const canSubmitTx = + validatorsAndEras.length > 0 && executePayoutAllTx !== null; + return ( = ({ diff --git a/apps/tangle-dapp/containers/PayoutAllTxContainer/types.ts b/apps/tangle-dapp/containers/PayoutAllTxContainer/types.ts index 14d534d39b..c96e08f4b2 100644 --- a/apps/tangle-dapp/containers/PayoutAllTxContainer/types.ts +++ b/apps/tangle-dapp/containers/PayoutAllTxContainer/types.ts @@ -1,8 +1,8 @@ import { Payout } from '../../types'; export type PayoutTxProps = { - validatorAddress: string; - era: string; + validatorSubstrateAddress: string; + era: number; }; export type PayoutAllTxContainerProps = { diff --git a/apps/tangle-dapp/containers/PayoutTxContainer/PayoutTxContainer.tsx b/apps/tangle-dapp/containers/PayoutTxContainer/PayoutTxContainer.tsx index 433b68bef7..a31ec85102 100644 --- a/apps/tangle-dapp/containers/PayoutTxContainer/PayoutTxContainer.tsx +++ b/apps/tangle-dapp/containers/PayoutTxContainer/PayoutTxContainer.tsx @@ -11,26 +11,20 @@ import { Typography, } from '@webb-tools/webb-ui-components'; import { WEBB_TANGLE_DOCS_STAKING_URL } from '@webb-tools/webb-ui-components/constants'; -import { type FC, useCallback, useMemo, useState } from 'react'; +import { type FC, useCallback, useMemo } from 'react'; -import useNetworkStore from '../../context/useNetworkStore'; -import useExecuteTxWithNotification from '../../hooks/useExecuteTxWithNotification'; -import { payoutStakers as payoutStakersEvm } from '../../utils/evm'; -import { payoutStakers as payoutStakersSubstrate } from '../../utils/polkadot'; +import usePayoutStakersTx from '../../data/payouts/usePayoutStakersTx'; +import { TxStatus } from '../../hooks/useSubstrateTx'; import { PayoutTxContainerProps } from './types'; const PayoutTxContainer: FC = ({ isModalOpen, setIsModalOpen, - payoutTxProps, + payoutTxProps: { validatorAddress, era }, payouts, updatePayouts, }) => { const { activeAccount } = useWebContext(); - const { validatorAddress, era } = payoutTxProps; - const executeTx = useExecuteTxWithNotification(); - const { rpcEndpoint } = useNetworkStore(); - const [isPayoutTxLoading, setIsPayoutTxLoading] = useState(false); const walletAddress = useMemo(() => { if (!activeAccount?.address) { @@ -40,57 +34,46 @@ const PayoutTxContainer: FC = ({ return activeAccount.address; }, [activeAccount?.address]); - const continueToSignAndSubmitTx = walletAddress && validatorAddress && era; - const closeModal = useCallback(() => { - setIsPayoutTxLoading(false); setIsModalOpen(false); }, [setIsModalOpen]); - const submitAndSignTx = useCallback(async () => { - setIsPayoutTxLoading(true); - - try { - await executeTx( - () => payoutStakersEvm(walletAddress, validatorAddress, Number(era)), - () => - payoutStakersSubstrate( - rpcEndpoint, - walletAddress, - validatorAddress, - Number(era) - ), - `Successfully claimed rewards for Era ${era}.`, - 'Failed to payout stakers!' - ); - - const updatedPayouts = payouts.filter( - (payout) => - !( - payout.era === Number(era) && - payout.validator.address === validatorAddress - ) - ); - - updatePayouts(updatedPayouts); - - closeModal(); - - closeModal(); - } catch { - setIsPayoutTxLoading(false); + const { execute: executePayoutStakersTx, status: payoutStakersTxStatus } = + usePayoutStakersTx(); + + const submitTx = useCallback(async () => { + if (executePayoutStakersTx === null) { + return; } + + await executePayoutStakersTx({ + era, + validatorAddress, + }); + + const updatedPayouts = payouts.filter( + (payout) => + !( + payout.era === Number(era) && + payout.validator.address === validatorAddress + ) + ); + + updatePayouts(updatedPayouts); + closeModal(); }, [ closeModal, era, - executeTx, + executePayoutStakersTx, payouts, - rpcEndpoint, updatePayouts, validatorAddress, - walletAddress, ]); + // TODO: This validation doesn't make much sense because the values are never null or undefined, so why are they being used as booleans? In fact, the variable's inferred type is not a boolean. + const canSubmitTx = + walletAddress && validatorAddress && era && executePayoutStakersTx !== null; + return ( = ({ diff --git a/apps/tangle-dapp/containers/PayoutTxContainer/types.ts b/apps/tangle-dapp/containers/PayoutTxContainer/types.ts index 235182af0a..afd8c9f88f 100644 --- a/apps/tangle-dapp/containers/PayoutTxContainer/types.ts +++ b/apps/tangle-dapp/containers/PayoutTxContainer/types.ts @@ -2,7 +2,7 @@ import { Payout } from '../../types'; export type PayoutTxProps = { validatorAddress: string; - era: string; + era: number; }; export type PayoutTxContainerProps = { diff --git a/apps/tangle-dapp/containers/RebondTxContainer/RebondTxContainer.tsx b/apps/tangle-dapp/containers/RebondTxContainer/RebondTxContainer.tsx index 1e4bca0c61..032d2effa8 100644 --- a/apps/tangle-dapp/containers/RebondTxContainer/RebondTxContainer.tsx +++ b/apps/tangle-dapp/containers/RebondTxContainer/RebondTxContainer.tsx @@ -1,8 +1,6 @@ 'use client'; import { BN, BN_ZERO } from '@polkadot/util'; -import { useWebContext } from '@webb-tools/api-provider-environment'; -import { isSubstrateAddress } from '@webb-tools/dapp-types'; import { Button, Modal, @@ -10,84 +8,31 @@ import { ModalFooter, ModalHeader, Typography, - useWebbUI, } from '@webb-tools/webb-ui-components'; import { WEBB_TANGLE_DOCS_STAKING_URL } from '@webb-tools/webb-ui-components/constants'; import Link from 'next/link'; -import { type FC, useCallback, useMemo, useState } from 'react'; +import { type FC, useCallback, useState } from 'react'; import { BondedTokensBalanceInfo } from '../../components'; import AmountInput from '../../components/AmountInput/AmountInput'; -import useNetworkStore from '../../context/useNetworkStore'; -import useTotalUnbondedAndUnbondingAmount from '../../data/NominatorStats/useTotalUnbondedAndUnbondingAmount'; -import useUnbondingAmountSubscription from '../../data/NominatorStats/useUnbondingAmountSubscription'; -import useExecuteTxWithNotification from '../../hooks/useExecuteTxWithNotification'; -import { evmToSubstrateAddress } from '../../utils'; -import { rebondTokens as rebondTokensEvm } from '../../utils/evm'; -import formatBnToDisplayAmount from '../../utils/formatBnToDisplayAmount'; -import { rebondTokens as rebondTokensSubstrate } from '../../utils/polkadot'; +import useUnbondedAmount from '../../data/NominatorStats/useUnbondedAmount'; +import useUnbondingAmount from '../../data/NominatorStats/useUnbondingAmount'; +import useRebondTx from '../../data/staking/useRebondTx'; +import { TxStatus } from '../../hooks/useSubstrateTx'; import { RebondTxContainerProps } from './types'; const RebondTxContainer: FC = ({ isModalOpen, setIsModalOpen, }) => { - const { notificationApi } = useWebbUI(); - const { activeAccount } = useWebContext(); - const executeTx = useExecuteTxWithNotification(); - const { rpcEndpoint, nativeTokenSymbol } = useNetworkStore(); - const [amountToRebond, setAmountToRebond] = useState(null); - const [isRebondTxLoading, setIsRebondTxLoading] = useState(false); const [hasErrors, setHasErrors] = useState(false); - const walletAddress = useMemo(() => { - if (!activeAccount?.address) { - return '0x0'; - } - - return activeAccount.address; - }, [activeAccount?.address]); - - const substrateAddress = useMemo(() => { - if (!activeAccount?.address) { - return ''; - } - - if (isSubstrateAddress(activeAccount?.address)) - return activeAccount.address; - - return evmToSubstrateAddress(activeAccount.address); - }, [activeAccount?.address]); - - const { data: unbondingAmountData, error: unbondingAmountError } = - useUnbondingAmountSubscription(substrateAddress); + const { result: totalUnbondingAmount } = useUnbondingAmount(); + const { result: totalUnbondedAmount } = useUnbondedAmount(); + const { execute: executeRebondTx, status: rebondTxStatus } = useRebondTx(); - const { data: totalUnbondedAndUnbondingAmountData } = - useTotalUnbondedAndUnbondingAmount(substrateAddress); - - const remainingUnbondedTokensToRebond = useMemo(() => { - if (unbondingAmountError) { - notificationApi({ - variant: 'error', - message: unbondingAmountError.message, - }); - } - - return unbondingAmountData?.value1 ?? undefined; - }, [notificationApi, unbondingAmountData?.value1, unbondingAmountError]); - - const continueToSignAndSubmitTx = useMemo(() => { - return ( - amountToRebond !== null && - amountToRebond.gt(BN_ZERO) && - !hasErrors && - walletAddress !== '0x0' - ); - }, [amountToRebond, hasErrors, walletAddress]); - - const closeModal = useCallback(() => { - setIsRebondTxLoading(false); + const closeModalAndReset = useCallback(() => { setIsModalOpen(false); setAmountToRebond(null); setHasErrors(false); @@ -100,33 +45,27 @@ const RebondTxContainer: FC = ({ [setHasErrors] ); - const submitAndSignTx = useCallback(async () => { - setIsRebondTxLoading(true); - - try { - if (amountToRebond === null || amountToRebond.eq(BN_ZERO)) { - throw new Error('There is no amount to rebond.'); - } - const rebondAmount = +formatBnToDisplayAmount(amountToRebond); - await executeTx( - () => rebondTokensEvm(walletAddress, rebondAmount), - () => rebondTokensSubstrate(rpcEndpoint, walletAddress, rebondAmount), - `Successfully rebonded ${rebondAmount} ${nativeTokenSymbol}.`, - 'Failed to rebond tokens!' - ); - - closeModal(); - } catch { - setIsRebondTxLoading(false); + const submitTx = useCallback(async () => { + if ( + executeRebondTx === null || + amountToRebond === null || + amountToRebond.isZero() + ) { + return null; } - }, [ - amountToRebond, - closeModal, - executeTx, - rpcEndpoint, - walletAddress, - nativeTokenSymbol, - ]); + + await executeRebondTx({ + amount: amountToRebond, + }); + + closeModalAndReset(); + }, [executeRebondTx, amountToRebond, closeModalAndReset]); + + const canSubmitTx = + amountToRebond !== null && + amountToRebond.gt(BN_ZERO) && + !hasErrors && + executeRebondTx !== null; return ( @@ -135,11 +74,11 @@ const RebondTxContainer: FC = ({ isOpen={isModalOpen} className="w-full max-w-[416px] rounded-2xl bg-mono-0 dark:bg-mono-180" > - + Rebond Funds -
    +
    Rebond to return unbonding or unbonded tokens to staking without withdrawing. @@ -148,39 +87,34 @@ const RebondTxContainer: FC = ({
    - + diff --git a/apps/tangle-dapp/containers/StakingStatsContainer/StakingStatsContainer.tsx b/apps/tangle-dapp/containers/StakingStatsContainer/StakingStatsContainer.tsx deleted file mode 100644 index 6735c0025c..0000000000 --- a/apps/tangle-dapp/containers/StakingStatsContainer/StakingStatsContainer.tsx +++ /dev/null @@ -1,50 +0,0 @@ -'use client'; - -import { ListCheckIcon, TimerLine } from '@webb-tools/icons'; -import { FC, useCallback } from 'react'; - -import PillCard from '../../components/account/PillCard'; -import useNetworkStore from '../../context/useNetworkStore'; -import useStakingPendingRewards from '../../data/staking/useStakingPendingRewards'; -import usePolkadotApi, { PolkadotApiSwrKey } from '../../hooks/usePolkadotApi'; -import { formatTokenBalance } from '../../utils/polkadot/tokens'; - -const StakingStatsContainer: FC = () => { - const { value: currentEra } = usePolkadotApi( - useCallback( - // TODO: Find out under what conditions can `eraOpt` be `None` and handle it. Will need to search in the Substrate codebase for this. Make sure to write a comment explaining the conditions under which `eraOpt` can be `None` here, once it's found. - (api) => - api.query.staking.currentEra().then((eraOpt) => eraOpt.toString()), - [] - ), - PolkadotApiSwrKey.ERA - ); - - const pendingRewards = useStakingPendingRewards(); - const { nativeTokenSymbol } = useNetworkStore(); - - const formattedPendingRewards = - pendingRewards !== null - ? formatTokenBalance(pendingRewards, nativeTokenSymbol) - : null; - - return ( -
    - - - -
    - ); -}; - -export default StakingStatsContainer; diff --git a/apps/tangle-dapp/containers/StakingStatsContainer/index.ts b/apps/tangle-dapp/containers/StakingStatsContainer/index.ts deleted file mode 100644 index 5c7d10c2a6..0000000000 --- a/apps/tangle-dapp/containers/StakingStatsContainer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as StakingStatsContainer } from './StakingStatsContainer'; diff --git a/apps/tangle-dapp/containers/StopNominationTxContainer/StopNominationTxContainer.tsx b/apps/tangle-dapp/containers/StopNominationTxContainer/StopNominationTxContainer.tsx index c3511c2fce..2ae882c2c3 100644 --- a/apps/tangle-dapp/containers/StopNominationTxContainer/StopNominationTxContainer.tsx +++ b/apps/tangle-dapp/containers/StopNominationTxContainer/StopNominationTxContainer.tsx @@ -1,7 +1,5 @@ 'use client'; -import { useWebContext } from '@webb-tools/api-provider-environment'; -import { isSubstrateAddress } from '@webb-tools/dapp-types'; import { ProhibitedLineIcon } from '@webb-tools/icons'; import { Button, @@ -13,72 +11,32 @@ import { } from '@webb-tools/webb-ui-components'; import { WEBB_TANGLE_DOCS_STAKING_URL } from '@webb-tools/webb-ui-components/constants'; import Link from 'next/link'; -import { type FC, useCallback, useMemo, useState } from 'react'; +import { type FC, useCallback } from 'react'; -import useNetworkStore from '../../context/useNetworkStore'; -import useNominations from '../../data/NominationsPayouts/useNominations'; -import useExecuteTxWithNotification from '../../hooks/useExecuteTxWithNotification'; -import { evmToSubstrateAddress } from '../../utils'; -import { stopNomination as stopNominationEvm } from '../../utils/evm'; -import { stopNomination as stopNominationSubstrate } from '../../utils/polkadot'; +import useChillTx from '../../data/staking/useChillTx'; +import useIsNominating from '../../hooks/useIsNominating'; +import { TxStatus } from '../../hooks/useSubstrateTx'; import { StopNominationTxContainerProps } from './types'; const StopNominationTxContainer: FC = ({ isModalOpen, setIsModalOpen, }) => { - const { activeAccount } = useWebContext(); - const executeTx = useExecuteTxWithNotification(); - const { rpcEndpoint } = useNetworkStore(); - - const [isStopNominationTxLoading, setIsStopNominationTxLoading] = - useState(false); - - const walletAddress = useMemo(() => { - if (!activeAccount?.address) { - return '0x0'; - } - - return activeAccount.address; - }, [activeAccount?.address]); - - const substrateAddress = useMemo(() => { - if (!activeAccount?.address) { - return ''; - } - - if (isSubstrateAddress(activeAccount?.address)) - return activeAccount.address; - - return evmToSubstrateAddress(activeAccount.address) ?? ''; - }, [activeAccount?.address]); - - const { data: delegatorsData } = useNominations(substrateAddress); - - const userHasActiveNominations = useMemo(() => { - return delegatorsData?.delegators.length === 0 ? false : true; - }, [delegatorsData?.delegators]); + const { execute: executeChillTx, status: chillTxStatus } = useChillTx(); + const { isNominating } = useIsNominating(); const closeModal = useCallback(() => { - setIsStopNominationTxLoading(false); setIsModalOpen(false); }, [setIsModalOpen]); - const submitAndSignTx = useCallback(async () => { - setIsStopNominationTxLoading(true); - - try { - await executeTx( - () => stopNominationEvm(walletAddress), - () => stopNominationSubstrate(rpcEndpoint, walletAddress), - `Successfully stopped nomination!`, - 'Failed to stop nomination!' - ); - closeModal(); - } catch { - setIsStopNominationTxLoading(false); + const submitTx = useCallback(async () => { + if (executeChillTx === null) { + return null; } - }, [closeModal, executeTx, rpcEndpoint, walletAddress]); + + await executeChillTx(); + closeModal(); + }, [closeModal, executeChillTx]); return ( @@ -104,9 +62,9 @@ const StopNominationTxContainer: FC = ({ diff --git a/apps/tangle-dapp/containers/TransferTxContainer/TransferTxContainer.tsx b/apps/tangle-dapp/containers/TransferTxContainer/TransferTxContainer.tsx index ed9e91e576..824fb13688 100644 --- a/apps/tangle-dapp/containers/TransferTxContainer/TransferTxContainer.tsx +++ b/apps/tangle-dapp/containers/TransferTxContainer/TransferTxContainer.tsx @@ -91,8 +91,8 @@ const TransferTxContainer: FC = ({ const { execute: executeTransferTx, status, - error: txError, reset: resetTransferTx, + error: txError, } = useTransferTx(); // TODO: Likely would ideally want to control this from the parent component. diff --git a/apps/tangle-dapp/containers/TxConfirmationModalContainer/TxConfirmationModalContainer.tsx b/apps/tangle-dapp/containers/TxConfirmationModalContainer/TxConfirmationModalContainer.tsx deleted file mode 100644 index df67f30bd5..0000000000 --- a/apps/tangle-dapp/containers/TxConfirmationModalContainer/TxConfirmationModalContainer.tsx +++ /dev/null @@ -1,21 +0,0 @@ -'use client'; - -import { TxConfirmationModal } from '../../components/TxConfirmationModal'; -import { useTxConfirmationModal } from '../../context/TxConfirmationContext'; - -export const TxConfirmationModalContainer = () => { - const { txConfirmationState, setTxConfirmationState } = - useTxConfirmationModal(); - - return ( - - setTxConfirmationState({ ...txConfirmationState, isOpen }) - } - txStatus={txConfirmationState.status} - txHash={txConfirmationState.hash} - txType={txConfirmationState.txType} - /> - ); -}; diff --git a/apps/tangle-dapp/containers/TxConfirmationModalContainer/index.ts b/apps/tangle-dapp/containers/TxConfirmationModalContainer/index.ts deleted file mode 100644 index 884e9c8d22..0000000000 --- a/apps/tangle-dapp/containers/TxConfirmationModalContainer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './TxConfirmationModalContainer'; diff --git a/apps/tangle-dapp/containers/UnbondTxContainer/UnbondTxContainer.tsx b/apps/tangle-dapp/containers/UnbondTxContainer/UnbondTxContainer.tsx index f343a435f2..93bf3c6648 100644 --- a/apps/tangle-dapp/containers/UnbondTxContainer/UnbondTxContainer.tsx +++ b/apps/tangle-dapp/containers/UnbondTxContainer/UnbondTxContainer.tsx @@ -1,8 +1,6 @@ 'use client'; import { BN, BN_ZERO } from '@polkadot/util'; -import { useWebContext } from '@webb-tools/api-provider-environment'; -import { isSubstrateAddress } from '@webb-tools/dapp-types'; import { Button, Modal, @@ -19,50 +17,27 @@ import { type FC, useCallback, useMemo, useState } from 'react'; import AmountInput from '../../components/AmountInput/AmountInput'; import useNetworkStore from '../../context/useNetworkStore'; import useTotalStakedAmountSubscription from '../../data/NominatorStats/useTotalStakedAmountSubscription'; -import useUnbondingAmountSubscription from '../../data/NominatorStats/useUnbondingAmountSubscription'; -import useExecuteTxWithNotification from '../../hooks/useExecuteTxWithNotification'; -import { evmToSubstrateAddress } from '../../utils'; -import { unBondTokens as unbondTokensEvm } from '../../utils/evm'; -import formatBnToDisplayAmount from '../../utils/formatBnToDisplayAmount'; -import { unbondTokens as unbondTokensSubstrate } from '../../utils/polkadot'; +import useUnbondingAmount from '../../data/NominatorStats/useUnbondingAmount'; +import useUnbondTx from '../../data/staking/useUnbondTx'; +import { TxStatus } from '../../hooks/useSubstrateTx'; import { UnbondTxContainerProps } from './types'; const UnbondTxContainer: FC = ({ isModalOpen, setIsModalOpen, }) => { - const { notificationApi } = useWebbUI(); - const { activeAccount } = useWebContext(); - const executeTx = useExecuteTxWithNotification(); - const { rpcEndpoint, nativeTokenSymbol } = useNetworkStore(); - - const [amountToUnbond, setAmountToUnbond] = useState(null); - const [isUnbondTxLoading, setIsUnbondTxLoading] = useState(false); + const [amount, setAmount] = useState(null); const [hasErrors, setHasErrors] = useState(false); - const walletAddress = useMemo(() => { - if (!activeAccount?.address) { - return '0x0'; - } - - return activeAccount.address; - }, [activeAccount?.address]); - - const substrateAddress = useMemo(() => { - if (!activeAccount?.address) { - return ''; - } else if (isSubstrateAddress(activeAccount?.address)) { - return activeAccount.address; - } - - return evmToSubstrateAddress(activeAccount.address) ?? ''; - }, [activeAccount?.address]); + const { notificationApi } = useWebbUI(); + const { nativeTokenSymbol } = useNetworkStore(); + const { execute: executeUnbondTx, status: unbondTxStatus } = useUnbondTx(); const { data: totalStakedBalanceData, error: totalStakedBalanceError } = - useTotalStakedAmountSubscription(substrateAddress); + useTotalStakedAmountSubscription(); - const { data: unbondingAmountData, error: unbondingAmountError } = - useUnbondingAmountSubscription(substrateAddress); + const { result: unbondingAmount, error: unbondingAmountError } = + useUnbondingAmount(); const totalStakedBalance = useMemo(() => { if (totalStakedBalanceError) { @@ -91,31 +66,27 @@ const UnbondTxContainer: FC = ({ }); } - if (!unbondingAmountData?.value1) { + if (unbondingAmount === null || unbondingAmount.value === null) { return undefined; } - return totalStakedBalance.sub(unbondingAmountData.value1); + return totalStakedBalance.sub(unbondingAmount.value); }, [ notificationApi, totalStakedBalance, - unbondingAmountData?.value1, + unbondingAmount, unbondingAmountError, ]); - const continueToSignAndSubmitTx = useMemo(() => { - return ( - amountToUnbond !== null && - amountToUnbond.gt(BN_ZERO) && - walletAddress !== '0x0' && - !hasErrors - ); - }, [amountToUnbond, hasErrors, walletAddress]); - - const closeModal = useCallback(() => { - setIsUnbondTxLoading(false); + const canSubmitTx = + amount !== null && + amount.gt(BN_ZERO) && + executeUnbondTx !== null && + !hasErrors; + + const closeModalAndReset = useCallback(() => { setIsModalOpen(false); - setAmountToUnbond(null); + setAmount(null); setHasErrors(false); }, [setIsModalOpen]); @@ -126,34 +97,17 @@ const UnbondTxContainer: FC = ({ [setHasErrors] ); - const submitAndSignTx = useCallback(async () => { - setIsUnbondTxLoading(true); - - try { - if (amountToUnbond === null) { - throw new Error('Amount to unbond is required.'); - } - const unbondingAmount = +formatBnToDisplayAmount(amountToUnbond); - await executeTx( - () => unbondTokensEvm(walletAddress, unbondingAmount), - () => - unbondTokensSubstrate(rpcEndpoint, walletAddress, unbondingAmount), - `Successfully unbonded ${unbondingAmount} ${nativeTokenSymbol}.`, - 'Failed to unbond tokens!' - ); - - closeModal(); - } catch { - setIsUnbondTxLoading(false); + const submitTx = useCallback(async () => { + if (executeUnbondTx === null || amount === null) { + return; } - }, [ - amountToUnbond, - closeModal, - executeTx, - rpcEndpoint, - walletAddress, - nativeTokenSymbol, - ]); + + await executeUnbondTx({ + amount: amount, + }); + + closeModalAndReset(); + }, [amount, closeModalAndReset, executeUnbondTx]); return ( @@ -162,21 +116,21 @@ const UnbondTxContainer: FC = ({ isOpen={isModalOpen} className="w-full max-w-[416px] rounded-2xl bg-mono-0 dark:bg-mono-180" > - + Unbond Stake -
    +
    Once unbonding, you must wait certain number of eras for your funds @@ -189,12 +143,12 @@ const UnbondTxContainer: FC = ({
    - + diff --git a/apps/tangle-dapp/containers/UpdateNominationsTxContainer/SelectValidators.tsx b/apps/tangle-dapp/containers/UpdateNominationsTxContainer/SelectValidators.tsx index 6573512b10..505dfa4f18 100644 --- a/apps/tangle-dapp/containers/UpdateNominationsTxContainer/SelectValidators.tsx +++ b/apps/tangle-dapp/containers/UpdateNominationsTxContainer/SelectValidators.tsx @@ -1,32 +1,25 @@ -import { Alert, Typography } from '@webb-tools/webb-ui-components'; -import { type FC } from 'react'; +import { Alert } from '@webb-tools/webb-ui-components'; +import React, { Dispatch, type FC, SetStateAction } from 'react'; -import { ValidatorListTable } from '../../components'; +import ValidatorSelectionTable from '../../components/ValidatorSelectionTable/ValidatorSelectionTable'; import useAllValidators from '../../data/ValidatorTables/useAllValidators'; -import { SelectValidatorsProps } from './types'; + +export type SelectValidatorsProps = { + setSelectedValidators: Dispatch>>; +}; const SelectValidators: FC = ({ - selectedValidators, setSelectedValidators, }) => { const validators = useAllValidators(); return ( -
    - + - - Selected: {selectedValidators.length}/{validators.length} - - = ({ ); }; -export default SelectValidators; +export default React.memo(SelectValidators); diff --git a/apps/tangle-dapp/containers/UpdateNominationsTxContainer/UpdateNominationsTxContainer.tsx b/apps/tangle-dapp/containers/UpdateNominationsTxContainer/UpdateNominationsTxContainer.tsx index 547d2adc26..3240420af4 100644 --- a/apps/tangle-dapp/containers/UpdateNominationsTxContainer/UpdateNominationsTxContainer.tsx +++ b/apps/tangle-dapp/containers/UpdateNominationsTxContainer/UpdateNominationsTxContainer.tsx @@ -1,6 +1,5 @@ 'use client'; -import { useWebContext } from '@webb-tools/api-provider-environment'; import { Alert, Button, @@ -9,60 +8,46 @@ import { ModalFooter, ModalHeader, } from '@webb-tools/webb-ui-components'; -import { type FC, useCallback, useEffect, useMemo, useState } from 'react'; - -import useNetworkStore from '../../context/useNetworkStore'; -import useExecuteTxWithNotification from '../../hooks/useExecuteTxWithNotification'; +import _ from 'lodash'; +import { + type Dispatch, + type FC, + type SetStateAction, + useCallback, + useEffect, + useMemo, + useState, +} from 'react'; + +import useNominateTx from '../../data/staking/useNominateTx'; import useMaxNominationQuota from '../../hooks/useMaxNominationQuota'; -import { nominateValidators as nominateValidatorsEvm } from '../../utils/evm'; -import { nominateValidators as nominateValidatorsSubstrate } from '../../utils/polkadot'; +import { TxStatus } from '../../hooks/useSubstrateTx'; import SelectValidators from './SelectValidators'; -import { UpdateNominationsTxContainerProps } from './types'; + +export type UpdateNominationsTxContainerProps = { + isModalOpen: boolean; + setIsModalOpen: (isModalOpen: boolean) => void; + currentNominations: string[]; +}; const UpdateNominationsTxContainer: FC = ({ isModalOpen, setIsModalOpen, currentNominations, }) => { - const { activeAccount } = useWebContext(); - const executeTx = useExecuteTxWithNotification(); const maxNominationQuota = useMaxNominationQuota(); - const { rpcEndpoint } = useNetworkStore(); + + const { execute: executeNominateTx, status: nominateTxStatus } = + useNominateTx(); const [selectedValidators, setSelectedValidators] = useState(currentNominations); - const [isSubmitAndSignTxLoading, setIsSubmitAndSignTxLoading] = - useState(false); - - const walletAddress = useMemo(() => { - if (!activeAccount?.address) { - return '0x0'; - } - - return activeAccount.address; - }, [activeAccount?.address]); - + // Cannot nominate more than a certain number of validators. const isExceedingMaxNominationQuota = + selectedValidators !== null && selectedValidators.length > maxNominationQuota; - const isReadyToSubmitAndSignTx = useMemo(() => { - if (selectedValidators.length <= 0 || isExceedingMaxNominationQuota) { - return false; - } - - const sortedSelectedValidators = [...selectedValidators].sort(); - const sortedCurrentNominations = [...currentNominations].sort(); - - const areArraysEqual = - sortedSelectedValidators.length === sortedCurrentNominations.length && - sortedSelectedValidators.every( - (val, index) => val === sortedCurrentNominations[index] - ); - - return !areArraysEqual; - }, [currentNominations, isExceedingMaxNominationQuota, selectedValidators]); - // Update the selected validators when the current // nominations prop changes. useEffect(() => { @@ -70,43 +55,59 @@ const UpdateNominationsTxContainer: FC = ({ }, [currentNominations]); const closeModal = useCallback(() => { - setIsSubmitAndSignTxLoading(false); setIsModalOpen(false); setSelectedValidators(currentNominations); }, [currentNominations, setIsModalOpen]); - const submitAndSignTx = useCallback(async () => { - if (!isReadyToSubmitAndSignTx) { + const submitTx = useCallback(async () => { + if (executeNominateTx === null || selectedValidators === null) { return; } - setIsSubmitAndSignTxLoading(true); - - try { - await executeTx( - () => nominateValidatorsEvm(walletAddress, selectedValidators), - () => - nominateValidatorsSubstrate( - rpcEndpoint, - walletAddress, - selectedValidators - ), - `Successfully updated nominations!`, - 'Failed to update nominations!' - ); - closeModal(); - } catch { - setIsSubmitAndSignTxLoading(false); + await executeNominateTx({ + validatorAddresses: selectedValidators, + }); + + closeModal(); + }, [closeModal, executeNominateTx, selectedValidators]); + + const canSubmitTx = useMemo(() => { + if ( + selectedValidators === null || + selectedValidators.length === 0 || + isExceedingMaxNominationQuota + ) { + return false; } + + // Can only submit transaction if the selected validators differ + // from the current nominations. + return ( + !_.isEqual(currentNominations, selectedValidators) && + executeNominateTx !== null + ); }, [ - closeModal, - executeTx, - isReadyToSubmitAndSignTx, - rpcEndpoint, + currentNominations, + executeNominateTx, + isExceedingMaxNominationQuota, selectedValidators, - walletAddress, ]); + // The outer selected validators state is array of string + // but the child select validators state is set of string + // so we need to handle the conversion between set <> array + const handleSelectedValidatorsChange = useCallback< + Dispatch>> + >((nextValueOrUpdater) => { + if (typeof nextValueOrUpdater === 'function') { + setSelectedValidators((prev) => { + return Array.from(nextValueOrUpdater(new Set(prev))); + }); + } else { + setSelectedValidators(Array.from(nextValueOrUpdater)); + } + }, []); + return ( = ({
    {isExceedingMaxNominationQuota && ( @@ -133,16 +133,16 @@ const UpdateNominationsTxContainer: FC = ({ )}
    - + diff --git a/apps/tangle-dapp/containers/UpdatePayeeTxContainer/types.ts b/apps/tangle-dapp/containers/UpdatePayeeTxContainer/types.ts index 5be8ab1856..1c80079ab4 100644 --- a/apps/tangle-dapp/containers/UpdatePayeeTxContainer/types.ts +++ b/apps/tangle-dapp/containers/UpdatePayeeTxContainer/types.ts @@ -1,11 +1,17 @@ +import { + StakingRewardsDestination, + StakingRewardsDestinationDisplayText, +} from '../../types'; +import Optional from '../../utils/Optional'; + export type UpdatePayeeTxContainerProps = { isModalOpen: boolean; setIsModalOpen: (isModalOpen: boolean) => void; }; export type UpdatePayeeProps = { - currentPayee: string | number; - paymentDestinationOptions: string[]; - paymentDestination: string; - setPaymentDestination: (paymentDestination: string) => void; + currentPayee: Optional | null; + payeeOptions: StakingRewardsDestinationDisplayText[]; + selectedPayee: StakingRewardsDestination; + setSelectedPayee: (newPayee: StakingRewardsDestination) => void; }; diff --git a/apps/tangle-dapp/containers/ValidatorTablesContainer/ValidatorTablesContainer.tsx b/apps/tangle-dapp/containers/ValidatorTablesContainer/ValidatorTablesContainer.tsx index 6cb6d29c6f..3d4077e62b 100644 --- a/apps/tangle-dapp/containers/ValidatorTablesContainer/ValidatorTablesContainer.tsx +++ b/apps/tangle-dapp/containers/ValidatorTablesContainer/ValidatorTablesContainer.tsx @@ -46,7 +46,7 @@ const ValidatorTablesContainer = () => { {waitingValidatorsData !== null && waitingValidatorsData.length === 0 ? ( { ) : isWaitingValidatorsLoading ? ( ) : ( - + )} diff --git a/apps/tangle-dapp/containers/WalletAndChainContainer/WalletAndChainContainer.tsx b/apps/tangle-dapp/containers/WalletAndChainContainer/WalletAndChainContainer.tsx index fdf2632786..a30463fe1f 100644 --- a/apps/tangle-dapp/containers/WalletAndChainContainer/WalletAndChainContainer.tsx +++ b/apps/tangle-dapp/containers/WalletAndChainContainer/WalletAndChainContainer.tsx @@ -15,6 +15,7 @@ import dynamic from 'next/dynamic'; import { type FC } from 'react'; import { WalletDropdown } from '../../components'; +import UpdateMetadataButton from '../../components/UpdateMetadataButton'; const NetworkSelectionButton = dynamic( () => import('../../components/NetworkSelector/NetworkSelectionButton'), @@ -58,11 +59,15 @@ const WalletAndChainContainer: FC = () => { ) ) : ( - +
    + + + +
    )}
    diff --git a/apps/tangle-dapp/containers/WalletModalContainer/WalletModalContainer.tsx b/apps/tangle-dapp/containers/WalletModalContainer/WalletModalContainer.tsx index 36bdf301d3..1f287a5168 100644 --- a/apps/tangle-dapp/containers/WalletModalContainer/WalletModalContainer.tsx +++ b/apps/tangle-dapp/containers/WalletModalContainer/WalletModalContainer.tsx @@ -77,26 +77,24 @@ const networkToTypedChainIds = (network: Network) => { evm: PresetTypedChainId.TangleMainnetEVM, substrate: PresetTypedChainId.TangleMainnetNative, }; - case NetworkId.TANGLE_TESTNET: case NetworkId.TANGLE_LOCAL_DEV: return { evm: PresetTypedChainId.TangleTestnetEVM, substrate: PresetTypedChainId.TangleTestnetNative, }; - case NetworkId.CUSTOM: { - if (typeof network.chainId !== 'number') { + if (typeof network.evmChainId !== 'number') { return; } return { - evm: calculateTypedChainId(ChainType.EVM, network.chainId), - substrate: calculateTypedChainId(ChainType.Substrate, network.chainId), + evm: calculateTypedChainId(ChainType.EVM, network.evmChainId), + substrate: calculateTypedChainId( + ChainType.Substrate, + network.evmChainId + ), }; } - - default: - return; } }; diff --git a/apps/tangle-dapp/containers/WithdrawUnbondedTxContainer/WithdrawUnbondedTxContainer.tsx b/apps/tangle-dapp/containers/WithdrawUnbondedTxContainer/WithdrawUnbondedTxContainer.tsx index 79360fa8ed..2d86c18cf2 100644 --- a/apps/tangle-dapp/containers/WithdrawUnbondedTxContainer/WithdrawUnbondedTxContainer.tsx +++ b/apps/tangle-dapp/containers/WithdrawUnbondedTxContainer/WithdrawUnbondedTxContainer.tsx @@ -1,8 +1,6 @@ 'use client'; import { BN_ZERO } from '@polkadot/util'; -import { useWebContext } from '@webb-tools/api-provider-environment'; -import { isSubstrateAddress } from '@webb-tools/dapp-types'; import { Button, Modal, @@ -10,18 +8,14 @@ import { ModalFooter, ModalHeader, Typography, - useWebbUI, } from '@webb-tools/webb-ui-components'; -import { type FC, useCallback, useMemo, useState } from 'react'; +import { type FC, useCallback, useState } from 'react'; import { BondedTokensBalanceInfo } from '../../components/BondedTokensBalanceInfo'; -import useNetworkStore from '../../context/useNetworkStore'; -import useTotalUnbondedAndUnbondingAmount from '../../data/NominatorStats/useTotalUnbondedAndUnbondingAmount'; -import useExecuteTxWithNotification from '../../hooks/useExecuteTxWithNotification'; -import { evmToSubstrateAddress } from '../../utils'; -import { withdrawUnbondedTokens as withdrawUnbondedTokensEvm } from '../../utils/evm'; -import { withdrawUnbondedTokens as withdrawUnbondedTokensSubstrate } from '../../utils/polkadot'; -import { getSlashingSpans } from '../../utils/polkadot'; +import useUnbondedAmount from '../../data/NominatorStats/useUnbondedAmount'; +import useUnbondingAmount from '../../data/NominatorStats/useUnbondingAmount'; +import useWithdrawUnbondedTx from '../../data/staking/useWithdrawUnbondedTx'; +import { TxStatus } from '../../hooks/useSubstrateTx'; import { RebondTxContainer } from '../RebondTxContainer'; import { WithdrawUnbondedTxContainerProps } from './types'; @@ -29,110 +23,37 @@ const WithdrawUnbondedTxContainer: FC = ({ isModalOpen, setIsModalOpen, }) => { - const { notificationApi } = useWebbUI(); - const { activeAccount } = useWebContext(); - const executeTx = useExecuteTxWithNotification(); const [isRebondModalOpen, setIsRebondModalOpen] = useState(false); - const { rpcEndpoint } = useNetworkStore(); - const [isWithdrawUnbondedTxLoading, setIsWithdrawUnbondedTxLoading] = - useState(false); - - const walletAddress = useMemo(() => { - if (!activeAccount?.address) { - return '0x0'; - } - - return activeAccount.address; - }, [activeAccount?.address]); - - const substrateAddress = useMemo(() => { - if (!activeAccount?.address) return ''; - - if (isSubstrateAddress(activeAccount?.address)) - return activeAccount.address; - - return evmToSubstrateAddress(activeAccount.address) ?? ''; - }, [activeAccount?.address]); - - const { - data: totalUnbondedAndUnbondingAmountData, - error: totalUnbondedAndUnbondingAmountError, - } = useTotalUnbondedAndUnbondingAmount(substrateAddress); - - const totalUnbondedAmountAvailableToWithdraw = useMemo(() => { - if (totalUnbondedAndUnbondingAmountError) { - notificationApi({ - variant: 'error', - message: totalUnbondedAndUnbondingAmountError.message, - }); - } - - if (!totalUnbondedAndUnbondingAmountData?.value1?.unbonded) - return undefined; - - return totalUnbondedAndUnbondingAmountData.value1.unbonded; - }, [ - notificationApi, - totalUnbondedAndUnbondingAmountData, - totalUnbondedAndUnbondingAmountError, - ]); - - const continueToSignAndSubmitTx = useMemo(() => { - return totalUnbondedAmountAvailableToWithdraw && - totalUnbondedAmountAvailableToWithdraw.gt(BN_ZERO) && - walletAddress !== '0x0' - ? true - : false; - }, [totalUnbondedAmountAvailableToWithdraw, walletAddress]); + const { result: totalUnbondedAmount } = useUnbondedAmount(); + const { result: totalUnbondingAmount } = useUnbondingAmount(); const closeModal = useCallback(() => { - setIsWithdrawUnbondedTxLoading(false); setIsModalOpen(false); }, [setIsModalOpen]); - const submitAndSignTx = useCallback(async () => { - setIsWithdrawUnbondedTxLoading(true); - - try { - await executeTx( - async () => { - const slashingSpans = await getSlashingSpans( - rpcEndpoint, - substrateAddress - ); - - return withdrawUnbondedTokensEvm( - walletAddress, - Number(slashingSpans) - ); - }, - async () => { - const slashingSpans = await getSlashingSpans( - rpcEndpoint, - substrateAddress - ); - - return withdrawUnbondedTokensSubstrate( - rpcEndpoint, - walletAddress, - Number(slashingSpans) - ); - }, - `Successfully withdraw!`, - 'Failed to withdraw tokens!' - ); - - closeModal(); - } catch { - setIsWithdrawUnbondedTxLoading(false); + const { + execute: executeWithdrawUnbondedTx, + status: withdrawUnbondedTxStatus, + } = useWithdrawUnbondedTx(totalUnbondedAmount?.value ?? null); + + const submitTx = useCallback(async () => { + if (executeWithdrawUnbondedTx === null) { + return; } - }, [closeModal, executeTx, rpcEndpoint, substrateAddress, walletAddress]); - const onRebondClick = () => { + await executeWithdrawUnbondedTx(); + closeModal(); + }, [closeModal, executeWithdrawUnbondedTx]); + + const onRebondClick = useCallback(() => { closeModal(); setIsRebondModalOpen(true); - }; + }, [closeModal]); + + const canSubmitTx = + totalUnbondedAmount?.value?.isZero() === false && + executeWithdrawUnbondedTx !== null; return ( <> @@ -154,18 +75,12 @@ const WithdrawUnbondedTxContainer: FC = ({
    @@ -173,9 +88,9 @@ const WithdrawUnbondedTxContainer: FC = ({ diff --git a/apps/tangle-dapp/containers/index.ts b/apps/tangle-dapp/containers/index.ts index a876d96cac..89512b977d 100644 --- a/apps/tangle-dapp/containers/index.ts +++ b/apps/tangle-dapp/containers/index.ts @@ -6,7 +6,6 @@ export { Layout } from './Layout'; export * from './NominationsPayoutsContainer'; export * from './NominatorStatsContainer'; export * from './RebondTxContainer'; -export * from './TxConfirmationModalContainer'; export * from './UnbondTxContainer'; export * from './UpdatePayeeTxContainer'; export * from './ValidatorTablesContainer'; diff --git a/apps/tangle-dapp/context/BalancesContext.tsx b/apps/tangle-dapp/context/BalancesContext.tsx new file mode 100644 index 0000000000..3113bcf030 --- /dev/null +++ b/apps/tangle-dapp/context/BalancesContext.tsx @@ -0,0 +1,25 @@ +'use client'; + +import { createContext, FC, PropsWithChildren, useContext } from 'react'; + +import useBalances from '../data/balances/useBalances'; + +const BalanceContext = createContext>({ + free: null, + transferable: null, + locked: null, + isLoading: false, + error: null, +}); + +export const useBalancesContext = () => useContext(BalanceContext); + +export const BalancesProvider: FC = ({ children }) => { + const balances = useBalances(); + + return ( + + {children} + + ); +}; diff --git a/apps/tangle-dapp/context/BridgeContext.tsx b/apps/tangle-dapp/context/BridgeContext.tsx new file mode 100644 index 0000000000..f6d50dae81 --- /dev/null +++ b/apps/tangle-dapp/context/BridgeContext.tsx @@ -0,0 +1,194 @@ +'use client'; + +import { BN } from '@polkadot/util'; +import { chainsConfig } from '@webb-tools/dapp-config/chains/chain-config'; +import { ChainConfig } from '@webb-tools/dapp-config/chains/chain-config.interface'; +import { calculateTypedChainId } from '@webb-tools/sdk-core/typed-chain-id'; +import assert from 'assert'; +import { + createContext, + FC, + PropsWithChildren, + useContext, + useEffect, + useMemo, + useState, +} from 'react'; + +import { BRIDGE } from '../constants/bridge'; +import { BridgeTokenId } from '../types/bridge'; + +const BRIDGE_SOURCE_CHAIN_OPTIONS = Object.keys(BRIDGE).map( + (presetTypedChainId) => chainsConfig[+presetTypedChainId] +); + +const DEFAULT_DESTINATION_CHAIN_OPTIONS = Object.keys( + BRIDGE_SOURCE_CHAIN_OPTIONS[0] +).map((presetTypedChainId) => chainsConfig[+presetTypedChainId]); + +const DEFAULT_TOKEN_OPTIONS = Object.values(Object.values(BRIDGE)[0])[0] + .supportedTokens; + +interface BridgeContextProps { + selectedSourceChain: ChainConfig; + setSelectedSourceChain: (chain: ChainConfig) => void; + sourceChainOptions: ChainConfig[]; + + selectedDestinationChain: ChainConfig; + setSelectedDestinationChain: (chain: ChainConfig) => void; + destinationChainOptions: ChainConfig[]; + + destinationAddress: string; + setDestinationAddress: (address: string) => void; + + amount: BN | null; + setAmount: (amount: BN | null) => void; + + selectedTokenId: BridgeTokenId; + setSelectedTokenId: (token: BridgeTokenId) => void; + tokenIdOptions: BridgeTokenId[]; +} + +const BridgeContext = createContext({ + selectedSourceChain: BRIDGE_SOURCE_CHAIN_OPTIONS[0], + setSelectedSourceChain: () => { + return; + }, + sourceChainOptions: BRIDGE_SOURCE_CHAIN_OPTIONS, + + selectedDestinationChain: DEFAULT_DESTINATION_CHAIN_OPTIONS[0], + setSelectedDestinationChain: () => { + return; + }, + destinationChainOptions: DEFAULT_DESTINATION_CHAIN_OPTIONS, + + destinationAddress: '', + setDestinationAddress: () => { + return; + }, + + amount: null, + setAmount: () => { + return; + }, + + selectedTokenId: DEFAULT_TOKEN_OPTIONS[0], + setSelectedTokenId: () => { + return; + }, + tokenIdOptions: DEFAULT_TOKEN_OPTIONS, +}); + +export const useBridge = () => { + return useContext(BridgeContext); +}; + +const BridgeProvider: FC = ({ children }) => { + const [selectedSourceChain, setSelectedSourceChain] = useState( + BRIDGE_SOURCE_CHAIN_OPTIONS[0] + ); + + const selectedSourcePresetTypedChainId = useMemo( + () => + calculateTypedChainId( + selectedSourceChain.chainType, + selectedSourceChain.id + ), + [selectedSourceChain.chainType, selectedSourceChain.id] + ); + + const destinationChainOptions = useMemo( + () => + Object.keys(BRIDGE[selectedSourcePresetTypedChainId]).map( + (presetTypedChainId) => chainsConfig[+presetTypedChainId] + ), + [selectedSourcePresetTypedChainId] + ); + + assert(destinationChainOptions.length > 0, 'No destination chain options'); + + const [selectedDestinationChain, setSelectedDestinationChain] = + useState(destinationChainOptions[0]); + + const selectedDestinationPresetTypedChainId = useMemo( + () => + calculateTypedChainId( + selectedDestinationChain.chainType, + selectedDestinationChain.id + ), + [selectedDestinationChain.chainType, selectedDestinationChain.id] + ); + + const [destinationAddress, setDestinationAddress] = useState(''); + const [amount, setAmount] = useState(null); + + const tokenIdOptions = useMemo( + () => + BRIDGE[selectedSourcePresetTypedChainId][ + selectedDestinationPresetTypedChainId + ]?.supportedTokens ?? + Object.values(BRIDGE[selectedSourcePresetTypedChainId])[0] + .supportedTokens, + [selectedSourcePresetTypedChainId, selectedDestinationPresetTypedChainId] + ); + + const [selectedTokenId, setSelectedTokenId] = useState( + tokenIdOptions[0] + ); + + useEffect(() => { + // If current destination chain is not in the destination chain options, + // set the first option as the destination chain. + if ( + !destinationChainOptions.find( + (chain) => + calculateTypedChainId(chain.chainType, chain.id) === + calculateTypedChainId( + selectedDestinationChain.chainType, + selectedDestinationChain.id + ) + ) + ) { + setSelectedDestinationChain(destinationChainOptions[0]); + } + }, [ + destinationChainOptions, + selectedDestinationChain.id, + selectedDestinationChain.chainType, + ]); + + useEffect(() => { + // If current token is not in the token options, set the first option as the token. + if (!tokenIdOptions.find((tokenId) => tokenId === selectedTokenId)) { + setSelectedTokenId(tokenIdOptions[0]); + } + }, [selectedTokenId, tokenIdOptions]); + + return ( + + {children} + + ); +}; + +export default BridgeProvider; diff --git a/apps/tangle-dapp/context/RestakeContext.tsx b/apps/tangle-dapp/context/RestakeContext.tsx index 89145787a7..800b6a5961 100644 --- a/apps/tangle-dapp/context/RestakeContext.tsx +++ b/apps/tangle-dapp/context/RestakeContext.tsx @@ -4,22 +4,29 @@ import { Option } from '@polkadot/types'; import { PalletRolesRestakingLedger } from '@polkadot/types/lookup'; import { createContext, FC, PropsWithChildren } from 'react'; -import useRestakingEarnings, { - EarningRecord, -} from '../data/restaking/useRestakingEarnings'; +import type { EarningRecord } from '../data/restaking/types'; +import useRestakingEarnings from '../data/restaking/useRestakingEarnings'; import useRestakingRoleLedger from '../data/restaking/useRestakingRoleLedger'; import useSubstrateAddress from '../hooks/useSubstrateAddress'; -export const RestakeContext = createContext({ - ledger: null as Option | null, - earningsRecord: null as EarningRecord | null, +interface RestakeContextProps { + ledger: Option | null; + earningsRecord: EarningRecord | null; + isLoading: boolean; +} + +export const RestakeContext = createContext({ + ledger: null, + earningsRecord: null, isLoading: true, }); const RestakeProvider: FC = ({ children }) => { const substrateAddress = useSubstrateAddress(); - const { data: ledger, isLoading: isLedgerLoading } = + + const { result: ledger, isLoading: isLedgerLoading } = useRestakingRoleLedger(substrateAddress); + const { data: earningsRecord, isLoading: isEarningsLoading } = useRestakingEarnings(substrateAddress); diff --git a/apps/tangle-dapp/context/ServiceDetailsContext.tsx b/apps/tangle-dapp/context/ServiceDetailsContext.tsx new file mode 100644 index 0000000000..b3ec5ada34 --- /dev/null +++ b/apps/tangle-dapp/context/ServiceDetailsContext.tsx @@ -0,0 +1,46 @@ +'use client'; + +import { Option, u64 } from '@polkadot/types'; +import { TanglePrimitivesJobsJobInfo } from '@polkadot/types/lookup'; +import { createContext, FC, PropsWithChildren, useCallback } from 'react'; + +import useApi, { ApiFetcher } from '../hooks/useApi'; +import { Service } from '../types'; +import { extractServiceDetails } from '../utils/polkadot'; + +export const ServiceDetailsContext = createContext<{ + serviceDetails: Service | null; + isLoading: boolean; +}>({ + serviceDetails: null, + isLoading: true, +}); + +const ServiceDetailsProvider: FC> = ({ + children, + serviceId, +}) => { + const servicesFetcher = useCallback>( + async (api) => { + const jobInfoData = (await api.query.jobs.submittedJobs( + // no provided type here, only Id + null, + new u64(api.registry, BigInt(serviceId)) + )) as Option; // Data is returned as Codec type here + return extractServiceDetails(serviceId, jobInfoData); + }, + [serviceId] + ); + + const { result: serviceDetails } = useApi(servicesFetcher); + + return ( + + {children} + + ); +}; + +export default ServiceDetailsProvider; diff --git a/apps/tangle-dapp/context/ServiceOverviewContext.tsx b/apps/tangle-dapp/context/ServiceOverviewContext.tsx new file mode 100644 index 0000000000..62ed6c745b --- /dev/null +++ b/apps/tangle-dapp/context/ServiceOverviewContext.tsx @@ -0,0 +1,49 @@ +'use client'; + +import { Option } from '@polkadot/types'; +import { TanglePrimitivesJobsJobInfo } from '@polkadot/types/lookup'; +import { createContext, FC, PropsWithChildren, useCallback } from 'react'; +import { map } from 'rxjs/operators'; + +import useApiRx from '../hooks/useApiRx'; +import { Service } from '../types'; +import { extractServiceDetails } from '../utils/polkadot/services'; + +export const ServiceOverviewContext = createContext<{ + services: Service[]; + isLoading: boolean; +}>({ + services: [], + isLoading: true, +}); + +const ServiceOverviewProvider: FC = ({ children }) => { + const { result: services, isLoading } = useApiRx( + useCallback((api) => { + return api.query.jobs.submittedJobs.entries().pipe( + map((jobsData) => + jobsData + .map(([key, job]) => { + const id = key.args[1].toString(); + const service = extractServiceDetails( + id, + job as Option + ); + return service; + }) + .filter((service): service is Service => service !== null) + ) + ); + }, []) + ); + + return ( + + {children} + + ); +}; + +export default ServiceOverviewProvider; diff --git a/apps/tangle-dapp/context/TxConfirmationContext.tsx b/apps/tangle-dapp/context/TxConfirmationContext.tsx deleted file mode 100644 index 254b2cea68..0000000000 --- a/apps/tangle-dapp/context/TxConfirmationContext.tsx +++ /dev/null @@ -1,54 +0,0 @@ -'use client'; - -import React, { createContext, useContext, useState } from 'react'; - -interface TxConfirmationState { - isOpen: boolean; - status: 'success' | 'error'; - hash: string; - txType: 'substrate' | 'evm'; -} - -interface TxConfirmationContextType { - txConfirmationState: TxConfirmationState; - setTxConfirmationState: (state: TxConfirmationState) => void; -} - -const initialState: TxConfirmationState = { - isOpen: false, - status: 'error', - hash: '', - txType: 'evm', -}; - -const TxConfirmationContext = createContext< - TxConfirmationContextType | undefined ->(undefined); - -export const TxConfirmationProvider: React.FC<{ - children: React.ReactNode; -}> = ({ children }) => { - const [txConfirmationState, setTxConfirmationState] = - useState(initialState); - - const value = { - txConfirmationState, - setTxConfirmationState, - }; - - return ( - - {children} - - ); -}; - -export const useTxConfirmationModal = () => { - const context = useContext(TxConfirmationContext); - if (context === undefined) { - throw new Error( - 'useTxnConfirmationModal must be used within a TxConfirmationProvider' - ); - } - return context; -}; diff --git a/apps/tangle-dapp/context/useNetworkStore.ts b/apps/tangle-dapp/context/useNetworkStore.ts index 0b2cd55a30..1ee1bf0cc9 100644 --- a/apps/tangle-dapp/context/useNetworkStore.ts +++ b/apps/tangle-dapp/context/useNetworkStore.ts @@ -4,6 +4,7 @@ import { Network } from '@webb-tools/webb-ui-components/constants/networks'; import { create } from 'zustand'; import { DEFAULT_NETWORK } from '../constants/networks'; +import { TokenSymbol } from '../types'; /** * A store for Network info to use when creating/using @@ -13,16 +14,16 @@ const useNetworkStore = create<{ rpcEndpoint: string; network: Network; setNetwork: (network: Network) => void; - nativeTokenSymbol: string; + nativeTokenSymbol: TokenSymbol; }>((set) => ({ rpcEndpoint: DEFAULT_NETWORK.wsRpcEndpoint, network: DEFAULT_NETWORK, - nativeTokenSymbol: DEFAULT_NETWORK.nativeTokenSymbol, + nativeTokenSymbol: DEFAULT_NETWORK.tokenSymbol, setNetwork: (network) => set({ network, rpcEndpoint: network.wsRpcEndpoint, - nativeTokenSymbol: network.nativeTokenSymbol, + nativeTokenSymbol: network.tokenSymbol, }), })); diff --git a/apps/tangle-dapp/data/KeyStats/useActiveAndDelegationCountSubscription.ts b/apps/tangle-dapp/data/KeyStats/useActiveAndDelegationCountSubscription.ts index 514837b5fd..4b8aec2653 100644 --- a/apps/tangle-dapp/data/KeyStats/useActiveAndDelegationCountSubscription.ts +++ b/apps/tangle-dapp/data/KeyStats/useActiveAndDelegationCountSubscription.ts @@ -1,16 +1,12 @@ 'use client'; import { formatNumber } from '@polkadot/util'; -import { WebbError, WebbErrorCodes } from '@webb-tools/dapp-types/WebbError'; -import { useEffect, useState } from 'react'; -import { Subscription } from 'rxjs'; +import { DEFAULT_FLAGS_ELECTED } from '@webb-tools/dapp-config/constants/tangle'; +import { useCallback, useEffect, useState } from 'react'; +import { map } from 'rxjs'; -import useNetworkStore from '../../context/useNetworkStore'; -import useFormatReturnType from '../../hooks/useFormatReturnType'; -import useLocalStorage, { LocalStorageKey } from '../../hooks/useLocalStorage'; -import { getPolkadotApiPromise, getPolkadotApiRx } from '../../utils/polkadot'; +import useApiRx from '../../hooks/useApiRx'; -// TODO: This is causing performance issues. Needs to be optimized. export default function useActiveAndDelegationCountSubscription( defaultValue: { value1: number | null; value2: number | null } = { value1: null, @@ -21,90 +17,65 @@ export default function useActiveAndDelegationCountSubscription( const [error, setError] = useState(null); const [value1, setValue1] = useState(defaultValue.value1); const [value2, setValue2] = useState(defaultValue.value2); - const { rpcEndpoint } = useNetworkStore(); - const { get: getCachedValue, set: setCache } = useLocalStorage( - LocalStorageKey.ACTIVE_AND_DELEGATION_COUNT, - true + const { + isLoading: isLoadingCounterForNominators, + error: counterForNominatorsError, + } = useApiRx( + useCallback( + (apiRx) => + apiRx.query.staking.counterForNominators().pipe( + map((nominatorsCount) => { + const nominatorsCountNum = Number(formatNumber(nominatorsCount)); + + setValue2(nominatorsCountNum); + }) + ), + [] + ) ); - // After mount, try to get the cached value and set it. - useEffect(() => { - const cachedValue = getCachedValue(); - - if (cachedValue !== null) { - setValue1(cachedValue.value1); - setValue2(cachedValue.value2); - setIsLoading(false); - } - }, [getCachedValue]); - - useEffect(() => { - let isMounted = true; - let sub: Subscription | null = null; - - const subscribeData = async () => { - try { - const api = await getPolkadotApiRx(rpcEndpoint); - const apiPromise = await getPolkadotApiPromise(rpcEndpoint); - const currentEra = await apiPromise.query.staking.currentEra(); - const eraIndex = currentEra.unwrap(); - - sub = api.query.staking - .counterForNominators() - .subscribe(async (value) => { - try { - const counterForNominators = formatNumber(value); - const exposures = - await apiPromise.query.staking.erasStakers.entries(eraIndex); - - const nominatorsSet = new Set(); - - exposures.forEach(([_, exposure]) => { - exposure.others.forEach(({ who }) => { - nominatorsSet.add(who.toString()); + const { isLoading: isLoadingActiveNominators, error: activeNominatorsError } = + useApiRx( + useCallback( + (apiRx) => + apiRx.derive.staking.electedInfo(DEFAULT_FLAGS_ELECTED).pipe( + map((electedInfo) => { + const nominators: Set = new Set(); + + for (let i = 0; i < electedInfo.info.length; i++) { + const { exposurePaged } = electedInfo.info[i]; + const exposure = exposurePaged.isSome && exposurePaged.unwrap(); + if (!exposure) { + continue; + } + + exposure.others.map(({ who }) => { + nominators.add(who.toString()); }); - }); - - const newValue1 = nominatorsSet.size; - const newValue2 = Number(counterForNominators); - - if (isMounted && (newValue1 !== value1 || newValue2 !== value2)) { - setValue1(newValue1); - setValue2(newValue2); - setCache({ value1: newValue1, value2: newValue2 }); - setIsLoading(false); - } - } catch (error) { - if (isMounted) { - setError( - error instanceof Error - ? error - : WebbError.from(WebbErrorCodes.UnknownError) - ); - setIsLoading(false); } - } - }); - } catch (error) { - if (isMounted) { - setError( - error instanceof Error - ? error - : WebbError.from(WebbErrorCodes.UnknownError) - ); - setIsLoading(false); - } - } - }; - subscribeData(); + const activeNominatorsCount = nominators.size; - return () => { - isMounted = false; - sub?.unsubscribe(); - }; - }, [rpcEndpoint, setCache, value1, value2]); + setValue1(activeNominatorsCount); + }) + ), + [] + ) + ); - return useFormatReturnType({ isLoading, error, data: { value1, value2 } }); + // Sync the loading & error states. + useEffect(() => { + setIsLoading(isLoadingCounterForNominators || isLoadingActiveNominators); + }, [isLoadingCounterForNominators, isLoadingActiveNominators]); + + useEffect(() => { + setError(counterForNominatorsError || activeNominatorsError); + }, [counterForNominatorsError, activeNominatorsError]); + + return { + data: { value1, value2 }, + isLoading, + error, + }; } diff --git a/apps/tangle-dapp/data/KeyStats/useIdealStakePercentage.ts b/apps/tangle-dapp/data/KeyStats/useIdealStakePercentage.ts index 578b1cc85a..672fcc2590 100644 --- a/apps/tangle-dapp/data/KeyStats/useIdealStakePercentage.ts +++ b/apps/tangle-dapp/data/KeyStats/useIdealStakePercentage.ts @@ -4,45 +4,27 @@ import { BN_ZERO } from '@polkadot/util'; import { useEffect, useState } from 'react'; import useNetworkStore from '../../context/useNetworkStore'; -import useFormatReturnType from '../../hooks/useFormatReturnType'; -import useLocalStorage, { LocalStorageKey } from '../../hooks/useLocalStorage'; import { calculateInflation } from '../../utils'; import ensureError from '../../utils/ensureError'; -import { getPolkadotApiPromise } from '../../utils/polkadot'; +import { getApiPromise } from '../../utils/polkadot'; export default function useIdealStakedPercentage( defaultValue: { value1: number | null } = { value1: null } ) { - const { get: getCachedValue, set: setCache } = useLocalStorage( - LocalStorageKey.IDEAL_STAKE_PERCENTAGE, - true - ); - const [value1, setValue1] = useState(defaultValue.value1); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const { rpcEndpoint } = useNetworkStore(); - // After mount, try to get the cached value and set it. - useEffect(() => { - const cachedValue = getCachedValue(); - - if (cachedValue !== null) { - setValue1(cachedValue.value1); - setIsLoading(false); - } - }, [getCachedValue]); - useEffect(() => { const fetchData = async () => { try { - const api = await getPolkadotApiPromise(rpcEndpoint); + const api = await getApiPromise(rpcEndpoint); const inflation = calculateInflation(api, BN_ZERO, BN_ZERO, BN_ZERO); const idealStakePercentage = inflation.idealStake * 100; if (idealStakePercentage !== value1) { setValue1(idealStakePercentage); - setCache({ value1: idealStakePercentage }); } setIsLoading(false); @@ -53,11 +35,11 @@ export default function useIdealStakedPercentage( }; fetchData(); - }, [value1, setCache, rpcEndpoint]); + }, [value1, rpcEndpoint]); - return useFormatReturnType({ + return { isLoading, error, data: { value1, value2: null }, - }); + }; } diff --git a/apps/tangle-dapp/data/KeyStats/useInflationPercentage.ts b/apps/tangle-dapp/data/KeyStats/useInflationPercentage.ts index ec25409e33..361a5cb5df 100644 --- a/apps/tangle-dapp/data/KeyStats/useInflationPercentage.ts +++ b/apps/tangle-dapp/data/KeyStats/useInflationPercentage.ts @@ -8,7 +8,7 @@ import useNetworkStore from '../../context/useNetworkStore'; import useFormatReturnType from '../../hooks/useFormatReturnType'; import { calculateInflation } from '../../utils'; import ensureError from '../../utils/ensureError'; -import { getPolkadotApiPromise, getPolkadotApiRx } from '../../utils/polkadot'; +import { getApiPromise, getApiRx } from '../../utils/polkadot'; export default function useInflationPercentage( defaultValue: { value1: number | null; value2: number | null } = { @@ -27,8 +27,8 @@ export default function useInflationPercentage( const fetchData = async () => { try { - const apiRx = await getPolkadotApiRx(rpcEndpoint); - const apiPromise = await getPolkadotApiPromise(rpcEndpoint); + const apiRx = await getApiRx(rpcEndpoint); + const apiPromise = await getApiPromise(rpcEndpoint); setIsLoading(true); @@ -49,7 +49,7 @@ export default function useInflationPercentage( const inflationPercentage = inflation.inflation; if (isMounted) { - setValue1(Number(inflationPercentage.toFixed(1))); + setValue1(Math.trunc(inflationPercentage * 10) / 10); setIsLoading(false); } }); diff --git a/apps/tangle-dapp/data/KeyStats/useValidatorsCountSubscription.ts b/apps/tangle-dapp/data/KeyStats/useValidatorsCountSubscription.ts index 3cdd50064d..abfbf9ec25 100644 --- a/apps/tangle-dapp/data/KeyStats/useValidatorsCountSubscription.ts +++ b/apps/tangle-dapp/data/KeyStats/useValidatorsCountSubscription.ts @@ -5,9 +5,7 @@ import { useEffect, useState } from 'react'; import { firstValueFrom, Subscription } from 'rxjs'; import useNetworkStore from '../../context/useNetworkStore'; -import useFormatReturnType from '../../hooks/useFormatReturnType'; -import useLocalStorage, { LocalStorageKey } from '../../hooks/useLocalStorage'; -import { getPolkadotApiRx } from '../../utils/polkadot'; +import { getApiRx } from '../../utils/polkadot'; export default function useValidatorCountSubscription( defaultValue: { value1: number | null; value2: number | null } = { @@ -15,35 +13,19 @@ export default function useValidatorCountSubscription( value2: null, } ) { - const { get: getCachedValue, set: setCache } = useLocalStorage( - LocalStorageKey.VALIDATOR_COUNTS, - true - ); - const [value1, setValue1] = useState(defaultValue.value1); const [value2, setValue2] = useState(defaultValue.value2); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const { rpcEndpoint } = useNetworkStore(); - // After mount, try to get the cached value and set it. - useEffect(() => { - const cachedValue = getCachedValue(); - - if (cachedValue !== null) { - setValue1(cachedValue.value1); - setValue2(cachedValue.value2); - setIsLoading(false); - } - }, [getCachedValue]); - useEffect(() => { let isMounted = true; let sub: Subscription | null = null; const subscribeData = async () => { try { - const api = await getPolkadotApiRx(rpcEndpoint); + const api = await getApiRx(rpcEndpoint); sub = api.query.session.validators().subscribe(async (validators) => { try { @@ -59,10 +41,6 @@ export default function useValidatorCountSubscription( ) { setValue1(validators.length); setValue2(totalValidatorsCount.toNumber()); - setCache({ - value1: validators.length, - value2: totalValidatorsCount.toNumber(), - }); setIsLoading(false); } } catch (error) { @@ -94,7 +72,11 @@ export default function useValidatorCountSubscription( isMounted = false; sub?.unsubscribe(); }; - }, [value1, value2, setCache, rpcEndpoint]); + }, [value1, value2, rpcEndpoint]); - return useFormatReturnType({ isLoading, error, data: { value1, value2 } }); + return { + data: { value1, value2 }, + isLoading, + error, + }; } diff --git a/apps/tangle-dapp/data/KeyStats/useWaitingCountSubscription.ts b/apps/tangle-dapp/data/KeyStats/useWaitingCountSubscription.ts index 74ec04e007..6fc1b5b7e1 100644 --- a/apps/tangle-dapp/data/KeyStats/useWaitingCountSubscription.ts +++ b/apps/tangle-dapp/data/KeyStats/useWaitingCountSubscription.ts @@ -5,9 +5,7 @@ import { useEffect, useState } from 'react'; import { Subscription } from 'rxjs'; import useNetworkStore from '../../context/useNetworkStore'; -import useFormatReturnType from '../../hooks/useFormatReturnType'; -import useLocalStorage, { LocalStorageKey } from '../../hooks/useLocalStorage'; -import { getPolkadotApiRx } from '../../utils/polkadot'; +import { getApiRx } from '../../utils/polkadot'; export default function useWaitingCountSubscription( defaultValue: { value1: number | null; value2: number | null } = { @@ -15,40 +13,24 @@ export default function useWaitingCountSubscription( value2: null, } ) { - const { get: getCachedValue, set: setCache } = useLocalStorage( - LocalStorageKey.WAITING_COUNT, - true - ); - const [value1, setValue1] = useState(defaultValue.value1); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const { rpcEndpoint } = useNetworkStore(); - // After mount, try to get the cached value and set it. - useEffect(() => { - const cachedValue = getCachedValue(); - - if (cachedValue !== null) { - setValue1(cachedValue.value1); - setIsLoading(false); - } - }, [getCachedValue]); - useEffect(() => { let isMounted = true; let sub: Subscription | null = null; const subscribeData = async () => { try { - const api = await getPolkadotApiRx(rpcEndpoint); + const api = await getApiRx(rpcEndpoint); sub = api.derive.staking.waitingInfo().subscribe((waitingInfo) => { const newWaitingCount = waitingInfo.waiting.length; if (isMounted && newWaitingCount !== value1) { setValue1(newWaitingCount); - setCache({ value1: newWaitingCount }); setIsLoading(false); } }); @@ -70,11 +52,11 @@ export default function useWaitingCountSubscription( isMounted = false; sub?.unsubscribe(); }; - }, [value1, setCache, rpcEndpoint]); + }, [value1, rpcEndpoint]); - return useFormatReturnType({ + return { isLoading, error, data: { value1, value2: null }, - }); + }; } diff --git a/apps/tangle-dapp/data/NominationsPayouts/useNominations.ts b/apps/tangle-dapp/data/NominationsPayouts/useNominations.ts index fedc212351..3ec48416b3 100644 --- a/apps/tangle-dapp/data/NominationsPayouts/useNominations.ts +++ b/apps/tangle-dapp/data/NominationsPayouts/useNominations.ts @@ -1,159 +1,89 @@ 'use client'; -import { u128 } from '@polkadot/types'; -import { WebbError, WebbErrorCodes } from '@webb-tools/dapp-types/WebbError'; -import { useEffect, useState } from 'react'; -import { Subscription } from 'rxjs'; - -import useNetworkStore from '../../context/useNetworkStore'; -import useFormatReturnType from '../../hooks/useFormatReturnType'; -import useLocalStorage, { LocalStorageKey } from '../../hooks/useLocalStorage'; -import { Delegator } from '../../types'; -import { - formatTokenBalance, - getPolkadotApiPromise, - getPolkadotApiRx, - getTotalNumberOfNominators, - getValidatorCommission, - getValidatorIdentityName, -} from '../../utils/polkadot'; - -export default function useNominations( - address: string, - defaultValue: { delegators: Delegator[] } = { - delegators: [], - } -) { - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - const { rpcEndpoint, nativeTokenSymbol } = useNetworkStore(); - - const { - valueAfterMount: cachedNominations, - setWithPreviousValue: setCachedNominations, - } = useLocalStorage(LocalStorageKey.Nominations, true); - - const [delegators, setDelegators] = useState( - (cachedNominations && cachedNominations[address]) ?? defaultValue.delegators +import { useCallback, useMemo } from 'react'; + +import useApiRx from '../../hooks/useApiRx'; +import useSubstrateAddress from '../../hooks/useSubstrateAddress'; +import { Nominee } from '../../types/index'; +import Optional from '../../utils/Optional'; +import createNominee from '../../utils/staking/createNominee'; +import useStakingExposures from '../staking/useStakingExposures'; +import useValidatorPrefs from '../staking/useValidatorPrefs'; +import useValidatorIdentityNames from '../ValidatorTables/useValidatorIdentityNames'; + +const useNominations = () => { + const activeSubstrateAddress = useSubstrateAddress(); + const { result: identities } = useValidatorIdentityNames(); + const { result: prefs } = useValidatorPrefs(); + const { result: exposures } = useStakingExposures(); + + const { result: sessionValidators } = useApiRx( + useCallback((api) => api.query.session.validators(), []) ); - useEffect(() => { - let isMounted = true; - let sub: Subscription | null = null; - - const subscribeData = async () => { - if (!address) { - if (isMounted) { - setDelegators([]); - setIsLoading(false); + const { result: nominationInfoOpt } = useApiRx( + useCallback( + (api) => { + if (activeSubstrateAddress === null) { + return null; } - return; - } - - try { - const apiSub = await getPolkadotApiRx(rpcEndpoint); - const apiPromise = await getPolkadotApiPromise(rpcEndpoint); - - setIsLoading(true); - - sub = apiSub.query.staking - .nominators(address) - .subscribe(async (nominatorData) => { - const targets = nominatorData.unwrapOrDefault().targets; - - // TODO: This needs to be optimized. Make a single request to get all the data, then work off that data. Currently, this may make many requests, depending on how many targets there are PER nominator (O(nominators * targets)). - const delegators: Delegator[] = await Promise.all( - targets.map(async (target) => { - const isActive = await apiPromise.query.session - .validators() - .then((activeValidators) => - activeValidators.some( - (val) => val.toString() === target.toString() - ) - ); - - const identity = await getValidatorIdentityName( - rpcEndpoint, - target.toString() - ); - - const commission = await getValidatorCommission( - rpcEndpoint, - target.toString() - ); - - const delegationsValue = await getTotalNumberOfNominators( - rpcEndpoint, - target.toString() - ); - - const delegations = delegationsValue?.toString(); - - const currentEra = await apiPromise.query.staking.currentEra(); - const exposure = await apiPromise.query.staking.erasStakers( - currentEra.unwrap(), - target.toString() - ); - - const selfStaked = new u128( - apiPromise.registry, - exposure.own.toString() - ); - - const selfStakedBalance = formatTokenBalance( - selfStaked, - nativeTokenSymbol - ); - - const totalStakeAmount = exposure.total.unwrap(); - const effectiveAmountStaked = formatTokenBalance( - totalStakeAmount, - nativeTokenSymbol - ); - - return { - address: target.toString(), - identity: identity ?? '', - selfStaked: selfStakedBalance ?? '', - isActive, - commission: commission ?? '', - delegations: delegations ?? '', - effectiveAmountStaked: effectiveAmountStaked ?? '', - }; - }) - ); - - if (isMounted) { - setDelegators(delegators); - setCachedNominations((previous) => ({ - ...previous, - [address]: delegators, - })); - setIsLoading(false); - } - }); - } catch (e) { - if (isMounted) { - setError( - e instanceof Error ? e : WebbError.from(WebbErrorCodes.UnknownError) - ); - setIsLoading(false); - } - } - }; - - subscribeData(); - - return () => { - isMounted = false; - sub?.unsubscribe(); - }; - }, [address, rpcEndpoint, setCachedNominations, nativeTokenSymbol]); - - return useFormatReturnType({ - isLoading, - error, - data: { delegators }, - }); -} + return api.query.staking.nominators(activeSubstrateAddress); + }, + [activeSubstrateAddress] + ) + ); + + const nominees = useMemo | null>(() => { + if ( + nominationInfoOpt === null || + sessionValidators === null || + identities === null || + prefs === null || + exposures === null + ) { + return null; + } else if (nominationInfoOpt.isNone) { + return new Optional(); + } + + const nomineeAccountIds = nominationInfoOpt.unwrap().targets; + + const nominees = nomineeAccountIds.map((nomineeAccountId) => { + const nomineeAddress = nomineeAccountId.toString(); + + // TODO: Turn this into a set, and then use `has` instead of `some`. + const isActive = sessionValidators.some( + (validatorAddress) => validatorAddress.toString() === nomineeAddress + ); + + return createNominee({ + address: nomineeAddress, + isActive, + identities, + prefs, + getExposure: (address) => { + const exposureOpt = exposures.get(address); + + if (exposureOpt === undefined || exposureOpt.isNone) { + return undefined; + } + + const exposure = exposureOpt.unwrap(); + + return { + own: exposure.own.toBn(), + total: exposure.total.toBn(), + nominatorCount: exposure.nominatorCount.toNumber(), + }; + }, + }); + }); + + return new Optional(nominees); + }, [exposures, identities, nominationInfoOpt, prefs, sessionValidators]); + + return nominees; +}; + +export default useNominations; diff --git a/apps/tangle-dapp/data/NominationsPayouts/usePayouts.ts b/apps/tangle-dapp/data/NominationsPayouts/usePayouts.ts index 720960695f..29a518cffe 100644 --- a/apps/tangle-dapp/data/NominationsPayouts/usePayouts.ts +++ b/apps/tangle-dapp/data/NominationsPayouts/usePayouts.ts @@ -1,318 +1,339 @@ 'use client'; -import { u128 } from '@polkadot/types'; -import { WebbError, WebbErrorCodes } from '@webb-tools/dapp-types/WebbError'; -import { useEffect, useState } from 'react'; -import { Subscription } from 'rxjs'; +import { Option } from '@polkadot/types'; +import { + PalletStakingNominations, + PalletStakingValidatorPrefs, +} from '@polkadot/types/lookup'; +import { BN_ZERO } from '@polkadot/util'; +import { decodeAddress, encodeAddress } from '@polkadot/util-crypto'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import useNetworkStore from '../../context/useNetworkStore'; -import useFormatReturnType from '../../hooks/useFormatReturnType'; +import useApiRx from '../../hooks/useApiRx'; import useLocalStorage, { LocalStorageKey } from '../../hooks/useLocalStorage'; +import useSubstrateAddress from '../../hooks/useSubstrateAddress'; import { Payout } from '../../types'; import { - formatTokenBalance, - getPolkadotApiPromise, - getPolkadotApiRx, - getValidatorCommission, + getApiPromise as getPolkadotApiPromise, getValidatorIdentityName, } from '../../utils/polkadot'; +import useEraTotalRewards from '../payouts/useEraTotalRewards'; + +type ValidatorReward = { + validatorAddress: string; + era: number; + eraTotalRewardPoints: number; + validatorRewardPoints: number; +}; + +type PayoutData = { + data: Payout[]; + isLoading: boolean; +}; + +export default function usePayouts(): PayoutData { + const payoutsRef = useRef([]); + const isPayoutsFetched = useRef(false); + const fetchedPayoutPromises = useRef | null>( + null + ); + + const [isLoading, setIsLoading] = useState(false); + + const { setWithPreviousValue: setCachedPayouts } = useLocalStorage( + LocalStorageKey.PAYOUTS, + true + ); + + const { rpcEndpoint, network } = useNetworkStore(); + + const activeSubstrateAddress = useSubstrateAddress(); + + const activeSubstrateAddressEncoded = useMemo(() => { + if (!activeSubstrateAddress) return; + + const publicKey = decodeAddress(activeSubstrateAddress); + + return encodeAddress(publicKey, network.ss58Prefix); + }, [activeSubstrateAddress, network.ss58Prefix]); + + const { result: nominators } = useApiRx( + useCallback( + (api) => api.query.staking.nominators(activeSubstrateAddress), + [activeSubstrateAddress] + ) + ); + + const { result: erasRewardsPoints } = useApiRx( + useCallback((api) => api.query.staking.erasRewardPoints.entries(), []) + ); + + const myNominations = useMemo(() => { + if (!nominators) return []; + const nominatorsData = nominators as Option; + return nominatorsData.isSome ? nominatorsData.unwrap().targets : []; + }, [nominators]); -export default function usePayouts( - address: string, - defaultValue: { payouts: Payout[] } = { - payouts: [], - } -) { - const { - valueAfterMount: cachedPayouts, - setWithPreviousValue: setCachedPayouts, - } = useLocalStorage(LocalStorageKey.Payouts, true); - - const [payouts, setPayouts] = useState( - (cachedPayouts && cachedPayouts[address]) ?? defaultValue.payouts + const { data: eraTotalRewards } = useEraTotalRewards(); + + const { result: validators } = useApiRx( + useCallback((api) => api.query.staking.validators.entries(), []) ); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - const { rpcEndpoint, nativeTokenSymbol } = useNetworkStore(); + const mappedValidatorInfo = useMemo(() => { + const map = new Map(); + + validators?.forEach(([storageKey, validatorInfo]) => { + map.set(storageKey.args[0].toString(), validatorInfo); + }); + + return map; + }, [validators]); useEffect(() => { - let isMounted = true; - let sub: Subscription | null = null; - - const subscribeData = async () => { - if (!address) { - if (isMounted) { - setPayouts([]); - setIsLoading(false); + isPayoutsFetched.current = false; + fetchedPayoutPromises.current = null; + setIsLoading(false); + }, [activeSubstrateAddress, rpcEndpoint]); + + const payoutPromises = useMemo(() => { + if (isPayoutsFetched.current) return fetchedPayoutPromises.current; + + if ( + !erasRewardsPoints || + myNominations.length === 0 || + !eraTotalRewards || + !mappedValidatorInfo || + !activeSubstrateAddress || + !activeSubstrateAddressEncoded + ) { + return null; + } + + const allRewards: ValidatorReward[] = []; + + for (const validatorAddress of myNominations) { + for (const point of erasRewardsPoints) { + const era = point[0].args[0].toNumber(); + const rewards = point[1].toHuman(); + let validatorRewardPoints = 0; + const totalRewardPoints = parseFloat( + rewards.total?.toString().replace(/,/g, '') ?? '0' + ); + if ( + typeof rewards.individual === 'object' && + rewards.individual !== null + ) { + Object.entries(rewards.individual).forEach(([key, value]) => { + if (key === validatorAddress.toString()) { + validatorRewardPoints = value + ? parseFloat(value.toString().replace(/,/g, '')) + : 0; + } + }); } - return; + allRewards.push({ + era, + eraTotalRewardPoints: totalRewardPoints, + validatorAddress: validatorAddress.toString(), + validatorRewardPoints, + }); } + } - try { - const apiSub = await getPolkadotApiRx(rpcEndpoint); + const payoutPromises = Promise.all( + allRewards.map(async (reward) => { const apiPromise = await getPolkadotApiPromise(rpcEndpoint); - if (!apiSub || !apiPromise) { - throw WebbError.from(WebbErrorCodes.ApiNotReady); + const claimedReward = await apiPromise.query.staking.claimedRewards( + reward.era, + reward.validatorAddress + ); + + if (claimedReward.length > 0) { + return undefined; } - setIsLoading(true); - - const nominations = await apiPromise.query.staking.nominators(address); - const myNominations = nominations.isSome - ? nominations.unwrap().targets - : []; - - sub = apiSub.query.staking.erasRewardPoints - .entries() - .subscribe(async (points) => { - const allRewards: { - era: number; - totalRewardPoints: number; - validator: string; - validatorRewardPoints: number; - }[] = []; - - let validatorPayoutsPromises: Promise[] = []; - - myNominations.forEach((validator) => { - points.forEach((point) => { - // regex to remove commas from the era number - const era = Number( - point[0].toHuman()?.toString().replace(/,/g, '') - ); - - if (!era) { - return; - } - - const rewards = point[1].toHuman(); - - if (!rewards) { - return; - } - - let validatorRewardPoints = 0; - - const totalRewardPoints = parseFloat( - rewards.total?.toString().replace(/,/g, '') ?? '0' - ); - - if ( - typeof rewards.individual === 'object' && - rewards.individual !== null - ) { - Object.entries(rewards.individual).forEach(([key, value]) => { - if (key === validator.toString()) { - validatorRewardPoints = Number(value); - } - }); - } - - if (validatorRewardPoints > 0) { - allRewards.push({ - era, - totalRewardPoints, - validator: validator.toString(), - validatorRewardPoints, - }); - } - }); - - validatorPayoutsPromises = allRewards - .map(async (reward) => { - const { - era, - totalRewardPoints, - validator, - validatorRewardPoints, - } = reward; - - const validatorLedger = await apiPromise.query.staking.ledger( - validator - ); - - // TODO: For some reason, this can be `undefined`. Might be caused to the Substrate types being out of date? For now, default to an empty array. - const claimedRewards = - validatorLedger.unwrap().claimedRewards ?? []; - - const claimedEras = claimedRewards.map((era) => - Number(era.toString().replace(/,/g, '')) - ); - - if (claimedEras.includes(era)) { - return; - } - - const erasTotalReward = - await apiPromise.query.staking.erasValidatorReward(era); - - if (erasTotalReward.isNone) { - return; - } - - const validatorTotalReward = - (validatorRewardPoints * - Number(erasTotalReward.unwrap().toString())) / - totalRewardPoints; - - if (validatorTotalReward > 0) { - const validatorTotalRewardFormatted = formatTokenBalance( - new u128( - apiPromise.registry, - BigInt(Math.floor(validatorTotalReward)) - ), - nativeTokenSymbol - ); - - const eraStaker = - await apiPromise.query.staking.erasStakers( - era, - validator - ); - - const validatorTotalStake = eraStaker.total.unwrap(); - - const validatorTotalStakeFormatted = formatTokenBalance( - validatorTotalStake, - nativeTokenSymbol - ); - - if ( - Number(validatorTotalStake.toString()) > 0 && - eraStaker.others.length > 0 - ) { - const nominatorStakeInfo = eraStaker.others.find( - (nominator) => nominator.who.toString() === address - ); - - if (nominatorStakeInfo && !nominatorStakeInfo.isEmpty) { - const nominatorTotalStake = - nominatorStakeInfo.value.unwrap(); - - if (Number(nominatorTotalStake.toString()) > 0) { - const nominatorStakePercentage = - (Number(nominatorTotalStake.toString()) / - Number(validatorTotalStake.toString())) * - 100; - - const validatorCommissionPercentage = - await getValidatorCommission( - rpcEndpoint, - validator.toString() - ); - - const validatorCommission = - validatorTotalReward * - (Number(validatorCommissionPercentage) / 100); - - const distributableReward = - validatorTotalReward - validatorCommission; - - const nominatorTotalReward = - (nominatorStakePercentage / 100) * - distributableReward; - - const nominatorTotalRewardFormatted = - formatTokenBalance( - new u128( - apiPromise.registry, - BigInt(Math.floor(nominatorTotalReward)) - ), - nativeTokenSymbol - ); - - const validatorIdentity = - await getValidatorIdentityName( - rpcEndpoint, - validator - ); - - const validatorNominators = await Promise.all( - eraStaker.others.map(async (nominator) => { - const nominatorIdentity = - await getValidatorIdentityName( - rpcEndpoint, - nominator.who.toString() - ); - - return { - address: nominator.who.toString(), - identity: nominatorIdentity ?? '', - }; - }) - ); - - if ( - validatorTotalStakeFormatted && - validatorTotalRewardFormatted && - nominatorTotalRewardFormatted - ) { - return { - era, - validator: { - address: validator, - identity: validatorIdentity ?? '', - }, - validatorTotalStake: validatorTotalStakeFormatted, - nominators: validatorNominators, - validatorTotalReward: - validatorTotalRewardFormatted, - nominatorTotalReward: - nominatorTotalRewardFormatted, - status: 'unclaimed', - }; - } - } - } - } - } - }) - .filter( - (payout): payout is Promise => payout !== undefined - ); - }); - - if (myNominations.length > 0 && isMounted) { - const validatorPayouts = await Promise.all( - validatorPayoutsPromises - ); - - const payoutsData = validatorPayouts - .filter((payout) => payout !== undefined) - .sort((a, b) => Number(a.era) - Number(b.era)); - - setPayouts(payoutsData); - setCachedPayouts((previous) => ({ - ...previous, - [address]: payoutsData, - })); - setIsLoading(false); - } - }); - } catch (e) { - if (isMounted) { - setPayouts([]); - setError( - e instanceof Error ? e : WebbError.from(WebbErrorCodes.UnknownError) + const eraTotalRewardOpt = eraTotalRewards.get(reward.era); + if (eraTotalRewardOpt === undefined || eraTotalRewardOpt.isNone) { + return undefined; + } + + const eraTotalRewardOptValue = eraTotalRewardOpt.unwrap(); + + const validatorTotalReward = eraTotalRewardOptValue + .toBn() + .muln(reward.validatorRewardPoints) + .divn(reward.eraTotalRewardPoints); + + if (validatorTotalReward.isZero()) { + return undefined; + } + + const erasStakersOverview = + await apiPromise.query.staking.erasStakersOverview( + reward.era, + reward.validatorAddress ); - setIsLoading(false); + + const validatorTotalStake = !erasStakersOverview.isNone + ? erasStakersOverview.unwrap().total.toBn() + : BN_ZERO; + const validatorNominatorCount = !erasStakersOverview.isNone + ? erasStakersOverview.unwrap().nominatorCount.toNumber() + : 0; + + if ( + Number(validatorTotalStake) === 0 || + validatorNominatorCount === 0 + ) { + return undefined; } - } - }; - subscribeData(); + const eraStakerPaged = await apiPromise.query.staking.erasStakersPaged( + reward.era, + reward.validatorAddress, + 0 + ); + + if (eraStakerPaged.isNone) { + return undefined; + } + + const nominatorStakeInfo = eraStakerPaged + .unwrap() + .others.find( + (nominator) => + nominator.who.toString() === activeSubstrateAddressEncoded + ); + + if (nominatorStakeInfo === undefined || nominatorStakeInfo.isEmpty) { + return undefined; + } + + const nominatorTotalStake = nominatorStakeInfo.value.unwrap(); + + if (nominatorTotalStake.isZero()) { + return undefined; + } + + const validatorInfo = mappedValidatorInfo.get(reward.validatorAddress); + + if (!validatorInfo) { + return undefined; + } - return () => { - isMounted = false; - sub?.unsubscribe(); + const validatorIdentityName = await getValidatorIdentityName( + rpcEndpoint, + reward.validatorAddress + ); + + const validatorNominators = await Promise.all( + eraStakerPaged.unwrap().others.map(async (nominator) => { + const nominatorIdentity = await getValidatorIdentityName( + rpcEndpoint, + nominator.who.toString() + ); + + return { + address: nominator.who.toString(), + identity: nominatorIdentity ?? '', + }; + }) + ); + + const stakerEraReward = await apiPromise.derive.staking.stakerRewards( + activeSubstrateAddressEncoded + ); + + const stakerEraRewardsEra = stakerEraReward.find( + (_reward) => _reward.era.toNumber() === reward.era + ); + + let nominatorTotalReward = BN_ZERO; + + if (stakerEraRewardsEra) { + if (stakerEraRewardsEra.validators[reward.validatorAddress]) { + nominatorTotalReward = + stakerEraRewardsEra.validators[reward.validatorAddress].value ?? + BN_ZERO; + } + } + + if ( + validatorTotalStake && + validatorTotalReward && + nominatorTotalReward + ) { + const payout: Payout = { + era: reward.era, + validator: { + address: reward.validatorAddress, + identity: validatorIdentityName ?? '', + }, + validatorTotalStake: validatorTotalStake, + nominators: validatorNominators, + validatorTotalReward: validatorTotalReward, + nominatorTotalReward: nominatorTotalReward, + nominatorTotalRewardRaw: nominatorTotalReward, + }; + + isPayoutsFetched.current = true; + + return payout; + } + + return undefined; + }) + ); + + fetchedPayoutPromises.current = payoutPromises; + + return payoutPromises; + }, [ + activeSubstrateAddress, + activeSubstrateAddressEncoded, + eraTotalRewards, + erasRewardsPoints, + mappedValidatorInfo, + myNominations, + rpcEndpoint, + ]); + + useEffect(() => { + if (!activeSubstrateAddress) return; + + const computePayouts = async () => { + setIsLoading(true); + + if (!payoutPromises) { + payoutsRef.current = []; + setIsLoading(false); + return; + } + + const payouts = await payoutPromises; + const payoutsData = payouts + .filter((payout): payout is Payout => payout !== undefined) + .sort((a, b) => a.era - b.era); + + payoutsRef.current = payoutsData; + setCachedPayouts((previous) => ({ + ...previous?.value, + [rpcEndpoint]: { + ...previous?.value?.[rpcEndpoint], + [activeSubstrateAddress]: payoutsData, + }, + })); + setIsLoading(false); }; - }, [address, rpcEndpoint, setCachedPayouts, nativeTokenSymbol]); - return useFormatReturnType({ + computePayouts(); + }, [activeSubstrateAddress, payoutPromises, rpcEndpoint, setCachedPayouts]); + + return { + data: payoutsRef.current, isLoading, - error, - data: { payouts }, - }); + }; } diff --git a/apps/tangle-dapp/data/NominatorStats/usePaymentDestinationSubscription.ts b/apps/tangle-dapp/data/NominatorStats/usePaymentDestinationSubscription.ts deleted file mode 100644 index 74d537ee7a..0000000000 --- a/apps/tangle-dapp/data/NominatorStats/usePaymentDestinationSubscription.ts +++ /dev/null @@ -1,66 +0,0 @@ -'use client'; - -import { WebbError, WebbErrorCodes } from '@webb-tools/dapp-types/WebbError'; -import { useEffect, useState } from 'react'; -import { type Subscription } from 'rxjs'; - -import useNetworkStore from '../../context/useNetworkStore'; -import useFormatReturnType from '../../hooks/useFormatReturnType'; -import { getPolkadotApiRx } from '../../utils/polkadot'; - -export default function usePaymentDestinationSubscription( - address: string, - defaultValue: { value1: number | string | null } = { value1: null } -) { - const [value1, setValue1] = useState(defaultValue.value1); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - const { rpcEndpoint } = useNetworkStore(); - - useEffect(() => { - let isMounted = true; - let sub: Subscription | null = null; - - const subscribeData = async () => { - try { - const api = await getPolkadotApiRx(rpcEndpoint); - - if (!address) { - setValue1(null); - setIsLoading(false); - return; - } - - sub = api.query.staking - .payee(address) - .subscribe(async (stakingRewardDestinationData) => { - if (isMounted) { - const stakingRewardDestination = - stakingRewardDestinationData.toString(); - - setValue1(stakingRewardDestination ?? null); - setIsLoading(false); - } - }); - } catch (error) { - if (isMounted) { - setError( - error instanceof Error - ? error - : WebbError.from(WebbErrorCodes.UnknownError) - ); - setIsLoading(false); - } - } - }; - - subscribeData(); - - return () => { - isMounted = false; - sub?.unsubscribe(); - }; - }, [address, rpcEndpoint]); - - return useFormatReturnType({ isLoading, error, data: { value1 } }); -} diff --git a/apps/tangle-dapp/data/NominatorStats/useStakingRewardsDestination.ts b/apps/tangle-dapp/data/NominatorStats/useStakingRewardsDestination.ts new file mode 100644 index 0000000000..d7df3e6804 --- /dev/null +++ b/apps/tangle-dapp/data/NominatorStats/useStakingRewardsDestination.ts @@ -0,0 +1,55 @@ +'use client'; + +import { PalletStakingRewardDestination } from '@polkadot/types/lookup'; +import { useCallback } from 'react'; +import { map } from 'rxjs'; + +import useApiRx from '../../hooks/useApiRx'; +import useSubstrateAddress from '../../hooks/useSubstrateAddress'; +import { StakingRewardsDestination } from '../../types'; +import Optional from '../../utils/Optional'; + +const STAKING_SUBSTRATE_PAYEE_TO_LOCAL_PAYEE_MAP: Record< + PalletStakingRewardDestination['type'], + StakingRewardsDestination +> = { + Staked: StakingRewardsDestination.STAKED, + Controller: StakingRewardsDestination.CONTROLLER, + Stash: StakingRewardsDestination.STASH, + Account: StakingRewardsDestination.ACCOUNT, + None: StakingRewardsDestination.NONE, +}; + +const useStakingRewardsDestination = () => { + const activeSubstrateAddress = useSubstrateAddress(); + + return useApiRx>( + useCallback( + (api) => { + if (activeSubstrateAddress === null) { + return null; + } + + return api.query.staking.payee(activeSubstrateAddress).pipe( + map((substrateRewardsDestinationOpt) => { + if (substrateRewardsDestinationOpt.isNone) { + return new Optional(); + } + + const substrateRewardsDestination = + substrateRewardsDestinationOpt.unwrap(); + + return new Optional( + STAKING_SUBSTRATE_PAYEE_TO_LOCAL_PAYEE_MAP[ + substrateRewardsDestination.type + ] + ); + }) + ); + }, + [activeSubstrateAddress] + ) + ); +}; + +export default useStakingRewardsDestination; diff --git a/apps/tangle-dapp/data/NominatorStats/useTokenWalletFreeBalance.ts b/apps/tangle-dapp/data/NominatorStats/useTokenWalletFreeBalance.ts index 58aac75f9f..7e5f209f1b 100644 --- a/apps/tangle-dapp/data/NominatorStats/useTokenWalletFreeBalance.ts +++ b/apps/tangle-dapp/data/NominatorStats/useTokenWalletFreeBalance.ts @@ -1,71 +1,18 @@ 'use client'; import { BN } from '@polkadot/util'; -import { WebbError, WebbErrorCodes } from '@webb-tools/dapp-types/WebbError'; -import { useEffect, useState } from 'react'; -import { type Subscription } from 'rxjs'; -import useNetworkStore from '../../context/useNetworkStore'; +import { useBalancesContext } from '../../context/BalancesContext'; import useFormatReturnType from '../../hooks/useFormatReturnType'; -import { evmToSubstrateAddress } from '../../utils/evmToSubstrateAddress'; -import { getPolkadotApiRx } from '../../utils/polkadot'; export default function useTokenWalletFreeBalance( - address: string, defaultValue: { value1: BN | null } = { value1: null } ) { - const [value1, setValue1] = useState(defaultValue.value1); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - const { rpcEndpoint } = useNetworkStore(); + const { free, isLoading, error } = useBalancesContext(); - useEffect(() => { - let isMounted = true; - let sub: Subscription | null = null; - - const fetchData = async () => { - if (!address || address === '0x0') { - setValue1(null); - setIsLoading(false); - return; - } - - try { - const api = await getPolkadotApiRx(rpcEndpoint); - if (!api) { - throw WebbError.from(WebbErrorCodes.ApiNotReady); - } - - const substrateAddress = evmToSubstrateAddress(address); - - sub = api.query.system - .account(substrateAddress) - .subscribe(async (accData) => { - if (isMounted) { - const freeBalance = accData.data.free; - setValue1(freeBalance); - setIsLoading(false); - } - }); - } catch (error) { - if (isMounted) { - setError( - error instanceof Error - ? error - : WebbError.from(WebbErrorCodes.UnknownError) - ); - setIsLoading(false); - } - } - }; - - fetchData(); - - return () => { - isMounted = false; - sub?.unsubscribe(); - }; - }, [address, rpcEndpoint]); - - return useFormatReturnType({ isLoading, error, data: { value1 } }); + return useFormatReturnType({ + isLoading, + error, + data: { value1: free ?? defaultValue.value1 }, + }); } diff --git a/apps/tangle-dapp/data/NominatorStats/useTotalPayoutRewards.ts b/apps/tangle-dapp/data/NominatorStats/useTotalPayoutRewards.ts new file mode 100644 index 0000000000..7bfe31c92e --- /dev/null +++ b/apps/tangle-dapp/data/NominatorStats/useTotalPayoutRewards.ts @@ -0,0 +1,76 @@ +'use client'; + +import { BN, hexToBn } from '@polkadot/util'; +import { useEffect, useMemo, useState } from 'react'; + +import useNetworkStore from '../../context/useNetworkStore'; +import useFormatReturnType from '../../hooks/useFormatReturnType'; +import useLocalStorage, { LocalStorageKey } from '../../hooks/useLocalStorage'; +import useSubstrateAddress from '../../hooks/useSubstrateAddress'; + +export default function useTotalPayoutRewards( + defaultValue: { value1: BN | null } = { value1: null } +) { + const [value1, setValue1] = useState(defaultValue.value1); + + const { rpcEndpoint } = useNetworkStore(); + + const { valueOpt: cachedPayouts } = useLocalStorage( + LocalStorageKey.PAYOUTS, + true + ); + + const address = useSubstrateAddress(); + + const payoutsData = useMemo(() => { + if ( + cachedPayouts === null || + cachedPayouts.value === null || + address === null + ) { + return []; + } + + const payouts = cachedPayouts.value[rpcEndpoint]?.[address]; + + return payouts ?? []; + }, [address, cachedPayouts, rpcEndpoint]); + + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + try { + if (!address) { + setValue1(null); + setIsLoading(false); + return; + } + + if (payoutsData.length === 0) { + setValue1(new BN(0)); + setIsLoading(false); + return; + } + + const totalPayoutRewards = payoutsData.reduce((acc, payout) => { + const currentReward = hexToBn( + payout.nominatorTotalRewardRaw.toString() + ); + return acc.add(currentReward); + }, new BN(0)); + + setValue1(new BN(totalPayoutRewards.toString())); + setIsLoading(false); + } catch (e) { + setError( + e instanceof Error + ? e + : new Error('An error occurred while calculating total payouts.') + ); + setIsLoading(false); + } + }, [address, payoutsData]); + + return useFormatReturnType({ isLoading, error, data: { value1 } }); +} diff --git a/apps/tangle-dapp/data/NominatorStats/useTotalStakedAmountSubscription.ts b/apps/tangle-dapp/data/NominatorStats/useTotalStakedAmountSubscription.ts index 4a3250d4d1..110bdac1ec 100644 --- a/apps/tangle-dapp/data/NominatorStats/useTotalStakedAmountSubscription.ts +++ b/apps/tangle-dapp/data/NominatorStats/useTotalStakedAmountSubscription.ts @@ -8,16 +8,18 @@ import { type Subscription } from 'rxjs'; import useNetworkStore from '../../context/useNetworkStore'; import useFormatReturnType from '../../hooks/useFormatReturnType'; -import { getPolkadotApiRx } from '../../utils/polkadot'; +import useSubstrateAddress from '../../hooks/useSubstrateAddress'; +import { getApiRx } from '../../utils/polkadot'; export default function useTotalStakedAmountSubscription( - address: string, defaultValue: { value1: BN | null } = { value1: null } ) { const [value1, setValue1] = useState(defaultValue.value1); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); + const { rpcEndpoint, nativeTokenSymbol } = useNetworkStore(); + const address = useSubstrateAddress(); useEffect(() => { let isMounted = true; @@ -25,7 +27,7 @@ export default function useTotalStakedAmountSubscription( const subscribeData = async () => { try { - const api = await getPolkadotApiRx(rpcEndpoint); + const api = await getApiRx(rpcEndpoint); if (!address) { setValue1(null); diff --git a/apps/tangle-dapp/data/NominatorStats/useTotalUnbondedAndUnbondingAmount.ts b/apps/tangle-dapp/data/NominatorStats/useTotalUnbondedAndUnbondingAmount.ts deleted file mode 100644 index 17aaa9cc86..0000000000 --- a/apps/tangle-dapp/data/NominatorStats/useTotalUnbondedAndUnbondingAmount.ts +++ /dev/null @@ -1,68 +0,0 @@ -'use client'; - -import { BN, BN_ZERO } from '@polkadot/util'; -import { useEffect, useMemo, useState } from 'react'; - -import useFormatReturnType from '../../hooks/useFormatReturnType'; -import useUnbondingRemainingErasSubscription from './useUnbondingRemainingErasSubscription'; - -type UnbondedAndUnbondingAmount = { - unbonded: BN; - unbonding: BN; -}; - -export default function useTotalUnbondedAndUnbondingAmount( - address: string, - defaultValue: { value1: UnbondedAndUnbondingAmount | null } = { - value1: null, - } -) { - const [value1, setValue1] = useState(defaultValue.value1); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - - const { - data: unbondingRemainingErasData, - error: unbondingRemainingErasError, - } = useUnbondingRemainingErasSubscription(address); - - const unbondingRemainingEras = useMemo(() => { - if (!unbondingRemainingErasData?.value1) { - return []; - } - - return unbondingRemainingErasData.value1; - }, [unbondingRemainingErasData?.value1]); - - useEffect(() => { - if (unbondingRemainingErasError) { - setError(unbondingRemainingErasError); - setIsLoading(false); - - return; - } - - if (unbondingRemainingEras.length === 0) { - setValue1({ unbonded: BN_ZERO, unbonding: BN_ZERO }); - setIsLoading(false); - - return; - } - - let unbondedAmount = BN_ZERO; - let unbondingAmount = BN_ZERO; - - unbondingRemainingEras.forEach((era) => { - if (era.remainingEras <= 0) { - unbondedAmount = unbondedAmount.add(era.amount); - } else if (era.remainingEras > 0) { - unbondingAmount = unbondingAmount.add(era.amount); - } - }); - - setValue1({ unbonded: unbondedAmount, unbonding: unbondingAmount }); - setIsLoading(false); - }, [unbondingRemainingEras, unbondingRemainingErasError]); - - return useFormatReturnType({ isLoading, error, data: { value1 } }); -} diff --git a/apps/tangle-dapp/data/NominatorStats/useUnbondedAmount.ts b/apps/tangle-dapp/data/NominatorStats/useUnbondedAmount.ts new file mode 100644 index 0000000000..629ea1e73a --- /dev/null +++ b/apps/tangle-dapp/data/NominatorStats/useUnbondedAmount.ts @@ -0,0 +1,32 @@ +import { BN } from '@polkadot/util'; +import { useMemo } from 'react'; + +import useUnbonding from '../staking/useUnbonding'; + +const useUnbondedAmount = () => { + const { result: unbondingEntriesOpt, ...other } = useUnbonding(); + + const unbondedTotalAmount = useMemo(() => { + if (unbondingEntriesOpt === null) { + return null; + } + + return unbondingEntriesOpt.map((entries) => + entries.reduce((acc, entry) => { + // Only consider those entries whose remaining eras + // are less than or equal to 0 (ie. already unbonded). + if (entry.remainingEras.lten(0)) { + return acc.add(entry.amount); + } + + // Do not add to unbonded amount if the entry + // is still in the unbonding period. + return acc; + }, new BN(0)) + ); + }, [unbondingEntriesOpt]); + + return { result: unbondedTotalAmount, ...other }; +}; + +export default useUnbondedAmount; diff --git a/apps/tangle-dapp/data/NominatorStats/useUnbondingAmount.ts b/apps/tangle-dapp/data/NominatorStats/useUnbondingAmount.ts new file mode 100644 index 0000000000..b7c171356d --- /dev/null +++ b/apps/tangle-dapp/data/NominatorStats/useUnbondingAmount.ts @@ -0,0 +1,28 @@ +'use client'; + +import { BN } from '@polkadot/util'; +import { useMemo } from 'react'; + +import useUnbonding from '../staking/useUnbonding'; + +const useUnbondingAmount = () => { + const { result: unbondingEntriesOpt, ...other } = useUnbonding(); + + const unbondingTotalAmount = useMemo(() => { + if (unbondingEntriesOpt === null) { + return null; + } + + return unbondingEntriesOpt.map((entries) => + entries + // Only consider the entries that have remaining eras. + .filter((entry) => entry.remainingEras.gten(1)) + // Sum their amounts. + .reduce((acc, entry) => acc.add(entry.amount), new BN(0)) + ); + }, [unbondingEntriesOpt]); + + return { result: unbondingTotalAmount, ...other }; +}; + +export default useUnbondingAmount; diff --git a/apps/tangle-dapp/data/NominatorStats/useUnbondingAmountSubscription.ts b/apps/tangle-dapp/data/NominatorStats/useUnbondingAmountSubscription.ts deleted file mode 100644 index 52c659eb72..0000000000 --- a/apps/tangle-dapp/data/NominatorStats/useUnbondingAmountSubscription.ts +++ /dev/null @@ -1,74 +0,0 @@ -'use client'; - -import { BN, BN_ZERO } from '@polkadot/util'; -import { WebbError, WebbErrorCodes } from '@webb-tools/dapp-types/WebbError'; -import { useEffect, useState } from 'react'; -import { type Subscription } from 'rxjs'; - -import useNetworkStore from '../../context/useNetworkStore'; -import useFormatReturnType from '../../hooks/useFormatReturnType'; -import { getPolkadotApiRx } from '../../utils/polkadot'; - -export default function useUnbondingAmountSubscription( - address: string, - defaultValue: { value1: BN | null } = { - value1: null, - } -) { - const [value1, setValue1] = useState(defaultValue.value1); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - const { rpcEndpoint, nativeTokenSymbol } = useNetworkStore(); - - useEffect(() => { - let isMounted = true; - let sub: Subscription | null = null; - - const subscribeData = async () => { - try { - const api = await getPolkadotApiRx(rpcEndpoint); - - if (!address) { - setValue1(null); - setIsLoading(false); - return; - } - - sub = api.query.staking - .ledger(address) - .subscribe(async (ledgerData) => { - if (isMounted) { - const ledger = ledgerData.unwrapOrDefault(); - - const totalUnbondingAmout = ledger.unlocking.reduce( - (acc, curr) => - acc.add(new BN(curr.value.toBigInt().toString())), - BN_ZERO - ); - - setValue1(totalUnbondingAmout); - setIsLoading(false); - } - }); - } catch (error) { - if (isMounted) { - setError( - error instanceof Error - ? error - : WebbError.from(WebbErrorCodes.UnknownError) - ); - setIsLoading(false); - } - } - }; - - subscribeData(); - - return () => { - isMounted = false; - sub?.unsubscribe(); - }; - }, [address, rpcEndpoint, nativeTokenSymbol]); - - return useFormatReturnType({ isLoading, error, data: { value1 } }); -} diff --git a/apps/tangle-dapp/data/NominatorStats/useUnbondingRemainingErasSubscription.ts b/apps/tangle-dapp/data/NominatorStats/useUnbondingRemainingErasSubscription.ts deleted file mode 100644 index 6d8688d6cf..0000000000 --- a/apps/tangle-dapp/data/NominatorStats/useUnbondingRemainingErasSubscription.ts +++ /dev/null @@ -1,98 +0,0 @@ -'use client'; - -import { BN } from '@polkadot/util'; -import { WebbError, WebbErrorCodes } from '@webb-tools/dapp-types/WebbError'; -import { useEffect, useState } from 'react'; -import { firstValueFrom, type Subscription } from 'rxjs'; - -import useNetworkStore from '../../context/useNetworkStore'; -import useFormatReturnType from '../../hooks/useFormatReturnType'; -import { getPolkadotApiRx } from '../../utils/polkadot'; - -type UnbondingRemainingEras = { - amount: BN; - remainingEras: number; -}; - -export default function useUnbondingRemainingErasSubscription( - address: string, - defaultValue: { value1: UnbondingRemainingEras[] | null } = { - value1: null, - } -) { - const [value1, setValue1] = useState(defaultValue.value1); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - const { rpcEndpoint, nativeTokenSymbol } = useNetworkStore(); - - useEffect(() => { - let isMounted = true; - let sub: Subscription | null = null; - - const subscribeData = async () => { - try { - const api = await getPolkadotApiRx(rpcEndpoint); - - if (!address) { - setValue1(null); - setIsLoading(false); - return; - } - - const currentEraPromise = firstValueFrom( - api.query.staking.currentEra() - ); - - sub = api.query.staking - .ledger(address) - .subscribe(async (ledgerData) => { - if (isMounted) { - const ledger = ledgerData.unwrapOrDefault(); - - const currentEraOption = await currentEraPromise; - const currentEra = currentEraOption.unwrapOrDefault().toNumber(); - - const unbondingRemainingEras = ledger.unlocking.map( - async (unlockChunk) => { - const unbondedAmount = new BN( - unlockChunk.value.toBigInt().toString() - ); - const unlockingEra = unlockChunk.era.toNumber(); - const remainingEras = unlockingEra - currentEra; - return { - amount: unbondedAmount, - remainingEras, - }; - } - ); - - const unbondingRemainingErasFormatted = await Promise.all( - unbondingRemainingEras - ); - - setValue1(unbondingRemainingErasFormatted ?? null); - setIsLoading(false); - } - }); - } catch (error) { - if (isMounted) { - setError( - error instanceof Error - ? error - : WebbError.from(WebbErrorCodes.UnknownError) - ); - setIsLoading(false); - } - } - }; - - subscribeData(); - - return () => { - isMounted = false; - sub?.unsubscribe(); - }; - }, [address, rpcEndpoint, nativeTokenSymbol]); - - return useFormatReturnType({ isLoading, error, data: { value1 } }); -} diff --git a/apps/tangle-dapp/data/ServiceDetails/getServiceDetailsInfo.ts b/apps/tangle-dapp/data/ServiceDetails/getServiceDetailsInfo.ts deleted file mode 100644 index 73d4ef3cd3..0000000000 --- a/apps/tangle-dapp/data/ServiceDetails/getServiceDetailsInfo.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { - randEthereumAddress, - randRecentDate, - randSoonDate, -} from '@ngneat/falso'; - -import { RestakingService } from '../../types'; - -type ServiceDetailsInfo = { - serviceType: RestakingService; - thresholds?: number; - key?: string; - startTimestamp: Date; - endTimestamp: Date; -}; - -export default async function getServiceDetailsInfo( - _: string -): Promise { - return { - serviceType: RestakingService.ZK_SAAS_GROTH16, - thresholds: 3, - key: randEthereumAddress(), - startTimestamp: randRecentDate({ days: 10 }), - endTimestamp: randSoonDate({ days: 10 }), - }; -} diff --git a/apps/tangle-dapp/data/ServiceDetails/getSigningRules.ts b/apps/tangle-dapp/data/ServiceDetails/getSigningRules.ts deleted file mode 100644 index 4d4e64ccc9..0000000000 --- a/apps/tangle-dapp/data/ServiceDetails/getSigningRules.ts +++ /dev/null @@ -1,91 +0,0 @@ -const MOCK_FILE = `pragma circom 2.0.0; - -include "../../node_modules/circomlib/circuits/poseidon.circom"; -include "../../node_modules/circomlib/circuits/bitify.circom"; -include "./merkleTreeUpdater.circom"; -include "./treeUpdateArgsHasher.circom"; -include "./merkleTree.circom"; - -// Computes hashes of the next tree layer -template TreeLayer(height) { - var nItems = 1 << height; - signal input ins[nItems * 2]; - signal output outs[nItems]; - - component hash[nItems]; - for(var i = 0; i < nItems; i++) { - hash[i] = HashLeftRight(); - hash[i].left <== ins[i * 2]; - hash[i].right <== ins[i * 2 + 1]; - hash[i].hash ==> outs[i]; - } -} - -// Inserts a leaf batch into a tree -// Checks that tree previously contained zero leaves in the same position -// Hashes leaves with Poseidon hash -// \`batchLevels\` should be less than \`levels\` -template BatchTreeUpdate(levels, batchLevels, zeroBatchLeaf) { - var height = levels - batchLevels; - var nLeaves = 1 << batchLevels; - signal input argsHash; - signal input oldRoot; - signal input newRoot; - signal input pathIndices; - signal input pathElements[height]; - signal input leaves[nLeaves]; - /* signal input blocks[nLeaves]; */ - // Check that hash of arguments is correct - // We compress arguments into a single hash to considerably reduce gas usage on chain - component argsHasher = TreeUpdateArgsHasher(nLeaves); - argsHasher.oldRoot <== oldRoot; - argsHasher.newRoot <== newRoot; - argsHasher.pathIndices <== pathIndices; - for(var i = 0; i < nLeaves; i++) { - argsHasher.leaves[i] <== leaves[i]; - } - argsHash === argsHasher.out; - // Compute batch subtree merkle root - component layers[batchLevels]; - for(var level = batchLevels - 1; level >= 0; level--) { - layers[level] = TreeLayer(level); - for(var i = 0; i < (1 << (level + 1)); i++) { - layers[level].ins[i] <== level == batchLevels - 1 ? leaves[i] : layers[level + 1].outs[i]; - } - } - // Verify that batch subtree was inserted correctly - component treeUpdater = MerkleTreeUpdater(height, zeroBatchLeaf); - treeUpdater.oldRoot <== oldRoot; - treeUpdater.newRoot <== newRoot; - treeUpdater.leaf <== layers[0].outs[0]; - treeUpdater.pathIndices <== pathIndices; - for(var i = 0; i < height; i++) { - treeUpdater.pathElements[i] <== pathElements[i]; - } -} - -// zeroLeaf = keccak256("tornado") % FIELD_SIZE -// zeroBatchLeaf is poseidon(zeroLeaf, zeroLeaf) (batchLevels - 1) times -function nthZero(n) { - assert(n <= 15); - if (n == 0) return 21663839004416932945382355908790599225266501822907911457504978515578255421292; - if (n == 1) return 8995896153219992062710898675021891003404871425075198597897889079729967997688; - if (n == 2) return 15126246733515326086631621937388047923581111613947275249184377560170833782629; - if (n == 3) return 6404200169958188928270149728908101781856690902670925316782889389790091378414; - if (n == 4) return 17903822129909817717122288064678017104411031693253675943446999432073303897479; - if (n == 5) return 11423673436710698439362231088473903829893023095386581732682931796661338615804; - if (n == 6) return 10494842461667482273766668782207799332467432901404302674544629280016211342367; - if (n == 7) return 17400501067905286947724900644309270241576392716005448085614420258732805558809; - if (n == 8) return 7924095784194248701091699324325620647610183513781643345297447650838438175245; - if (n == 9) return 3170907381568164996048434627595073437765146540390351066869729445199396390350; - if (n == 10) return 21224698076141654110749227566074000819685780865045032659353546489395159395031; - if (n == 11) return 18113275293366123216771546175954550524914431153457717566389477633419482708807; - if (n == 12) return 1952712013602708178570747052202251655221844679392349715649271315658568301659; - if (n == 13) return 18071586466641072671725723167170872238457150900980957071031663421538421560166; - if (n == 14) return 9993139859464142980356243228522899168680191731482953959604385644693217291503; - if (n == 15) return 14825089209834329031146290681677780462512538924857394026404638992248153156554; -}`; - -export default async function getSigningRules(_: string) { - return MOCK_FILE; -} diff --git a/apps/tangle-dapp/data/ServiceDetails/useServiceParticipants.ts b/apps/tangle-dapp/data/ServiceDetails/useServiceParticipants.ts deleted file mode 100644 index 800004c137..0000000000 --- a/apps/tangle-dapp/data/ServiceDetails/useServiceParticipants.ts +++ /dev/null @@ -1,37 +0,0 @@ -'use client'; - -import { useEffect, useState } from 'react'; - -import useFormatReturnType from '../../hooks/useFormatReturnType'; -import type { ServiceParticipant } from '../../types'; - -const participantsArr = new Array(5).fill({ - address: '5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy', - identity: 'participant_1', - twitter: 'https://twitter.com/tangle_network', - discord: 'https://discord.com/invite/krp36ZSR8J', - email: 'someone@example.com', - web: 'https://tangle.tools/', -} satisfies ServiceParticipant); - -export default function useServiceParticipants(serviceId: string) { - console.log('serviceId :', serviceId); - const [participants, setParticipants] = useState( - null - ); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - - // TODO: integrate backend - useEffect(() => { - setIsLoading(false); - setError(null); - setParticipants(participantsArr); - }, []); - - return useFormatReturnType({ - isLoading, - error, - data: participants, - }); -} diff --git a/apps/tangle-dapp/data/ServiceTables/getActiveServices.ts b/apps/tangle-dapp/data/ServiceTables/getActiveServices.ts deleted file mode 100644 index 809d4b08e6..0000000000 --- a/apps/tangle-dapp/data/ServiceTables/getActiveServices.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { BN_TEN } from '@polkadot/util'; - -import { RestakingService, type Service } from '../../types'; - -export default async function getActiveServices(): Promise { - return [ - { - id: '123', - serviceType: RestakingService.ZK_SAAS_GROTH16, - participants: 2, - threshold: 3, - earnings: BN_TEN, - expirationBlock: '456', - }, - { - id: '124', - serviceType: RestakingService.TSS_SILENT_SHARD_DKLS23SECP256K1, - participants: 1, - earnings: BN_TEN, - expirationBlock: '456', - }, - { - id: '125', - serviceType: RestakingService.LIGHT_CLIENT_RELAYING, - participants: 2, - expirationBlock: '456', - }, - { - id: '126', - serviceType: RestakingService.ZK_SAAS_MARLIN, - participants: 12, - threshold: 3, - earnings: BN_TEN, - expirationBlock: '456', - }, - { - id: '127', - serviceType: RestakingService.LIGHT_CLIENT_RELAYING, - participants: 9, - expirationBlock: '456', - }, - ]; -} diff --git a/apps/tangle-dapp/data/ServiceTables/index.ts b/apps/tangle-dapp/data/ServiceTables/index.ts deleted file mode 100644 index 9410dd5448..0000000000 --- a/apps/tangle-dapp/data/ServiceTables/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as getActiveServices } from './getActiveServices'; -export { default as useActiveServicesByValidator } from './useActiveServicesByValidator'; diff --git a/apps/tangle-dapp/data/ServiceTables/useActiveServicesByValidator.ts b/apps/tangle-dapp/data/ServiceTables/useActiveServicesByValidator.ts deleted file mode 100644 index 5c543a5da1..0000000000 --- a/apps/tangle-dapp/data/ServiceTables/useActiveServicesByValidator.ts +++ /dev/null @@ -1,115 +0,0 @@ -'use client'; - -import { BN } from '@polkadot/util'; -import { useWebbUI } from '@webb-tools/webb-ui-components/hooks/useWebbUI'; -import { useEffect, useState } from 'react'; - -import { - TANGLE_TO_SERVICE_TYPE_TSS_MAP, - TANGLE_TO_SERVICE_TYPE_ZK_SAAS_MAP, -} from '../../constants'; -import useNetworkStore from '../../context/useNetworkStore'; -import { Service } from '../../types'; -import ensureError from '../../utils/ensureError'; -import { getPolkadotApiPromise } from '../../utils/polkadot/api'; -import useJobIdAndTypeLookupByValidator from './useJobIdAndTypeLookupByValidator'; - -export default function useActiveServicesByValidator(validatorAddress: string) { - const { rpcEndpoint } = useNetworkStore(); - const { notificationApi } = useWebbUI(); - const { - data: validatorIdAndTypeLookup, - isLoading: isLoadingValidatorIdAndTypeLookup, - error: validatorIdAndTypeLookupError, - } = useJobIdAndTypeLookupByValidator(validatorAddress); - - const [services, setServices] = useState([]); - const [isLoadingServices, setIsLoadingServices] = useState(true); - const [errorLoadingServices, setErrorLoadingServices] = - useState(null); - - useEffect(() => { - const fetchData = async () => { - if (validatorIdAndTypeLookup === null) { - setServices([]); - return; - } - - try { - const api = await getPolkadotApiPromise(rpcEndpoint); - const fetchedServices = ( - await Promise.all( - validatorIdAndTypeLookup.map(async (service) => { - const jobInfoData = await api.query.jobs.submittedJobs( - service.type, - service.id - ); - if (!jobInfoData.isSome) { - throw new Error('Job info not found'); - } else { - const jobInfo = jobInfoData.unwrap(); - const jobType = jobInfo.jobType; - if (jobType.isNone) { - throw new Error('Error fetching data for specific job'); - } - const id = service.id.toString(); - const expirationBlock = jobInfo.expiry.toString(); - const fee = jobInfo.fee.toBn(); - - if (jobType.isDkgtssPhaseOne) { - const jobDetails = jobType.asDkgtssPhaseOne; - const participantsNum = jobDetails.participants.length; - return { - id, - serviceType: - TANGLE_TO_SERVICE_TYPE_TSS_MAP[jobDetails.roleType.type], - participants: participantsNum, - threshold: jobDetails.threshold.toNumber(), - expirationBlock, - earnings: fee.div(new BN(participantsNum)), - }; - } else if (jobType.isZkSaaSPhaseOne) { - const jobDetails = jobType.asZkSaaSPhaseOne; - const participantsNum = jobDetails.participants.length; - return { - id, - serviceType: - TANGLE_TO_SERVICE_TYPE_ZK_SAAS_MAP[ - jobDetails.roleType.type - ], - participants: participantsNum, - expirationBlock, - earnings: fee.div(new BN(participantsNum)), - }; - } else { - return null; - } - } - }) - ) - ).filter((service) => service !== null) as Service[]; - setServices(fetchedServices); - } catch (error) { - setErrorLoadingServices(ensureError(error)); - } finally { - setIsLoadingServices(false); - } - }; - - fetchData(); - }, [notificationApi, validatorIdAndTypeLookup, rpcEndpoint]); - - useEffect(() => { - if (validatorIdAndTypeLookupError || errorLoadingServices) { - notificationApi({ - message: 'Failed to load services', - variant: 'error', - }); - } - }, [notificationApi, validatorIdAndTypeLookupError, errorLoadingServices]); - - return { - services, - isLoading: isLoadingValidatorIdAndTypeLookup || isLoadingServices, - }; -} diff --git a/apps/tangle-dapp/data/ValidatorTables/useActiveValidators.ts b/apps/tangle-dapp/data/ValidatorTables/useActiveValidators.ts index fe86d319ec..4181a9c5b5 100644 --- a/apps/tangle-dapp/data/ValidatorTables/useActiveValidators.ts +++ b/apps/tangle-dapp/data/ValidatorTables/useActiveValidators.ts @@ -1,14 +1,20 @@ +import { DEFAULT_FLAGS_ELECTED } from '@webb-tools/dapp-config'; import { useCallback } from 'react'; +import { map } from 'rxjs'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; +import useApiRx from '../../hooks/useApiRx'; import { useValidators } from './useValidators'; const useActiveValidators = () => { - const { data: activeValidatorAddresses } = usePolkadotApiRx( - useCallback((api) => api.query.session.validators(), []) + const { result: activeValidatorAddresses } = useApiRx( + useCallback((api) => { + const electedInfo = api.derive.staking.electedInfo(DEFAULT_FLAGS_ELECTED); + + return electedInfo.pipe(map((derive) => derive.nextElected)); + }, []) ); - return useValidators(activeValidatorAddresses, 'Active'); + return useValidators(activeValidatorAddresses, true); }; export default useActiveValidators; diff --git a/apps/tangle-dapp/data/ValidatorTables/useAllValidators.ts b/apps/tangle-dapp/data/ValidatorTables/useAllValidators.ts index 6765508eaa..b2d4844842 100644 --- a/apps/tangle-dapp/data/ValidatorTables/useAllValidators.ts +++ b/apps/tangle-dapp/data/ValidatorTables/useAllValidators.ts @@ -4,11 +4,10 @@ import useActiveValidators from './useActiveValidators'; import useWaitingValidators from './useWaitingValidators'; const useAllValidators = () => { - console.debug('useAllValidators'); - const activeValidators = useActiveValidators(); const waitingValidators = useWaitingValidators(); + // TODO: Consider making this a map instead of an array. const allValidators = useMemo( () => [...(activeValidators ?? []), ...(waitingValidators ?? [])], [activeValidators, waitingValidators] diff --git a/apps/tangle-dapp/data/ValidatorTables/useValidatorIdentityNames.ts b/apps/tangle-dapp/data/ValidatorTables/useValidatorIdentityNames.ts index c571f0c7ad..b32eff405c 100644 --- a/apps/tangle-dapp/data/ValidatorTables/useValidatorIdentityNames.ts +++ b/apps/tangle-dapp/data/ValidatorTables/useValidatorIdentityNames.ts @@ -5,8 +5,8 @@ import { ITuple } from '@polkadot/types/types'; import { useCallback } from 'react'; import { map } from 'rxjs'; +import useApiRx from '../../hooks/useApiRx'; import useEntryMap from '../../hooks/useEntryMap'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; import { extractDataFromIdentityInfo, IdentityDataType, @@ -30,7 +30,7 @@ const mapIdentitiesToNames = ( }); const useValidatorIdentityNames = () => { - const { data: identityNames, ...other } = usePolkadotApiRx( + const { result: identityNames, ...other } = useApiRx( useCallback( (api) => api.query.identity.identityOf.entries().pipe(map(mapIdentitiesToNames)), @@ -40,7 +40,7 @@ const useValidatorIdentityNames = () => { const nameMap = useEntryMap(identityNames, (key) => key); - return { data: nameMap, ...other }; + return { result: nameMap, ...other }; }; export default useValidatorIdentityNames; diff --git a/apps/tangle-dapp/data/ValidatorTables/useValidators.ts b/apps/tangle-dapp/data/ValidatorTables/useValidators.ts old mode 100644 new mode 100755 index e692781110..b939b03365 --- a/apps/tangle-dapp/data/ValidatorTables/useValidators.ts +++ b/apps/tangle-dapp/data/ValidatorTables/useValidators.ts @@ -1,125 +1,80 @@ import { AccountId32 } from '@polkadot/types/interfaces'; -import { - PalletStakingValidatorPrefs, - SpStakingExposure, -} from '@polkadot/types/lookup'; -import { BN_ZERO } from '@polkadot/util'; import { useCallback, useMemo } from 'react'; -import useNetworkStore from '../../context/useNetworkStore'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; +import useApiRx from '../../hooks/useApiRx'; import { Validator } from '../../types'; -import { formatTokenBalance } from '../../utils/polkadot'; -import useCurrentEra from '../staking/useCurrentEra'; -import useValidatorsPrefs from '../staking/useValidatorsPrefs'; +import createValidator from '../../utils/staking/createValidator'; +import useAllRestakingLedgers from '../restaking/useAllRestakingLedgers'; +import useRestakingJobIdMap from '../restaking/useRestakingJobIdMap'; +import useStakingExposures2 from '../staking/useStakingExposures2'; +import useValidatorPrefs from '../staking/useValidatorPrefs'; import useValidatorIdentityNames from './useValidatorIdentityNames'; export const useValidators = ( addresses: AccountId32[] | null, - status: 'Active' | 'Waiting' + isActive: boolean ): Validator[] | null => { - const { nativeTokenSymbol } = useNetworkStore(); - const { data: currentEra } = useCurrentEra(); - const { data: identityNames } = useValidatorIdentityNames(); - const { data: validatorPrefs } = useValidatorsPrefs(); + const { result: identityNames } = useValidatorIdentityNames(); + const { result: validatorPrefs } = useValidatorPrefs(); + const { result: exposures } = useStakingExposures2(isActive); + const { result: restakingLedgers } = useAllRestakingLedgers(); + const { result: jobIdLookups } = useRestakingJobIdMap(); - const { data: nominations } = usePolkadotApiRx( + const { result: nominations } = useApiRx( useCallback((api) => api.query.staking.nominators.entries(), []) ); - const { data: exposures } = usePolkadotApiRx( - useCallback( - (api) => - currentEra === null - ? null - : api.query.staking.erasStakers.entries(currentEra), - [currentEra] - ) + const { result: activeJobs } = useApiRx( + useCallback((api) => api.query.jobs.submittedJobs.entries(), []) ); - const mappedExposures = useMemo(() => { - const map = new Map(); - exposures?.forEach(([storageKey, exposure]) => { - const accountId = storageKey.args[1].toString(); - map.set(accountId, exposure); - }); - return map; - }, [exposures]); - - // Mapping Validator Preferences - const mappedValidatorPrefs = useMemo(() => { - const map = new Map(); - validatorPrefs?.forEach(([storageKey, prefs]) => { - const accountId = storageKey.args[0].toString(); - map.set(accountId, prefs); - }); - return map; - }, [validatorPrefs]); - return useMemo(() => { if ( addresses === null || identityNames === null || exposures === null || + restakingLedgers === null || nominations === null || - validatorPrefs === null + validatorPrefs === null || + jobIdLookups === null || + activeJobs === null ) { return null; } - return addresses.map((address) => { - const name = identityNames.get(address.toString()) ?? address.toString(); - const exposure = mappedExposures.get(address.toString()); - const totalStakeAmount = exposure?.total.unwrap() ?? BN_ZERO; - - const selfStakedAmount = exposure?.own.toBn() ?? BN_ZERO; - const selfStakedBalance = formatTokenBalance( - selfStakedAmount, - nativeTokenSymbol - ); - - const nominators = nominations.filter(([, nominatorData]) => { - if (nominatorData.isNone) { - return false; - } + return addresses.map((accountId) => + createValidator({ + address: accountId.toString(), + isActive, + identities: identityNames, + prefs: validatorPrefs, + restakingLedgers, + jobs: jobIdLookups, + activeJobIds: activeJobs, + getExposure: (address) => { + const exposure = exposures.get(address); - const nominations = nominatorData.unwrap(); + if (exposure === undefined || exposure.exposureMeta === null) { + return undefined; + } - return ( - nominations.targets && - nominations.targets.some( - (target) => target.toString() === address.toString() - ) - ); - }); - - const validatorPref = mappedValidatorPrefs.get(address.toString()); - const commissionRate = validatorPref?.commission.unwrap().toNumber() ?? 0; - const commission = commissionRate / 10_000_000; - - return { - address: address.toString(), - identityName: name, - selfStaked: selfStakedBalance, - effectiveAmountStaked: formatTokenBalance( - totalStakeAmount, - nativeTokenSymbol - ), - effectiveAmountStakedRaw: totalStakeAmount.toString(), - delegations: nominators.length.toString(), - commission: commission.toString(), - status, - }; - }); + return { + own: exposure.exposureMeta.own.toBn(), + total: exposure.exposureMeta.total.toBn(), + nominatorCount: exposure.exposureMeta.nominatorCount.toNumber(), + }; + }, + }) + ); }, [ + activeJobs, addresses, - identityNames, exposures, + identityNames, + isActive, + jobIdLookups, nominations, + restakingLedgers, validatorPrefs, - mappedExposures, - mappedValidatorPrefs, - nativeTokenSymbol, - status, ]); }; diff --git a/apps/tangle-dapp/data/ValidatorTables/useWaitingValidators.ts b/apps/tangle-dapp/data/ValidatorTables/useWaitingValidators.ts index ef16f2e1cc..33a5febcd4 100644 --- a/apps/tangle-dapp/data/ValidatorTables/useWaitingValidators.ts +++ b/apps/tangle-dapp/data/ValidatorTables/useWaitingValidators.ts @@ -1,19 +1,22 @@ +import { DEFAULT_FLAGS_WAITING } from '@webb-tools/dapp-config'; import { useCallback } from 'react'; import { map } from 'rxjs'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; +import useApiRx from '../../hooks/useApiRx'; import { useValidators } from './useValidators'; const useWaitingValidators = () => { - const { data: waitingValidatorAddresses } = usePolkadotApiRx( + const { result: waitingValidatorAddresses } = useApiRx( useCallback( (api) => - api.derive.staking.waitingInfo().pipe(map((info) => info.waiting)), + api.derive.staking + .waitingInfo(DEFAULT_FLAGS_WAITING) + .pipe(map((derive) => derive.waiting)), [] ) ); - return useValidators(waitingValidatorAddresses, 'Waiting'); + return useValidators(waitingValidatorAddresses, false); }; export default useWaitingValidators; diff --git a/apps/tangle-dapp/data/balances/useBalances.ts b/apps/tangle-dapp/data/balances/useBalances.ts index 168623f54d..6d52a6451b 100644 --- a/apps/tangle-dapp/data/balances/useBalances.ts +++ b/apps/tangle-dapp/data/balances/useBalances.ts @@ -1,11 +1,8 @@ import { BN, BN_ZERO, bnMax } from '@polkadot/util'; -import { useWebContext } from '@webb-tools/api-provider-environment'; -import { useCallback, useEffect, useState } from 'react'; +import { useCallback } from 'react'; import { map } from 'rxjs/operators'; -import usePolkadotApiRx, { - ObservableFactory, -} from '../../hooks/usePolkadotApiRx'; +import useApiRx, { ObservableFactory } from '../../hooks/useApiRx'; import useSubstrateAddress from '../../hooks/useSubstrateAddress'; export type AccountBalances = { @@ -32,14 +29,15 @@ export type AccountBalances = { locked: BN | null; }; -const useBalances = (): AccountBalances => { - const { activeAccount } = useWebContext(); +const useBalances = () => { const activeSubstrateAddress = useSubstrateAddress(); - const [balances, setBalances] = useState(null); const balancesFetcher = useCallback>( (api) => { - if (!activeSubstrateAddress) return null; + if (activeSubstrateAddress === null) { + return null; + } + return api.query.system.account(activeSubstrateAddress).pipe( map(({ data }) => { // Note that without the null/undefined check, an error @@ -69,26 +67,13 @@ const useBalances = (): AccountBalances => { [activeSubstrateAddress] ); - const { data, isLoading } = usePolkadotApiRx(balancesFetcher); - - useEffect(() => { - // If there's data and it's not loading, set the balances. - if (data && !isLoading) { - setBalances(data); - } - }, [data, isLoading]); - - // Reset balances if there is no active account. - useEffect(() => { - if (activeAccount === null) { - setBalances(null); - } - }, [activeAccount]); + const { result: balances, ...other } = useApiRx(balancesFetcher); return { free: balances?.free ?? null, transferable: balances?.transferable ?? null, locked: balances?.locked ?? null, + ...other, }; }; diff --git a/apps/tangle-dapp/data/balances/useBalancesLock.ts b/apps/tangle-dapp/data/balances/useBalancesLock.ts index 01d3f74c7a..b5bdbcaeca 100644 --- a/apps/tangle-dapp/data/balances/useBalancesLock.ts +++ b/apps/tangle-dapp/data/balances/useBalancesLock.ts @@ -1,18 +1,27 @@ -import { BN_ZERO } from '@polkadot/util'; +import { PalletBalancesReasons } from '@polkadot/types/lookup'; +import { BN, BN_ZERO } from '@polkadot/util'; import { useCallback, useMemo } from 'react'; import { SubstrateLockId } from '../../constants'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; +import useApiRx from '../../hooks/useApiRx'; import useSubstrateAddress from '../../hooks/useSubstrateAddress'; import getSubstrateLockId from '../../utils/getSubstrateLockId'; -const useBalancesLock = (lockId: SubstrateLockId) => { +export type BalancesLock = { + amount: BN | null; + reasons: PalletBalancesReasons | null; +}; + +const useBalancesLock = (lockId: SubstrateLockId): BalancesLock => { const activeSubstrateAddress = useSubstrateAddress(); - const { data: locks } = usePolkadotApiRx( + const { result: locks } = useApiRx( useCallback( (api) => { - if (!activeSubstrateAddress) return null; + if (activeSubstrateAddress === null) { + return null; + } + return api.query.balances.locks(activeSubstrateAddress); }, [activeSubstrateAddress] diff --git a/apps/tangle-dapp/data/balances/useEvmBalanceWithdrawTx.ts b/apps/tangle-dapp/data/balances/useEvmBalanceWithdrawTx.ts new file mode 100644 index 0000000000..58a73b3b9d --- /dev/null +++ b/apps/tangle-dapp/data/balances/useEvmBalanceWithdrawTx.ts @@ -0,0 +1,41 @@ +import type { HexString } from '@polkadot/util/types'; +import { ZERO_BIG_INT } from '@webb-tools/dapp-config'; +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { useSubstrateTxWithNotification } from '../../hooks/useSubstrateTx'; +import { GetSuccessMessageFunctionType } from '../../types'; + +type EvmBalanceWithdrawContext = { + pendingEvmBalance: bigint | null; + evmAddress20: HexString | null; +}; + +const useEvmBalanceWithdrawTx = (tokenAmountStr?: string | null) => { + const getSuccessMessageFnc: GetSuccessMessageFunctionType = + useCallback( + () => + typeof tokenAmountStr === 'string' + ? `Successfully withdrew ${tokenAmountStr}.` + : '', + [tokenAmountStr] + ); + + return useSubstrateTxWithNotification( + TxName.WITHDRAW_EVM_BALANCE, + useCallback((api, _, { pendingEvmBalance, evmAddress20 }) => { + if ( + evmAddress20 === null || + pendingEvmBalance === null || + pendingEvmBalance === ZERO_BIG_INT + ) { + return null; + } + + return api.tx.evm.withdraw(evmAddress20, pendingEvmBalance); + }, []), + getSuccessMessageFnc + ); +}; + +export default useEvmBalanceWithdrawTx; diff --git a/apps/tangle-dapp/data/balances/useExistentialDeposit.ts b/apps/tangle-dapp/data/balances/useExistentialDeposit.ts index 92c32c7bf6..b1f904828a 100644 --- a/apps/tangle-dapp/data/balances/useExistentialDeposit.ts +++ b/apps/tangle-dapp/data/balances/useExistentialDeposit.ts @@ -3,23 +3,23 @@ import { BN_ONE } from '@polkadot/util'; import { useCallback, useEffect, useState } from 'react'; -import usePolkadotApi from '../../hooks/usePolkadotApi'; +import useApi from '../../hooks/useApi'; function useExistentialDeposit() { // Default existential deposit is 1 unit. const [existentialDeposit, setExistentialDeposit] = useState(BN_ONE); - const { isApiLoading, isValueLoading, error, value } = usePolkadotApi( + const { result } = useApi( useCallback(async (api) => api.consts.balances.existentialDeposit, []) ); useEffect(() => { - if (isApiLoading || isValueLoading || error !== null || value === null) { + if (result === null) { return; } - setExistentialDeposit((prev) => (value.eq(prev) ? prev : value)); - }, [error, isApiLoading, isValueLoading, value]); + setExistentialDeposit((prev) => (result.eq(prev) ? prev : result)); + }, [result]); return existentialDeposit; } diff --git a/apps/tangle-dapp/data/balances/usePendingEVMBalance.ts b/apps/tangle-dapp/data/balances/usePendingEVMBalance.ts deleted file mode 100644 index c96a515eb8..0000000000 --- a/apps/tangle-dapp/data/balances/usePendingEVMBalance.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { ZERO_BIG_INT } from '@webb-tools/dapp-config/constants'; -import isSubstrateAddress from '@webb-tools/dapp-types/utils/isSubstrateAddress'; -import { useCallback, useMemo } from 'react'; - -import useActiveAccountAddress from '../../hooks/useActiveAccountAddress'; -import usePromise from '../../hooks/usePromise'; -import useSubstrateTx from '../../hooks/useSubstrateTx'; -import useViemPublicClient from '../../hooks/useViemPublicClient'; -import { substrateToEvmAddress } from '../../utils/substrateToEvmAddress'; - -export default function usePendingEVMBalance() { - const activeAccountAddress = useActiveAccountAddress(); - - // Only check the evm balance if the active account address is Substrate address. - const address = useMemo(() => { - if (!isValidAddress(activeAccountAddress)) { - return null; - } - - return substrateToEvmAddress(activeAccountAddress); - }, [activeAccountAddress]); - - const evmClient = useViemPublicClient(); - - const { result: balance } = usePromise( - useCallback(async () => { - if (!evmClient || address === null) { - return null; - } - - return evmClient.getBalance({ - address, - }); - }, [address, evmClient]), - null - ); - - const withdrawTx = useSubstrateTx( - useCallback( - (api) => { - if (address === null || balance === null || balance === ZERO_BIG_INT) { - return null; - } - - return api.tx.evm.withdraw(address, balance); - }, - [address, balance] - ) - ); - - return { - balance, - ...withdrawTx, - }; -} - -/** @internal */ -const isValidAddress = (address: string | null): address is string => - address !== null && isSubstrateAddress(address); diff --git a/apps/tangle-dapp/data/balances/usePendingEvmBalance.ts b/apps/tangle-dapp/data/balances/usePendingEvmBalance.ts new file mode 100644 index 0000000000..e4352b25ed --- /dev/null +++ b/apps/tangle-dapp/data/balances/usePendingEvmBalance.ts @@ -0,0 +1,40 @@ +import { useCallback, useMemo } from 'react'; + +import useAgnosticAccountInfo from '../../hooks/useAgnosticAccountInfo'; +import usePromise from '../../hooks/usePromise'; +import useViemPublicClient from '../../hooks/useViemPublicClient'; +import { toEvmAddress20 } from '../../utils'; + +/** + * See more here: + * https://docs.tangle.tools/docs/use/addresses/#case-2-sending-from-evm-to-substrate + */ +const usePendingEvmBalance = () => { + const viemPublicClient = useViemPublicClient(); + const { substrateAddress, isEvm } = useAgnosticAccountInfo(); + + // Only check the EVM balance if the active account address + // is a Substrate address. + const evmAddress20 = useMemo(() => { + if (substrateAddress === null || isEvm) { + return null; + } + + return toEvmAddress20(substrateAddress); + }, [isEvm, substrateAddress]); + + const { result: balance } = usePromise( + useCallback(async () => { + if (viemPublicClient === null || evmAddress20 === null) { + return null; + } + + return viemPublicClient.getBalance({ address: evmAddress20 }); + }, [evmAddress20, viemPublicClient]), + null + ); + + return balance; +}; + +export default usePendingEvmBalance; diff --git a/apps/tangle-dapp/data/balances/useTransferTx.ts b/apps/tangle-dapp/data/balances/useTransferTx.ts index 675e69f524..2ad754dae0 100644 --- a/apps/tangle-dapp/data/balances/useTransferTx.ts +++ b/apps/tangle-dapp/data/balances/useTransferTx.ts @@ -1,12 +1,17 @@ import { BN } from '@polkadot/util'; +import { isAddress } from '@polkadot/util-crypto'; +import { shortenString } from '@webb-tools/webb-ui-components/utils/shortenString'; import { useCallback } from 'react'; +import { TxName } from '../../constants'; import { Precompile } from '../../constants/evmPrecompiles'; -import { EvmAbiCallData, EvmTxFactory } from '../../hooks/types'; import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { AbiCall, EvmTxFactory } from '../../hooks/useEvmPrecompileAbiCall'; import useEvmPrecompileFeeFetcher from '../../hooks/useEvmPrecompileFee'; +import useFormatNativeTokenAmount from '../../hooks/useFormatNativeTokenAmount'; import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; -import { evmToSubstrateAddress, substrateToEvmAddress } from '../../utils'; +import { GetSuccessMessageFunctionType } from '../../types'; +import { toEvmAddress20, toSubstrateAddress } from '../../utils'; type TransferTxContext = { receiverAddress: string; @@ -16,6 +21,7 @@ type TransferTxContext = { const useTransferTx = () => { const { fetchEvmPrecompileFees } = useEvmPrecompileFeeFetcher(); + const formatNativeTokenAmount = useFormatNativeTokenAmount(); const evmTxFactory: EvmTxFactory< Precompile.BALANCES_ERC20, @@ -23,12 +29,15 @@ const useTransferTx = () => { > = useCallback( async ({ receiverAddress, amount, maxAmount }) => { const isMaxAmount = amount.eq(maxAmount); - const receiverEvm = substrateToEvmAddress(receiverAddress); - const sharedAbiCallData = { + const recipientEvmAddress20 = isAddress(receiverAddress) + ? toEvmAddress20(receiverAddress) + : receiverAddress; + + const sharedAbiCallData: AbiCall = { functionName: 'transfer', - arguments: [receiverEvm, amount], - } satisfies EvmAbiCallData; + arguments: [recipientEvmAddress20, amount], + }; // If the amount to transfer is not the maximum amount // just return the abi call data for the transfer function. @@ -58,7 +67,7 @@ const useTransferTx = () => { return { ...sharedAbiCallData, - arguments: [receiverEvm, amountToTransfer], + arguments: [recipientEvmAddress20, amountToTransfer], }; }, [fetchEvmPrecompileFees] @@ -69,12 +78,14 @@ const useTransferTx = () => { api, _activeSubstrateAddress, { receiverAddress, amount, maxAmount } - ) => - amount.eq(maxAmount) + ) => { + // Convert the EVM address to a Substrate address, in case + // that it was provided as an EVM address. + const recipientSubstrateAddress = toSubstrateAddress(receiverAddress); + + return amount.eq(maxAmount) ? api.tx.balances.transferAll( - // Convert the EVM address to a Substrate address, in case - // that it was provided as an EVM address. - evmToSubstrateAddress(receiverAddress), + recipientSubstrateAddress, // No need to keep the current account alive false ) @@ -83,19 +94,26 @@ const useTransferTx = () => { // account to drop below the existential deposit, which // would essentially cause the account to be 'reaped', or // deleted from the chain. - api.tx.balances.transferAllowDeath( - // Convert the EVM address to a Substrate address, in case - // that it was provided as an EVM address. - evmToSubstrateAddress(receiverAddress), - amount - ), + api.tx.balances.transferAllowDeath(recipientSubstrateAddress, amount); + }, [] ); + const getSuccessMessageFnc: GetSuccessMessageFunctionType = + useCallback( + ({ receiverAddress, amount }) => + `Successfully transferred ${formatNativeTokenAmount( + amount + )} to ${shortenString(receiverAddress)}.`, + [formatNativeTokenAmount] + ); + return useAgnosticTx({ + name: TxName.TRANSFER, precompile: Precompile.BALANCES_ERC20, evmTxFactory, substrateTxFactory, + getSuccessMessageFnc, }); }; diff --git a/apps/tangle-dapp/data/claims/useAirdropEligibility.ts b/apps/tangle-dapp/data/claims/useAirdropEligibility.ts index 26a0a6050f..f630dce08a 100644 --- a/apps/tangle-dapp/data/claims/useAirdropEligibility.ts +++ b/apps/tangle-dapp/data/claims/useAirdropEligibility.ts @@ -4,17 +4,17 @@ import { isEthereumAddress } from '@polkadot/util-crypto'; import { useCallback, useEffect, useState } from 'react'; import useActiveAccountAddress from '../../hooks/useActiveAccountAddress'; -import usePolkadotApi from '../../hooks/usePolkadotApi'; +import useApiRx from '../../hooks/useApiRx'; const useAirdropEligibility = () => { const [isEligible, setIsEligible] = useState(null); const activeAccountAddress = useActiveAccountAddress(); - const { value: claimInfo } = usePolkadotApi( + const { result: claimInfo } = useApiRx( useCallback( (api) => { if (activeAccountAddress === null) { - return Promise.resolve(null); + return null; } const params = isEthereumAddress(activeAccountAddress) diff --git a/apps/tangle-dapp/data/democracy/useDemocracy.ts b/apps/tangle-dapp/data/democracy/useDemocracy.ts index ec12314844..ac7b5f6210 100644 --- a/apps/tangle-dapp/data/democracy/useDemocracy.ts +++ b/apps/tangle-dapp/data/democracy/useDemocracy.ts @@ -2,17 +2,20 @@ import { useCallback, useMemo } from 'react'; import { map } from 'rxjs'; import { SubstrateLockId } from '../../constants'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; +import useApiRx from '../../hooks/useApiRx'; import useSubstrateAddress from '../../hooks/useSubstrateAddress'; import useBalancesLock from '../balances/useBalancesLock'; const useDemocracy = () => { const activeSubstrateAddress = useSubstrateAddress(); - const { data: votes } = usePolkadotApiRx( + const { result: votes } = useApiRx( useCallback( (api) => { - if (!activeSubstrateAddress) return null; + if (activeSubstrateAddress === null) { + return null; + } + return api.query.democracy.votingOf(activeSubstrateAddress); }, [activeSubstrateAddress] @@ -37,7 +40,7 @@ const useDemocracy = () => { return latestDirectVote[0]; })(); - const { data: latestReferendum } = usePolkadotApiRx( + const { result: latestReferendum } = useApiRx( useCallback( (api) => { if (latestReferendumIndex === null) { diff --git a/apps/tangle-dapp/data/democracy/useDemocracyUnlockTx.ts b/apps/tangle-dapp/data/democracy/useDemocracyUnlockTx.ts index f999f29be9..9715e6b65b 100644 --- a/apps/tangle-dapp/data/democracy/useDemocracyUnlockTx.ts +++ b/apps/tangle-dapp/data/democracy/useDemocracyUnlockTx.ts @@ -7,11 +7,10 @@ import useSubstrateTx from '../../hooks/useSubstrateTx'; * @remarks * This is a Substrate-only transaction (at least for now). */ -const useDemocracyUnlockTx = (notifyTxStatusUpdates?: boolean) => { - return useSubstrateTx( - (api, activeSubstrateAddress) => - api.tx.democracy.unlock(activeSubstrateAddress), - notifyTxStatusUpdates +const useDemocracyUnlockTx = () => { + // TODO: Make this agnostic (add support for EVM). + return useSubstrateTx((api, activeSubstrateAddress) => + api.tx.democracy.unlock(activeSubstrateAddress) ); }; diff --git a/apps/tangle-dapp/data/payouts/useLedgers.ts b/apps/tangle-dapp/data/payouts/useAllLedgers.ts similarity index 62% rename from apps/tangle-dapp/data/payouts/useLedgers.ts rename to apps/tangle-dapp/data/payouts/useAllLedgers.ts index 06239973aa..de9e994a02 100644 --- a/apps/tangle-dapp/data/payouts/useLedgers.ts +++ b/apps/tangle-dapp/data/payouts/useAllLedgers.ts @@ -1,10 +1,10 @@ import { useCallback } from 'react'; +import useApiRx from '../../hooks/useApiRx'; import useEntryMap from '../../hooks/useEntryMap'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; -const useLedgers = () => { - const { data: ledgers, ...other } = usePolkadotApiRx( +const useAllLedgers = () => { + const { result: ledgers, ...other } = useApiRx( useCallback((api) => api.query.staking.ledger.entries(), []) ); @@ -13,4 +13,4 @@ const useLedgers = () => { return { data: ledgerMap, ...other }; }; -export default useLedgers; +export default useAllLedgers; diff --git a/apps/tangle-dapp/data/payouts/useEraTotalRewards.ts b/apps/tangle-dapp/data/payouts/useEraTotalRewards.ts index 248ba1bc04..ae3fecc270 100644 --- a/apps/tangle-dapp/data/payouts/useEraTotalRewards.ts +++ b/apps/tangle-dapp/data/payouts/useEraTotalRewards.ts @@ -1,10 +1,10 @@ import { useCallback } from 'react'; +import useApiRx from '../../hooks/useApiRx'; import useEntryMap from '../../hooks/useEntryMap'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; const useEraTotalRewards = () => { - const { data: erasValidatorRewards, ...other } = usePolkadotApiRx( + const { result: erasValidatorRewards, ...other } = useApiRx( useCallback((api) => api.query.staking.erasValidatorReward.entries(), []) ); diff --git a/apps/tangle-dapp/data/payouts/usePayoutAllTx.ts b/apps/tangle-dapp/data/payouts/usePayoutAllTx.ts new file mode 100644 index 0000000000..25a92fd26f --- /dev/null +++ b/apps/tangle-dapp/data/payouts/usePayoutAllTx.ts @@ -0,0 +1,63 @@ +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { Precompile } from '../../constants/evmPrecompiles'; +import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { EvmTxFactory } from '../../hooks/useEvmPrecompileAbiCall'; +import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; +import { toSubstrateAddress } from '../../utils'; +import optimizeTxBatch from '../../utils/optimizeTxBatch'; +import createEvmBatchCallArgs from '../../utils/staking/createEvmBatchCallArgs'; +import createEvmBatchCallData from '../../utils/staking/createEvmBatchCallData'; +import toEvmAddress32 from '../../utils/toEvmAddress32'; + +export type PayoutAllTxContext = { + validatorEraPairs: { validatorSubstrateAddress: string; era: number }[]; +}; + +const usePayoutAllTx = () => { + const evmTxFactory: EvmTxFactory = + useCallback((context) => { + const batchCalls = context.validatorEraPairs.map( + ({ validatorSubstrateAddress, era }) => { + // The precompile function expects a 32-byte address. + const validatorEvmAddress32 = toEvmAddress32( + validatorSubstrateAddress + ); + + return createEvmBatchCallData(Precompile.STAKING, 'payoutStakers', [ + validatorEvmAddress32, + era, + ]); + } + ); + + return { + functionName: 'batchAll', + arguments: createEvmBatchCallArgs(batchCalls), + }; + }, []); + + const substrateTxFactory: SubstrateTxFactory = + useCallback((api, _activeSubstrateAddress, context) => { + const txs = context.validatorEraPairs.map( + ({ validatorSubstrateAddress: validatorAddress, era }) => { + const validatorSubstrateAddress = + toSubstrateAddress(validatorAddress); + + return api.tx.staking.payoutStakers(validatorSubstrateAddress, era); + } + ); + + return optimizeTxBatch(api, txs); + }, []); + + return useAgnosticTx({ + name: TxName.PAYOUT_ALL, + precompile: Precompile.BATCH, + evmTxFactory, + substrateTxFactory, + }); +}; + +export default usePayoutAllTx; diff --git a/apps/tangle-dapp/data/payouts/usePayoutStakersTx.ts b/apps/tangle-dapp/data/payouts/usePayoutStakersTx.ts new file mode 100644 index 0000000000..6c4ece05ef --- /dev/null +++ b/apps/tangle-dapp/data/payouts/usePayoutStakersTx.ts @@ -0,0 +1,48 @@ +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { Precompile } from '../../constants/evmPrecompiles'; +import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { EvmTxFactory } from '../../hooks/useEvmPrecompileAbiCall'; +import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; +import { toSubstrateAddress } from '../../utils'; +import toEvmAddress32 from '../../utils/toEvmAddress32'; + +export type PayoutStakersTxContext = { + validatorAddress: string; + era: number; +}; + +const usePayoutStakersTx = () => { + const evmTxFactory: EvmTxFactory = + useCallback((context) => { + // The payout stakers precompile function expects a 32-byte address. + const validatorEvmAddress32 = toEvmAddress32(context.validatorAddress); + + return { + functionName: 'payoutStakers', + arguments: [validatorEvmAddress32, context.era], + }; + }, []); + + const substrateTxFactory: SubstrateTxFactory = + useCallback((api, _activeSubstrateAddress, context) => { + const validatorSubstrateAddress = toSubstrateAddress( + context.validatorAddress + ); + + return api.tx.staking.payoutStakers( + validatorSubstrateAddress, + context.era + ); + }, []); + + return useAgnosticTx({ + name: TxName.PAYOUT_STAKERS, + precompile: Precompile.STAKING, + evmTxFactory, + substrateTxFactory, + }); +}; + +export default usePayoutStakersTx; diff --git a/apps/tangle-dapp/data/payouts/usePayouts2.ts b/apps/tangle-dapp/data/payouts/usePayouts2.ts deleted file mode 100644 index e63ff66a98..0000000000 --- a/apps/tangle-dapp/data/payouts/usePayouts2.ts +++ /dev/null @@ -1,242 +0,0 @@ -'use client'; - -import { SpStakingExposure } from '@polkadot/types/lookup'; -import { useCallback, useEffect, useState } from 'react'; - -import useNetworkStore from '../../context/useNetworkStore'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; -import useSubstrateAddress from '../../hooks/useSubstrateAddress'; -import { Payout } from '../../types'; -import { - formatTokenBalance, - getPolkadotApiPromise, - getValidatorCommission, - getValidatorIdentityName, -} from '../../utils/polkadot'; -import useValidatorIdentityNames from '../ValidatorTables/useValidatorIdentityNames'; -import useEraTotalRewards from './useEraTotalRewards'; -import useLedgers from './useLedgers'; - -type ValidatorReward = { - validatorAddress: string; - era: number; - eraTotalRewardPoints: number; - validatorRewardPoints: number; -}; - -const usePayouts2 = () => { - const { rpcEndpoint, nativeTokenSymbol } = useNetworkStore(); - const activeSubstrateAddress = useSubstrateAddress(); - const { data: ledgers } = useLedgers(); - - const { data: erasRewardsPoints } = usePolkadotApiRx( - useCallback((api) => api.query.staking.erasRewardPoints.entries(), []) - ); - - const { data: nominators } = usePolkadotApiRx( - useCallback( - (api) => { - if (!activeSubstrateAddress) return null; - return api.query.staking.nominators(activeSubstrateAddress); - }, - [activeSubstrateAddress] - ) - ); - - const { data: identities } = useValidatorIdentityNames(); - const { data: eraTotalRewards } = useEraTotalRewards(); - const [payouts, setPayouts] = useState(null); - const nominations = nominators?.isSome ? nominators.unwrap().targets : null; - - useEffect(() => { - if ( - nominations === null || - erasRewardsPoints === null || - ledgers === null || - identities === null || - activeSubstrateAddress === null || - eraTotalRewards === null - ) { - return; - } - - const rewards: ValidatorReward[] = []; - - for (const validatorAddress of nominations) { - for (const point of erasRewardsPoints) { - const era = point[0].args[0].toNumber(); - const rewardsForEra = point[1]; - - const validatorRewardPoints = - rewardsForEra.individual.get(validatorAddress); - - // No entry for this validator in this era. - if (validatorRewardPoints === undefined) { - continue; - } - - rewards.push({ - era, - eraTotalRewardPoints: rewardsForEra.total.toNumber(), - validatorAddress: validatorAddress.toString(), - validatorRewardPoints: validatorRewardPoints.toNumber(), - }); - } - } - - const payoutsPromise = Promise.all( - rewards.map(async (reward) => { - const apiPromise = await getPolkadotApiPromise(rpcEndpoint); - const ledgerOpt = ledgers.get(reward.validatorAddress); - - // There might not be a ledger for this validator. - if (ledgerOpt === undefined || ledgerOpt.isNone) { - return; - } - - const ledger = ledgerOpt.unwrap(); - const claimedEras = ledger.claimedRewards.map((era) => era.toNumber()); - - // Validator has already claimed rewards for this era, so it - // is not relevant for the payouts. - if (claimedEras.includes(reward.era)) { - return; - } - - const eraTotalRewardOpt = eraTotalRewards.get(reward.era); - - // No rewards for this era. - if (eraTotalRewardOpt === undefined || eraTotalRewardOpt.isNone) { - return; - } - - const eraTotalReward = eraTotalRewardOpt.unwrap(); - - // validator's total reward = (era's total reward * validator's points) / era's total reward points - const validatorTotalReward = eraTotalReward - .muln(reward.validatorRewardPoints) - .divn(reward.eraTotalRewardPoints); - - // Validator had no rewards for this era. - if (validatorTotalReward.isZero()) { - return; - } - - const eraStakers: SpStakingExposure = - await apiPromise.query.staking.erasStakers( - reward.era, - reward.validatorAddress - ); - - const validatorTotalStake = eraStakers.total.unwrap(); - - if ( - Number(validatorTotalStake.toString()) === 0 || - eraStakers.others.length === 0 - ) { - return; - } - - const nominatorStakeInfo = eraStakers.others.find( - (nominator) => nominator.who.toString() === activeSubstrateAddress - ); - - if (!nominatorStakeInfo || nominatorStakeInfo.isEmpty) { - return; - } - - const nominatorTotalStake = nominatorStakeInfo.value.unwrap(); - - if (nominatorTotalStake.isZero()) { - return; - } - - const nominatorStakePercentage = - (Number(nominatorTotalStake.toString()) / - Number(validatorTotalStake.toString())) * - 100; - - const validatorCommissionPercentage = await getValidatorCommission( - rpcEndpoint, - reward.validatorAddress - ); - - const validatorCommission = validatorTotalReward.muln( - Number(validatorCommissionPercentage) / 100 - ); - - const distributableReward = - validatorTotalReward.sub(validatorCommission); - - const nominatorTotalReward = distributableReward.muln( - nominatorStakePercentage / 100 - ); - - const nominatorTotalRewardFormatted = formatTokenBalance( - nominatorTotalReward, - nativeTokenSymbol - ); - - const validatorIdentityName = - identities.get(reward.validatorAddress) ?? null; - - const validatorNominators = await Promise.all( - eraStakers.others.map(async (nominator) => { - const nominatorIdentity = await getValidatorIdentityName( - rpcEndpoint, - nominator.who.toString() - ); - - return { - address: nominator.who.toString(), - identity: nominatorIdentity ?? '', - }; - }) - ); - - const validatorTotalRewardFormatted = formatTokenBalance( - validatorTotalReward, - nativeTokenSymbol - ); - - const validatorTotalStakeFormatted = formatTokenBalance( - validatorTotalStake, - nativeTokenSymbol - ); - - if ( - validatorTotalStakeFormatted && - validatorTotalRewardFormatted && - nominatorTotalRewardFormatted - ) { - const payout: Payout = { - era: reward.era, - validator: { - address: reward.validatorAddress, - identity: validatorIdentityName ?? '', - }, - validatorTotalStake: validatorTotalStakeFormatted, - nominators: validatorNominators, - validatorTotalReward: validatorTotalRewardFormatted, - nominatorTotalReward: nominatorTotalRewardFormatted, - status: 'unclaimed', - }; - - return payout; - } - }) - ); - - payoutsPromise.then((payouts) => - setPayouts( - payouts - .filter((payout): payout is Payout => payout !== undefined) - .sort((a, b) => a.era - b.era) - ) - ); - }); - - return payouts; -}; - -export default usePayouts2; diff --git a/apps/tangle-dapp/data/payouts/usePayoutsAvailability.ts b/apps/tangle-dapp/data/payouts/usePayoutsAvailability.ts index cb91135a7a..a5028d77b5 100644 --- a/apps/tangle-dapp/data/payouts/usePayoutsAvailability.ts +++ b/apps/tangle-dapp/data/payouts/usePayoutsAvailability.ts @@ -1,18 +1,40 @@ -import { useEffect, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; +import useNetworkStore from '../../context/useNetworkStore'; +import useLocalStorage, { LocalStorageKey } from '../../hooks/useLocalStorage'; import useSubstrateAddress from '../../hooks/useSubstrateAddress'; -import usePayouts from '../NominationsPayouts/usePayouts'; const usePayoutsAvailability = () => { - const activeSubstrateAddress = useSubstrateAddress(); - const { data: payouts } = usePayouts(activeSubstrateAddress ?? ''); + const { valueOpt: cachedPayouts } = useLocalStorage( + LocalStorageKey.PAYOUTS, + true + ); + + const { rpcEndpoint } = useNetworkStore(); + + const address = useSubstrateAddress(); + + const payoutsData = useMemo(() => { + if ( + cachedPayouts === null || + cachedPayouts.value === null || + address === null + ) { + return []; + } + + const payouts = cachedPayouts.value[rpcEndpoint]?.[address]; + + return payouts ?? []; + }, [address, cachedPayouts, rpcEndpoint]); + const [isPayoutsAvailable, setIsPayoutsAvailable] = useState(false); useEffect(() => { - if (payouts !== null) { - setIsPayoutsAvailable(!!payouts.payouts.length); + if (payoutsData !== null) { + setIsPayoutsAvailable(!!payoutsData.length); } - }, [payouts]); + }, [payoutsData]); return isPayoutsAvailable; }; diff --git a/apps/tangle-dapp/data/restaking/types.ts b/apps/tangle-dapp/data/restaking/types.ts new file mode 100644 index 0000000000..7708039cb1 --- /dev/null +++ b/apps/tangle-dapp/data/restaking/types.ts @@ -0,0 +1,19 @@ +/** + * Type for the restaking earnings record, + * key is the era number and value is the restaking earnings for that era + */ +export type EarningRecord = Record; + +/** + * Type for the restaking rewards record entries, + * first element is the era number and the second element is the restaking rewards for that era + */ +export type ErasRestakeRewardPointsEntry = [ + number, + { + total: number; + individual: { + [accountId: string]: number; + }; + } +]; diff --git a/apps/tangle-dapp/data/restaking/useAllRestakingLedgers.ts b/apps/tangle-dapp/data/restaking/useAllRestakingLedgers.ts new file mode 100644 index 0000000000..299fb54952 --- /dev/null +++ b/apps/tangle-dapp/data/restaking/useAllRestakingLedgers.ts @@ -0,0 +1,19 @@ +import { useCallback } from 'react'; + +import useApiRx from '../../hooks/useApiRx'; +import useEntryMap from '../../hooks/useEntryMap'; + +const useAllRestakingLedgers = () => { + const { result: restakingLedgers, ...other } = useApiRx( + useCallback((api) => api.query.roles.ledger.entries(), []) + ); + + const ledgerMap = useEntryMap( + restakingLedgers, + useCallback((key) => key.args[0].toString(), []) + ); + + return { result: ledgerMap, ...other }; +}; + +export default useAllRestakingLedgers; diff --git a/apps/tangle-dapp/data/restaking/useRestakingAPY.ts b/apps/tangle-dapp/data/restaking/useRestakingAPY.ts new file mode 100755 index 0000000000..7697f460b4 --- /dev/null +++ b/apps/tangle-dapp/data/restaking/useRestakingAPY.ts @@ -0,0 +1,62 @@ +import type { ApiRx } from '@polkadot/api'; +import { type BN, BN_ZERO } from '@polkadot/util'; +import fraction from '@webb-tools/webb-ui-components/utils/fraction'; +import { useCallback } from 'react'; +import { map, type Observable } from 'rxjs'; + +import useApiRx from '../../hooks/useApiRx'; +import useRestakingEraReward from './useRestakingEraReward'; + +const useRestakingAPY = () => { + const { result: activeRestakerEra } = useApiRx( + useCallback( + (apiRx) => + apiRx.query.roles.activeRestakerEra + ? apiRx.query.roles.activeRestakerEra() + : null, + [] + ) + ); + + const { data: currentEraRewards } = useRestakingEraReward( + activeRestakerEra?.unwrapOr(null)?.index.toNumber() + ); + + const { result: totalRestaked } = useApiRx(getTotalRestaked); + + if ( + currentEraRewards === null || + totalRestaked === null || + totalRestaked.isZero() + ) { + return null; + } + + const rewardRate = fraction(currentEraRewards, totalRestaked.toString()); + + return (1 + rewardRate / 365) ** 365 - 1; +}; + +export default useRestakingAPY; + +const getTotalRestaked = (api: ApiRx): Observable => { + if (api.query.roles.totalRestake) { + return api.query.roles + .totalRestake() + .pipe(map((totalRestaked) => totalRestaked.toBn())); + } + + const ledgerEntries = api.query.roles.ledger.entries(); + + return ledgerEntries.pipe( + map((entries) => { + return entries.reduce((acc, [, value]) => { + if (value.isNone) { + return acc; + } + + return acc.add(value.unwrap().total.toBn()); + }, BN_ZERO); + }) + ); +}; diff --git a/apps/tangle-dapp/data/restaking/useRestakingEarnings.ts b/apps/tangle-dapp/data/restaking/useRestakingEarnings.ts index 372fa9d793..2a226723ff 100644 --- a/apps/tangle-dapp/data/restaking/useRestakingEarnings.ts +++ b/apps/tangle-dapp/data/restaking/useRestakingEarnings.ts @@ -1,46 +1,89 @@ -import { BN } from '@polkadot/util'; +import { createWorkerFactory, useWorker } from '@shopify/react-web-worker'; import { useCallback } from 'react'; -import { map, of } from 'rxjs'; - -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; - -/** - * Type for the restaking earnings record, - * key is the era number and value is the restaking earnings for that era - */ -export type EarningRecord = Record; - -/** - * Hook to get the restaking earnings for a given account - * @param substrateAccount the account to get the restaking earnings for - * @returns a record of era number to the restaking earnings for that era - */ -const useRestakingEarnings = (substrateAccount: string | null) => - usePolkadotApiRx( +import { map } from 'rxjs'; + +import useNetworkStore from '../../context/useNetworkStore'; +import useApiRx from '../../hooks/useApiRx'; +import usePromise from '../../hooks/usePromise'; +import type { ErasRestakeRewardPointsEntry } from './types'; + +const createWorker = createWorkerFactory( + () => import('./workers/calculateEarnings') +); + +function useRestakingEarnings(accountAddress: string | null) { + const { rpcEndpoint } = useNetworkStore(); + + const worker = useWorker(createWorker); + + const { + result: dataPromise, + isLoading: rxLoading, + error: rxError, + } = useApiRx( useCallback( (apiRx) => { - if (!substrateAccount) return of(null); + if (!apiRx.query.roles.erasRestakeRewardPoints) { + return null; + } - if (!('erasRestakeRewardPoints' in apiRx.query.roles)) - return of({}); + if (accountAddress === null || accountAddress.length === 0) { + return null; + } return apiRx.query.roles.erasRestakeRewardPoints.entries().pipe( - map((entries) => { - return entries.reduce((prev, [era, eraRewardPoints]) => { - eraRewardPoints.individual.forEach((reward, accountId32) => { - if (accountId32.toString() === substrateAccount) { - // era is in type u32, which can be converted to number - prev[era.args[0].toNumber()] = reward; - } - }); - - return prev; - }, {} as EarningRecord); + map((rewardPointsEntries) => { + const serializableEntries = rewardPointsEntries + .map( + ([era, rewardPoints]) => + [ + era.args[0].toNumber(), + { + total: rewardPoints.total.toNumber(), + individual: Object.fromEntries( + Array.from(rewardPoints.individual.entries()).map( + ([accountId, rewardPoints]) => [ + accountId.toString(), + rewardPoints.toNumber(), + ] + ) + ), + }, + ] satisfies ErasRestakeRewardPointsEntry + ) + // Copy and sort the entries by era number + .slice() + .sort(([a], [b]) => a - b); + + return worker.calculateEarnings( + rpcEndpoint, + accountAddress, + serializableEntries + ); }) ); }, - [substrateAccount] + [accountAddress, rpcEndpoint, worker] ) ); + const { + result: data, + isLoading: promiseLoading, + error: promiseError, + } = usePromise( + useCallback( + () => (dataPromise === null ? Promise.resolve(null) : dataPromise), + [dataPromise] + ), + null + ); + + return { + data, + isLoading: rxLoading || promiseLoading, + error: rxError || promiseError, + }; +} + export default useRestakingEarnings; diff --git a/apps/tangle-dapp/data/restaking/useRestakingEraReward.ts b/apps/tangle-dapp/data/restaking/useRestakingEraReward.ts new file mode 100755 index 0000000000..7d5facbde6 --- /dev/null +++ b/apps/tangle-dapp/data/restaking/useRestakingEraReward.ts @@ -0,0 +1,74 @@ +import { createWorkerFactory, useWorker } from '@shopify/react-web-worker'; +import { useCallback } from 'react'; +import { map, of } from 'rxjs'; + +import useNetworkStore from '../../context/useNetworkStore'; +import useApiRx from '../../hooks/useApiRx'; +import usePromise from '../../hooks/usePromise'; + +const createWorker = createWorkerFactory( + () => import('./workers/calculateEraRewardPoint') +); + +/** + * Calculate the total restaking reward for the given era + * @param era the era number + */ +function useRestakingEraReward(era: number | null = null) { + const { rpcEndpoint } = useNetworkStore(); + + const worker = useWorker(createWorker); + + const { + result: dataPromise, + isLoading: rxLoading, + error: rxError, + } = useApiRx( + useCallback( + (apiRx) => { + if ( + !apiRx.query.roles.erasRestakeRewardPoints || + typeof era !== 'number' + ) { + return of(null); + } + + return apiRx.query.roles.erasRestakeRewardPoints(era).pipe( + map((rewardPoints) => { + const individuals = rewardPoints.individual.entries(); + + return worker.calculateEraRewardPoints( + rpcEndpoint, + era, + Array.from(individuals).map(([accountId, rewardPoints]) => [ + accountId.toString(), + rewardPoints.toNumber(), + ]) + ); + }) + ); + }, + [era, rpcEndpoint, worker] + ) + ); + + const { + result: data, + isLoading: promiseLoading, + error: promiseError, + } = usePromise( + useCallback( + () => (dataPromise === null ? Promise.resolve(null) : dataPromise), + [dataPromise] + ), + null + ); + + return { + data, + isLoading: rxLoading || promiseLoading, + error: rxError || promiseError, + }; +} + +export default useRestakingEraReward; diff --git a/apps/tangle-dapp/data/restaking/useRestakingJobIdMap.ts b/apps/tangle-dapp/data/restaking/useRestakingJobIdMap.ts new file mode 100644 index 0000000000..984be2f95b --- /dev/null +++ b/apps/tangle-dapp/data/restaking/useRestakingJobIdMap.ts @@ -0,0 +1,19 @@ +import { useCallback } from 'react'; + +import useApiRx from '../../hooks/useApiRx'; +import useEntryMap from '../../hooks/useEntryMap'; + +const useRestakingJobIdMap = () => { + const { result: restakingLedgers, ...other } = useApiRx( + useCallback((api) => api.query.jobs.validatorJobIdLookup.entries(), []) + ); + + const ledgerMap = useEntryMap( + restakingLedgers, + useCallback((key) => key.args[0].toString(), []) + ); + + return { result: ledgerMap, ...other }; +}; + +export default useRestakingJobIdMap; diff --git a/apps/tangle-dapp/data/restaking/useRestakingJobs.ts b/apps/tangle-dapp/data/restaking/useRestakingJobs.ts index 00a1bc6970..9de3b4a46c 100644 --- a/apps/tangle-dapp/data/restaking/useRestakingJobs.ts +++ b/apps/tangle-dapp/data/restaking/useRestakingJobs.ts @@ -1,13 +1,13 @@ import { useCallback, useMemo } from 'react'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; +import useApiRx from '../../hooks/useApiRx'; import useSubstrateAddress from '../../hooks/useSubstrateAddress'; -import substrateRoleToServiceType from '../../utils/substrateRoleToServiceType'; +import substrateRoleToServiceType from '../../utils/restaking/substrateRoleToServiceType'; const useRestakingJobs = () => { const activeSubstrateAddress = useSubstrateAddress(); - const { data: jobRoleIdPairsOpt } = usePolkadotApiRx( + const { result: jobRoleIdPairsOpt } = useApiRx( useCallback( (api) => { if (activeSubstrateAddress === null) { diff --git a/apps/tangle-dapp/data/restaking/useRestakingLimits.ts b/apps/tangle-dapp/data/restaking/useRestakingLimits.ts index bc1d080bfb..f52357b82e 100644 --- a/apps/tangle-dapp/data/restaking/useRestakingLimits.ts +++ b/apps/tangle-dapp/data/restaking/useRestakingLimits.ts @@ -1,15 +1,15 @@ import { useCallback, useMemo } from 'react'; import { map } from 'rxjs'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; -import useStakingLedgerRx from '../../hooks/useStakingLedgerRx'; +import useApiRx from '../../hooks/useApiRx'; +import useStakingLedger from '../staking/useStakingLedger'; const useRestakingLimits = () => { - const { data: stakedBalance } = useStakingLedgerRx( - useCallback((ledger) => ledger.total.toBn(), []) + const { result: stakedBalance } = useStakingLedger( + useCallback((ledger) => ledger?.total.toBn(), []) ); - const { data: minRestakingBond } = usePolkadotApiRx( + const { result: minRestakingBond } = useApiRx( useCallback( (api) => api.query.roles @@ -25,7 +25,7 @@ const useRestakingLimits = () => { // from the Polkadot API. // See: https://github.com/webb-tools/tangle/blob/8be20aa02a764422e1fd0ba30bc70b99d5f66887/runtime/mainnet/src/lib.rs#L1137 const maxRestakingAmount = useMemo( - () => stakedBalance?.divn(2) ?? null, + () => stakedBalance?.value?.divn(2) ?? null, [stakedBalance] ); diff --git a/apps/tangle-dapp/data/restaking/useRestakingRoleLedger.ts b/apps/tangle-dapp/data/restaking/useRestakingRoleLedger.ts index 00d0381497..3db586b2a8 100644 --- a/apps/tangle-dapp/data/restaking/useRestakingRoleLedger.ts +++ b/apps/tangle-dapp/data/restaking/useRestakingRoleLedger.ts @@ -1,9 +1,9 @@ import { useCallback } from 'react'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; +import useApiRx from '../../hooks/useApiRx'; const useRestakingRoleLedger = (address: string | null) => { - return usePolkadotApiRx( + return useApiRx( useCallback( (api) => { if (address === null) { diff --git a/apps/tangle-dapp/data/restaking/useRestakingTotalRewards.ts b/apps/tangle-dapp/data/restaking/useRestakingTotalRewards.ts new file mode 100755 index 0000000000..fb28ba85d9 --- /dev/null +++ b/apps/tangle-dapp/data/restaking/useRestakingTotalRewards.ts @@ -0,0 +1,33 @@ +import BN from 'bn.js'; +import { useCallback } from 'react'; +import { map, of } from 'rxjs'; + +import useApiRx from '../../hooks/useApiRx'; +import useSubstrateAddress from '../../hooks/useSubstrateAddress'; + +const useRestakingTotalRewards = (): ReturnType> => { + const substrateAccount = useSubstrateAddress(); + + return useApiRx( + useCallback( + (apiRx) => { + if (!substrateAccount) return of(null); + + if (!apiRx.query.jobs.validatorRewards) return of(null); + + return apiRx.query.jobs.validatorRewards(substrateAccount).pipe( + map((reward) => { + if (reward.isNone) { + return null; + } + + return reward.unwrap().toBn(); + }) + ); + }, + [substrateAccount] + ) + ); +}; + +export default useRestakingTotalRewards; diff --git a/apps/tangle-dapp/data/restaking/useSharedRestakeAmount.ts b/apps/tangle-dapp/data/restaking/useSharedRestakeAmount.ts index bd0970e046..fdb68c781d 100644 --- a/apps/tangle-dapp/data/restaking/useSharedRestakeAmount.ts +++ b/apps/tangle-dapp/data/restaking/useSharedRestakeAmount.ts @@ -8,7 +8,7 @@ import useRestakingRoleLedger from './useRestakingRoleLedger'; const useSharedRestakeAmount = () => { const activeSubstrateAccount = useSubstrateAddress(); const ledgerResult = useRestakingRoleLedger(activeSubstrateAccount); - const ledgerOpt = ledgerResult.data; + const ledgerOpt = ledgerResult.result; const isLedgerAvailable = ledgerOpt !== null && ledgerOpt.isSome; const sharedRestakeAmount = useMemo | null>(() => { diff --git a/apps/tangle-dapp/data/restaking/useUpdateRestakingProfileTx.ts b/apps/tangle-dapp/data/restaking/useUpdateRestakingProfileTx.ts index f833e15653..449a5f90fc 100644 --- a/apps/tangle-dapp/data/restaking/useUpdateRestakingProfileTx.ts +++ b/apps/tangle-dapp/data/restaking/useUpdateRestakingProfileTx.ts @@ -3,10 +3,10 @@ import assert from 'assert'; import { useCallback, useRef } from 'react'; import { z } from 'zod'; -import { SERVICE_TYPE_TO_TANGLE_MAP } from '../../constants'; +import { SERVICE_TYPE_TO_TANGLE_MAP, TxName } from '../../constants'; import { RestakingAllocationMap } from '../../containers/ManageProfileModalContainer/types'; import useSubstrateAddress from '../../hooks/useSubstrateAddress'; -import useSubstrateTx from '../../hooks/useSubstrateTx'; +import { useSubstrateTxWithNotification } from '../../hooks/useSubstrateTx'; import { RestakingProfileType, RestakingService } from '../../types'; import useRestakingRoleLedger from './useRestakingRoleLedger'; @@ -28,19 +28,21 @@ type ProfileRecord = { */ const useUpdateRestakingProfileTx = ( profileType: RestakingProfileType, - createIfMissing = false, - notifyTxStatusUpdates?: boolean + createIfMissing = false ) => { const activeSubstrateAccount = useSubstrateAddress(); const sharedRestakeAmountRef = useRef(null); - const { data: roleLedger } = useRestakingRoleLedger(activeSubstrateAccount); + + const { result: roleLedger } = useRestakingRoleLedger(activeSubstrateAccount); + const hasExistingProfile = roleLedger !== null && roleLedger.isSome; // TODO: Break this into two separate hooks for independent and shared profiles. - const { execute, ...other } = useSubstrateTx<{ + const { execute, ...other } = useSubstrateTxWithNotification<{ allocations: RestakingAllocationMap; maxActiveServices?: number; }>( + TxName.UPDATE_RESTAKE_PROFILE, useCallback( (api, _activeSubstrateAddress, context) => { // Cannot update a profile that does not exist. @@ -99,8 +101,7 @@ const useUpdateRestakingProfileTx = ( : api.tx.roles.createProfile(profile, null); }, [createIfMissing, hasExistingProfile, profileType] - ), - notifyTxStatusUpdates + ) ); const executeForIndependentProfile = useCallback( diff --git a/apps/tangle-dapp/data/restaking/workers/calculateEarnings.ts b/apps/tangle-dapp/data/restaking/workers/calculateEarnings.ts new file mode 100644 index 0000000000..d7d01ada3c --- /dev/null +++ b/apps/tangle-dapp/data/restaking/workers/calculateEarnings.ts @@ -0,0 +1,54 @@ +import type { Option } from '@polkadot/types'; +import type { + PalletStakingValidatorPrefs, + SpStakingPagedExposureMetadata, +} from '@polkadot/types/lookup'; + +import convertRewardPointsToReward from '../../../utils/convertRewardPointsToReward'; +import { getApiPromise } from '../../../utils/polkadot/api'; +import type { EarningRecord, ErasRestakeRewardPointsEntry } from '../types'; + +export async function calculateEarnings( + rpcUrl: string, + accountId32: string, + rewardPointsEntries: ErasRestakeRewardPointsEntry[] +): Promise { + const api = await getApiPromise(rpcUrl); + const rewardsRecord: EarningRecord = {}; + + // Following the `do_payout_stakers` logic in the tangle + // to convert the reward points to rewards + // see https://github.com/webb-tools/tangle/blob/8c1be851059d21fe524ca30808219d5b26c01713/pallets/roles/src/functions.rs#L508-L539 + await Promise.all( + rewardPointsEntries.map(async ([era, rewardPoints]) => { + // The total pay + const validatorTotalPayout = rewardPoints.individual[accountId32]; + + if (!validatorTotalPayout) { + return; + } + + const [optionalExposure, validatorPrefs] = await api.queryMulti< + [Option, PalletStakingValidatorPrefs] + >([ + [api.query.staking.erasStakersOverview, [era, accountId32]], + [api.query.staking.erasValidatorPrefs, [era, accountId32]], + ]); + + if (optionalExposure.isNone) { + return; + } + + const exposure = optionalExposure.unwrap(); + + rewardsRecord[era] = convertRewardPointsToReward( + validatorTotalPayout, + validatorPrefs.commission.unwrap().toNumber(), + exposure.own.unwrap().toBigInt(), + exposure.total.unwrap().toBigInt() + ); + }) + ); + + return rewardsRecord; +} diff --git a/apps/tangle-dapp/data/restaking/workers/calculateEraRewardPoint.ts b/apps/tangle-dapp/data/restaking/workers/calculateEraRewardPoint.ts new file mode 100644 index 0000000000..d058b14465 --- /dev/null +++ b/apps/tangle-dapp/data/restaking/workers/calculateEraRewardPoint.ts @@ -0,0 +1,42 @@ +import { Option } from '@polkadot/types'; +import { + PalletStakingValidatorPrefs, + SpStakingPagedExposureMetadata, +} from '@polkadot/types/lookup'; +import { ZERO_BIG_INT } from '@webb-tools/dapp-config/constants'; + +import convertRewardPointsToReward from '../../../utils/convertRewardPointsToReward'; +import { getApiPromise } from '../../../utils/polkadot'; + +export async function calculateEraRewardPoints( + rpcUrl: string, + era: number, + validatorRewards: Array<[string, number]> +): Promise { + const api = await getApiPromise(rpcUrl); + let eraReward = ZERO_BIG_INT; + + for (const [accountId, rewardPoints] of validatorRewards) { + const [optionalExposure, validatorPrefs] = await api.queryMulti< + [Option, PalletStakingValidatorPrefs] + >([ + [api.query.staking.erasStakersOverview, era, accountId], + [api.query.staking.erasValidatorPrefs, era, accountId], + ]); + + if (optionalExposure.isNone || validatorPrefs.isEmpty) { + return null; + } + + const exposure = optionalExposure.unwrap(); + + eraReward += convertRewardPointsToReward( + rewardPoints, + validatorPrefs.commission.unwrap().toNumber(), + exposure.own.unwrap().toBigInt(), + exposure.total.unwrap().toBigInt() + ); + } + + return eraReward; +} diff --git a/apps/tangle-dapp/data/ServiceDetails/index.ts b/apps/tangle-dapp/data/serviceDetails/index.ts similarity index 50% rename from apps/tangle-dapp/data/ServiceDetails/index.ts rename to apps/tangle-dapp/data/serviceDetails/index.ts index 9fdf06dadf..9b1c89a7e2 100644 --- a/apps/tangle-dapp/data/ServiceDetails/index.ts +++ b/apps/tangle-dapp/data/serviceDetails/index.ts @@ -1,4 +1,4 @@ -export { default as getServiceDetailsInfo } from './getServiceDetailsInfo'; -export { default as getSigningRules } from './getSigningRules'; +export { default as usePermittedCaller } from './usePermittedCaller'; +export { default as useServiceInfoCard } from './useServiceInfoCard'; export { default as useServiceJobs } from './useServiceJobs'; export { default as useServiceParticipants } from './useServiceParticipants'; diff --git a/apps/tangle-dapp/data/serviceDetails/usePermittedCaller.ts b/apps/tangle-dapp/data/serviceDetails/usePermittedCaller.ts new file mode 100644 index 0000000000..d03d65699f --- /dev/null +++ b/apps/tangle-dapp/data/serviceDetails/usePermittedCaller.ts @@ -0,0 +1,94 @@ +import { useWebbUI } from '@webb-tools/webb-ui-components/hooks/useWebbUI'; +import { useEffect, useMemo, useState } from 'react'; +import { isHex } from 'viem'; + +import useNetworkStore from '../../context/useNetworkStore'; +import useViemPublicClient from '../../hooks/useViemPublicClient'; +import ensureError from '../../utils/ensureError'; +import useServiceDetails from './useServiceDetails'; + +const CONTRACT_API_PATH = '/api/v2/smart-contracts/'; + +export default function usePermittedCaller() { + const { network } = useNetworkStore(); + const { notificationApi } = useWebbUI(); + const publicClient = useViemPublicClient(); + const { serviceDetails } = useServiceDetails(); + + const [codeData, setCodeData] = useState<{ + sourceCode: string; + language: string; + } | null>(null); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); + + const permittedCaller = useMemo( + () => serviceDetails?.permittedCaller ?? null, + [serviceDetails?.permittedCaller] + ); + + useEffect(() => { + const fetchData = async () => { + try { + if (permittedCaller === null || !isHex(permittedCaller)) { + setCodeData(null); + return; + } + + // Get the bytecode to check if the address is a contract or not + const bytecode = await publicClient?.getBytecode({ + address: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', + }); + + // the address is not a contract + if (!bytecode) { + setCodeData(null); + return; + } + + // Note: Currently there is no contract on both Tangle Testnet and Mainnet + // This follows the api provided by Blockscout: https://testnet-explorer.tangle.tools/api-docs + const fetchUrl = new URL( + `${CONTRACT_API_PATH}/${permittedCaller}`, + network.evmExplorerUrl + ).toString(); + + const res = await fetch(fetchUrl); + if (!res.ok) { + throw new Error(); + } + + const data = await res.json(); + setCodeData({ + sourceCode: data['source_code'], + language: languageExtensionMap[data['language']], + }); + } catch (error) { + notificationApi({ + variant: 'error', + message: 'Failed to get permitted caller', + }); + setError(ensureError(error)); + } finally { + setIsLoading(false); + } + }; + + fetchData(); + }, [notificationApi, permittedCaller, publicClient, network.evmExplorerUrl]); + + return { + permittedCaller, + codeData, + isLoading, + error, + }; +} + +// 3 types of smart contract languages returned from Blockscout +// need to get the extension to format code in the CodeFile component +const languageExtensionMap: Record = { + solidity: 'sol', + vyper: 'vy', + yul: 'yul', +}; diff --git a/apps/tangle-dapp/data/serviceDetails/useServiceDetails.ts b/apps/tangle-dapp/data/serviceDetails/useServiceDetails.ts new file mode 100644 index 0000000000..7b18449538 --- /dev/null +++ b/apps/tangle-dapp/data/serviceDetails/useServiceDetails.ts @@ -0,0 +1,9 @@ +'use client'; + +import { useContext } from 'react'; + +import { ServiceDetailsContext } from '../../context/ServiceDetailsContext'; + +export default function useServiceDetails() { + return useContext(ServiceDetailsContext); +} diff --git a/apps/tangle-dapp/data/serviceDetails/useServiceInfoCard.ts b/apps/tangle-dapp/data/serviceDetails/useServiceInfoCard.ts new file mode 100644 index 0000000000..3b5199b80f --- /dev/null +++ b/apps/tangle-dapp/data/serviceDetails/useServiceInfoCard.ts @@ -0,0 +1,39 @@ +'use client'; + +import { useCallback, useMemo } from 'react'; + +import useApi from '../../hooks/useApi'; +import getBlockDate from '../../utils/getBlockDate'; +import useServiceDetails from './useServiceDetails'; + +export default function useServiceInfoCard() { + const { serviceDetails, isLoading } = useServiceDetails(); + + const { result: currentBlockNumber } = useApi( + useCallback((api) => api.derive.chain.bestNumber(), []) + ); + + const { result: babeExpectedBlockTime } = useApi( + useCallback((api) => Promise.resolve(api.consts.babe.expectedBlockTime), []) + ); + + const endingBlockDate = useMemo(() => { + const ttlBlock = serviceDetails?.ttlBlock; + if ( + babeExpectedBlockTime === null || + currentBlockNumber === null || + !ttlBlock + ) { + return null; + } + + return getBlockDate(babeExpectedBlockTime, currentBlockNumber, ttlBlock); + }, [babeExpectedBlockTime, currentBlockNumber, serviceDetails?.ttlBlock]); + + return { + isLoading, + serviceType: serviceDetails?.serviceType ?? null, + threshold: serviceDetails?.threshold ?? null, + endDate: endingBlockDate, + }; +} diff --git a/apps/tangle-dapp/data/ServiceDetails/useServiceJobs.ts b/apps/tangle-dapp/data/serviceDetails/useServiceJobs.ts similarity index 100% rename from apps/tangle-dapp/data/ServiceDetails/useServiceJobs.ts rename to apps/tangle-dapp/data/serviceDetails/useServiceJobs.ts diff --git a/apps/tangle-dapp/data/serviceDetails/useServiceParticipants.ts b/apps/tangle-dapp/data/serviceDetails/useServiceParticipants.ts new file mode 100644 index 0000000000..6d216f904f --- /dev/null +++ b/apps/tangle-dapp/data/serviceDetails/useServiceParticipants.ts @@ -0,0 +1,40 @@ +'use client'; + +import { useEffect, useState } from 'react'; + +import useNetworkStore from '../../context/useNetworkStore'; +import type { ServiceParticipant } from '../../types'; +import { getAccountInfo } from '../../utils/polkadot/identity'; +import useServiceDetails from './useServiceDetails'; + +export default function useServiceParticipants() { + const { rpcEndpoint } = useNetworkStore(); + const { serviceDetails, isLoading: isLoadingServiceDetails } = + useServiceDetails(); + const [participants, setParticipants] = useState([]); + const [isLoadingParticipants, setIsLoadingParticipants] = useState(true); + + useEffect(() => { + const fetchParticipantsInfo = async () => { + const participantAddresses = serviceDetails?.participants ?? []; + const participantsInfo = await Promise.all( + participantAddresses.map(async (address) => { + const accountInfo = await getAccountInfo(rpcEndpoint, address); + return { + address, + ...(accountInfo ?? {}), + } satisfies ServiceParticipant; + }) + ); + setParticipants(participantsInfo); + setIsLoadingParticipants(false); + }; + + fetchParticipantsInfo(); + }, [rpcEndpoint, serviceDetails?.participants]); + + return { + isLoading: isLoadingServiceDetails || isLoadingParticipants, + data: participants, + }; +} diff --git a/apps/tangle-dapp/data/serviceOverview/index.ts b/apps/tangle-dapp/data/serviceOverview/index.ts new file mode 100644 index 0000000000..8aa15a3315 --- /dev/null +++ b/apps/tangle-dapp/data/serviceOverview/index.ts @@ -0,0 +1 @@ +export { default as useServiceOverview } from './useServiceOverview'; diff --git a/apps/tangle-dapp/data/serviceOverview/useServiceOverview.ts b/apps/tangle-dapp/data/serviceOverview/useServiceOverview.ts new file mode 100644 index 0000000000..265cd94d19 --- /dev/null +++ b/apps/tangle-dapp/data/serviceOverview/useServiceOverview.ts @@ -0,0 +1,9 @@ +'use client'; + +import { useContext } from 'react'; + +import { ServiceOverviewContext } from '../../context/ServiceOverviewContext'; + +export default function useServiceOverview() { + return useContext(ServiceOverviewContext); +} diff --git a/apps/tangle-dapp/data/staking/useActualStakedPercentage.ts b/apps/tangle-dapp/data/staking/useActualStakedPercentage.ts index 886eca24fb..6ed4a9d9df 100644 --- a/apps/tangle-dapp/data/staking/useActualStakedPercentage.ts +++ b/apps/tangle-dapp/data/staking/useActualStakedPercentage.ts @@ -1,36 +1,58 @@ +import { BN_MILLION, BN_ZERO } from '@polkadot/util'; import { useCallback, useMemo } from 'react'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; -import calculateBnPercentage from '../../utils/calculateBnPercentage'; -import useCurrentEra from './useCurrentEra'; +import useApiRx from '../../hooks/useApiRx'; -const useActualStakedPercentage = () => { - const { data: currentEra } = useCurrentEra(); +const DEFAULT_FLAGS_ELECTED = { + withController: true, + withExposure: true, + withExposureMeta: true, + withPrefs: true, +}; - const { data: totalIssuance } = usePolkadotApiRx( +const useActualStakedPercentage = () => { + const { result: totalIssuance } = useApiRx( useCallback((api) => api.query.balances.totalIssuance(), []) ); - const { data: totalStaked } = usePolkadotApiRx( + const { result: electedInfo } = useApiRx( useCallback( - (api) => { - if (currentEra === null) { - return null; - } - - return api.query.staking.erasTotalStake(currentEra); - }, - [currentEra] + (api) => api.derive.staking.electedInfo(DEFAULT_FLAGS_ELECTED), + [] ) ); + const totalStakedFromElected = useMemo(() => { + if (!electedInfo) { + return null; + } + + return electedInfo.info.reduce( + (stakedTotal, { exposurePaged, exposureMeta }) => { + const expMetaTotal = + exposurePaged.isSome && exposureMeta.isSome + ? exposureMeta.unwrap().total.unwrap() + : BN_ZERO; + + return stakedTotal.add(expMetaTotal); + }, + BN_ZERO + ); + }, [electedInfo]); + return useMemo(() => { - if (totalStaked === null || totalIssuance === null) { + if (totalStakedFromElected === null || totalIssuance === null) { return null; } - return calculateBnPercentage(totalStaked, totalIssuance); - }, [totalIssuance, totalStaked]); + const stakedFraction = + totalStakedFromElected.isZero() || totalIssuance.isZero() + ? 0 + : totalStakedFromElected.mul(BN_MILLION).div(totalIssuance).toNumber() / + BN_MILLION.toNumber(); + + return (stakedFraction * 100).toFixed(1); + }, [totalIssuance, totalStakedFromElected]); }; export default useActualStakedPercentage; diff --git a/apps/tangle-dapp/data/staking/useBondExtraTx.ts b/apps/tangle-dapp/data/staking/useBondExtraTx.ts new file mode 100644 index 0000000000..d19e167fe1 --- /dev/null +++ b/apps/tangle-dapp/data/staking/useBondExtraTx.ts @@ -0,0 +1,50 @@ +import { BN } from '@polkadot/util'; +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { Precompile } from '../../constants/evmPrecompiles'; +import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { EvmTxFactory } from '../../hooks/useEvmPrecompileAbiCall'; +import useFormatNativeTokenAmount from '../../hooks/useFormatNativeTokenAmount'; +import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; +import { GetSuccessMessageFunctionType } from '../../types'; + +type BondExtraTxContext = { + amount: BN; +}; + +const useBondExtraTx = () => { + const formatNativeTokenAmount = useFormatNativeTokenAmount(); + + const evmTxFactory: EvmTxFactory = + useCallback( + (context) => ({ functionName: 'bondExtra', arguments: [context.amount] }), + [] + ); + + const substrateTxFactory: SubstrateTxFactory = + useCallback( + (api, _activeSubstrateAddress, context) => + api.tx.staking.bondExtra(context.amount), + [] + ); + + const getSuccessMessageFnc: GetSuccessMessageFunctionType = + useCallback( + ({ amount }) => + `Successfully added ${formatNativeTokenAmount( + amount + )} to your existing stake.`, + [formatNativeTokenAmount] + ); + + return useAgnosticTx({ + name: TxName.BOND_EXTRA, + precompile: Precompile.STAKING, + evmTxFactory, + substrateTxFactory, + getSuccessMessageFnc, + }); +}; + +export default useBondExtraTx; diff --git a/apps/tangle-dapp/data/staking/useChillTx.ts b/apps/tangle-dapp/data/staking/useChillTx.ts new file mode 100644 index 0000000000..3d61cad5ee --- /dev/null +++ b/apps/tangle-dapp/data/staking/useChillTx.ts @@ -0,0 +1,31 @@ +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { Precompile } from '../../constants/evmPrecompiles'; +import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { EvmTxFactory } from '../../hooks/useEvmPrecompileAbiCall'; +import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; + +/** + * Stop nominating validators. + */ +const useChillTx = () => { + const evmTxFactory: EvmTxFactory = useCallback( + () => ({ functionName: 'chill', arguments: [] }), + [] + ); + + const substrateTxFactory: SubstrateTxFactory = useCallback( + (api, _activeSubstrateAddress) => api.tx.staking.chill(), + [] + ); + + return useAgnosticTx({ + name: TxName.CHILL, + precompile: Precompile.STAKING, + evmTxFactory, + substrateTxFactory, + }); +}; + +export default useChillTx; diff --git a/apps/tangle-dapp/data/staking/useCurrentEra.ts b/apps/tangle-dapp/data/staking/useCurrentEra.ts index 42ece965e9..75a1d60e77 100644 --- a/apps/tangle-dapp/data/staking/useCurrentEra.ts +++ b/apps/tangle-dapp/data/staking/useCurrentEra.ts @@ -1,10 +1,10 @@ import { useCallback } from 'react'; import { map } from 'rxjs'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; +import useApiRx from '../../hooks/useApiRx'; const useCurrentEra = () => { - return usePolkadotApiRx( + return useApiRx( useCallback( (api) => // TODO: Should not map to `null` if the current era is not available, but rather leave it as `Option`, or use our `Optional` type. This is because `null` is used as an indicator for loading state, so it would be confusing to know whether the current era is not available or if it's still loading. diff --git a/apps/tangle-dapp/data/staking/useIsBonded.ts b/apps/tangle-dapp/data/staking/useIsBonded.ts new file mode 100644 index 0000000000..25c2eedf7d --- /dev/null +++ b/apps/tangle-dapp/data/staking/useIsBonded.ts @@ -0,0 +1,25 @@ +import { useCallback } from 'react'; + +import useApiRx from '../../hooks/useApiRx'; +import useSubstrateAddress from '../../hooks/useSubstrateAddress'; + +const useIsBonded = () => { + const activeSubstrateAddress = useSubstrateAddress(); + + const { result: bondedInfo, ...other } = useApiRx( + useCallback( + (api) => { + if (activeSubstrateAddress === null) { + return null; + } + + return api.query.staking.bonded(activeSubstrateAddress); + }, + [activeSubstrateAddress] + ) + ); + + return { isBonded: bondedInfo === null ? null : bondedInfo.isSome, ...other }; +}; + +export default useIsBonded; diff --git a/apps/tangle-dapp/data/staking/useIsBondedOrNominating.ts b/apps/tangle-dapp/data/staking/useIsBondedOrNominating.ts new file mode 100644 index 0000000000..5cc2ada54d --- /dev/null +++ b/apps/tangle-dapp/data/staking/useIsBondedOrNominating.ts @@ -0,0 +1,13 @@ +import useIsNominating from '../../hooks/useIsNominating'; +import useIsBonded from './useIsBonded'; + +const useIsBondedOrNominating = () => { + const isNominating = useIsNominating(); + const isBonded = useIsBonded(); + + return isBonded === null && isNominating === null + ? null + : isBonded.isBonded === true || isNominating.isNominating === true; +}; + +export default useIsBondedOrNominating; diff --git a/apps/tangle-dapp/data/staking/useNominateTx.ts b/apps/tangle-dapp/data/staking/useNominateTx.ts new file mode 100644 index 0000000000..97aa53c632 --- /dev/null +++ b/apps/tangle-dapp/data/staking/useNominateTx.ts @@ -0,0 +1,52 @@ +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { Precompile } from '../../constants/evmPrecompiles'; +import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { EvmTxFactory } from '../../hooks/useEvmPrecompileAbiCall'; +import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; +import { toSubstrateAddress } from '../../utils'; +import toEvmAddress32 from '../../utils/toEvmAddress32'; + +type NominateTxContext = { + validatorAddresses: string[]; +}; + +const useNominateTx = () => { + const evmTxFactory: EvmTxFactory = + useCallback((context) => { + if (context.validatorAddresses.length === 0) { + return null; + } + + // Ensure that all addresses are expected format. + // The nominate precompile function expects 32-byte addresses. + const evmAddresses32 = context.validatorAddresses.map(toEvmAddress32); + + return { functionName: 'nominate', arguments: [evmAddresses32] }; + }, []); + + const substrateTxFactory: SubstrateTxFactory = useCallback( + (api, _activeSubstrateAddress, context) => { + if (context.validatorAddresses.length === 0) { + return null; + } + + // Ensure that all addresses are in Substrate format. + const substrateAddresses = + context.validatorAddresses.map(toSubstrateAddress); + + return api.tx.staking.nominate(substrateAddresses); + }, + [] + ); + + return useAgnosticTx({ + name: TxName.NOMINATE, + precompile: Precompile.STAKING, + evmTxFactory, + substrateTxFactory, + }); +}; + +export default useNominateTx; diff --git a/apps/tangle-dapp/data/staking/useRebondTx.ts b/apps/tangle-dapp/data/staking/useRebondTx.ts new file mode 100644 index 0000000000..e3e3a3136a --- /dev/null +++ b/apps/tangle-dapp/data/staking/useRebondTx.ts @@ -0,0 +1,47 @@ +import { BN } from '@polkadot/util'; +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { Precompile } from '../../constants/evmPrecompiles'; +import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { EvmTxFactory } from '../../hooks/useEvmPrecompileAbiCall'; +import useFormatNativeTokenAmount from '../../hooks/useFormatNativeTokenAmount'; +import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; +import { GetSuccessMessageFunctionType } from '../../types'; + +type RebondTxContext = { + amount: BN; +}; + +const useRebondTx = () => { + const formatNativeTokenAmount = useFormatNativeTokenAmount(); + + const evmTxFactory: EvmTxFactory = + useCallback( + (context) => ({ functionName: 'rebond', arguments: [context.amount] }), + [] + ); + + const substrateTxFactory: SubstrateTxFactory = useCallback( + (api, _activeSubstrateAddress, context) => + api.tx.staking.rebond(context.amount), + [] + ); + + const getSuccessMessageFnc: GetSuccessMessageFunctionType = + useCallback( + ({ amount }) => + `Successfully rebonded ${formatNativeTokenAmount(amount)}.`, + [formatNativeTokenAmount] + ); + + return useAgnosticTx({ + name: TxName.REBOND, + precompile: Precompile.STAKING, + evmTxFactory, + substrateTxFactory, + getSuccessMessageFnc, + }); +}; + +export default useRebondTx; diff --git a/apps/tangle-dapp/data/staking/useSetPayeeTx.ts b/apps/tangle-dapp/data/staking/useSetPayeeTx.ts new file mode 100644 index 0000000000..2cea907355 --- /dev/null +++ b/apps/tangle-dapp/data/staking/useSetPayeeTx.ts @@ -0,0 +1,51 @@ +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { Precompile } from '../../constants/evmPrecompiles'; +import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { EvmTxFactory } from '../../hooks/useEvmPrecompileAbiCall'; +import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; +import { StakingRewardsDestination } from '../../types'; +import getEvmPayeeValue from '../../utils/staking/getEvmPayeeValue'; +import getSubstratePayeeValue from '../../utils/staking/getSubstratePayeeValue'; + +type SetPayeeTxContext = { + payee: StakingRewardsDestination; +}; + +const useSetPayeeTx = () => { + const evmTxFactory: EvmTxFactory = + useCallback((context) => { + const payee = getEvmPayeeValue(context.payee); + + // TODO: Are we missing adding all the EVM addresses for the other reward destinations? + if (payee === null) { + throw new Error( + 'There is no EVM destination address registered for the given payee' + ); + } + + return { + functionName: 'setPayee', + arguments: [payee], + }; + }, []); + + const substrateTxFactory: SubstrateTxFactory = useCallback( + (api, _activeSubstrateAddress, context) => { + const payee = getSubstratePayeeValue(context.payee); + + return api.tx.staking.setPayee(payee); + }, + [] + ); + + return useAgnosticTx({ + name: TxName.SET_PAYEE, + precompile: Precompile.STAKING, + evmTxFactory, + substrateTxFactory, + }); +}; + +export default useSetPayeeTx; diff --git a/apps/tangle-dapp/data/staking/useSetupNominatorTx.ts b/apps/tangle-dapp/data/staking/useSetupNominatorTx.ts new file mode 100644 index 0000000000..9c1248cea1 --- /dev/null +++ b/apps/tangle-dapp/data/staking/useSetupNominatorTx.ts @@ -0,0 +1,90 @@ +import { BN } from '@polkadot/util'; +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { Precompile } from '../../constants/evmPrecompiles'; +import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { EvmTxFactory } from '../../hooks/useEvmPrecompileAbiCall'; +import useFormatNativeTokenAmount from '../../hooks/useFormatNativeTokenAmount'; +import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; +import { + GetSuccessMessageFunctionType, + StakingRewardsDestination, +} from '../../types'; +import optimizeTxBatch from '../../utils/optimizeTxBatch'; +import createEvmBatchCallArgs from '../../utils/staking/createEvmBatchCallArgs'; +import createEvmBatchCallData from '../../utils/staking/createEvmBatchCallData'; +import getEvmPayeeValue from '../../utils/staking/getEvmPayeeValue'; +import getSubstratePayeeValue from '../../utils/staking/getSubstratePayeeValue'; +import toEvmAddress32 from '../../utils/toEvmAddress32'; + +export type NominationOptionsContext = { + bondAmount: BN; + payee: StakingRewardsDestination; + nominees: Set; +}; + +const useSetupNominatorTx = () => { + const formatNativeTokenAmount = useFormatNativeTokenAmount(); + + const evmTxFactory: EvmTxFactory = + useCallback((context) => { + const payee = getEvmPayeeValue(context.payee); + + // TODO: Are we missing adding all the EVM addresses for the other reward destinations? + if (payee === null) { + throw new Error( + 'There is no EVM destination address registered for the given payee' + ); + } + + const bondCall = createEvmBatchCallData(Precompile.STAKING, 'bond', [ + BigInt(context.bondAmount.toString()), + payee, + ]); + + const evmNomineeAddresses32 = Array.from(context.nominees).map( + toEvmAddress32 + ); + + const nominateCall = createEvmBatchCallData( + Precompile.STAKING, + 'nominate', + [evmNomineeAddresses32] + ); + + return { + functionName: 'batchAll', + arguments: createEvmBatchCallArgs([bondCall, nominateCall]), + }; + }, []); + + const substrateTxFactory: SubstrateTxFactory = + useCallback((api, _activeSubstrateAddress, context) => { + const payee = getSubstratePayeeValue(context.payee); + + return optimizeTxBatch(api, [ + api.tx.staking.bond(context.bondAmount, payee), + api.tx.staking.nominate(Array.from(context.nominees)), + ]); + }, []); + + const getSuccessMessageFnc: GetSuccessMessageFunctionType = + useCallback( + ({ bondAmount, nominees }) => + `Successfully nominated ${formatNativeTokenAmount(bondAmount)} to ${ + nominees.size + } validators.`, + [formatNativeTokenAmount] + ); + + return useAgnosticTx({ + name: TxName.SETUP_NOMINATOR, + precompile: Precompile.BATCH, + evmTxFactory, + substrateTxFactory, + getSuccessMessageFnc, + }); +}; + +export default useSetupNominatorTx; diff --git a/apps/tangle-dapp/data/staking/useSlashingSpans.ts b/apps/tangle-dapp/data/staking/useSlashingSpans.ts new file mode 100644 index 0000000000..eef0675f96 --- /dev/null +++ b/apps/tangle-dapp/data/staking/useSlashingSpans.ts @@ -0,0 +1,16 @@ +import useApiRx from '../../hooks/useApiRx'; +import useSubstrateAddress from '../../hooks/useSubstrateAddress'; + +const useSlashingSpans = () => { + const activeSubstrateAddress = useSubstrateAddress(); + + return useApiRx((api) => { + if (activeSubstrateAddress === null) { + return null; + } + + return api.query.staking.slashingSpans(activeSubstrateAddress); + }); +}; + +export default useSlashingSpans; diff --git a/apps/tangle-dapp/data/staking/useStakingExposures.ts b/apps/tangle-dapp/data/staking/useStakingExposures.ts new file mode 100644 index 0000000000..82e605d8b2 --- /dev/null +++ b/apps/tangle-dapp/data/staking/useStakingExposures.ts @@ -0,0 +1,32 @@ +import { useCallback } from 'react'; + +import useApiRx from '../../hooks/useApiRx'; +import useEntryMap from '../../hooks/useEntryMap'; +import useCurrentEra from './useCurrentEra'; + +const useStakingExposures = () => { + // TODO: Also consider error from this hook. + const { result: currentEra } = useCurrentEra(); + + const { result: exposures, ...other } = useApiRx( + useCallback( + (api) => { + if (currentEra === null) { + return null; + } + + return api.query.staking.erasStakersOverview.entries(currentEra); + }, + [currentEra] + ) + ); + + const exposureMap = useEntryMap( + exposures, + useCallback((key) => key.args[1].toString(), []) + ); + + return { result: exposureMap, ...other }; +}; + +export default useStakingExposures; diff --git a/apps/tangle-dapp/data/staking/useStakingExposures2.ts b/apps/tangle-dapp/data/staking/useStakingExposures2.ts new file mode 100644 index 0000000000..5773728a5a --- /dev/null +++ b/apps/tangle-dapp/data/staking/useStakingExposures2.ts @@ -0,0 +1,58 @@ +import { DeriveStakingQuery } from '@polkadot/api-derive/staking/types'; +import { + SpStakingExposurePage, + SpStakingPagedExposureMetadata, +} from '@polkadot/types/lookup'; +import { + DEFAULT_FLAGS_ELECTED, + DEFAULT_FLAGS_WAITING, +} from '@webb-tools/dapp-config/constants/tangle'; +import { useCallback, useMemo } from 'react'; +import { map, Observable } from 'rxjs'; + +import useApiRx from '../../hooks/useApiRx'; + +export type ExposureMapEntry = { + exposure: SpStakingExposurePage | null; + exposureMeta: SpStakingPagedExposureMetadata | null; +}; + +const useStakingExposures2 = (isActive: boolean) => { + const { result: queryResults, ...other } = useApiRx( + useCallback( + (api) => { + const deriveObservable: Observable<{ info: DeriveStakingQuery[] }> = + isActive + ? api.derive.staking.electedInfo(DEFAULT_FLAGS_ELECTED) + : api.derive.staking.waitingInfo(DEFAULT_FLAGS_WAITING); + + return deriveObservable.pipe(map((derive) => derive.info)); + }, + [isActive] + ) + ); + + const exposureMap = useMemo(() => { + if (queryResults === null) { + return null; + } + + const resultingMap = new Map(); + + for (const { accountId, exposureMeta, exposurePaged } of queryResults) { + const exposure = exposurePaged.isSome && exposurePaged.unwrap(); + const expMeta = exposureMeta.isSome && exposureMeta.unwrap(); + + resultingMap.set(accountId.toString(), { + exposure: exposure || null, + exposureMeta: expMeta || null, + }); + } + + return resultingMap; + }, [queryResults]); + + return { result: exposureMap, ...other }; +}; + +export default useStakingExposures2; diff --git a/apps/tangle-dapp/data/staking/useStakingLedger.ts b/apps/tangle-dapp/data/staking/useStakingLedger.ts new file mode 100644 index 0000000000..902bbd03de --- /dev/null +++ b/apps/tangle-dapp/data/staking/useStakingLedger.ts @@ -0,0 +1,55 @@ +import { ApiRx } from '@polkadot/api'; +import { StakingLedger } from '@polkadot/types/interfaces'; +import { useCallback } from 'react'; +import { map, of } from 'rxjs'; + +import useApiRx from '../../hooks/useApiRx'; +import useSubstrateAddress from '../../hooks/useSubstrateAddress'; +import Optional from '../../utils/Optional'; + +/** + * A function provided by the consumer of the {@link useStakingLedger} + * hook to select which data to fetch from the ledger. + */ +export type StakingLedgerFetcher> = ( + ledger: StakingLedger, + api: ApiRx +) => T | null; + +function useStakingLedger>( + fetcher: StakingLedgerFetcher +) { + const activeSubstrateAddress = useSubstrateAddress(); + + return useApiRx | null>( + useCallback( + (api) => { + if (activeSubstrateAddress === null) { + return of(null); + } + + return api.query.staking.ledger(activeSubstrateAddress).pipe( + map((ledgerOpt) => { + // TODO: Need to research under what circumstances the ledger would be `None`, and explain that here. + if (ledgerOpt.isNone) { + return new Optional(); + } + + const result = fetcher(ledgerOpt.unwrap(), api); + + // If the fetcher indicates that it is not ready, do the same + // here. + if (result === null) { + return null; + } + + return new Optional(result); + }) + ); + }, + [fetcher, activeSubstrateAddress] + ) + ); +} + +export default useStakingLedger; diff --git a/apps/tangle-dapp/data/staking/useStakingPendingRewards.ts b/apps/tangle-dapp/data/staking/useStakingPendingRewards.ts deleted file mode 100644 index 0178ee2494..0000000000 --- a/apps/tangle-dapp/data/staking/useStakingPendingRewards.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { ApiPromise } from '@polkadot/api'; -import { StakingLedger } from '@polkadot/types/interfaces'; -import { BN, BN_ONE, BN_ZERO } from '@polkadot/util'; -import assert from 'assert'; -import { useCallback } from 'react'; - -import { PolkadotApiSwrKey } from '../../hooks/usePolkadotApi'; -import useStakingLedger, { - StakingLedgerFetcher, -} from '../../hooks/useStakingLedger'; - -const sumStakerRewardsInClaimedEraRange = async ( - ledger: StakingLedger, - api: ApiPromise, - startEra: number, - endEra: number -) => { - assert(startEra <= endEra, 'Start era should be before end era'); - assert(startEra >= 0, 'Start era should be positive'); - - // If the staker has never claimed rewards, there is nothing to do. - if (ledger.claimedRewards.length === 0) { - return BN_ZERO; - } - - let rewardSum = new BN(0); - - for (let eraIndex = startEra; eraIndex <= endEra; eraIndex++) { - // Get the total rewards pool for the era. - const totalRewardsForEraOpt = await api.query.staking.erasValidatorReward( - eraIndex - ); - - // If the rewards is not yet available for the given era, - // skip it. - if (totalRewardsForEraOpt.isNone) { - continue; - } - - const totalRewardsForEra = totalRewardsForEraOpt.unwrap(); - - // Get the total points and the staker's points for the era. - const pointsForEra = await api.query.staking.erasRewardPoints(eraIndex); - const totalPoints = pointsForEra.total.toBn(); - const stashPoints = pointsForEra.individual.get(ledger.stash) || BN_ZERO; - - // Avoid division by zero. - const safeTotalPoints = totalPoints.isZero() ? BN_ONE : totalPoints; - - // Calculate the staker's share of the rewards for the era: - // stakerShareForEra = totalRewardsForEra * stakerPoints / totalPoints - const stakerShareForEra = totalRewardsForEra - .toBn() - .mul(stashPoints) - .div(safeTotalPoints); - - // Add the staker's share to the total pending rewards. - rewardSum = rewardSum.add(stakerShareForEra); - } - - return rewardSum; -}; - -const fetchPendingRewards: StakingLedgerFetcher = async (ledger, api) => { - const lastClaimedEraIndex = - ledger.claimedRewards[ledger.claimedRewards.length - 1].toNumber(); - - const currentEraIndexOpt = await api.query.staking.currentEra(); - - // Staking is not yet active, hasn't started, or - // between genesis and the start of the first era? - // Either way, there should be no rewards under those - // circumstances. - if (currentEraIndexOpt.isNone) { - return BN_ZERO; - } - - const currentEraIndex = currentEraIndexOpt.unwrap().toNumber(); - - // Pending rewards = Sum of all rewards in unclaimed eras. - return sumStakerRewardsInClaimedEraRange( - ledger, - api, - // Exclude the last claimed era. - lastClaimedEraIndex + 1, - currentEraIndex - ); -}; - -const useStakingPendingRewards = () => { - const { value: pendingRewards } = useStakingLedger( - useCallback(async (ledger, api) => fetchPendingRewards(ledger, api), []), - PolkadotApiSwrKey.STAKING_REWARDS - ); - - return pendingRewards; -}; - -export default useStakingPendingRewards; diff --git a/apps/tangle-dapp/data/staking/useUnbondTx.ts b/apps/tangle-dapp/data/staking/useUnbondTx.ts new file mode 100644 index 0000000000..7dd7eb6bd0 --- /dev/null +++ b/apps/tangle-dapp/data/staking/useUnbondTx.ts @@ -0,0 +1,47 @@ +import { BN } from '@polkadot/util'; +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { Precompile } from '../../constants/evmPrecompiles'; +import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { EvmTxFactory } from '../../hooks/useEvmPrecompileAbiCall'; +import useFormatNativeTokenAmount from '../../hooks/useFormatNativeTokenAmount'; +import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; +import { GetSuccessMessageFunctionType } from '../../types'; + +type UnbondTxContext = { + amount: BN; +}; + +const useUnbondTx = () => { + const formatNativeTokenAmount = useFormatNativeTokenAmount(); + + const evmTxFactory: EvmTxFactory = + useCallback( + (context) => ({ functionName: 'unbond', arguments: [context.amount] }), + [] + ); + + const substrateTxFactory: SubstrateTxFactory = useCallback( + (api, _activeSubstrateAddress, context) => + api.tx.staking.unbond(context.amount), + [] + ); + + const getSuccessMessageFnc: GetSuccessMessageFunctionType = + useCallback( + ({ amount }) => + `Successfully unstaked ${formatNativeTokenAmount(amount)}.`, + [formatNativeTokenAmount] + ); + + return useAgnosticTx({ + name: TxName.UNBOND, + precompile: Precompile.STAKING, + evmTxFactory, + substrateTxFactory, + getSuccessMessageFnc, + }); +}; + +export default useUnbondTx; diff --git a/apps/tangle-dapp/data/staking/useUnbonding.ts b/apps/tangle-dapp/data/staking/useUnbonding.ts index 5cf6cfd93d..e9a5a948ed 100644 --- a/apps/tangle-dapp/data/staking/useUnbonding.ts +++ b/apps/tangle-dapp/data/staking/useUnbonding.ts @@ -1,8 +1,8 @@ import { BN, BN_ZERO } from '@polkadot/util'; import { useCallback } from 'react'; -import useStakingLedgerRx from '../../hooks/useStakingLedgerRx'; import useCurrentEra from './useCurrentEra'; +import useStakingLedger from './useStakingLedger'; export type StakingUnbondingEntry = { amount: BN; @@ -11,12 +11,12 @@ export type StakingUnbondingEntry = { }; const useUnbonding = () => { - const { data: currentEra } = useCurrentEra(); + const { result: currentEra } = useCurrentEra(); - return useStakingLedgerRx( + return useStakingLedger( useCallback( (ledger) => { - if (currentEra === null) { + if (currentEra === null || ledger === null) { return null; } @@ -27,6 +27,7 @@ const useUnbonding = () => { return { amount: unlockChunk.value.toBn(), unlockEra: unlockChunk.era.toBn(), + // If the era is less than the current era, the unbonding is complete. remainingEras: eraDifference.gtn(0) ? eraDifference : BN_ZERO, }; } diff --git a/apps/tangle-dapp/data/staking/useUpdateNominatorTx.ts b/apps/tangle-dapp/data/staking/useUpdateNominatorTx.ts new file mode 100644 index 0000000000..c3971396bf --- /dev/null +++ b/apps/tangle-dapp/data/staking/useUpdateNominatorTx.ts @@ -0,0 +1,116 @@ +import { SubmittableExtrinsic } from '@polkadot/api/types'; +import { ISubmittableResult } from '@polkadot/types/types'; +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { Precompile } from '../../constants/evmPrecompiles'; +import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { + AbiBatchCallData, + EvmTxFactory, +} from '../../hooks/useEvmPrecompileAbiCall'; +import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; +import optimizeTxBatch from '../../utils/optimizeTxBatch'; +import createEvmBatchCallArgs from '../../utils/staking/createEvmBatchCallArgs'; +import createEvmBatchCallData from '../../utils/staking/createEvmBatchCallData'; +import getEvmPayeeValue from '../../utils/staking/getEvmPayeeValue'; +import getSubstratePayeeValue from '../../utils/staking/getSubstratePayeeValue'; +import toEvmAddress32 from '../../utils/toEvmAddress32'; +import { NominationOptionsContext } from './useSetupNominatorTx'; + +export type UpdateNominatorOptions = Partial & { + nominees: Set; +}; + +const useUpdateNominatorTx = () => { + const evmTxFactory: EvmTxFactory = + useCallback((context) => { + const batchCalls: AbiBatchCallData[] = []; + + // If payee was provided, add the call to set the payee. + if (context.payee !== undefined) { + const payee = getEvmPayeeValue(context.payee); + + // TODO: Are we missing adding all the EVM addresses for the other reward destinations? + if (payee === null) { + throw new Error( + 'There is no EVM destination address registered for the given payee' + ); + } + + batchCalls.push( + createEvmBatchCallData(Precompile.STAKING, 'setPayee', [payee]) + ); + } + + // If a bond amount was provided, add the call to bond extra. + if (context.bondAmount !== undefined) { + batchCalls.push( + createEvmBatchCallData(Precompile.STAKING, 'bondExtra', [ + BigInt(context.bondAmount.toString()), + ]) + ); + } + + const evmNomineeAddresses32 = Array.from(context.nominees).map( + toEvmAddress32 + ); + + // Push nominate call last. Although the order of calls + // in the batch may not matter in this case. + batchCalls.push( + createEvmBatchCallData(Precompile.STAKING, 'nominate', [ + evmNomineeAddresses32, + ]) + ); + + return { + functionName: 'batchAll', + arguments: createEvmBatchCallArgs(batchCalls), + }; + }, []); + + const substrateTxFactory = useCallback< + SubstrateTxFactory> + >((api, _activeSubstrateAddress, context) => { + const bondExtraTx = + context.bondAmount !== undefined + ? api.tx.staking.bondExtra(context.bondAmount) + : null; + + const setPayeeTx = + context.payee !== undefined + ? api.tx.staking.setPayee(getSubstratePayeeValue(context.payee)) + : null; + + const nominateTx = + context.nominees !== undefined + ? api.tx.staking.nominate(Array.from(context.nominees)) + : null; + + const txs = [bondExtraTx, setPayeeTx, nominateTx].filter( + (tx): tx is SubmittableExtrinsic<'promise', ISubmittableResult> => + tx !== null + ); + + // Nothing to update. + if (txs.length === 0) { + console.warn( + 'Tried to update nominator with no changes. Did you forget to handle an edge case?' + ); + + return null; + } + + return optimizeTxBatch(api, txs); + }, []); + + return useAgnosticTx({ + name: TxName.UPDATE_NOMINATOR, + precompile: Precompile.BATCH, + substrateTxFactory, + evmTxFactory, + }); +}; + +export default useUpdateNominatorTx; diff --git a/apps/tangle-dapp/data/staking/useValidatorPrefs.ts b/apps/tangle-dapp/data/staking/useValidatorPrefs.ts new file mode 100644 index 0000000000..4cafb2aca7 --- /dev/null +++ b/apps/tangle-dapp/data/staking/useValidatorPrefs.ts @@ -0,0 +1,19 @@ +import { useCallback } from 'react'; + +import useApiRx from '../../hooks/useApiRx'; +import useEntryMap from '../../hooks/useEntryMap'; + +const useValidatorPrefs = () => { + const { result: validatorPrefs, ...other } = useApiRx( + useCallback((api) => api.query.staking.validators.entries(), []) + ); + + const prefMap = useEntryMap( + validatorPrefs, + useCallback((key) => key.args[0].toString(), []) + ); + + return { result: prefMap, ...other }; +}; + +export default useValidatorPrefs; diff --git a/apps/tangle-dapp/data/staking/useValidatorsPrefs.ts b/apps/tangle-dapp/data/staking/useValidatorsPrefs.ts deleted file mode 100644 index 333c799f8b..0000000000 --- a/apps/tangle-dapp/data/staking/useValidatorsPrefs.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { useCallback } from 'react'; - -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; - -const useValidatorsPrefs = () => { - return usePolkadotApiRx( - // Memoize factory to prevent infinite loops. - useCallback((api) => api.query.staking.validators.entries(), []) - ); -}; - -export default useValidatorsPrefs; diff --git a/apps/tangle-dapp/data/staking/useWithdrawUnbondedTx.ts b/apps/tangle-dapp/data/staking/useWithdrawUnbondedTx.ts new file mode 100644 index 0000000000..9a19a5e545 --- /dev/null +++ b/apps/tangle-dapp/data/staking/useWithdrawUnbondedTx.ts @@ -0,0 +1,65 @@ +import { BN } from '@polkadot/util'; +import { useCallback } from 'react'; + +import { TxName } from '../../constants'; +import { Precompile } from '../../constants/evmPrecompiles'; +import useAgnosticTx from '../../hooks/useAgnosticTx'; +import { EvmTxFactory } from '../../hooks/useEvmPrecompileAbiCall'; +import useFormatNativeTokenAmount from '../../hooks/useFormatNativeTokenAmount'; +import { SubstrateTxFactory } from '../../hooks/useSubstrateTx'; +import { GetSuccessMessageFunctionType } from '../../types'; +import useSlashingSpans from './useSlashingSpans'; + +const useWithdrawUnbondedTx = (withdrawAmount: BN | null) => { + const formatNativeTokenAmount = useFormatNativeTokenAmount(); + const { result: slashingSpansOpt } = useSlashingSpans(); + + // TODO: Need to verify whether defaulting to 0 here is the correct behavior. + const slashingSpans = + slashingSpansOpt === null + ? null + : slashingSpansOpt.isNone + ? 0 + : // TODO: Need to verify that the span index is what is wanted by the extrinsics. + slashingSpansOpt.unwrap().spanIndex.toNumber(); + + const evmTxFactory: EvmTxFactory = useCallback(() => { + if (slashingSpans === null) { + return null; + } + + return { + functionName: 'withdrawUnbonded', + arguments: [slashingSpans], + }; + }, [slashingSpans]); + + const substrateTxFactory: SubstrateTxFactory = useCallback( + (api) => { + if (slashingSpans === null) { + return null; + } + + return api.tx.staking.withdrawUnbonded(slashingSpans); + }, + [slashingSpans] + ); + + const getSuccessMessageFnc: GetSuccessMessageFunctionType = useCallback( + () => + withdrawAmount + ? `Successfully withdrew ${formatNativeTokenAmount(withdrawAmount)}.` + : '', + [withdrawAmount, formatNativeTokenAmount] + ); + + return useAgnosticTx({ + name: TxName.WITHDRAW_UNBONDED, + precompile: Precompile.STAKING, + evmTxFactory, + substrateTxFactory, + getSuccessMessageFnc, + }); +}; + +export default useWithdrawUnbondedTx; diff --git a/apps/tangle-dapp/data/useEraCountSubscription.ts b/apps/tangle-dapp/data/useEraCountSubscription.ts index e04b7c907c..14132841dc 100644 --- a/apps/tangle-dapp/data/useEraCountSubscription.ts +++ b/apps/tangle-dapp/data/useEraCountSubscription.ts @@ -6,7 +6,7 @@ import type { Subscription } from 'rxjs'; import useNetworkStore from '../context/useNetworkStore'; import useFormatReturnType from '../hooks/useFormatReturnType'; -import { getPolkadotApiRx } from '../utils/polkadot'; +import { getApiRx } from '../utils/polkadot'; export default function useEraCountSubscription( defaultValue: number | null = null @@ -22,7 +22,7 @@ export default function useEraCountSubscription( const subscribeData = async () => { try { - const api = await getPolkadotApiRx(rpcEndpoint); + const api = await getApiRx(rpcEndpoint); sub = api.query.staking.activeEra().subscribe((nextEra) => { const activeEra = nextEra.unwrapOr(null); diff --git a/apps/tangle-dapp/data/ServiceTables/useJobIdAndTypeLookupByValidator.ts b/apps/tangle-dapp/data/useJobIdAndTypeLookupByValidator.ts old mode 100644 new mode 100755 similarity index 90% rename from apps/tangle-dapp/data/ServiceTables/useJobIdAndTypeLookupByValidator.ts rename to apps/tangle-dapp/data/useJobIdAndTypeLookupByValidator.ts index e5647f05c4..d084405e4c --- a/apps/tangle-dapp/data/ServiceTables/useJobIdAndTypeLookupByValidator.ts +++ b/apps/tangle-dapp/data/useJobIdAndTypeLookupByValidator.ts @@ -3,12 +3,12 @@ import { useCallback } from 'react'; import { map } from 'rxjs/operators'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; +import useApiRx from '../hooks/useApiRx'; export default function useJobIdAndTypeLookupByValidator( validatorAddress: string ) { - return usePolkadotApiRx( + return useApiRx( useCallback( (api) => { return api.query.jobs.validatorJobIdLookup(validatorAddress).pipe( diff --git a/apps/tangle-dapp/data/useSessionCountSubscription.ts b/apps/tangle-dapp/data/useSessionCountSubscription.ts index faba3beeec..2ee5e6af0a 100644 --- a/apps/tangle-dapp/data/useSessionCountSubscription.ts +++ b/apps/tangle-dapp/data/useSessionCountSubscription.ts @@ -6,7 +6,7 @@ import type { Subscription } from 'rxjs'; import useNetworkStore from '../context/useNetworkStore'; import useFormatReturnType from '../hooks/useFormatReturnType'; -import { getPolkadotApiRx } from '../utils/polkadot'; +import { getApiRx } from '../utils/polkadot'; function useSessionCountSubscription(defaultValue = NaN) { const [session, setSession] = useState(defaultValue); @@ -20,7 +20,7 @@ function useSessionCountSubscription(defaultValue = NaN) { const subscribeData = async () => { try { - const api = await getPolkadotApiRx(rpcEndpoint); + const api = await getApiRx(rpcEndpoint); sub = api.query.session.currentIndex().subscribe((nextSession) => { const idx = nextSession.toNumber(); diff --git a/apps/tangle-dapp/data/validatorDetails/useActiveServicesByValidator.ts b/apps/tangle-dapp/data/validatorDetails/useActiveServicesByValidator.ts new file mode 100644 index 0000000000..c482b57698 --- /dev/null +++ b/apps/tangle-dapp/data/validatorDetails/useActiveServicesByValidator.ts @@ -0,0 +1,79 @@ +'use client'; + +import { useWebbUI } from '@webb-tools/webb-ui-components/hooks/useWebbUI'; +import { useEffect, useState } from 'react'; + +import useNetworkStore from '../../context/useNetworkStore'; +import { Service } from '../../types'; +import ensureError from '../../utils/ensureError'; +import { extractServiceDetails, getApiPromise } from '../../utils/polkadot'; +import useJobIdAndTypeLookupByValidator from '../useJobIdAndTypeLookupByValidator'; + +export default function useActiveServicesByValidator(validatorAddress: string) { + const { rpcEndpoint } = useNetworkStore(); + const { notificationApi } = useWebbUI(); + + const { + result: validatorIdAndTypeLookup, + isLoading: isLoadingValidatorIdAndTypeLookup, + error: validatorIdAndTypeLookupError, + } = useJobIdAndTypeLookupByValidator(validatorAddress); + + const [services, setServices] = useState([]); + const [isLoadingServices, setIsLoadingServices] = useState(true); + const [errorLoadingServices, setErrorLoadingServices] = + useState(null); + + useEffect(() => { + const fetchData = async () => { + if (validatorIdAndTypeLookup === null) { + setServices([]); + return; + } + + try { + const api = await getApiPromise(rpcEndpoint); + + const fetchedServices = ( + await Promise.all( + validatorIdAndTypeLookup.map(async (service) => { + const jobInfoData = await api.query.jobs.submittedJobs( + service.type, + service.id + ); + const extractedServiceData = extractServiceDetails( + service.id.toString(), + jobInfoData + ); + if (extractedServiceData === null) { + throw new Error('Failed to get service data'); + } + return extractedServiceData; + }) + ) + ).filter((service) => service !== null) as Service[]; + setServices(fetchedServices); + } catch (error) { + setErrorLoadingServices(ensureError(error)); + } finally { + setIsLoadingServices(false); + } + }; + + fetchData(); + }, [notificationApi, validatorIdAndTypeLookup, rpcEndpoint]); + + useEffect(() => { + if (validatorIdAndTypeLookupError || errorLoadingServices) { + notificationApi({ + message: 'Failed to load services', + variant: 'error', + }); + } + }, [notificationApi, validatorIdAndTypeLookupError, errorLoadingServices]); + + return { + services, + isLoading: isLoadingValidatorIdAndTypeLookup || isLoadingServices, + }; +} diff --git a/apps/tangle-dapp/data/useNodeSpecifications.ts b/apps/tangle-dapp/data/validatorDetails/useNodeSpecifications.ts similarity index 92% rename from apps/tangle-dapp/data/useNodeSpecifications.ts rename to apps/tangle-dapp/data/validatorDetails/useNodeSpecifications.ts index b50e878234..a6aded8575 100644 --- a/apps/tangle-dapp/data/useNodeSpecifications.ts +++ b/apps/tangle-dapp/data/validatorDetails/useNodeSpecifications.ts @@ -1,6 +1,6 @@ import { useState } from 'react'; -import type { NodeSpecification } from '../types'; +import type { NodeSpecification } from '../../types'; const mock: NodeSpecification = { os: 'Linux', diff --git a/apps/tangle-dapp/data/validatorDetails/useValidatorInfoCard.ts b/apps/tangle-dapp/data/validatorDetails/useValidatorInfoCard.ts new file mode 100644 index 0000000000..1ffb2da404 --- /dev/null +++ b/apps/tangle-dapp/data/validatorDetails/useValidatorInfoCard.ts @@ -0,0 +1,113 @@ +'use client'; + +import { useWebbUI } from '@webb-tools/webb-ui-components/hooks/useWebbUI'; +import { useCallback, useEffect, useMemo, useState } from 'react'; + +import useRestakingRoleLedger from '../../data/restaking/useRestakingRoleLedger'; +import useCurrentEra from '../../data/staking/useCurrentEra'; +import useApi, { ApiFetcher } from '../../hooks/useApi'; +import { getAccountInfo } from '../../utils/polkadot'; +import { + getProfileTypeFromRestakeRoleLedger, + getTotalRestakedFromRestakeRoleLedger, +} from '../../utils/polkadot/restake'; + +export default function useValidatorInfoCard( + rpcEndpoint: string, + validatorAddress: string +) { + const { notificationApi } = useWebbUI(); + const { result: currentEra } = useCurrentEra(); + const { result: ledgerOpt, isLoading: isLoadingLedgerOpt } = + useRestakingRoleLedger(validatorAddress); + + const [name, setName] = useState(null); + const [email, setEmail] = useState(null); + const [web, setWeb] = useState(null); + const [twitter, setTwitter] = useState(null); + const [isLoadingNameAndSocials, setIsLoadingNameAndSocials] = useState(true); + + const nominationsFetcher = useCallback< + ApiFetcher<{ + nominations: number | null; + isActive: boolean | null; + }> + >( + async (api) => { + if (currentEra === null || !api.query.staking?.erasStakersOverview) { + return Promise.resolve({ + nominations: null, + isActive: null, + }); + } + const erasStakersOverviewData = + await api.query.staking.erasStakersOverview( + currentEra, + validatorAddress + ); + if (erasStakersOverviewData.isSome) { + const nominatorCount = erasStakersOverviewData.unwrap().nominatorCount; + return { + nominations: nominatorCount.toNumber(), + isActive: true, + }; + } + return { + nominations: null, + isActive: false, + }; + }, + [validatorAddress, currentEra] + ); + + const { result: nominationsData } = useApi(nominationsFetcher); + + const restakingMethod = useMemo( + () => getProfileTypeFromRestakeRoleLedger(ledgerOpt), + [ledgerOpt] + ); + + const totalRestaked = useMemo( + () => getTotalRestakedFromRestakeRoleLedger(ledgerOpt), + [ledgerOpt] + ); + + useEffect(() => { + const fetchNameAndSocials = async () => { + try { + const validatorAccountInfo = await getAccountInfo( + rpcEndpoint, + validatorAddress + ); + if (validatorAccountInfo) { + setName(validatorAccountInfo.name); + setEmail(validatorAccountInfo.email); + setWeb(validatorAccountInfo.web); + setTwitter(validatorAccountInfo.twitter); + } + } catch (error) { + notificationApi({ + message: "Failed to load validators' name and socials", + variant: 'error', + }); + } finally { + setIsLoadingNameAndSocials(false); + } + }; + + fetchNameAndSocials(); + }, [validatorAddress, rpcEndpoint, currentEra, notificationApi]); + + return { + name, + totalRestaked, + restakingMethod, + nominations: nominationsData?.nominations ?? null, + isActive: nominationsData?.isActive ?? null, + twitter, + email, + web, + isLoading: + isLoadingNameAndSocials || nominationsData === null || isLoadingLedgerOpt, + }; +} diff --git a/apps/tangle-dapp/data/vesting/useVestTx.ts b/apps/tangle-dapp/data/vesting/useVestTx.ts index 78dda35070..dc429a8536 100644 --- a/apps/tangle-dapp/data/vesting/useVestTx.ts +++ b/apps/tangle-dapp/data/vesting/useVestTx.ts @@ -1,5 +1,6 @@ import { useCallback } from 'react'; +import { TxName } from '../../constants'; import { Precompile } from '../../constants/evmPrecompiles'; import useAgnosticTx from '../../hooks/useAgnosticTx'; @@ -12,15 +13,12 @@ import useAgnosticTx from '../../hooks/useAgnosticTx'; * Vesting schedules that have not yet started (i.e. have not reached their * "cliff") will be omitted. */ -const useVestTx = (notifyStatusUpdates?: boolean) => { +const useVestTx = () => { return useAgnosticTx({ + name: TxName.VEST, precompile: Precompile.VESTING, - notifyStatusUpdates, evmTxFactory: { functionName: 'vest', arguments: [] }, - substrateTxFactory: useCallback( - (api) => Promise.resolve(api.tx.vesting.vest()), - [] - ), + substrateTxFactory: useCallback((api) => api.tx.vesting.vest(), []), }); }; diff --git a/apps/tangle-dapp/data/vesting/useVestingInfo.ts b/apps/tangle-dapp/data/vesting/useVestingInfo.ts index 999173a7ef..a80df345f3 100644 --- a/apps/tangle-dapp/data/vesting/useVestingInfo.ts +++ b/apps/tangle-dapp/data/vesting/useVestingInfo.ts @@ -4,7 +4,7 @@ import { BN, BN_ZERO } from '@polkadot/util'; import { useCallback, useMemo } from 'react'; import { SubstrateLockId } from '../../constants/index'; -import usePolkadotApiRx from '../../hooks/usePolkadotApiRx'; +import useApiRx from '../../hooks/useApiRx'; import useSubstrateAddress from '../../hooks/useSubstrateAddress'; import useBalancesLock from '../balances/useBalancesLock'; @@ -54,17 +54,20 @@ export type VestingInfo = { const useVestingInfo = (): VestingInfo => { const activeSubstrateAddress = useSubstrateAddress(); - const { data: schedulesOpt } = usePolkadotApiRx( + const { result: schedulesOpt } = useApiRx( useCallback( (api) => { - if (!activeSubstrateAddress) return null; + if (activeSubstrateAddress === null) { + return null; + } + return api.query.vesting.vesting(activeSubstrateAddress); }, [activeSubstrateAddress] ) ); - const { data: currentBlockNumber } = usePolkadotApiRx( + const { result: currentBlockNumber } = useApiRx( useCallback((api) => api.derive.chain.bestNumber(), []) ); @@ -94,8 +97,7 @@ const useVestingInfo = (): VestingInfo => { schedulesOpt === null || schedulesOpt.isNone || currentBlockNumber === null || - totalVestingAmount === null || - vestingLockAmount === null + totalVestingAmount === null ) { return null; } @@ -123,7 +125,7 @@ const useVestingInfo = (): VestingInfo => { // Without this, the total released amount would eventually exceed // the total vested amount, displaying incorrect information. return BN.min(totalReleased, totalVestingAmount); - }, [currentBlockNumber, totalVestingAmount, schedulesOpt, vestingLockAmount]); + }, [currentBlockNumber, totalVestingAmount, schedulesOpt]); const claimableAmount = useMemo(() => { if ( diff --git a/apps/tangle-dapp/hooks/types.ts b/apps/tangle-dapp/hooks/types.ts deleted file mode 100644 index 2a83996f36..0000000000 --- a/apps/tangle-dapp/hooks/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { MaybePromise } from 'viem/_types/types/utils'; - -import type { AbiFunctionName, Precompile } from '../constants/evmPrecompiles'; - -export type EvmAbiCallData = { - functionName: AbiFunctionName; - // TODO: Use argument types from the ABI. - arguments: unknown[]; -}; - -export type EvmTxFactory = ( - context: Context -) => MaybePromise> | null; diff --git a/apps/tangle-dapp/hooks/useActiveAccountAddress.ts b/apps/tangle-dapp/hooks/useActiveAccountAddress.ts index 2845651935..92d87c8e15 100644 --- a/apps/tangle-dapp/hooks/useActiveAccountAddress.ts +++ b/apps/tangle-dapp/hooks/useActiveAccountAddress.ts @@ -1,9 +1,13 @@ import { useActiveAccount } from '@webb-tools/api-provider-environment/WebbProvider/subjects'; -const useActiveAccountAddress = () => { - const activeAccount = useActiveAccount(); +const useActiveAccountAddress = (): string | null => { + const [activeAccount] = useActiveAccount(); - return activeAccount[0]?.address ?? null; + if (activeAccount === null) { + return null; + } + + return activeAccount.address; }; export default useActiveAccountAddress; diff --git a/apps/tangle-dapp/hooks/useAgnosticAccountInfo.ts b/apps/tangle-dapp/hooks/useAgnosticAccountInfo.ts index 27284a9119..953dc14e1f 100644 --- a/apps/tangle-dapp/hooks/useAgnosticAccountInfo.ts +++ b/apps/tangle-dapp/hooks/useAgnosticAccountInfo.ts @@ -1,14 +1,11 @@ -import { isEthereumAddress } from '@polkadot/util-crypto'; - +import { isEvmAddress } from '../utils/isEvmAddress'; import useActiveAccountAddress from './useActiveAccountAddress'; const useAgnosticAccountInfo = () => { const activeAccountAddress = useActiveAccountAddress(); const isEvm = - activeAccountAddress === null - ? null - : isEthereumAddress(activeAccountAddress); + activeAccountAddress === null ? null : isEvmAddress(activeAccountAddress); return { isEvm, diff --git a/apps/tangle-dapp/hooks/useAgnosticTx.ts b/apps/tangle-dapp/hooks/useAgnosticTx.ts index 43a4631e85..a37dc17086 100644 --- a/apps/tangle-dapp/hooks/useAgnosticTx.ts +++ b/apps/tangle-dapp/hooks/useAgnosticTx.ts @@ -1,22 +1,40 @@ import { assert } from '@polkadot/util'; -import { isEthereumAddress } from '@polkadot/util-crypto'; -import { useWebbUI } from '@webb-tools/webb-ui-components'; -import { useCallback, useEffect } from 'react'; +import { useCallback, useEffect, useState } from 'react'; +import { TxName } from '../constants'; import { Precompile } from '../constants/evmPrecompiles'; -import prepareTxNotification from '../utils/prepareTxNotification'; -import type { EvmAbiCallData, EvmTxFactory } from './types'; +import { GetSuccessMessageFunctionType } from '../types'; import useActiveAccountAddress from './useActiveAccountAddress'; -import useEvmPrecompileAbiCall from './useEvmPrecompileAbiCall'; +import useAgnosticAccountInfo from './useAgnosticAccountInfo'; +import useEvmPrecompileAbiCall, { + AbiCall, + EvmTxFactory, +} from './useEvmPrecompileAbiCall'; import useSubstrateTx, { SubstrateTxFactory, TxStatus } from './useSubstrateTx'; +import useTxNotification from './useTxNotification'; export type AgnosticTxOptions = { precompile: PrecompileT; - evmTxFactory: - | EvmTxFactory - | EvmAbiCallData; + evmTxFactory: EvmTxFactory | AbiCall; substrateTxFactory: SubstrateTxFactory; - notifyStatusUpdates?: boolean; + + /** + * An identifiable name shown on the toast notification to + * let users know which transaction status updates refer to. + * + * Also used to close the notification when the transaction + * is successful or fails. + */ + name: TxName; + + /** + * A function that returns a success message to display + * when the transaction is successful. + * + * @param context The context object passed to the `execute` function. + * @returns The success message to display. + */ + getSuccessMessageFnc?: GetSuccessMessageFunctionType; }; /** @@ -30,87 +48,116 @@ function useAgnosticTx({ precompile, evmTxFactory, substrateTxFactory, - notifyStatusUpdates = true, + name, + getSuccessMessageFnc, }: AgnosticTxOptions) { + const [agnosticStatus, setAgnosticStatus] = useState( + TxStatus.NOT_YET_INITIATED + ); + const activeAccountAddress = useActiveAccountAddress(); - const { notificationApi } = useWebbUI(); + const { isEvm: isEvmAccount } = useAgnosticAccountInfo(); const { execute: executeSubstrateTx, status: substrateTxStatus, error: substrateError, reset: substrateReset, - } = useSubstrateTx(substrateTxFactory); + txHash: substrateTxHash, + successMessage: substrateSuccessMessage, + } = useSubstrateTx(substrateTxFactory, getSuccessMessageFnc); const { execute: executeEvmPrecompileAbiCall, status: evmTxStatus, error: evmError, reset: evmReset, + txHash: evmTxHash, + successMessage: evmSuccessMessage, } = useEvmPrecompileAbiCall(precompile, evmTxFactory); - const isEvmAccount = - activeAccountAddress === null - ? null - : isEthereumAddress(activeAccountAddress); + const { notifyProcessing, notifySuccess, notifyError } = + useTxNotification(name); - const agnosticStatus = - isEvmAccount === null - ? TxStatus.NOT_YET_INITIATED - : isEvmAccount - ? evmTxStatus - : substrateTxStatus; + const execute = useCallback( + async (context: Context) => { + notifyProcessing(); - const agnosticError = - isEvmAccount === null ? null : isEvmAccount ? evmError : substrateError; + if (executeEvmPrecompileAbiCall !== null) { + await executeEvmPrecompileAbiCall(context); + } else { + // By this point, at least one of the executors should be defined, + // otherwise it constitutes a logic error. + assert( + executeSubstrateTx !== null, + 'Substrate transaction executor should be defined if EVM transaction executor is not' + ); + + await executeSubstrateTx(context); + } + }, + [executeEvmPrecompileAbiCall, executeSubstrateTx, notifyProcessing] + ); - // Notify the user of the transaction status, if applicable. + // Special effect that handles when an account is disconnected, + // and prevents the same transaction status from being notified + // multiple times. useEffect(() => { - if ( - isEvmAccount === null || - agnosticStatus === TxStatus.NOT_YET_INITIATED || - !notifyStatusUpdates - ) { - return; + const nextAgnosticStatus = + isEvmAccount === null + ? null + : isEvmAccount + ? evmTxStatus + : substrateTxStatus; + + // When an account is disconnected, reset the transaction status. + if (nextAgnosticStatus === null) { + substrateReset(); + evmReset(); + setAgnosticStatus(TxStatus.NOT_YET_INITIATED); } - - const notificationOpts = prepareTxNotification( - agnosticStatus, - agnosticError - ); - - if (notificationOpts === null) { - return; + // Only update the transaction status when it changes. + else if (nextAgnosticStatus !== agnosticStatus) { + setAgnosticStatus(nextAgnosticStatus); } - - notificationApi(notificationOpts); }, [ - substrateTxStatus, + agnosticStatus, + evmReset, evmTxStatus, isEvmAccount, - notificationApi, - agnosticStatus, - notifyStatusUpdates, - agnosticError, + substrateReset, + substrateTxStatus, ]); - const execute = useCallback( - async (context: Context) => { - if (executeEvmPrecompileAbiCall !== null) { - return executeEvmPrecompileAbiCall(context); - } else if (executeSubstrateTx !== null) { - return executeSubstrateTx(context); - } + // Notify transaction status updates via a toast notification. + useEffect(() => { + // Transaction is processing or not yet initiated. + if ( + isEvmAccount === null || + agnosticStatus === TxStatus.PROCESSING || + agnosticStatus === TxStatus.NOT_YET_INITIATED + ) { + return; + } + + const error = isEvmAccount ? evmError : substrateError; + const txHash = isEvmAccount ? evmTxHash : substrateTxHash; - // By this point, at least one of the executors should be defined, - // otherwise it constitutes a logic error. - assert( - executeSubstrateTx !== null, - 'Substrate transaction executor should be defined if EVM transaction executor is not' + // NOTE: It is totally possible for both to be null, as + // React's setState is asynchronous and the state might + // not have been updated yet. + if (txHash !== null) { + notifySuccess( + txHash, + isEvmAccount ? evmSuccessMessage : substrateSuccessMessage ); - }, - [executeEvmPrecompileAbiCall, executeSubstrateTx] - ); + } else if (error !== null) { + notifyError(error); + } + + // Only execute effect when the transaction status changes. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [agnosticStatus]); return { status: agnosticStatus, diff --git a/apps/tangle-dapp/hooks/useApi.ts b/apps/tangle-dapp/hooks/useApi.ts new file mode 100644 index 0000000000..4e21616ec7 --- /dev/null +++ b/apps/tangle-dapp/hooks/useApi.ts @@ -0,0 +1,52 @@ +import { ApiPromise } from '@polkadot/api'; +import { useCallback, useEffect, useState } from 'react'; + +import useNetworkStore from '../context/useNetworkStore'; +import { getApiPromise } from '../utils/polkadot'; +import usePromise from './usePromise'; + +export type ApiFetcher = (api: ApiPromise) => Promise | T; + +/** + * Provides access to the Substrate Promise API. + * + * @param fetcher Function that takes the Substrate API instance + * and returns a promise that resolves to the data to be cached. + * This function should **always** be memoized using `useCallback`, + * since it is used as a dependency internally. + * + * @returns Substrate API instance or `null` if still loading. + */ +function useApi(fetcher: ApiFetcher) { + const [result, setResult] = useState(null); + const { rpcEndpoint } = useNetworkStore(); + + const { result: api } = usePromise( + useCallback(() => getApiPromise(rpcEndpoint), [rpcEndpoint]), + null + ); + + const refetch = useCallback(async () => { + // Api not yet ready. + if (api === null) { + return; + } + + const newResult = fetcher(api); + + if (newResult instanceof Promise) { + newResult.then((data) => setResult(data)); + } else { + setResult(newResult); + } + }, [api, fetcher]); + + // Refetch when the API changes or when the fetcher changes. + useEffect(() => { + refetch(); + }, [refetch]); + + return { result, refetch }; +} + +export default useApi; diff --git a/apps/tangle-dapp/hooks/usePolkadotApiRx.ts b/apps/tangle-dapp/hooks/useApiRx.ts similarity index 63% rename from apps/tangle-dapp/hooks/usePolkadotApiRx.ts rename to apps/tangle-dapp/hooks/useApiRx.ts index e9c0a61e36..90b43c82ad 100644 --- a/apps/tangle-dapp/hooks/usePolkadotApiRx.ts +++ b/apps/tangle-dapp/hooks/useApiRx.ts @@ -6,16 +6,16 @@ import { catchError, Observable } from 'rxjs'; import useNetworkStore from '../context/useNetworkStore'; import ensureError from '../utils/ensureError'; -import { getPolkadotApiRx } from '../utils/polkadot'; +import { getApiRx } from '../utils/polkadot'; import usePromise from './usePromise'; export type ObservableFactory = (api: ApiRx) => Observable | null; /** - * Fetch data from the Polkadot API, using RxJS. This is especially useful + * Fetch data from the Substrate API, using RxJS. This is especially useful * for when real-time updates or data is needed. * - * @param factory Function that takes the Polkadot Rx instance + * @param factory Function that takes the Substrate Rx instance * and returns a promise that resolves to the data to be streamed. * * If the consumer of this hook utilizes any returned state, this function @@ -25,43 +25,42 @@ export type ObservableFactory = (api: ApiRx) => Observable | null; * * @example * ```ts - * const { data: currentBlockNumber } = usePolkadotApiRx( + * const { data: currentBlockNumber } = useApiRx( * useCallback((api) => api.derive.chain.bestNumber(), []) * ); * ``` - * - * @example - * ``` - * const { value: babeExpectedBlockTime } = usePolkadotApi( - * useCallback((api) => Promise.resolve(api.consts.babe.expectedBlockTime), []) - * ); - * ``` */ - -function usePolkadotApiRx(factory: ObservableFactory) { - const [data, setData] = useState(null); +function useApiRx(factory: ObservableFactory) { + const [result, setResult] = useState(null); const [isLoading, setLoading] = useState(true); const { rpcEndpoint } = useNetworkStore(); const [error, setError] = useState(null); - const { result: polkadotApiRx } = usePromise( - useCallback(() => getPolkadotApiRx(rpcEndpoint), [rpcEndpoint]), + const { result: apiRx } = usePromise( + useCallback(() => getApiRx(rpcEndpoint), [rpcEndpoint]), null ); + const resetData = useCallback(() => { + setResult(null); + setError(null); + }, []); + useEffect(() => { - // Discard any previous data when the wallet is disconnected, - // or when the Polkadot API is not yet ready. - if (polkadotApiRx === null) { - setData(null); + if (apiRx === null) { + // Discard any previous data when the Promise API is not ready. + resetData(); return; } - const observable = factory(polkadotApiRx); + const observable = factory(apiRx); // The factory is not yet ready to produce an observable. + // Discard any previous data if (observable === null) { + resetData(); + return; } @@ -79,14 +78,14 @@ function usePolkadotApiRx(factory: ObservableFactory) { }) ) .subscribe((newResult) => { - setData(newResult); + setResult(newResult); setLoading(false); }); return () => subscription.unsubscribe(); - }, [factory, polkadotApiRx]); + }, [factory, apiRx, resetData]); - return { data, isLoading, error }; + return { result, isLoading, error }; } -export default usePolkadotApiRx; +export default useApiRx; diff --git a/apps/tangle-dapp/hooks/useErrorReporting.ts b/apps/tangle-dapp/hooks/useErrorReporting.ts deleted file mode 100644 index 8c147967b3..0000000000 --- a/apps/tangle-dapp/hooks/useErrorReporting.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { notificationApi } from '@webb-tools/webb-ui-components'; -import { useEffect } from 'react'; - -const useErrorReporting = ( - failureMessage: string | null, - ...errors: Array -) => { - useEffect(() => { - for (const error of errors) { - if (!(error instanceof Error)) { - continue; - } - - if (failureMessage !== null) { - notificationApi({ - variant: 'error', - message: failureMessage, - secondaryMessage: error.message, - }); - } else { - notificationApi({ - variant: 'error', - message: error.message, - }); - } - } - }, [errors, failureMessage]); -}; - -export default useErrorReporting; diff --git a/apps/tangle-dapp/hooks/useEvmAddress.ts b/apps/tangle-dapp/hooks/useEvmAddress.ts index 3a1a3c0331..c2b07c333c 100644 --- a/apps/tangle-dapp/hooks/useEvmAddress.ts +++ b/apps/tangle-dapp/hooks/useEvmAddress.ts @@ -10,7 +10,7 @@ import useActiveAccountAddress from './useActiveAccountAddress'; * @remarks * If there is no active account, `null` will be returned instead. */ -const useEvmAddress = (): AddressType | null => { +const useEvmAddress20 = (): AddressType | null => { const activeAccountAddress = useActiveAccountAddress(); const evmAddress = useMemo(() => { @@ -27,4 +27,4 @@ const useEvmAddress = (): AddressType | null => { return evmAddress; }; -export default useEvmAddress; +export default useEvmAddress20; diff --git a/apps/tangle-dapp/hooks/useEvmPrecompileAbiCall.ts b/apps/tangle-dapp/hooks/useEvmPrecompileAbiCall.ts index 4333438a16..65c8ca7457 100644 --- a/apps/tangle-dapp/hooks/useEvmPrecompileAbiCall.ts +++ b/apps/tangle-dapp/hooks/useEvmPrecompileAbiCall.ts @@ -1,14 +1,18 @@ +import { BN } from '@polkadot/util'; +import { HexString } from '@polkadot/util/types'; +import { PromiseOrT } from '@webb-tools/abstract-api-provider'; import { AddressType } from '@webb-tools/dapp-config/types'; -import { useCallback, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { - getAbiForPrecompile, - getAddressOfPrecompile, + AbiFunctionName, + getPrecompileAbi, + getPrecompileAddress, Precompile, + PrecompileAddress, } from '../constants/evmPrecompiles'; import ensureError from '../utils/ensureError'; -import type { EvmAbiCallData, EvmTxFactory } from './types'; -import useEvmAddress from './useEvmAddress'; +import useEvmAddress20 from './useEvmAddress'; import { TxStatus } from './useSubstrateTx'; import useViemPublicClient from './useViemPublicClient'; import useViemWalletClient from './useViemWalletClient'; @@ -30,6 +34,30 @@ type TxReceipt = { contractAddress: unknown | null; }; +export type AbiCallArg = string | number | BN | boolean; + +export type AbiEncodeableValue = string | number | boolean | bigint; + +export type AbiBatchCallData = { + to: PrecompileAddress; + // TODO: Value should be strongly typed and explicit. Accept a generic type to accomplish this. + value: AbiEncodeableValue | AbiEncodeableValue[]; + gasLimit: number; + callData: string; +}; + +export type AbiBatchCallArgs = (AbiEncodeableValue | AbiEncodeableValue[])[][]; + +export type AbiCall = { + functionName: AbiFunctionName; + // TODO: Use argument types from the ABI for the specific function. + arguments: AbiCallArg[] | AbiBatchCallArgs; +}; + +export type EvmTxFactory = ( + context: Context +) => PromiseOrT> | null; + /** * Obtain a function that can be used to execute a precompile contract call. * @@ -39,22 +67,32 @@ type TxReceipt = { * (ex. those using MetaMask). * * This is used for performing actions from EVM accounts. Substrate accounts - * should use `useSubstrateTx` for transactions instead, or `usePolkadotApi` for queries. + * should use `useSubstrateTx` for transactions instead, or `useApiRx` for queries. */ function useEvmPrecompileAbiCall< PrecompileT extends Precompile, Context = void >( precompile: PrecompileT, - factory: EvmTxFactory | EvmAbiCallData + factory: EvmTxFactory | AbiCall, + getSuccessMessageFnc?: (context: Context) => string ) { const [status, setStatus] = useState(TxStatus.NOT_YET_INITIATED); const [error, setError] = useState(null); + const [txHash, setTxHash] = useState(null); + const [successMessage, setSuccessMessage] = useState(null); - const activeEvmAddress = useEvmAddress(); + const activeEvmAddress = useEvmAddress20(); const viemPublicClient = useViemPublicClient(); const viemWalletClient = useViemWalletClient(); + // Useful for debugging. + useEffect(() => { + if (error !== null) { + console.error(error); + } + }, [error]); + const execute = useCallback( async (context: Context) => { if ( @@ -74,23 +112,27 @@ function useEvmPrecompileAbiCall< return; } + // Reset state to prepare for a new transaction. setError(null); + setTxHash(null); setStatus(TxStatus.PROCESSING); try { const { request } = await viemPublicClient.simulateContract({ - address: getAddressOfPrecompile(precompile), - abi: getAbiForPrecompile(precompile), + address: getPrecompileAddress(precompile), + abi: getPrecompileAbi(precompile), functionName: factoryResult.functionName, args: factoryResult.arguments, account: activeEvmAddress, }); - const txHash = await viemWalletClient.writeContract(request); + const newTxHash = await viemWalletClient.writeContract(request); + + setTxHash(newTxHash); const txReceipt: TxReceipt = await viemPublicClient.waitForTransactionReceipt({ - hash: txHash, + hash: newTxHash, // TODO: Make use of the `timeout` parameter, and error handle if it fails due to timeout. }); @@ -99,14 +141,20 @@ function useEvmPrecompileAbiCall< setStatus( txReceipt.status === 'success' ? TxStatus.COMPLETE : TxStatus.ERROR ); + + if (txReceipt.status === 'success') { + setSuccessMessage( + getSuccessMessageFnc !== undefined + ? getSuccessMessageFnc(context) + : null + ); + } } catch (possibleError) { const error = ensureError(possibleError); setStatus(TxStatus.ERROR); setError(error); } - - // TODO: Return clean up. }, [ activeEvmAddress, @@ -115,6 +163,7 @@ function useEvmPrecompileAbiCall< status, viemPublicClient, viemWalletClient, + getSuccessMessageFnc, ] ); @@ -130,6 +179,8 @@ function useEvmPrecompileAbiCall< reset, status, error, + txHash, + successMessage, }; } diff --git a/apps/tangle-dapp/hooks/useEvmPrecompileFee.ts b/apps/tangle-dapp/hooks/useEvmPrecompileFee.ts index 532876ab2b..1a87cc9f68 100644 --- a/apps/tangle-dapp/hooks/useEvmPrecompileFee.ts +++ b/apps/tangle-dapp/hooks/useEvmPrecompileFee.ts @@ -4,12 +4,12 @@ import { WebbError, WebbErrorCodes } from '@webb-tools/dapp-types/WebbError'; import { useCallback, useState } from 'react'; import { - getAbiForPrecompile, - getAddressOfPrecompile, + getPrecompileAbi, + getPrecompileAddress, type Precompile, } from '../constants/evmPrecompiles'; -import type { EvmAbiCallData } from './types'; -import useEvmAddress from './useEvmAddress'; +import useEvmAddress20 from './useEvmAddress'; +import { AbiCall } from './useEvmPrecompileAbiCall'; import useViemPublicClient from './useViemPublicClient'; export type QueryStatus = 'idle' | 'loading' | 'success' | 'error'; @@ -18,14 +18,11 @@ function useEvmPrecompileFeeFetcher() { const [status, setStatus] = useState('idle'); const [error, setError] = useState(null); - const activeEvmAddress = useEvmAddress(); + const activeEvmAddress = useEvmAddress20(); const client = useViemPublicClient(); const fetchEvmPrecompileFees = useCallback( - async ( - precompile: PrecompileT, - abiCallData: EvmAbiCallData - ) => { + async (precompile: PrecompileT, abiCallData: AbiCall) => { setStatus('loading'); setError(null); @@ -37,12 +34,13 @@ function useEvmPrecompileFeeFetcher() { const [gas, fees] = await Promise.all([ client.estimateContractGas({ - address: getAddressOfPrecompile(precompile), - abi: getAbiForPrecompile(precompile), + address: getPrecompileAddress(precompile), + abi: getPrecompileAbi(precompile), functionName: abiCallData.functionName, args: abiCallData.arguments, account: activeEvmAddress !== null ? activeEvmAddress : undefined, }), + client.estimateFeesPerGas({ chain: client.chain, }), diff --git a/apps/tangle-dapp/hooks/useExecuteTxWithNotification.tsx b/apps/tangle-dapp/hooks/useExecuteTxWithNotification.tsx deleted file mode 100644 index c64826cd7f..0000000000 --- a/apps/tangle-dapp/hooks/useExecuteTxWithNotification.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import type { HexString } from '@polkadot/util/types'; -import { useWebContext } from '@webb-tools/api-provider-environment'; -import { Button, Typography } from '@webb-tools/webb-ui-components'; -import { useSnackbar } from 'notistack'; -import { useCallback } from 'react'; - -import { ExplorerType } from '../types'; -import ensureError from '../utils/ensureError'; -import { evmPublicClient } from '../utils/evm'; -import useExplorerUrl from './useExplorerUrl'; - -const useExecuteTxWithNotification = () => { - const { activeWallet } = useWebContext(); - const getExplorerUrl = useExplorerUrl(); - const { enqueueSnackbar: enqueueNotifications } = useSnackbar(); - - /** - * Executes a transaction based on the active wallet's platform. - * - * @param evmFnc - A function that returns a Promise resolving to a HexString. This function is used when the active wallet's platform is 'EVM'. - * @param substrateFnc - A function that returns a Promise resolving to a HexString. This function is used when the active wallet's platform is 'Substrate'. - * @param successMessage - The message to display when the transaction is successful. - * @param errorMessage - The message to display when the transaction fails. - * - * @returns A Promise that resolves to a boolean. The Promise resolves to true if the transaction was successful, and false otherwise. - */ - const executeTx = useCallback( - async ( - evmFnc: () => Promise, - substrateFnc: () => Promise, - successMessage: string, - errorMessage: string - ): Promise => { - let txHash: HexString | null = null; - try { - if (activeWallet?.platform === 'EVM') { - const evmTxHash = await evmFnc(); - - const tx = await evmPublicClient.waitForTransactionReceipt({ - hash: evmTxHash, - }); - - if (tx.status === 'success') { - txHash = evmTxHash; - } - } else if (activeWallet?.platform === 'Substrate') { - const substrateTxHash = await substrateFnc(); - txHash = substrateTxHash; - } - - if (!txHash) { - throw new Error(errorMessage); - } - - const txExplorerUrl = getExplorerUrl( - txHash, - 'tx', - activeWallet?.platform === 'EVM' - ? ExplorerType.EVM - : ExplorerType.Substrate - ); - - // Currently using SnackbarProvider for managing NotificationStacked - // For one-off configurations, must use enqueueSnackbar - enqueueNotifications( -
    - - {successMessage} - - {txExplorerUrl !== null && ( - - )} -
    , - { - variant: 'success', - autoHideDuration: null, - } - ); - - return txHash; - } catch (error) { - enqueueNotifications( -
    - - {errorMessage} - - - {ensureError(error).message} - -
    , - { - variant: 'error', - autoHideDuration: 5000, - } - ); - - throw error; - } - }, - [activeWallet?.platform, getExplorerUrl, enqueueNotifications] - ); - - return executeTx; -}; - -export default useExecuteTxWithNotification; diff --git a/apps/tangle-dapp/hooks/useIsFirstTimeNominator.ts b/apps/tangle-dapp/hooks/useIsFirstTimeNominator.ts deleted file mode 100644 index 31bb34ecf4..0000000000 --- a/apps/tangle-dapp/hooks/useIsFirstTimeNominator.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { useCallback } from 'react'; - -import useErrorReporting from './useErrorReporting'; -import usePolkadotApiRx from './usePolkadotApiRx'; -import useSubstrateAddress from './useSubstrateAddress'; - -const useIsFirstTimeNominator = () => { - const activeSubstrateAddress = useSubstrateAddress(); - - const { - data: nominators, - isLoading: isLoadingNominators, - error: nominatorsError, - } = usePolkadotApiRx( - useCallback( - (api) => { - if (!activeSubstrateAddress) return null; - return api.query.staking.nominators(activeSubstrateAddress); - }, - [activeSubstrateAddress] - ) - ); - - const hasNominatedValidators = (() => { - if (nominators === null) { - return null; - } - - return nominators.isSome; - })(); - - const { - data: bondedInfo, - isLoading: isLoadingBondedInfo, - error: bondedInfoError, - } = usePolkadotApiRx( - useCallback( - (api) => { - if (!activeSubstrateAddress) return null; - return api.query.staking.bonded(activeSubstrateAddress); - }, - [activeSubstrateAddress] - ) - ); - - useErrorReporting('Failed', nominatorsError, bondedInfoError); - - const isFirstTimeNominator = (() => { - const isAlreadyBonded = bondedInfo?.isSome ?? false; - - if (isAlreadyBonded === null || hasNominatedValidators === null) { - return null; - } - - return !isAlreadyBonded && !hasNominatedValidators; - })(); - - return { - isFirstTimeNominator, - isLoading: isLoadingBondedInfo || isLoadingNominators, - isError: nominatorsError !== null || bondedInfoError !== null, - }; -}; - -export default useIsFirstTimeNominator; diff --git a/apps/tangle-dapp/hooks/useIsNominating.ts b/apps/tangle-dapp/hooks/useIsNominating.ts new file mode 100644 index 0000000000..5f923eed55 --- /dev/null +++ b/apps/tangle-dapp/hooks/useIsNominating.ts @@ -0,0 +1,28 @@ +import { useCallback } from 'react'; + +import useApiRx from './useApiRx'; +import useSubstrateAddress from './useSubstrateAddress'; + +const useIsNominating = () => { + const activeSubstrateAddress = useSubstrateAddress(); + + const { result: nominations, ...other } = useApiRx( + useCallback( + (api) => { + if (activeSubstrateAddress === null) { + return null; + } + + return api.query.staking.nominators(activeSubstrateAddress); + }, + [activeSubstrateAddress] + ) + ); + + return { + isNominating: nominations === null ? null : nominations.isSome, + ...other, + }; +}; + +export default useIsNominating; diff --git a/apps/tangle-dapp/hooks/useLocalStorage.ts b/apps/tangle-dapp/hooks/useLocalStorage.ts index c6a59cfdfe..3098f6f3ed 100644 --- a/apps/tangle-dapp/hooks/useLocalStorage.ts +++ b/apps/tangle-dapp/hooks/useLocalStorage.ts @@ -1,37 +1,41 @@ 'use client'; +import { HexString } from '@polkadot/util/types'; import { useCallback, useEffect, useState } from 'react'; -import { Delegator, Payout, Validator } from '../types'; +import { Payout, TokenSymbol } from '../types'; +import Optional from '../utils/Optional'; export enum LocalStorageKey { - ACTIVE_VALIDATOR_CACHE = 'activeValidatorCache', - WAITING_VALIDATOR_CACHE = 'waitingValidatorCache', IS_BALANCES_TABLE_DETAILS_COLLAPSED = 'isBalancesTableDetailsCollapsed', ACTIVE_AND_DELEGATION_COUNT = 'activeAndDelegationCount', IDEAL_STAKE_PERCENTAGE = 'idealStakePercentage', VALIDATOR_COUNTS = 'validatorCounts', WAITING_COUNT = 'waitingCount', - Payouts = 'payouts', - Nominations = 'nominations', + PAYOUTS = 'payouts', CUSTOM_RPC_ENDPOINT = 'customRpcEndpoint', KNOWN_NETWORK_ID = 'knownNetworkId', - VALIDATORS = 'validators', WAS_BANNER_DISMISSED = 'wasBannerDismissed', + SERVICES_CACHE = 'servicesCache', + SUBSTRATE_WALLETS_METADATA = 'substrateWalletsMetadata', } -export type AirdropEligibilityCache = { - [address: string]: boolean; -}; - export type PayoutsCache = { - [address: string]: Payout[]; + [rpcEndpoint: string]: { + [address: string]: Payout[]; + }; }; -export type NominationsCache = { - [address: string]: Delegator[]; +export type SubstrateWalletsMetadataEntry = { + tokenSymbol: TokenSymbol; + tokenDecimals: number; + ss58Prefix: number; }; +export type SubstrateWalletsMetadataCache = Partial< + Record +>; + /** * Type definition associating local storage keys with their * respective value types. @@ -39,10 +43,6 @@ export type NominationsCache = { export type LocalStorageValueOf = T extends LocalStorageKey.IS_BALANCES_TABLE_DETAILS_COLLAPSED ? boolean - : T extends - | LocalStorageKey.ACTIVE_VALIDATOR_CACHE - | LocalStorageKey.WAITING_VALIDATOR_CACHE - ? Validator[] : T extends LocalStorageKey.ACTIVE_AND_DELEGATION_COUNT ? { value1: number | null; value2: number | null } : T extends LocalStorageKey.IDEAL_STAKE_PERCENTAGE @@ -51,16 +51,16 @@ export type LocalStorageValueOf = ? { value1: number | null; value2: number | null } : T extends LocalStorageKey.WAITING_COUNT ? { value1: number | null } - : T extends LocalStorageKey.Payouts + : T extends LocalStorageKey.PAYOUTS ? PayoutsCache - : T extends LocalStorageKey.Nominations - ? NominationsCache : T extends LocalStorageKey.CUSTOM_RPC_ENDPOINT ? string : T extends LocalStorageKey.KNOWN_NETWORK_ID ? number : T extends LocalStorageKey.WAS_BANNER_DISMISSED ? boolean + : T extends LocalStorageKey.SUBSTRATE_WALLETS_METADATA + ? SubstrateWalletsMetadataCache : never; export const extractFromLocalStorage = ( @@ -92,7 +92,9 @@ export const extractFromLocalStorage = ( return value; }; -// TODO: During development cycles, changing local storage value types will lead to any users depending on that value to possibly break (because they may be stuck with an older type schema). Need a fallback mechanism that erases the old value if applicable (ie. if it's something not important, but rather used for caching). +// TODO: During development cycles, changing local storage value types will lead to +// any users depending on that value to possibly break (because they may be stuck with an older type schema). +// Need a fallback mechanism that erases the old value if applicable (ie. if it's something not important, but rather used for caching). /** * Custom hook for interacting with local storage. * @@ -110,38 +112,41 @@ const useLocalStorage = ( type Value = LocalStorageValueOf; // Initially, the value is `null` until the component is mounted - // and the value is extracted from local storage. The explicit - // name of the state variable indicates that. - const [valueAfterMount, setLateValue] = useState(null); + // and the value is extracted from local storage. + const [valueOpt, setValueOpt] = useState | null>(null); - const get = useCallback(() => { + const refresh = useCallback(() => { const freshValue = extractFromLocalStorage(key, isUsedAsCache); - setLateValue(freshValue); + const freshValueOpt = new Optional( + freshValue === null ? undefined : freshValue + ); + + setValueOpt(freshValueOpt); - return freshValue; + return freshValueOpt; }, [isUsedAsCache, key]); // Extract the value from local storage on mount. useEffect(() => { - get(); - }, [get]); + refresh(); + }, [refresh]); // Listen for changes to local storage. This is useful in case // that other logic changes the local storage value. useEffect(() => { const handleStorageChange = () => { - setLateValue(get()); + setValueOpt(refresh()); }; window.addEventListener('storage', handleStorageChange); return () => window.removeEventListener('storage', handleStorageChange); - }, [key, get]); + }, [key, refresh]); const set = useCallback( (value: Value) => { - setLateValue(value); + setValueOpt(new Optional(value)); localStorage.setItem(key, JSON.stringify(value)); console.debug('Set local storage value:', key, value); }, @@ -155,27 +160,27 @@ const useLocalStorage = ( return; } - setLateValue(null); + setValueOpt(null); localStorage.removeItem(key); console.debug('Removed local storage key:', key); }, [isSet, key]); const setWithPreviousValue = useCallback( - (updater: (previousValue: Value | null) => Value) => { - const previousValue = get(); + (updater: (previousValue: Optional | null) => Value) => { + const previousValue = refresh(); const nextValue = updater(previousValue); set(nextValue); }, - [get, set] + [refresh, set] ); return { - valueAfterMount, + valueOpt, set, setWithPreviousValue, remove, - get, + refresh, isSet, }; }; diff --git a/apps/tangle-dapp/hooks/useMaxNominationQuota.ts b/apps/tangle-dapp/hooks/useMaxNominationQuota.ts index 4f017ef56a..48be42a337 100644 --- a/apps/tangle-dapp/hooks/useMaxNominationQuota.ts +++ b/apps/tangle-dapp/hooks/useMaxNominationQuota.ts @@ -1,9 +1,9 @@ import { useCallback } from 'react'; -import usePolkadotApiRx from './usePolkadotApiRx'; +import useApiRx from './useApiRx'; const useMaxNominationQuota = (): number => { - const { data: maxNominationQuotaOpt } = usePolkadotApiRx( + const { result: maxNominationQuotaOpt } = useApiRx( useCallback((api) => api.query.staking.maxNominatorsCount(), []) ); diff --git a/apps/tangle-dapp/hooks/useNetworkFeatures.ts b/apps/tangle-dapp/hooks/useNetworkFeatures.ts index fe05338f52..007f2e79a5 100644 --- a/apps/tangle-dapp/hooks/useNetworkFeatures.ts +++ b/apps/tangle-dapp/hooks/useNetworkFeatures.ts @@ -4,11 +4,10 @@ import { NETWORK_FEATURE_MAP } from '../constants/networks'; import useNetworkStore from '../context/useNetworkStore'; import { NetworkFeature } from '../types'; -// TODO: This should be adjusted with the following assumption in mind: There will only be 3 networks at most, and most features will be gate-kept (omitted) from mainnet specifically. const useNetworkFeatures = (): Readonly => { const { network } = useNetworkStore(); - return useMemo(() => NETWORK_FEATURE_MAP[network.name] ?? [], [network.name]); + return useMemo(() => NETWORK_FEATURE_MAP[network.id], [network.id]); }; export default useNetworkFeatures; diff --git a/apps/tangle-dapp/hooks/useNetworkState.ts b/apps/tangle-dapp/hooks/useNetworkState.ts index feedd4f7b0..df89a2daec 100644 --- a/apps/tangle-dapp/hooks/useNetworkState.ts +++ b/apps/tangle-dapp/hooks/useNetworkState.ts @@ -1,9 +1,13 @@ +import { useWebContext } from '@webb-tools/api-provider-environment'; +import { Chain } from '@webb-tools/dapp-config'; +import { calculateTypedChainId, ChainType } from '@webb-tools/utils'; import { notificationApi } from '@webb-tools/webb-ui-components'; import { Network, NETWORK_MAP, NetworkId, } from '@webb-tools/webb-ui-components/constants/networks'; +import _ from 'lodash'; import { useCallback, useEffect, useState } from 'react'; import z from 'zod'; @@ -37,87 +41,38 @@ function testRpcEndpointConnection(rpcEndpoint: string): Promise { }); } -async function switchNetworkInEvmWallet(network: Network): Promise { - // TODO: This is failing with: "Expected 0x-prefixed, unpadded, non-zero hexadecimal string 'chainId'. Received: "3799". Perhaps the chainId should be in hex format? - - // Cannot switch networks on EVM wallets if the network - // doesn't have a defined chain id or if there is no - // EVM wallet extension present. - if ( - window.ethereum === undefined || - network.chainId === undefined || - network.httpRpcEndpoint === undefined - ) { - return; - } - - // Request to switch to the network (if it's already configured in the wallet). - try { - await window.ethereum.request({ - method: 'wallet_switchEthereumChain', - params: [{ chainId: network.chainId.toString() }], - }); - } catch (error) { - if ( - typeof error === 'object' && - error !== null && - 'code' in error && - error.code !== 4902 - ) { - console.error('Error switching network:', error); - - return; - } - - // The network is not added to the wallet, request to add it. - try { - await window.ethereum.request({ - method: 'wallet_addEthereumChain', - params: [ - { - chainId: network.chainId.toString(), - rpcUrls: [network.httpRpcEndpoint], - chainName: network.name, - // TODO: Any other network params? - }, - ], - }); - } catch (addError) { - console.error('Error adding network:', addError); - } - } -} - const useNetworkState = () => { + const { switchChain, activeWallet, chains } = useWebContext(); + const { isEvm } = useAgnosticAccountInfo(); const [isCustom, setIsCustom] = useState(false); const { network, setNetwork } = useNetworkStore(); const { - get: getCachedCustomRpcEndpoint, + refresh: getCachedCustomRpcEndpoint, set: setCachedCustomRpcEndpoint, remove: removeCachedCustomRpcEndpoint, } = useLocalStorage(LocalStorageKey.CUSTOM_RPC_ENDPOINT); const { set: setCachedNetworkId, - get: getCachedNetworkId, + refresh: getCachedNetworkId, remove: removeCachedNetworkId, } = useLocalStorage(LocalStorageKey.KNOWN_NETWORK_ID); // Load the initial network from local storage. useEffect(() => { const getCachedInitialNetwork = () => { - const cachedNetworkName = getCachedNetworkId(); + const cachedNetworkNameOpt = getCachedNetworkId(); // If the cached network name is present, that indicates that // the cached network is a Webb network. Find it in the list of // all Webb networks, and return it. - if (cachedNetworkName !== null) { + if (cachedNetworkNameOpt.value !== null) { const parsedNetworkId = z .nativeEnum(NetworkId) - .safeParse(cachedNetworkName); + .safeParse(cachedNetworkNameOpt.value); if (parsedNetworkId.success) { const knownNetwork = NETWORK_MAP[parsedNetworkId.data]; @@ -128,7 +83,7 @@ const useNetworkState = () => { } console.warn( - `Could not find an associated network for cached network id: ${cachedNetworkName}, deleting from local storage` + `Could not find an associated network for cached network id: ${cachedNetworkNameOpt.value}, deleting from local storage` ); removeCachedNetworkId(); @@ -136,13 +91,13 @@ const useNetworkState = () => { return DEFAULT_NETWORK; } - const cachedCustomRpcEndpoint = getCachedCustomRpcEndpoint(); + const cachedCustomRpcEndpointOpt = getCachedCustomRpcEndpoint(); // If a custom RPC endpoint is cached, return it as a custom network. - if (cachedCustomRpcEndpoint !== null) { + if (cachedCustomRpcEndpointOpt.value !== null) { setIsCustom(true); - return createCustomNetwork(cachedCustomRpcEndpoint); + return createCustomNetwork(cachedCustomRpcEndpointOpt.value); } // Otherwise, use the default network. @@ -182,6 +137,7 @@ const useNetworkState = () => { }` ); + // Update local storage cache with the new network. if (isCustom) { removeCachedNetworkId(); setCachedCustomRpcEndpoint(newNetwork.wsRpcEndpoint); @@ -193,18 +149,41 @@ const useNetworkState = () => { setIsCustom(isCustom); setNetwork(newNetwork); - if (isEvm !== null && isEvm) { - switchNetworkInEvmWallet(newNetwork); + // In case that the new network is an EVM network, either add it + // to the list of chains on the EVM wallet (ie. MetaMask), or switch + // to it if it's already added. + if ( + isEvm !== null && + isEvm && + newNetwork.evmChainId !== undefined && + newNetwork.httpRpcEndpoint !== undefined && + activeWallet !== undefined + ) { + // TODO: For local dev, the chain id is set to the testnet's chain id. Which then attempts to switch to the testnet chain, and its RPC url. Changing the way that the provider API works requires extensive changes, so leaving this for later since local dev is not a priority. + const typedChainId = calculateTypedChainId( + ChainType.EVM, + newNetwork.evmChainId + ); + + const webbChain: Chain | undefined = chains[typedChainId]; + + if (webbChain !== undefined) { + // This call will automatically switch the chain if it's already added. + switchChain(webbChain, activeWallet); + } } }, [ network.id, setNetwork, isEvm, + activeWallet, removeCachedNetworkId, setCachedCustomRpcEndpoint, removeCachedCustomRpcEndpoint, setCachedNetworkId, + chains, + switchChain, ] ); diff --git a/apps/tangle-dapp/hooks/usePolkadotApi.ts b/apps/tangle-dapp/hooks/usePolkadotApi.ts deleted file mode 100644 index b934daad52..0000000000 --- a/apps/tangle-dapp/hooks/usePolkadotApi.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { ApiPromise } from '@polkadot/api'; -import { useCallback, useState } from 'react'; -import useSWR from 'swr'; - -import useNetworkStore from '../context/useNetworkStore'; -import ensureError from '../utils/ensureError'; -import { getPolkadotApiPromise } from '../utils/polkadot'; -import usePromise from './usePromise'; - -export type PolkadotApiFetcher = (api: ApiPromise) => Promise; - -export enum PolkadotApiSwrKey { - ERA = 'era', - STAKING_REWARDS = 'staking-rewards', -} - -function getRefreshInterval(swrKey: PolkadotApiSwrKey): number { - switch (swrKey) { - case PolkadotApiSwrKey.ERA: - // 1 hour. - return 60 * 1000 * 60; - case PolkadotApiSwrKey.STAKING_REWARDS: - // 3 minutes. - return 3 * 1000 * 60; - } -} - -/** - * Fetch data from the Polkadot API, using SWR to - * cache the response and handle revalidation. - * - * @param swrConfig SWR (Stale-While-Revalidate) configuration constants. - * These define the unique key needed for caching and refresh interval for - * the SWR cache. - * - * @param fetcher Function that takes the Polkadot API instance - * and returns a promise that resolves to the data to be cached. - * This function should **always** be memoized using `useCallback`, - * since it is used as a dependency internally. - * - * @returns Polkadot API instance, request status, and fetched data. - * - * @remarks - * The SWR (Stale-While-Revalidate) caching & revalidation strategy - * is used under the hood, so its configuration is needed to configure - * the re-fetching polling interval. [Learn more about SWR](https://swr.vercel.app/). - * - * If the fetcher function is not memoized using `useCallback`, the cache - * will be refreshed every time the component re-renders, which may not be ideal. - * - * @example - * ```ts - * const { value: currentEra } = usePolkadotApi( - * useCallback( - * (api) => - * api.query.staking.currentEra().then((eraOpt) => eraOpt.toString()), - * [] - * ), - * PolkadotApiSwrKey.Era - * ); - * - * // ... - * - * return ( - *
    - * {currentEra !== null && ( - *

    Current era: {currentEra}

    - * )} - *
    - * ) - * ``` - */ -function usePolkadotApi( - fetcher: PolkadotApiFetcher, - swrKey?: PolkadotApiSwrKey -) { - const { rpcEndpoint } = useNetworkStore(); - - const { - result: polkadotApi, - isLoading: isApiLoading, - error: apiError, - } = usePromise( - useCallback(() => getPolkadotApiPromise(rpcEndpoint), [rpcEndpoint]), - null - ); - - const [error, setError] = useState(apiError); - - const refetch = useCallback(async () => { - // Wait until the Polkadot API is ready. - if (polkadotApi === null || error !== null) { - return Promise.resolve(null); - } - - console.debug(`SWR: Refreshing data for '${swrKey ?? ''}'`); - - return fetcher(polkadotApi).catch((possibleError: unknown) => { - setError(ensureError(possibleError)); - - return null; - }); - }, [error, fetcher, polkadotApi, swrKey]); - - // Include the fetcher function as part of the cache key. - // This allows SWR to refresh the cache when the dependency - // list of the fetcher function changes. - const dynamicKey = [swrKey, isApiLoading, fetcher]; - - // If the SWR key is not provided, disable the refresh - // and deduping intervals. This will effectively convert - // the fetcher into a one-time fetch, which can be manually - // refreshed using the `refetch` function. - const refreshInterval = swrKey ? getRefreshInterval(swrKey) : 0; - - const response = useSWR(dynamicKey, refetch, { - revalidateOnFocus: false, - revalidateOnReconnect: true, - fallbackData: null, - refreshInterval: refreshInterval, - dedupingInterval: refreshInterval, - }); - - return { - polkadotApi, - isApiLoading, - isValueLoading: response.data === null, - value: response.data, - error, - refetch, - }; -} - -export default usePolkadotApi; diff --git a/apps/tangle-dapp/hooks/useStakingLedger.ts b/apps/tangle-dapp/hooks/useStakingLedger.ts deleted file mode 100644 index f94c64e117..0000000000 --- a/apps/tangle-dapp/hooks/useStakingLedger.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { ApiPromise } from '@polkadot/api'; -import { StakingLedger } from '@polkadot/types/interfaces'; -import { useCallback } from 'react'; - -import usePolkadotApi, { - PolkadotApiFetcher, - PolkadotApiSwrKey, -} from './usePolkadotApi'; -import useSubstrateAddress from './useSubstrateAddress'; - -/** - * A function provided by the consumer of the {@link useStakingLedger} - * hook to select which data to fetch from the ledger. - */ -export type StakingLedgerFetcher = ( - ledger: StakingLedger, - api: ApiPromise -) => Promise; - -/** - * Allows the retrieval of data from the Substrate staking ledger, by - * providing a function which selects the data needed. - * - * @param fetcher - A function that selects the data to fetch from the ledger. - * This function should **always** be memoized using `useCallback`. - * - * @param swrKey - The SWR (Stale-While-Revalidate) configuration key. This will - * determine the refresh and deduping interval for the SWR request. If omitted, - * the fetcher will only be called once, and not refreshed automatically. - * - * @remarks - * The SWR (Stale-While-Revalidate) caching & revalidation strategy - * is used under the hood, so its configuration key is needed to configure - * the re-fetching polling interval. [Learn more about SWR](https://swr.vercel.app/). - */ -function useStakingLedger( - fetcher: StakingLedgerFetcher, - swrKey?: PolkadotApiSwrKey -) { - const activeSubstrateAddress = useSubstrateAddress(); - - const fetcherWithLedger = useCallback>( - async (api) => { - if (activeSubstrateAddress === null) { - return Promise.resolve(null); - } - - const ledger = await api.query.staking - .ledger(activeSubstrateAddress) - // TODO: Error handling. - .then((ledger) => ledger.unwrapOrDefault()); - - return fetcher(ledger, api); - }, - [activeSubstrateAddress, fetcher] - ); - - return usePolkadotApi(fetcherWithLedger, swrKey); -} - -export default useStakingLedger; diff --git a/apps/tangle-dapp/hooks/useStakingLedgerRx.ts b/apps/tangle-dapp/hooks/useStakingLedgerRx.ts deleted file mode 100644 index d10f396c91..0000000000 --- a/apps/tangle-dapp/hooks/useStakingLedgerRx.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { ApiRx } from '@polkadot/api'; -import { StakingLedger } from '@polkadot/types/interfaces'; -import { useCallback } from 'react'; -import { map } from 'rxjs'; - -import usePolkadotApiRx from './usePolkadotApiRx'; -import useSubstrateAddress from './useSubstrateAddress'; - -/** - * A function provided by the consumer of the {@link useStakingLedgerRx} - * hook to select which data to fetch from the ledger. - */ -export type StakingLedgerFetcherRx = ( - ledger: StakingLedger, - api: ApiRx -) => T; - -function useStakingLedgerRx(fetcher: StakingLedgerFetcherRx) { - const activeSubstrateAddress = useSubstrateAddress(); - - return usePolkadotApiRx( - useCallback( - (api) => { - if (!activeSubstrateAddress) return null; - return ( - api.query.staking - .ledger(activeSubstrateAddress) - // TODO: Error handling. Under what circumstances would the ledger be `None`? - .pipe(map((ledgerOpt) => fetcher(ledgerOpt.unwrap(), api))) - ); - }, - [fetcher, activeSubstrateAddress] - ) - ); -} - -export default useStakingLedgerRx; diff --git a/apps/tangle-dapp/hooks/useSubstrateAddress.ts b/apps/tangle-dapp/hooks/useSubstrateAddress.ts index 1f0dc38074..c9843915d0 100644 --- a/apps/tangle-dapp/hooks/useSubstrateAddress.ts +++ b/apps/tangle-dapp/hooks/useSubstrateAddress.ts @@ -1,6 +1,6 @@ import { useMemo } from 'react'; -import { evmToSubstrateAddress } from '../utils'; +import { toSubstrateAddress } from '../utils'; import useActiveAccountAddress from './useActiveAccountAddress'; /** @@ -25,7 +25,7 @@ const useSubstrateAddress = (): string | null => { // Note that this handles both EVM and Substrate addresses, // so there's no need to check if the address is an EVM address // or not. - return evmToSubstrateAddress(activeAccountAddress); + return toSubstrateAddress(activeAccountAddress); }, [activeAccountAddress]); return substrateAddress; diff --git a/apps/tangle-dapp/hooks/useSubstrateTx.ts b/apps/tangle-dapp/hooks/useSubstrateTx.ts index 89602d118e..1dc459ab48 100644 --- a/apps/tangle-dapp/hooks/useSubstrateTx.ts +++ b/apps/tangle-dapp/hooks/useSubstrateTx.ts @@ -1,19 +1,22 @@ import { ApiPromise } from '@polkadot/api'; import { SubmittableExtrinsic } from '@polkadot/api/types'; import { ISubmittableResult } from '@polkadot/types/types'; +import { HexString } from '@polkadot/util/types'; import { PromiseOrT } from '@webb-tools/abstract-api-provider'; -import { useWebbUI } from '@webb-tools/webb-ui-components'; import assert from 'assert'; import { useCallback, useEffect, useState } from 'react'; +import { TxName } from '../constants'; import useNetworkStore from '../context/useNetworkStore'; +import { GetSuccessMessageFunctionType } from '../types'; import ensureError from '../utils/ensureError'; import extractErrorFromTxStatus from '../utils/extractErrorFromStatus'; -import { getInjector, getPolkadotApiPromise } from '../utils/polkadot'; -import prepareTxNotification from '../utils/prepareTxNotification'; +import { findInjectorForAddress, getApiPromise } from '../utils/polkadot'; +import useActiveAccountAddress from './useActiveAccountAddress'; import useAgnosticAccountInfo from './useAgnosticAccountInfo'; import useIsMountedRef from './useIsMountedRef'; import useSubstrateAddress from './useSubstrateAddress'; +import useTxNotification from './useTxNotification'; export enum TxStatus { NOT_YET_INITIATED, @@ -23,7 +26,7 @@ export enum TxStatus { TIMED_OUT, } -export type SubstrateTxFactory = ( +export type SubstrateTxFactory = ( api: ApiPromise, activeSubstrateAddress: string, context: Context @@ -31,32 +34,25 @@ export type SubstrateTxFactory = ( function useSubstrateTx( factory: SubstrateTxFactory, - notifyStatusUpdates = false, - timeoutDelay = 60_000 + getSuccessMessageFnc?: GetSuccessMessageFunctionType, + timeoutDelay = 120_000 ) { const [status, setStatus] = useState(TxStatus.NOT_YET_INITIATED); - const [hash, setHash] = useState(null); + const [txHash, setTxHash] = useState(null); const [error, setError] = useState(null); + const [successMessage, setSuccessMessage] = useState(null); - const { notificationApi } = useWebbUI(); const { isEvm: isEvmAccount } = useAgnosticAccountInfo(); const activeSubstrateAddress = useSubstrateAddress(); const isMountedRef = useIsMountedRef(); const { rpcEndpoint } = useNetworkStore(); + // Useful for debugging. useEffect(() => { - if (!notifyStatusUpdates) { - return; - } - - const notificationOpts = prepareTxNotification(status, error); - - if (notificationOpts === null) { - return; + if (error !== null) { + console.error(error); } - - notificationApi(notificationOpts); - }, [error, error?.message, notificationApi, notifyStatusUpdates, status]); + }, [error]); const execute = useCallback( async (context: Context) => { @@ -71,15 +67,17 @@ function useSubstrateTx( return; } - // Catch logic errors. assert( !isEvmAccount, 'Should not be able to execute a Substrate transaction while the active account is an EVM account' ); - const injector = await getInjector(activeSubstrateAddress); - const api = await getPolkadotApiPromise(rpcEndpoint); + const injector = await findInjectorForAddress(activeSubstrateAddress); + const api = await getApiPromise(rpcEndpoint); let tx: SubmittableExtrinsic<'promise', ISubmittableResult> | null; + let newTxHash: HexString; + + // TODO: Consider resetting state here, before executing the tx. Or is it fine to keep the old state? // The transaction factory may throw an error if it encounters // a problem, such as invalid input data. Need to handle that case @@ -87,18 +85,22 @@ function useSubstrateTx( try { tx = await factory(api, activeSubstrateAddress, context); } catch (possibleError: unknown) { - setError(ensureError(possibleError)); + const error = ensureError(possibleError); + + setError(error); setStatus(TxStatus.ERROR); + setTxHash(null); return; } // Factory is not yet ready to produce the transaction. - // This is usually because the user hasn't yet connected their wallet. + // This is usually because the user hasn't yet connected their wallet, + // or the factory's requirements haven't been met. if (tx === null) { return; } - // Wait until the injector is ready. + // Injector might report that there are no installed wallet extensions. else if (injector === null) { return; } @@ -106,37 +108,46 @@ function useSubstrateTx( // At this point, the transaction is ready to be sent. // Reset the status and error, and begin the transaction. setError(null); - setHash(null); + setTxHash(null); setStatus(TxStatus.PROCESSING); + const handleStatusUpdate = (status: ISubmittableResult) => { + // If the component is unmounted, or the transaction + // has not yet been included in a block, ignore the + // status update. + if (!isMountedRef.current || !status.isInBlock) { + return; + } + + newTxHash = status.txHash.toHex(); + setTxHash(newTxHash); + + const error = extractErrorFromTxStatus(status); + + setStatus(error === null ? TxStatus.COMPLETE : TxStatus.ERROR); + setError(error); + + if (error === null && getSuccessMessageFnc !== undefined) { + setSuccessMessage(getSuccessMessageFnc(context)); + } + }; + try { await tx.signAndSend( activeSubstrateAddress, - { signer: injector.signer }, - (status) => { - // If the component is unmounted, or the transaction - // has not yet been included in a block, ignore the - // status update. - if (!isMountedRef.current || !status.isInBlock) { - return; - } - - setHash(status.txHash.toHex()); - - const error = extractErrorFromTxStatus(status); - - setStatus(error === null ? TxStatus.COMPLETE : TxStatus.ERROR); - setError(error); - - // Useful for debugging. - if (error !== null) { - console.debug('Substrate transaction failed', error, status); - } - } + // Use a nonce of -1 to let the API calculate the nonce for us. + // This is important as it prevents nonce collisions when multiple + // transactions are sent in quick succession. Read more here: + // https://polkadot.js.org/docs/api/cookbook/tx/#how-do-i-take-the-pending-tx-pool-into-account-in-my-nonce + { signer: injector.signer, nonce: -1 }, + handleStatusUpdate ); } catch (possibleError: unknown) { + const error = ensureError(possibleError); + setStatus(TxStatus.ERROR); - setError(ensureError(possibleError)); + setError(error); + setTxHash(null); } }, [ @@ -146,12 +157,13 @@ function useSubstrateTx( isMountedRef, rpcEndpoint, status, + getSuccessMessageFnc, ] ); const reset = useCallback(() => { setStatus(TxStatus.NOT_YET_INITIATED); - setHash(null); + setTxHash(null); setError(null); }, []); @@ -177,7 +189,68 @@ function useSubstrateTx( // Prevent the consumer from executing the transaction if // the active account is an EVM account. - return { execute: isEvmAccount ? null : execute, reset, status, error, hash }; + return { + execute: isEvmAccount ? null : execute, + reset, + status, + error, + txHash, + successMessage, + }; } export default useSubstrateTx; + +export function useSubstrateTxWithNotification( + txName: TxName, + factory: SubstrateTxFactory, + getSuccessMessageFnc?: GetSuccessMessageFunctionType +) { + const activeAccountAddress = useActiveAccountAddress(); + + const { + execute: _execute, + reset, + status, + error, + txHash, + successMessage, + } = useSubstrateTx(factory, getSuccessMessageFnc); + const { notifyProcessing, notifySuccess, notifyError } = + useTxNotification(txName); + + const execute = useCallback( + async (context: Context) => { + if (_execute === null) { + return; + } + notifyProcessing(); + + await _execute(context); + }, + [_execute, notifyProcessing] + ); + + useEffect(() => { + if (activeAccountAddress === null) { + reset(); + } + }, [activeAccountAddress, reset]); + + useEffect(() => { + if ( + status === TxStatus.NOT_YET_INITIATED || + status === TxStatus.PROCESSING + ) { + return; + } + + if (txHash !== null) { + notifySuccess(txHash, successMessage); + } else if (error !== null) { + notifyError(error); + } + }, [status, error, txHash, notifyError, notifySuccess, successMessage]); + + return { execute, status, error, txHash, successMessage }; +} diff --git a/apps/tangle-dapp/hooks/useSwrWithLocalStorage.ts b/apps/tangle-dapp/hooks/useSwrWithLocalStorage.ts deleted file mode 100644 index 122de0b111..0000000000 --- a/apps/tangle-dapp/hooks/useSwrWithLocalStorage.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { PromiseOrT } from '@webb-tools/abstract-api-provider'; -import { useEffect, useRef } from 'react'; -import useSWR, { SWRConfiguration } from 'swr'; - -import { SwrBaseKey } from '../constants'; -import useLocalStorage, { - LocalStorageKey, - LocalStorageValueOf, -} from './useLocalStorage'; - -export type SwrWithLocalStorageOptions = { - localStorageKey: T; - swrKey: SwrBaseKey | [SwrBaseKey, ...unknown[]]; - swrConfig?: SWRConfiguration; - fetcher: () => PromiseOrT | null>; -}; - -/** - * Combines the use of SWR with local storage as a caching layer. - * - * This allows the initial data to be fetched from local storage, and then - * updated with the SWR response. The local storage value is also updated - * as the SWR response changes. - * - * The main idea is to improve the initial load time of the data. - */ -const useSwrWithLocalStorage = ( - options: SwrWithLocalStorageOptions -) => { - // TODO: Add a logic-error catching method to prevent the use of the same hook with the same local storage key more than once at a given time. - - const isInitialLoadRef = useRef(true); - - const { set: setCachedValue, get: getCachedValue } = useLocalStorage( - options.localStorageKey, - true - ); - - const { mutate, data, ...other } = useSWR( - options.swrKey, - options.fetcher, - options.swrConfig - ); - - // Maintain the local storage value updated as the SWR - // response changes. - useEffect(() => { - if (data !== undefined && data !== null) { - setCachedValue(data); - } - }, [data, setCachedValue]); - - // Set initial value from local storage. This is only done once, - // and helps to improve user-perceived initial load time. - useEffect(() => { - if (!isInitialLoadRef.current) { - return; - } - - const cachedValue = getCachedValue(); - const noResponseDataYet = data === undefined || data === null; - const doMutate = cachedValue !== null && noResponseDataYet; - - if (doMutate) { - mutate(cachedValue, false); - } - - isInitialLoadRef.current = false; - }, [data, getCachedValue, mutate]); - - return { data, mutate, ...other }; -}; - -export default useSwrWithLocalStorage; diff --git a/apps/tangle-dapp/hooks/useTxNotification.tsx b/apps/tangle-dapp/hooks/useTxNotification.tsx new file mode 100644 index 0000000000..4d15c1150e --- /dev/null +++ b/apps/tangle-dapp/hooks/useTxNotification.tsx @@ -0,0 +1,127 @@ +import { HexString } from '@polkadot/util/types'; +import { Button, Typography } from '@webb-tools/webb-ui-components'; +import _ from 'lodash'; +import { useSnackbar } from 'notistack'; +import { useCallback } from 'react'; + +import { TxName } from '../constants'; +import useAgnosticAccountInfo from './useAgnosticAccountInfo'; +import useExplorerUrl from './useExplorerUrl'; + +const SUCCESS_TIMEOUT = 10_000; + +const SUCCESS_MESSAGES: Record = { + [TxName.BOND]: 'Bonded tokens into staking', + [TxName.BOND_EXTRA]: 'Added more tokens to existing stake', + [TxName.UNBOND]: 'Unbonded tokens from staking', + [TxName.REBOND]: 'Rebonded tokens into staking', + [TxName.WITHDRAW_UNBONDED]: 'Withdrew all unbonded tokens', + [TxName.CHILL]: 'Stopped nominating', + [TxName.NOMINATE]: 'Nominated validators for staking', + [TxName.PAYOUT_STAKERS]: 'Payout was successful', + [TxName.SET_PAYEE]: 'Updated staking payout reward destination', + [TxName.VEST]: 'Released vested tokens', + [TxName.TRANSFER]: 'Transfer successful', + [TxName.PAYOUT_ALL]: 'Payout executed for all stakers', + [TxName.SETUP_NOMINATOR]: 'Nominator setup successful', + [TxName.UPDATE_NOMINATOR]: 'Nominator updated', + [TxName.WITHDRAW_EVM_BALANCE]: 'Withdrawal successful', + [TxName.UPDATE_RESTAKE_PROFILE]: 'Restake profile updated', +}; + +// TODO: Use a ref for the key to permit multiple rapid fire transactions from stacking under the same key. Otherwise, use a global state counter via Zustand. +const useTxNotification = (txName: TxName) => { + const { enqueueSnackbar, closeSnackbar } = useSnackbar(); + const getTxExplorerUrl = useExplorerUrl(); + const { isEvm: isEvmActiveAccount } = useAgnosticAccountInfo(); + + const processingKey = `${txName}-processing`; + + const notifySuccess = useCallback( + (txHash: HexString, successMessage?: string | null) => { + closeSnackbar(processingKey); + + // In case that the EVM account status is unavailable, + // default to not display the transaction explorer URL, + // since it is not possible to determine anymore. However, + // this allows the user to still see the success message if + // for example, they disconnect their account while the + // transaction is still processing. + const txExplorerUrl = + isEvmActiveAccount === null ? null : getTxExplorerUrl(txHash, 'tx'); + + // Currently using SnackbarProvider for managing NotificationStacked + // For one-off configurations, must use enqueueSnackbar. + enqueueSnackbar( +
    + {SUCCESS_MESSAGES[txName]} + + {successMessage && ( + {successMessage} + )} + + {txExplorerUrl !== null && ( + + )} +
    , + { + variant: 'success', + autoHideDuration: SUCCESS_TIMEOUT, + } + ); + }, + [ + closeSnackbar, + enqueueSnackbar, + getTxExplorerUrl, + isEvmActiveAccount, + processingKey, + txName, + ] + ); + + const notifyError = useCallback( + (error: Error) => { + closeSnackbar(processingKey); + + enqueueSnackbar( +
    + {_.capitalize(txName)} failed + + {error.message} +
    , + { + variant: 'error', + // Leave the error message open until the user closes it, + // that way they can copy the error message if needed, and + // in case that they leave the page or not pay attention to + // the error message, they can still see it when they return. + autoHideDuration: null, + } + ); + }, + [closeSnackbar, enqueueSnackbar, processingKey, txName] + ); + + const notifyProcessing = useCallback(() => { + closeSnackbar(processingKey); + + enqueueSnackbar(Processing {txName}, { + key: processingKey, + variant: 'info', + persist: true, + }); + }, [closeSnackbar, enqueueSnackbar, processingKey, txName]); + + return { notifyProcessing, notifySuccess, notifyError }; +}; + +export default useTxNotification; diff --git a/apps/tangle-dapp/hooks/useViemPublicClient.ts b/apps/tangle-dapp/hooks/useViemPublicClient.ts index 819fcee339..d52097ab02 100644 --- a/apps/tangle-dapp/hooks/useViemPublicClient.ts +++ b/apps/tangle-dapp/hooks/useViemPublicClient.ts @@ -19,7 +19,7 @@ const useViemPublicClient = () => { const chain = createTangleViemChainFromNetwork({ ...network, - chainId: network.evmChainId, + evmChainId: network.evmChainId, httpRpcEndpoint: network.httpRpcEndpoint, }); diff --git a/apps/tangle-dapp/hooks/useViemWalletClient.ts b/apps/tangle-dapp/hooks/useViemWalletClient.ts index 2939172972..2091313e73 100644 --- a/apps/tangle-dapp/hooks/useViemWalletClient.ts +++ b/apps/tangle-dapp/hooks/useViemWalletClient.ts @@ -3,12 +3,12 @@ import { createWalletClient, custom, type WalletClient } from 'viem'; import useNetworkStore from '../context/useNetworkStore'; import createTangleViemChainFromNetwork from '../utils/evm/createTangleViemChainFromNetwork'; -import useEvmAddress from './useEvmAddress'; +import useEvmAddress20 from './useEvmAddress'; const useViemWalletClient = () => { const [client, setClient] = useState(null); const { network } = useNetworkStore(); - const activeEvmAddress = useEvmAddress(); + const activeEvmAddress = useEvmAddress20(); // Update the wallet client when the network changes. useEffect(() => { @@ -23,7 +23,7 @@ const useViemWalletClient = () => { const chain = createTangleViemChainFromNetwork({ ...network, - chainId: network.evmChainId, + evmChainId: network.evmChainId, httpRpcEndpoint: network.httpRpcEndpoint, }); diff --git a/apps/tangle-dapp/next.config.js b/apps/tangle-dapp/next.config.js index 717f45a936..d68700b364 100644 --- a/apps/tangle-dapp/next.config.js +++ b/apps/tangle-dapp/next.config.js @@ -20,6 +20,7 @@ const nextConfig = { process.env.TANGLE_DAPP_USE_LOCAL_RPC_ENDPOINT ?? '', OFAC_REGIONS: process.env.OFAC_REGIONS ?? '', OFAC_COUNTRY_CODES: process.env.OFAC_COUNTRY_CODES ?? '', + USING_LOCAL_TANGLE: process.env.USING_LOCAL_TANGLE ?? '', }, nx: { diff --git a/apps/tangle-dapp/package.json b/apps/tangle-dapp/package.json index 9ca4444f22..7e2d06299a 100644 --- a/apps/tangle-dapp/package.json +++ b/apps/tangle-dapp/package.json @@ -1,5 +1,5 @@ { "name": "@webb-tools/tangle-dapp", - "version": "0.0.8", + "version": "0.0.9", "license": "Apache-2.0" } diff --git a/apps/tangle-dapp/public/static/opengraph/claim-airdrop.png b/apps/tangle-dapp/public/static/opengraph/claim-airdrop.png index a756afc7e7..b010d81670 100644 Binary files a/apps/tangle-dapp/public/static/opengraph/claim-airdrop.png and b/apps/tangle-dapp/public/static/opengraph/claim-airdrop.png differ diff --git a/apps/tangle-dapp/public/static/opengraph/default.png b/apps/tangle-dapp/public/static/opengraph/default.png index 2ff88bdeee..c173f7d60c 100644 Binary files a/apps/tangle-dapp/public/static/opengraph/default.png and b/apps/tangle-dapp/public/static/opengraph/default.png differ diff --git a/apps/tangle-dapp/public/static/opengraph/nomination.png b/apps/tangle-dapp/public/static/opengraph/nomination.png index 117982eb5e..e324c660a1 100644 Binary files a/apps/tangle-dapp/public/static/opengraph/nomination.png and b/apps/tangle-dapp/public/static/opengraph/nomination.png differ diff --git a/apps/tangle-dapp/types/bridge.ts b/apps/tangle-dapp/types/bridge.ts new file mode 100644 index 0000000000..3aab7ae63e --- /dev/null +++ b/apps/tangle-dapp/types/bridge.ts @@ -0,0 +1,32 @@ +import { PresetTypedChainId } from '@webb-tools/dapp-types'; +import Decimal from 'decimal.js'; + +// NOTE: might need to add cases when Sygma SDK does not support +export enum BridgeType { + SYGMA_EVM_TO_EVM = 'sygma-evmToEvm', + SYGMA_EVM_TO_SUBSTRATE = 'sygma-evmToSubstrate', + SYGMA_SUBSTRATE_TO_EVM = 'sygma-substrateToEvm', + SYGMA_SUBSTRATE_TO_SUBSTRATE = 'sygma-substrateToSubstrate', +} + +// Supported tokens to be used in the bridge +export type BridgeTokenId = 'tTNT' | 'TNT'; + +export type ChainId = PresetTypedChainId; + +export type BridgeTokenType = { + id: BridgeTokenId; + symbol: string; // this is also used to get the token icon + + /** + * Transaction fee to be paid on the destination chain + * Use to calculate the minimum amount of token required to be transferred + */ + destChainTransactionFee: Partial>; + + /** + * Minimum amount of an token required to keep an account active on a blockchain + * Use to calculate the minimum amount of token required to be transferred + */ + existentialDeposit: Partial>; +}; diff --git a/apps/tangle-dapp/types/index.ts b/apps/tangle-dapp/types/index.ts old mode 100644 new mode 100755 index 7bea687d68..2a5ac9ab12 --- a/apps/tangle-dapp/types/index.ts +++ b/apps/tangle-dapp/types/index.ts @@ -3,13 +3,18 @@ // about requiring three arguments instead of two. import '@webb-tools/tangle-substrate-types'; -import { BN } from '@polkadot/util'; -import { WebbProviderType } from '@webb-tools/abstract-api-provider/types'; +import type { + SpStakingExposurePage, + SpStakingPagedExposureMetadata, +} from '@polkadot/types/lookup'; +import type { BN } from '@polkadot/util'; +import type { WebbProviderType } from '@webb-tools/abstract-api-provider/types'; export enum PagePath { NOMINATION = '/nomination', CLAIM_AIRDROP = '/claim', ACCOUNT = '/', + BRIDGE = '/bridge', SERVICES_OVERVIEW = '/services', SERVICES_RESTAKE = '/restake', } @@ -33,26 +38,23 @@ export enum DelegationsAndPayoutsTab { PAYOUTS = 'Payouts', } -export type Validator = { +export type BasicAccountInfo = { address: string; identityName: string; - selfStaked: string; - effectiveAmountStaked: string; - effectiveAmountStakedRaw: string; - delegations: string; - commission: string; - status: string; }; -export type Delegator = { - address: string; - identity: string; - selfStaked: string; +export interface Nominee extends BasicAccountInfo { isActive: boolean; - commission: string; - delegations: string; - effectiveAmountStaked: string; -}; + commission: BN; + selfStakeAmount: BN; + totalStakeAmount: BN; + nominatorCount: number; +} + +export interface Validator extends Nominee { + restakedAmount: BN; + activeServicesCount: number; +} export type NodeSpecification = { os: string; @@ -64,10 +66,21 @@ export type NodeSpecification = { linuxKernel: string; }; -export enum PaymentDestination { +// TODO: As of now, the other reward destinations are disabled in Tangle. Confirm whether they'll be used in the future, otherwise adjust this accordingly. +export enum StakingRewardsDestination { + STAKED, + STASH, + CONTROLLER, + ACCOUNT, + NONE, +} + +export enum StakingRewardsDestinationDisplayText { STAKED = 'Staked (increase the amount at stake)', STASH = 'Stash (do not increase the amount at stake)', CONTROLLER = 'Controller Account', + ACCOUNT = 'Specific Account', + NONE = 'None', } export type AddressWithIdentity = { @@ -78,11 +91,11 @@ export type AddressWithIdentity = { export type Payout = { era: number; validator: AddressWithIdentity; - validatorTotalStake: string; + validatorTotalStake: BN; nominators: AddressWithIdentity[]; - validatorTotalReward: string; - nominatorTotalReward: string; - status: 'claimed' | 'unclaimed'; + validatorTotalReward: BN; + nominatorTotalReward: BN; + nominatorTotalRewardRaw: BN; }; /** @@ -143,20 +156,20 @@ export type InternalPath = * of the roles. */ export enum RestakingService { - ZK_SAAS_GROTH16 = 'ZkSaaS (Groth16)', - ZK_SAAS_MARLIN = 'ZkSaaS (Marlin)', + ZK_SAAS_GROTH16 = 'ZkSaaS_Groth16', + ZK_SAAS_MARLIN = 'ZkSaaS_Marlin', LIGHT_CLIENT_RELAYING = 'Light Client Relaying', - TSS_SILENT_SHARD_DKLS23SECP256K1 = 'TSS SilentShardDKLS23Secp256k1', - TSS_DFNS_CGGMP21SECP256K1 = 'TSS DfnsCGGMP21Secp256k1', - TSS_DFNS_CGGMP21SECP256R1 = 'TSS DfnsCGGMP21Secp256r1', - TSS_DFNS_CGGMP21STARK = 'TSS DfnsCGGMP21Stark', - TSS_ZCASH_FROST_P256 = 'TSS ZcashFrostP256', - TSS_ZCASH_FROST_P384 = 'TSS ZcashFrostP384', - TSS_ZCASH_FROST_SECP256K1 = 'TSS ZcashFrostSecp256k1', - TSS_ZCASH_FROST_RISTRETTO255 = 'TSS ZcashFrostRistretto255', - TSS_ZCASH_FROST_ED25519 = 'TSS ZcashFrostEd25519', - TSS_GENNARO_DKG_BLS381 = 'TSS GennaroDKGBls381', - TSS_ZCASH_FROST_ED448 = 'TSS ZcashFrostEd448', + TSS_SILENT_SHARD_DKLS23SECP256K1 = 'TSS_SilentShardDKLS23Secp256k1', + TSS_DFNS_CGGMP21SECP256K1 = 'TSS_DfnsCGGMP21Secp256k1', + TSS_DFNS_CGGMP21SECP256R1 = 'TSS_DfnsCGGMP21Secp256r1', + TSS_DFNS_CGGMP21STARK = 'TSS_DfnsCGGMP21Stark', + TSS_ZCASH_FROST_P256 = 'TSS_ZcashFrostP256', + TSS_ZCASH_FROST_P384 = 'TSS_ZcashFrostP384', + TSS_ZCASH_FROST_SECP256K1 = 'TSS_ZcashFrostSecp256k1', + TSS_ZCASH_FROST_RISTRETTO255 = 'TSS_ZcashFrostRistretto255', + TSS_ZCASH_FROST_ED25519 = 'TSS_ZcashFrostEd25519', + TSS_GENNARO_DKG_BLS381 = 'TSS_GennaroDKGBls381', + TSS_ZCASH_FROST_ED448 = 'TSS_ZcashFrostEd448', } export enum RestakingProfileType { @@ -172,11 +185,13 @@ export type DistributionDataType = Record; export type Service = { id: string; serviceType: RestakingService; - participants: number; + participants: string[]; threshold?: number; jobsCount?: number; earnings?: BN; - expirationBlock: string; + expirationBlock: BN; + ttlBlock: BN; + permittedCaller?: string; }; export type ServiceJob = { @@ -195,18 +210,38 @@ export type JobType = { export type ServiceParticipant = { address: string; - identity?: string; - twitter?: string; - discord?: string; - email?: string; - web?: string; + identity?: string | null; + twitter?: string | null; + discord?: string | null; + email?: string | null; + web?: string | null; }; export enum NetworkFeature { Faucet, + EraStakersOverview, } export const ExplorerType = { Substrate: 'polkadot' as WebbProviderType, EVM: 'web3' as WebbProviderType, } as const; + +export type ExposureMap = Record< + string, + { + exposure: SpStakingExposurePage; + exposureMeta: SpStakingPagedExposureMetadata; + } +>; + +export type TokenSymbol = 'tTNT' | 'TNT'; + +/** + * Represents a function type that takes a context parameter and returns a success message. + * @param context The context parameter. + * @returns The success message. + */ +export type GetSuccessMessageFunctionType = ( + context: Context +) => string; diff --git a/apps/tangle-dapp/utils/Optional.ts b/apps/tangle-dapp/utils/Optional.ts index 1e9aeb0c46..ac952ecb4f 100644 --- a/apps/tangle-dapp/utils/Optional.ts +++ b/apps/tangle-dapp/utils/Optional.ts @@ -34,6 +34,22 @@ class Optional> { constructor(value?: T) { this.value = value ?? null; } + + map>(f: (value: T) => U): Optional { + if (this.value === null) { + return new Optional(); + } + + return new Optional(f(this.value)); + } + + get isPresent(): boolean { + return this.value !== null; + } + + get isEmpty(): boolean { + return this.value === null; + } } export default Optional; diff --git a/apps/tangle-dapp/utils/calculateCommission.ts b/apps/tangle-dapp/utils/calculateCommission.ts new file mode 100644 index 0000000000..9dc9aa1523 --- /dev/null +++ b/apps/tangle-dapp/utils/calculateCommission.ts @@ -0,0 +1,14 @@ +import { BN } from '@polkadot/util'; + +const STAKING_COMMISSION_FACTOR = new BN(10_000_000); + +const calculateCommission = (commissionRate: BN): number => { + // TODO: Need to ensure that the conversion to number here will never fail. + return commissionRate + .muln(100) + .div(STAKING_COMMISSION_FACTOR) + .divn(100) + .toNumber(); +}; + +export default calculateCommission; diff --git a/apps/tangle-dapp/utils/calculateTimeRemaining.ts b/apps/tangle-dapp/utils/calculateTimeRemaining.ts index 03870bca90..1e967db8f6 100644 --- a/apps/tangle-dapp/utils/calculateTimeRemaining.ts +++ b/apps/tangle-dapp/utils/calculateTimeRemaining.ts @@ -1,30 +1,11 @@ -import { BN, BN_ZERO } from '@polkadot/util'; import { formatDistance } from 'date-fns'; import capitalize from 'lodash/capitalize'; function calculateTimeRemaining( - babeExpectedBlockTime: BN | null, - currentBlockNumber: BN | null, - endingBlockNumber: BN | null + futureDate: Date, + currentDate?: Date ): string | null { - if ( - babeExpectedBlockTime === null || - currentBlockNumber === null || - endingBlockNumber === null - ) { - return null; - } - - // Never exceed the ending block number. This ensures that the time - // remaining is always 0 when the current block number is greater than - // the ending block number. - const difference = currentBlockNumber.gt(endingBlockNumber) - ? BN_ZERO - : endingBlockNumber.sub(currentBlockNumber); - - const timeRemainingInMs = babeExpectedBlockTime.mul(difference).toNumber(); - - return capitalize(formatDistance(Date.now() + timeRemainingInMs, Date.now())); + return capitalize(formatDistance(futureDate, currentDate ?? new Date())); } export default calculateTimeRemaining; diff --git a/apps/tangle-dapp/utils/convertRecordToAllocation.ts b/apps/tangle-dapp/utils/convertRecordToAllocation.ts index ded42fecd6..3dfd7676b7 100644 --- a/apps/tangle-dapp/utils/convertRecordToAllocation.ts +++ b/apps/tangle-dapp/utils/convertRecordToAllocation.ts @@ -2,7 +2,7 @@ import { PalletRolesProfileRecord } from '@polkadot/types/lookup'; import BN from 'bn.js'; import { RestakingService } from '../types'; -import substrateRoleToServiceType from './substrateRoleToServiceType'; +import substrateRoleToServiceType from './restaking/substrateRoleToServiceType'; /** * Given a roles profile record (a tuple originating from chain, diff --git a/apps/tangle-dapp/utils/convertRewardPointsToReward.ts b/apps/tangle-dapp/utils/convertRewardPointsToReward.ts new file mode 100644 index 0000000000..8878bc5922 --- /dev/null +++ b/apps/tangle-dapp/utils/convertRewardPointsToReward.ts @@ -0,0 +1,42 @@ +import { BN_QUINTILL } from '@polkadot/util'; +import { TANGLE_TOKEN_DECIMALS } from '@webb-tools/dapp-config/constants/tangle'; +import { parseUnits } from 'viem'; + +const BIG_INT_QUINTILL = BigInt(BN_QUINTILL.toString()); + +/** + * Convert the reward points to reward in token + * Following the `do_payout_stakers` logic in the tangle + * to convert the reward points to rewards + * see https://github.com/webb-tools/tangle/blob/8c1be851059d21fe524ca30808219d5b26c01713/pallets/roles/src/functions.rs#L508-L539 + * @param rewardPoints the reward points (got from `api.query.roles.erasRestakeRewardPoints`) + * @param validatorCommision the validator commission (got from `api.query.staking.erasValidatorPrefs`) + * @param ownStaked the own staked amount of the validator (got from `api.query.staking.erasStakersOverview`) + * @param totalStaked the total staked amount of the validator (got from `api.query.staking.erasStakersOverview`) + * @returns the reward in token + */ +export default function convertRewardPointsToReward( + rewardPoints: number, + validatorCommision: number, + ownStaked: bigint, + totalStaked: bigint +): bigint { + // Convert Perbill to a number + const validatorCommission = validatorCommision / 10_000_000 / 100; + + const validatorCommissionPayout = rewardPoints * validatorCommission; + + const validatorLeftoverPayout = rewardPoints - validatorCommissionPayout; + + const validatorExposurePart = Number( + (ownStaked * BIG_INT_QUINTILL) / totalStaked / BIG_INT_QUINTILL + ); + + const validatorStakingPayout = + validatorLeftoverPayout * validatorExposurePart; + + const totalPayout = validatorStakingPayout + validatorCommissionPayout; + + // Scale the total payout to `TANGLE_TOKEN_DECIMALS` decimals + return parseUnits(totalPayout.toString(), TANGLE_TOKEN_DECIMALS); +} diff --git a/apps/tangle-dapp/utils/createCustomNetwork.ts b/apps/tangle-dapp/utils/createCustomNetwork.ts index 8b2bc6e71d..267f664f8b 100644 --- a/apps/tangle-dapp/utils/createCustomNetwork.ts +++ b/apps/tangle-dapp/utils/createCustomNetwork.ts @@ -8,7 +8,7 @@ const createCustomNetwork = (customRpcEndpoint: string): Network => ({ id: NetworkId.CUSTOM, name: 'Custom network', // Default to testnet symbol for all custom networks - nativeTokenSymbol: TANGLE_TESTNET_NATIVE_TOKEN_SYMBOL, + tokenSymbol: TANGLE_TESTNET_NATIVE_TOKEN_SYMBOL, nodeType: 'standalone', wsRpcEndpoint: customRpcEndpoint, polkadotExplorerUrl: `https://polkadot.js.org/apps/?rpc=${customRpcEndpoint}#/explorer`, diff --git a/apps/tangle-dapp/utils/evm/bond.ts b/apps/tangle-dapp/utils/evm/bond.ts deleted file mode 100644 index 4686693e2c..0000000000 --- a/apps/tangle-dapp/utils/evm/bond.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { ensureHex } from '@webb-tools/dapp-config'; -import { AddressType } from '@webb-tools/dapp-config/types'; -import { parseEther } from 'viem'; - -import { - PrecompileAddress, - STAKING_PRECOMPILE_ABI, -} from '../../constants/evmPrecompiles'; -import { PaymentDestination } from '../../types'; -import { createEvmWalletClient, evmPublicClient } from './client'; - -const PAYEE_STAKED = - '0x0000000000000000000000000000000000000000000000000000000000000000'; - -const PAYEE_STASH = - '0x0000000000000000000000000000000000000000000000000000000000000001'; - -const PAYEE_CONTROLLER = - '0x0000000000000000000000000000000000000000000000000000000000000002'; - -export const bondTokens = async ( - nominatorAddress: string, - numberOfTokens: number, - paymentDestination: string -): Promise => { - const value = parseEther(numberOfTokens.toString()); - - const payee = - paymentDestination === PaymentDestination.STAKED - ? PAYEE_STAKED - : paymentDestination === PaymentDestination.STASH - ? PAYEE_STASH - : PAYEE_CONTROLLER; - - const { request } = await evmPublicClient.simulateContract({ - address: PrecompileAddress.STAKING, - abi: STAKING_PRECOMPILE_ABI, - functionName: 'bond', - args: [value, payee], - account: ensureHex(nominatorAddress), - }); - - const evmWalletClient = createEvmWalletClient(nominatorAddress); - const txHash = await evmWalletClient.writeContract(request); - - return txHash; -}; - -export const bondExtraTokens = async ( - nominatorAddress: string, - numberOfTokens: number -): Promise => { - const value = parseEther(numberOfTokens.toString()); - - const { request } = await evmPublicClient.simulateContract({ - address: PrecompileAddress.STAKING, - abi: STAKING_PRECOMPILE_ABI, - functionName: 'bondExtra', - args: [value], - account: ensureHex(nominatorAddress), - }); - - const evmWalletClient = createEvmWalletClient(nominatorAddress); - const txHash = await evmWalletClient.writeContract(request); - - return txHash; -}; - -export const updatePaymentDestination = async ( - nominatorAddress: string, - paymentDestination: string -): Promise => { - const payee = - paymentDestination === PaymentDestination.STAKED - ? PAYEE_STAKED - : paymentDestination === PaymentDestination.STASH - ? PAYEE_STASH - : PAYEE_CONTROLLER; - - const { request } = await evmPublicClient.simulateContract({ - address: PrecompileAddress.STAKING, - abi: STAKING_PRECOMPILE_ABI, - functionName: 'setPayee', - args: [payee], - account: ensureHex(nominatorAddress), - }); - - const evmWalletClient = createEvmWalletClient(nominatorAddress); - const txHash = await evmWalletClient.writeContract(request); - - return txHash; -}; - -export const unBondTokens = async ( - nominatorAddress: string, - numberOfTokens: number -): Promise => { - const value = parseEther(numberOfTokens.toString()); - - const { request } = await evmPublicClient.simulateContract({ - address: PrecompileAddress.STAKING, - abi: STAKING_PRECOMPILE_ABI, - functionName: 'unbond', - args: [value], - account: ensureHex(nominatorAddress), - }); - - const evmWalletClient = createEvmWalletClient(nominatorAddress); - const txHash = await evmWalletClient.writeContract(request); - - return txHash; -}; - -export const rebondTokens = async ( - nominatorAddress: string, - numberOfTokens: number -): Promise => { - const value = parseEther(numberOfTokens.toString()); - - const { request } = await evmPublicClient.simulateContract({ - address: PrecompileAddress.STAKING, - abi: STAKING_PRECOMPILE_ABI, - functionName: 'rebond', - args: [value], - account: ensureHex(nominatorAddress), - }); - - const evmWalletClient = createEvmWalletClient(nominatorAddress); - const txHash = await evmWalletClient.writeContract(request); - - return txHash; -}; - -export const withdrawUnbondedTokens = async ( - nominatorAddress: string, - slashingSpans: number -): Promise => { - const { request } = await evmPublicClient.simulateContract({ - address: PrecompileAddress.STAKING, - abi: STAKING_PRECOMPILE_ABI, - functionName: 'withdrawUnbonded', - args: [slashingSpans], - account: ensureHex(nominatorAddress), - }); - - const evmWalletClient = createEvmWalletClient(nominatorAddress); - const txHash = await evmWalletClient.writeContract(request); - - return txHash; -}; diff --git a/apps/tangle-dapp/utils/evm/client.ts b/apps/tangle-dapp/utils/evm/client.ts deleted file mode 100644 index f5cac69624..0000000000 --- a/apps/tangle-dapp/utils/evm/client.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { ensureHex } from '@webb-tools/dapp-config'; -import { chainsConfig } from '@webb-tools/dapp-config/chains/chain-config'; -import { PresetTypedChainId } from '@webb-tools/dapp-types/ChainId'; -import { - createPublicClient, - createWalletClient, - custom, - defineChain, - http, -} from 'viem'; - -const TANGLE_TESTNET_CONFIG = chainsConfig[PresetTypedChainId.TangleTestnetEVM]; - -const TANGLE_TESTNET_CHAIN = defineChain(TANGLE_TESTNET_CONFIG); - -// TODO: This should not be hardcoded to the testnet, it should be using the network that the user is currently connected to. -export const evmPublicClient = createPublicClient({ - chain: TANGLE_TESTNET_CHAIN, - transport: http(), -}); - -export const createEvmWalletClient = (accountAddress: string) => { - // TODO: Might need to handle this more gracefully. Or at least from the caller(s) (add description to the function to make it clear that it may fail and throw an error). - if (typeof window.ethereum === 'undefined') { - throw new Error( - 'window.ethereum is undefined, but is required for EVM actions' - ); - } - - return createWalletClient({ - chain: TANGLE_TESTNET_CHAIN, - account: ensureHex(accountAddress), - transport: custom(window.ethereum), - }); -}; diff --git a/apps/tangle-dapp/utils/evm/createTangleViemChainFromNetwork.ts b/apps/tangle-dapp/utils/evm/createTangleViemChainFromNetwork.ts index 1c89138f27..6d2d410c5a 100644 --- a/apps/tangle-dapp/utils/evm/createTangleViemChainFromNetwork.ts +++ b/apps/tangle-dapp/utils/evm/createTangleViemChainFromNetwork.ts @@ -4,15 +4,17 @@ import { } from '@webb-tools/webb-ui-components/constants/networks'; import { Chain } from 'viem'; +import { TokenSymbol } from '../../types'; + const createTangleViemChainFromNetwork = ( - network: Network & { chainId: number; httpRpcEndpoint: string } + network: Network & { evmChainId: number; httpRpcEndpoint: string } ): Chain => { const currencyName = network.id === NetworkId.TANGLE_MAINNET ? 'Tangle Network Token' : 'Test Tangle Network Token'; - const currencySymbol = + const tokenSymbol: TokenSymbol = network.id === NetworkId.TANGLE_MAINNET ? 'TNT' : 'tTNT'; const blockExplorerName = @@ -21,11 +23,11 @@ const createTangleViemChainFromNetwork = ( : 'Tangle Testnet EVM Explorer'; return { - id: network.chainId, + id: network.evmChainId, name: network.name, nativeCurrency: { name: currencyName, - symbol: currencySymbol, + symbol: tokenSymbol, decimals: 18, }, blockExplorers: network.evmExplorerUrl diff --git a/apps/tangle-dapp/utils/evm/index.ts b/apps/tangle-dapp/utils/evm/index.ts deleted file mode 100644 index 4687717c6b..0000000000 --- a/apps/tangle-dapp/utils/evm/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './bond'; -export * from './client'; -export * from './nominators'; -export * from './payout'; diff --git a/apps/tangle-dapp/utils/evm/nominators.ts b/apps/tangle-dapp/utils/evm/nominators.ts deleted file mode 100644 index 92b9c9d6d2..0000000000 --- a/apps/tangle-dapp/utils/evm/nominators.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { u8aToHex } from '@polkadot/util'; -import { decodeAddress } from '@polkadot/util-crypto'; -import { ensureHex } from '@webb-tools/dapp-config'; -import { AddressType } from '@webb-tools/dapp-config/types'; - -import { - PrecompileAddress, - STAKING_PRECOMPILE_ABI, -} from '../../constants/evmPrecompiles'; -import { createEvmWalletClient, evmPublicClient } from './client'; - -export const nominateValidators = async ( - nominatorAddress: string, - validatorAddresses: string[] -): Promise => { - const targets = validatorAddresses.map((address) => { - return u8aToHex(decodeAddress(address)); - }); - - const { request } = await evmPublicClient.simulateContract({ - address: PrecompileAddress.STAKING, - abi: STAKING_PRECOMPILE_ABI, - functionName: 'nominate', - args: [targets], - account: ensureHex(nominatorAddress), - }); - - const evmWalletClient = createEvmWalletClient(nominatorAddress); - const txHash = await evmWalletClient.writeContract(request); - - return txHash; -}; - -export const stopNomination = async ( - nominatorAddress: string -): Promise => { - const { request } = await evmPublicClient.simulateContract({ - address: PrecompileAddress.STAKING, - abi: STAKING_PRECOMPILE_ABI, - functionName: 'chill', - args: [], - account: ensureHex(nominatorAddress), - }); - - const evmWalletClient = createEvmWalletClient(nominatorAddress); - const txHash = await evmWalletClient.writeContract(request); - - return txHash; -}; diff --git a/apps/tangle-dapp/utils/evm/payout.ts b/apps/tangle-dapp/utils/evm/payout.ts deleted file mode 100644 index 02585b1d1c..0000000000 --- a/apps/tangle-dapp/utils/evm/payout.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { u8aToHex } from '@polkadot/util'; -import { decodeAddress } from '@polkadot/util-crypto'; -import { ensureHex } from '@webb-tools/dapp-config'; -import { AddressType } from '@webb-tools/dapp-config/types'; -import { ethers } from 'ethers'; - -import { - BATCH_PRECOMPILE_ABI, - PrecompileAddress, - STAKING_PRECOMPILE_ABI, -} from '../../constants/evmPrecompiles'; -import { createEvmWalletClient, evmPublicClient } from './client'; - -export const payoutStakers = async ( - nominatorAddress: string, - validatorAddress: string, - era: number -): Promise => { - const validator = u8aToHex(decodeAddress(validatorAddress)); - - const { request } = await evmPublicClient.simulateContract({ - address: PrecompileAddress.STAKING, - abi: STAKING_PRECOMPILE_ABI, - functionName: 'payoutStakers', - args: [validator, era], - account: ensureHex(nominatorAddress), - }); - - const evmWalletClient = createEvmWalletClient(nominatorAddress); - const txHash = await evmWalletClient.writeContract(request); - - return txHash; -}; - -const stakingInterface = new ethers.utils.Interface(STAKING_PRECOMPILE_ABI); - -export const batchPayoutStakers = async ( - nominatorAddress: string, - validatorEraPairs: { validatorAddress: string; era: string }[] -): Promise => { - const batchCalls = validatorEraPairs.map(({ validatorAddress, era }) => { - const validator = u8aToHex(decodeAddress(validatorAddress)); - - return { - to: PrecompileAddress.STAKING as AddressType, - value: 0, - callData: stakingInterface.encodeFunctionData('payoutStakers', [ - validator, - Number(era), - ]), - gasLimit: 0, - }; - }); - - const { request } = await evmPublicClient.simulateContract({ - address: PrecompileAddress.BATCH as AddressType, - abi: BATCH_PRECOMPILE_ABI, - functionName: 'batchAll', - args: [ - batchCalls.map((call) => call.to), - batchCalls.map((call) => call.value), - batchCalls.map((call) => call.callData), - batchCalls.map((call) => call.gasLimit), - ], - account: ensureHex(nominatorAddress), - }); - - const evmWalletClient = createEvmWalletClient(nominatorAddress); - const txHash = await evmWalletClient.writeContract(request); - - return txHash; -}; diff --git a/apps/tangle-dapp/utils/formatBnToDisplayAmount.ts b/apps/tangle-dapp/utils/formatBnToDisplayAmount.ts index 6477316e07..9979f29c0b 100644 --- a/apps/tangle-dapp/utils/formatBnToDisplayAmount.ts +++ b/apps/tangle-dapp/utils/formatBnToDisplayAmount.ts @@ -23,7 +23,8 @@ export type FormatOptions = { }; const DEFAULT_FORMAT_OPTIONS: FormatOptions = { - includeCommas: false, + fractionLength: 4, + includeCommas: true, padZerosInFraction: false, }; @@ -36,22 +37,37 @@ function formatBnToDisplayAmount( const divided = amount.div(divisor); const remainder = amount.mod(divisor); + let integerPart = divided.toString(10); + // Convert remainder to a string and pad with zeros if necessary. let remainderString = remainder.toString(10); + // There is a case when the decimals part has leading 0s, so that the remaining + // string can missing those 0s when we use `mod` method. + // Solution: Try to construct the string again and check the length, + // if the length is not the same, we can say that the remainder string is missing + // leading 0s, so we try to prepend those 0s to the remainder string + if (amount.toString().length !== (integerPart + remainderString).length) { + const missing0sCount = + amount.toString().length - (integerPart + remainderString).length; + + remainderString = + Array.from({ length: missing0sCount }) + .map(() => '0') + .join('') + remainderString; + } + if (finalOptions.padZerosInFraction) { remainderString = remainderString.padStart(TANGLE_TOKEN_DECIMALS, '0'); } remainderString = remainderString.substring(0, finalOptions.fractionLength); - // remove trailing 0s + // Remove trailing 0s. while (remainderString.endsWith('0')) { remainderString = remainderString.substring(0, remainderString.length - 1); } - let integerPart = divided.toString(10); - // Insert commas in the integer part if requested. if (finalOptions.includeCommas) { // TODO: Avoid using regex, it's confusing. diff --git a/apps/tangle-dapp/utils/getBlockDate.ts b/apps/tangle-dapp/utils/getBlockDate.ts new file mode 100644 index 0000000000..a479609fec --- /dev/null +++ b/apps/tangle-dapp/utils/getBlockDate.ts @@ -0,0 +1,40 @@ +import { BN } from '@polkadot/util'; + +/** + * Calculates the estimated date of a block based on the expected block time, + * the current block number, and the target block number. + * + * Note: RPC can only store a fixed number of recent blocks at a time, + * so the API cannot query blocks that are far in the past. Therefore, + * we need to get the current block number and then do the calculation here + * + * @param babeExpectedBlockTime The expected block time (in milliseconds) + * @param currentBlockNumber The current block number. + * @param blockNumber The target block number. + * @returns The estimated date of the target block, or null if any of the input values are null. + */ +export default function getBlockDate( + babeExpectedBlockTime: BN | null, + currentBlockNumber: BN | null, + blockNumber: BN | null +): Date | null { + if ( + babeExpectedBlockTime === null || + currentBlockNumber === null || + blockNumber === null + ) { + return null; + } + + const isPast = currentBlockNumber.gt(blockNumber); + + const difference = isPast + ? currentBlockNumber.sub(blockNumber) + : blockNumber.sub(currentBlockNumber); + + const timeRemainingInMs = babeExpectedBlockTime.mul(difference).toNumber(); + + return new Date( + Date.now() + (isPast ? -timeRemainingInMs : timeRemainingInMs) + ); +} diff --git a/apps/tangle-dapp/utils/getExposureMap.ts b/apps/tangle-dapp/utils/getExposureMap.ts new file mode 100644 index 0000000000..55586247a9 --- /dev/null +++ b/apps/tangle-dapp/utils/getExposureMap.ts @@ -0,0 +1,44 @@ +import { ApiRx } from '@polkadot/api'; +import type { + DeriveStakingElected, + DeriveStakingWaiting, +} from '@polkadot/api-derive/types'; +import { + SpStakingExposurePage, + SpStakingPagedExposureMetadata, +} from '@polkadot/types/lookup'; + +import { ExposureMap } from '../types'; + +export function getExposureMap( + api: ApiRx, + derive: DeriveStakingElected | DeriveStakingWaiting +): ExposureMap { + const emptyExposure = api.createType( + 'SpStakingExposurePage' + ); + const emptyExposureMeta = api.createType( + 'SpStakingPagedExposureMetadata' + ); + + return derive.info.reduce( + (exposureMap, { accountId, exposureMeta, exposurePaged }) => { + const exp = exposurePaged.isSome && exposurePaged.unwrap(); + const expMeta = exposureMeta.isSome && exposureMeta.unwrap(); + + exposureMap[accountId.toString()] = { + exposure: exp || emptyExposure, + exposureMeta: expMeta || emptyExposureMeta, + }; + + return exposureMap; + }, + {} as Record< + string, + { + exposure: SpStakingExposurePage; + exposureMeta: SpStakingPagedExposureMetadata; + } + > + ); +} diff --git a/apps/tangle-dapp/utils/index.ts b/apps/tangle-dapp/utils/index.ts index f2b2d3f288..d660d73966 100644 --- a/apps/tangle-dapp/utils/index.ts +++ b/apps/tangle-dapp/utils/index.ts @@ -1,6 +1,6 @@ export * from './calculateInflation'; -export * from './evmToSubstrateAddress'; -export { default as getChartDataAreaColorByServiceType } from './getChartDataAreaColorByServiceType'; -export { default as getChipColorOfServiceType } from './getChipColorOfServiceType'; export { default as getRoundedDownNumberWith2Decimals } from './getRoundedDownNumberWith2Decimals'; -export * from './substrateToEvmAddress'; +export { default as getChartDataAreaColorByServiceType } from './restaking/getChartDataAreaColorByServiceType'; +export { default as getChipColorOfServiceType } from './restaking/getChipColorOfServiceType'; +export * from './toEvmAddress20'; +export * from './toSubstrateAddress'; diff --git a/apps/tangle-dapp/utils/optimizeTxBatch.ts b/apps/tangle-dapp/utils/optimizeTxBatch.ts new file mode 100644 index 0000000000..2becb40c4b --- /dev/null +++ b/apps/tangle-dapp/utils/optimizeTxBatch.ts @@ -0,0 +1,23 @@ +import { ApiPromise } from '@polkadot/api'; +import { SubmittableExtrinsic } from '@polkadot/api/types'; +import { ISubmittableResult } from '@polkadot/types/types'; +import { assert } from '@polkadot/util'; + +const optimizeTxBatch = ( + api: ApiPromise, + txs: SubmittableExtrinsic<'promise', ISubmittableResult>[] +) => { + assert(txs.length > 0, 'At least one transaction should be provided'); + + // Don't batch if there's only one transaction. This will prevent + // any base fee from being charged for using the batching utility + // without any benefit. + if (txs.length === 1) { + return txs[0]; + } + + // TODO: Batching logic needs to consider the maximum allowed batch limit: api.consts.utility.batchedCallsLimit. If >limit, split into multiple batches/transactions. Not as high priority since the limit is (as of writing this) ~10,000. + return api.tx.utility.batch(txs); +}; + +export default optimizeTxBatch; diff --git a/apps/tangle-dapp/utils/polkadot/api.ts b/apps/tangle-dapp/utils/polkadot/api.ts index a90e9eb5f8..e437c8e0b1 100644 --- a/apps/tangle-dapp/utils/polkadot/api.ts +++ b/apps/tangle-dapp/utils/polkadot/api.ts @@ -1,6 +1,11 @@ import { ApiPromise, ApiRx, WsProvider } from '@polkadot/api'; +import { InjectedExtension } from '@polkadot/extension-inject/types'; import { firstValueFrom } from 'rxjs'; +const apiPromiseCache = new Map>(); +const apiRxCache = new Map>(); +const injectorCache = new Map(); + async function getOrCacheApiVariant( endpoint: string, cache: Map>, @@ -21,11 +26,9 @@ async function getOrCacheApiVariant( return newInstance; } -export const apiPromiseCache = new Map>(); - -export const getPolkadotApiPromise: ( +export const getApiPromise: (endpoint: string) => Promise = async ( endpoint: string -) => Promise = async (endpoint: string) => { +) => { return getOrCacheApiVariant(endpoint, apiPromiseCache, async () => { const wsProvider = new WsProvider(endpoint); @@ -36,9 +39,7 @@ export const getPolkadotApiPromise: ( }); }; -export const apiRxCache = new Map>(); - -export const getPolkadotApiRx = async (endpoint: string): Promise => { +export const getApiRx = async (endpoint: string): Promise => { return getOrCacheApiVariant(endpoint, apiRxCache, async () => { const provider = new WsProvider(endpoint); @@ -51,11 +52,22 @@ export const getPolkadotApiRx = async (endpoint: string): Promise => { }); }; -export const getInjector = async (address: string) => { +export const findInjectorForAddress = async ( + address: string +): Promise => { + // TODO: This is a temporary workaround to prevent Next.js from throwing an error complaining about 'window is not defined'. const { web3Enable, web3FromAddress } = await import( '@polkadot/extension-dapp' ); + const cachedInjector = injectorCache.get(address); + + // Prevent multiple redundant initialization calls by + // caching the injector for the given address. + if (cachedInjector !== undefined) { + return cachedInjector; + } + const extensions = await web3Enable('Tangle'); // No wallet extensions installed in the browser. @@ -63,5 +75,14 @@ export const getInjector = async (address: string) => { return null; } - return web3FromAddress(address); + try { + const injector = await web3FromAddress(address); + + injectorCache.set(address, injector); + + return injector; + } catch { + // Could not find an injector for the given address. + return null; + } }; diff --git a/apps/tangle-dapp/utils/polkadot/bond.ts b/apps/tangle-dapp/utils/polkadot/bond.ts deleted file mode 100644 index d5e314620b..0000000000 --- a/apps/tangle-dapp/utils/polkadot/bond.ts +++ /dev/null @@ -1,107 +0,0 @@ -import type { HexString } from '@polkadot/util/types'; -import { parseEther } from 'viem'; - -import { PaymentDestination } from '../../types'; -import { getPolkadotApiPromise } from './api'; -import { getTxPromise } from './utils'; - -const PAYEE_STAKED = 'Staked'; -const PAYEE_STASH = 'Stash'; -const PAYEE_CONTROLLER = 'Controller'; - -export const bondTokens = async ( - rpcEndpoint: string, - nominatorAddress: string, - amount: number, - paymentDestination: string -): Promise => { - const api = await getPolkadotApiPromise(rpcEndpoint); - - const payee = - paymentDestination === PaymentDestination.STAKED - ? PAYEE_STAKED - : paymentDestination === PaymentDestination.STASH - ? PAYEE_STASH - : PAYEE_CONTROLLER; - - const value = parseEther(amount.toString()); - const tx = api.tx.staking.bond(value, payee); - - return getTxPromise(nominatorAddress, tx); -}; - -export const bondExtraTokens = async ( - rpcEndpoint: string, - nominatorAddress: string, - amount: number -): Promise => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const value = parseEther(amount.toString()); - const tx = api.tx.staking.bondExtra(value); - - return getTxPromise(nominatorAddress, tx); -}; - -export const unbondTokens = async ( - rpcEndpoint: string, - nominatorAddress: string, - amount: number -) => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const value = parseEther(amount.toString()); - const tx = api.tx.staking.unbond(value); - - return getTxPromise(nominatorAddress, tx); -}; - -export const rebondTokens = async ( - rpcEndpoint: string, - nominatorAddress: string, - amount: number -) => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const value = parseEther(amount.toString()); - const tx = api.tx.staking.rebond(value); - - return getTxPromise(nominatorAddress, tx); -}; - -export const withdrawUnbondedTokens = async ( - rpcEndpoint: string, - nominatorAddress: string, - slashingSpans: number -) => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const tx = api.tx.staking.withdrawUnbonded(slashingSpans); - - return getTxPromise(nominatorAddress, tx); -}; - -export const updatePaymentDestination = async ( - rpcEndpoint: string, - nominatorAddress: string, - paymentDestination: string -): Promise => { - const api = await getPolkadotApiPromise(rpcEndpoint); - - const payee = - paymentDestination === PaymentDestination.STAKED - ? PAYEE_STAKED - : paymentDestination === PaymentDestination.STASH - ? PAYEE_STASH - : PAYEE_CONTROLLER; - - const tx = api.tx.staking.setPayee(payee); - - return getTxPromise(nominatorAddress, tx); -}; - -export const getSlashingSpans = async ( - rpcEndpoint: string, - address: string -): Promise => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const slashingSpans = await api.query.staking.slashingSpans(address); - - return slashingSpans.toString(); -}; diff --git a/apps/tangle-dapp/utils/polkadot/identity.ts b/apps/tangle-dapp/utils/polkadot/identity.ts index 32e98143f4..00bf50f771 100644 --- a/apps/tangle-dapp/utils/polkadot/identity.ts +++ b/apps/tangle-dapp/utils/polkadot/identity.ts @@ -1,5 +1,7 @@ import { PalletIdentityLegacyIdentityInfo } from '@polkadot/types/lookup'; +import { getApiPromise } from './api'; + export enum IdentityDataType { NAME = 'display', WEB = 'web', @@ -27,3 +29,35 @@ export const extractDataFromIdentityInfo = ( return null; }; + +export async function getAccountInfo(rpcEndpoint: string, address: string) { + const api = await getApiPromise(rpcEndpoint); + const identityData = await api.query.identity.identityOf(address); + + if (identityData.isSome) { + const identity = identityData.unwrap(); + const info = identity[0]?.info; + if (info) { + const name = extractDataFromIdentityInfo(info, IdentityDataType.NAME); + const email = extractDataFromIdentityInfo(info, IdentityDataType.EMAIL); + const web = extractDataFromIdentityInfo(info, IdentityDataType.WEB); + const twitterName = extractDataFromIdentityInfo( + info, + IdentityDataType.TWITTER + ); + const twitter = + twitterName === null + ? null + : `https://twitter.com/${twitterName.substring(1)}`; + + return { + name, + email, + web, + twitter, + }; + } + } + + return null; +} diff --git a/apps/tangle-dapp/utils/polkadot/index.ts b/apps/tangle-dapp/utils/polkadot/index.ts index 066be9cda7..6feeca3083 100644 --- a/apps/tangle-dapp/utils/polkadot/index.ts +++ b/apps/tangle-dapp/utils/polkadot/index.ts @@ -1,8 +1,6 @@ export * from './api'; -export * from './bond'; export * from './identity'; export * from './nominators'; -export * from './payout'; export * from './restake'; +export * from './services'; export * from './tokens'; -export * from './utils'; diff --git a/apps/tangle-dapp/utils/polkadot/nominators.ts b/apps/tangle-dapp/utils/polkadot/nominators.ts index 71af8ebd66..bcc6291b6b 100644 --- a/apps/tangle-dapp/utils/polkadot/nominators.ts +++ b/apps/tangle-dapp/utils/polkadot/nominators.ts @@ -1,54 +1,17 @@ -import type { HexString } from '@polkadot/util/types'; - -import { getPolkadotApiPromise } from './api'; -import { extractDataFromIdentityInfo, IdentityDataType } from './identity'; -import { getTxPromise } from './utils'; - -export const getTotalNumberOfNominators = async ( - rpcEndpoint: string, - validatorAddress: string -): Promise => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const nominators = await api.query.staking.nominators.entries(); - - const totalNominators = nominators.filter(([, nominatorData]) => { - if (nominatorData.isNone) { - return false; - } - - const nominations = nominatorData.unwrap(); - - return ( - nominations.targets && - nominations.targets.some( - (target) => target.toString() === validatorAddress - ) - ); - }); - - return totalNominators.length; -}; +import { getApiPromise } from './api'; +import { getAccountInfo } from './identity'; export const getValidatorIdentityName = async ( rpcEndpoint: string, validatorAddress: string ): Promise => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const identityOpt = await api.query.identity.identityOf(validatorAddress); + const validatorAccountInfo = await getAccountInfo( + rpcEndpoint, + validatorAddress + ); - // If the identity is set, get the custom display name - // and use that as the name instead of the address. - if (identityOpt.isSome) { - const identity = identityOpt.unwrap(); - const info = identity[0].info; - const displayName = extractDataFromIdentityInfo( - info, - IdentityDataType.NAME - ); - - if (displayName !== null) { - return displayName; - } + if (validatorAccountInfo?.name) { + return validatorAccountInfo.name; } // Default the name to be the validator's address if the @@ -60,40 +23,10 @@ export const getValidatorCommission = async ( rpcEndpoint: string, validatorAddress: string ): Promise => { - const api = await getPolkadotApiPromise(rpcEndpoint); + const api = await getApiPromise(rpcEndpoint); const validatorPrefs = await api.query.staking.validators(validatorAddress); const commissionRate = validatorPrefs.commission.unwrap().toNumber(); const commission = commissionRate / 10_000_000; return commission.toString(); }; - -export const getMaxNominationQuota = async ( - rpcEndpoint: string -): Promise => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const maxNominations = api.query.staking.maxNominatorsCount; - - return parseInt(maxNominations.toString()); -}; - -export const nominateValidators = async ( - rpcEndpoint: string, - nominatorAddress: string, - validatorAddresses: string[] -): Promise => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const tx = api.tx.staking.nominate(validatorAddresses); - - return getTxPromise(nominatorAddress, tx); -}; - -export const stopNomination = async ( - rpcEndpoint: string, - nominatorAddress: string -) => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const tx = api.tx.staking.chill(); - - return getTxPromise(nominatorAddress, tx); -}; diff --git a/apps/tangle-dapp/utils/polkadot/payout.ts b/apps/tangle-dapp/utils/polkadot/payout.ts deleted file mode 100644 index 490143daeb..0000000000 --- a/apps/tangle-dapp/utils/polkadot/payout.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { AddressType } from '@webb-tools/dapp-config/types'; - -import { getPolkadotApiPromise } from './api'; -import { getTxPromise } from './utils'; - -export const payoutStakers = async ( - rpcEndpoint: string, - nominatorAddress: string, - validatorAddress: string, - era: number -): Promise => { - const api = await getPolkadotApiPromise(rpcEndpoint); - const tx = api.tx.staking.payoutStakers(validatorAddress, era); - - return getTxPromise(nominatorAddress, tx); -}; - -export const batchPayoutStakers = async ( - rpcEndpoint: string, - nominatorAddress: string, - validatorEraPairs: { validatorAddress: string; era: string }[] -): Promise => { - const api = await getPolkadotApiPromise(rpcEndpoint); - - const tx = api.tx.utility.batch( - validatorEraPairs.map(({ validatorAddress, era }) => - api.tx.staking.payoutStakers(validatorAddress, Number(era)) - ) - ); - - return getTxPromise(nominatorAddress, tx); -}; diff --git a/apps/tangle-dapp/utils/polkadot/services.ts b/apps/tangle-dapp/utils/polkadot/services.ts new file mode 100644 index 0000000000..8d419c45a2 --- /dev/null +++ b/apps/tangle-dapp/utils/polkadot/services.ts @@ -0,0 +1,81 @@ +import { Option } from '@polkadot/types'; +import { TanglePrimitivesJobsJobInfo } from '@polkadot/types/lookup'; +import { BN } from '@polkadot/util'; + +import { + TANGLE_TO_SERVICE_TYPE_TSS_MAP, + TANGLE_TO_SERVICE_TYPE_ZK_SAAS_MAP, +} from '../../constants'; +import { Service } from '../../types'; + +/** + * Extracts service details from job information data. + * @param id - The ID of the service. + * @param jobInfoData - The job information data. + * @returns The extracted service details or null if the job information data is empty or not phase 1 jobs + */ +export function extractServiceDetails( + id: string, + jobInfoData: Option +): Service | null { + if (!jobInfoData.isSome) { + return null; + } + + const jobInfo = jobInfoData.unwrap(); + + const jobType = jobInfo.jobType; + + if (jobType.isNone) { + return null; + } + + const expirationBlock = jobInfo.expiry; + const ttlBlock = jobInfo.ttl; + const fee = jobInfo.fee.toBn(); + + // Check for TSS phase 1 + if (jobType.isDkgtssPhaseOne) { + const jobDetails = jobType.asDkgtssPhaseOne; + const participants = jobDetails.participants.map((participant) => + participant.toString() + ); + const permittedCaller = jobDetails.permittedCaller.isSome + ? jobDetails.permittedCaller.unwrap().toString() + : undefined; + + return { + id, + serviceType: TANGLE_TO_SERVICE_TYPE_TSS_MAP[jobDetails.roleType.type], + participants, + threshold: jobDetails.threshold.toNumber(), + expirationBlock, + ttlBlock, + earnings: fee.div(new BN(participants.length)), + permittedCaller, + }; + } + + // Check for Zk-SaaS phase 1 + if (jobType.isZkSaaSPhaseOne) { + const jobDetails = jobType.asZkSaaSPhaseOne; + const participants = jobDetails.participants.map((participant) => + participant.toString() + ); + const permittedCaller = jobDetails.permittedCaller.isSome + ? jobDetails.permittedCaller.unwrap().toString() + : undefined; + return { + id, + serviceType: TANGLE_TO_SERVICE_TYPE_ZK_SAAS_MAP[jobDetails.roleType.type], + participants, + expirationBlock, + ttlBlock, + earnings: fee.div(new BN(participants.length)), + permittedCaller, + }; + } + + // Not a phase 1 job + return null; +} diff --git a/apps/tangle-dapp/utils/polkadot/tokens.ts b/apps/tangle-dapp/utils/polkadot/tokens.ts index ae153b8178..35af01cb6f 100644 --- a/apps/tangle-dapp/utils/polkadot/tokens.ts +++ b/apps/tangle-dapp/utils/polkadot/tokens.ts @@ -1,25 +1,19 @@ import { BN, formatBalance } from '@polkadot/util'; +import { ToBn } from '@polkadot/util/types'; import { TANGLE_TOKEN_DECIMALS } from '@webb-tools/dapp-config/constants/tangle'; -import { getPolkadotApiPromise } from './api'; +import { TokenSymbol } from '../../types'; export const formatTokenBalance = ( - balance: BN | bigint, - tokenSymbol?: string + balance: BN | bigint | ToBn, + tokenSymbol?: TokenSymbol, + options: Partial[1]> = {} ): string => { return formatBalance(balance, { decimals: TANGLE_TOKEN_DECIMALS, withZero: false, + forceUnit: '-', withUnit: tokenSymbol ?? false, + ...options, }); }; - -export const getNativeTokenSymbol = async (rpcEndpoint: string) => { - const api = await getPolkadotApiPromise(rpcEndpoint); - - const nativeTokenSymbol = (await api.rpc.system.properties()).tokenSymbol - .unwrap()[0] - .toString(); - - return nativeTokenSymbol; -}; diff --git a/apps/tangle-dapp/utils/polkadot/utils.ts b/apps/tangle-dapp/utils/polkadot/utils.ts deleted file mode 100644 index fc9988d3f8..0000000000 --- a/apps/tangle-dapp/utils/polkadot/utils.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { SubmittableExtrinsic } from '@polkadot/api/types'; -import type { ISubmittableResult } from '@polkadot/types/types'; -import type { HexString } from '@polkadot/util/types'; - -import { getInjector } from './api'; - -export const getTxPromise = async ( - address: string, - tx: SubmittableExtrinsic<'promise', ISubmittableResult> -): Promise => { - const injector = await getInjector(address); - - if (!injector) { - throw new Error('Failed to get Polkadot injector'); - } - - try { - const hash = await tx.signAndSend(address, { - signer: injector.signer, - // prevent txs having the same nonce - // https://polkadot.js.org/docs/api/cookbook/tx#how-do-i-take-the-pending-tx-pool-into-account-in-my-nonce - nonce: -1, - }); - - return hash.toHex(); - } catch (error) { - throw new Error( - typeof error === 'string' - ? `Error: ${error}` - : error instanceof Error - ? error.message - : 'Failed to get statement' - ); - } -}; diff --git a/apps/tangle-dapp/utils/getChartDataAreaColorByServiceType.ts b/apps/tangle-dapp/utils/restaking/getChartDataAreaColorByServiceType.ts similarity index 91% rename from apps/tangle-dapp/utils/getChartDataAreaColorByServiceType.ts rename to apps/tangle-dapp/utils/restaking/getChartDataAreaColorByServiceType.ts index 9ced704923..4e49da76a8 100644 --- a/apps/tangle-dapp/utils/getChartDataAreaColorByServiceType.ts +++ b/apps/tangle-dapp/utils/restaking/getChartDataAreaColorByServiceType.ts @@ -1,5 +1,5 @@ -import { ChartColor } from '../constants'; -import { RestakingService } from '../types'; +import { ChartColor } from '../../constants'; +import { RestakingService } from '../../types'; // TODO: Update this to match the actual service types. export default function getChartDataAreaColorByServiceType( diff --git a/apps/tangle-dapp/utils/getChipColorOfServiceType.ts b/apps/tangle-dapp/utils/restaking/getChipColorOfServiceType.ts similarity index 95% rename from apps/tangle-dapp/utils/getChipColorOfServiceType.ts rename to apps/tangle-dapp/utils/restaking/getChipColorOfServiceType.ts index 6962ae0534..41d5a8b35e 100644 --- a/apps/tangle-dapp/utils/getChipColorOfServiceType.ts +++ b/apps/tangle-dapp/utils/restaking/getChipColorOfServiceType.ts @@ -1,6 +1,6 @@ import type { ChipColors } from '@webb-tools/webb-ui-components'; -import { RestakingService } from '../types'; +import { RestakingService } from '../../types'; // TODO: Update this to match the actual service types. function getChipColorOfServiceType(serviceType: RestakingService): ChipColors { diff --git a/apps/tangle-dapp/utils/substrateRoleToServiceType.ts b/apps/tangle-dapp/utils/restaking/substrateRoleToServiceType.ts similarity index 90% rename from apps/tangle-dapp/utils/substrateRoleToServiceType.ts rename to apps/tangle-dapp/utils/restaking/substrateRoleToServiceType.ts index add7774ea5..af76ba4fe5 100644 --- a/apps/tangle-dapp/utils/substrateRoleToServiceType.ts +++ b/apps/tangle-dapp/utils/restaking/substrateRoleToServiceType.ts @@ -1,7 +1,7 @@ import { TanglePrimitivesRolesRoleType } from '@polkadot/types/lookup'; -import { TANGLE_TO_SERVICE_TYPE_TSS_MAP } from '../constants'; -import { RestakingService } from '../types'; +import { TANGLE_TO_SERVICE_TYPE_TSS_MAP } from '../../constants'; +import { RestakingService } from '../../types'; function substrateRoleToServiceType( role: TanglePrimitivesRolesRoleType diff --git a/apps/tangle-dapp/utils/staking/createEvmBatchCallArgs.ts b/apps/tangle-dapp/utils/staking/createEvmBatchCallArgs.ts new file mode 100644 index 0000000000..d93ecdee15 --- /dev/null +++ b/apps/tangle-dapp/utils/staking/createEvmBatchCallArgs.ts @@ -0,0 +1,17 @@ +import { + AbiBatchCallArgs, + AbiBatchCallData, +} from '../../hooks/useEvmPrecompileAbiCall'; + +function createEvmBatchCallArgs( + callData: AbiBatchCallData[] +): AbiBatchCallArgs { + return [ + callData.map((call) => call.to), + callData.map((call) => call.value), + callData.map((call) => call.callData), + callData.map((call) => call.gasLimit), + ]; +} + +export default createEvmBatchCallArgs; diff --git a/apps/tangle-dapp/utils/staking/createEvmBatchCallData.ts b/apps/tangle-dapp/utils/staking/createEvmBatchCallData.ts new file mode 100644 index 0000000000..59f390147f --- /dev/null +++ b/apps/tangle-dapp/utils/staking/createEvmBatchCallData.ts @@ -0,0 +1,38 @@ +import { encodeFunctionData } from 'viem'; + +import { + AbiFunctionName, + getPrecompileAbi, + getPrecompileAddress, + Precompile, +} from '../../constants/evmPrecompiles'; +import { AbiEncodeableValue } from '../../hooks/useEvmPrecompileAbiCall'; +import { + AbiBatchCallArgs, + AbiBatchCallData, +} from '../../hooks/useEvmPrecompileAbiCall'; + +function createEvmBatchCallData( + precompile: PrecompileT, + functionName: AbiFunctionName, + args: AbiEncodeableValue[] | AbiBatchCallArgs +): AbiBatchCallData { + const precompileAddress = getPrecompileAddress(precompile); + + // TODO: Add typing for `abi` and `functionNameAsString` + const abi: unknown[] = getPrecompileAbi(precompile); + const functionNameAsString: string = functionName; + + return { + to: precompileAddress, + value: 0, + gasLimit: 0, + callData: encodeFunctionData({ + abi, + functionName: functionNameAsString, + args, + }), + }; +} + +export default createEvmBatchCallData; diff --git a/apps/tangle-dapp/utils/staking/createNominee.ts b/apps/tangle-dapp/utils/staking/createNominee.ts new file mode 100644 index 0000000000..c9cb05423e --- /dev/null +++ b/apps/tangle-dapp/utils/staking/createNominee.ts @@ -0,0 +1,45 @@ +import { PalletStakingValidatorPrefs } from '@polkadot/types/lookup'; +import { BN, BN_ZERO } from '@polkadot/util'; + +import { Nominee } from '../../types'; + +// TODO: Simplify this down to the most essential/required parameters. +export type CreateNomineeOptions = { + address: string; + isActive: boolean; + identities: Map; + prefs: Map; + getExposure: (address: string) => + | { + own: BN; + total: BN; + nominatorCount: number; + } + | undefined; +}; + +const createNominee = (options: CreateNomineeOptions): Nominee => { + const identityName = + options.identities.get(options.address) ?? options.address; + + // TODO: Will it ever be unset if the nominee is a validator? + const commission = + options.prefs.get(options.address)?.commission.toBn() ?? BN_ZERO; + + const exposure = options.getExposure(options.address); + + // TODO: Will it ever be unset if the nominee is a validator? + const nominatorCount = exposure?.nominatorCount ?? 0; + + return { + address: options.address, + isActive: options.isActive, + identityName, + commission, + selfStakeAmount: exposure?.own ?? BN_ZERO, + totalStakeAmount: exposure?.total ?? BN_ZERO, + nominatorCount, + }; +}; + +export default createNominee; diff --git a/apps/tangle-dapp/utils/staking/createValidator.ts b/apps/tangle-dapp/utils/staking/createValidator.ts new file mode 100755 index 0000000000..f8721ae083 --- /dev/null +++ b/apps/tangle-dapp/utils/staking/createValidator.ts @@ -0,0 +1,72 @@ +import { Option, StorageKey, u64, Vec } from '@polkadot/types'; +import { + PalletRolesRestakingLedger, + TanglePrimitivesJobsJobInfo, + TanglePrimitivesRolesRoleType, +} from '@polkadot/types/lookup'; +import { Codec, ITuple } from '@polkadot/types/types'; +import { BN_ZERO } from '@polkadot/util'; + +import { Validator } from '../../types'; +import { getTotalRestakedFromRestakeRoleLedger } from '../polkadot'; +import createNominee, { CreateNomineeOptions } from './createNominee'; + +interface Options extends CreateNomineeOptions { + restakingLedgers: Map>; + jobs: Map>>>; + activeJobIds: + | [StorageKey<[TanglePrimitivesRolesRoleType, u64]>, Codec][] + | null; +} + +const createValidator = (options: Options): Validator => { + const nominator = createNominee(options); + const allLedgers = Array.from(options.restakingLedgers.values()); + + const ledger = allLedgers.find((ledgerOpt) => { + if (ledgerOpt.isNone) { + return false; + } + + const ledger = ledgerOpt.unwrap(); + + return options.address === ledger.stash.toString(); + }); + + const totalRestaked = + ledger !== undefined && ledger.isSome + ? getTotalRestakedFromRestakeRoleLedger(ledger) + : null; + + const jobs = options.jobs.get(options.address); + + const jobIds = + jobs === undefined || jobs.isNone + ? [] + : jobs.unwrap().map((jobIdAndType) => { + // TODO: Avoid converting this to a string. Keep it as a BN, then use `.some()` to check if it's in the array down below, instead of `.includes()`. + return jobIdAndType[1].toString(); + }); + + const activeServices = options.activeJobIds + ?.filter(([jobIdAndType]) => { + const jobId = jobIdAndType.args[1]; + + return jobIds.includes(jobId.toString()); + }) + .filter(([, jobData]) => { + // TODO: somehow jobData here has type Codec + const jobType = (jobData as Option).unwrap() + .jobType; + // services are only phase 1 jobs + return jobType?.isDkgtssPhaseOne || jobType?.isZkSaaSPhaseOne; + }); + + return { + ...nominator, + restakedAmount: totalRestaked ?? BN_ZERO, + activeServicesCount: activeServices?.length ?? 0, + }; +}; + +export default createValidator; diff --git a/apps/tangle-dapp/utils/staking/getEvmPayeeValue.ts b/apps/tangle-dapp/utils/staking/getEvmPayeeValue.ts new file mode 100644 index 0000000000..7825dee25d --- /dev/null +++ b/apps/tangle-dapp/utils/staking/getEvmPayeeValue.ts @@ -0,0 +1,22 @@ +import { StakingRewardsDestination } from '../../types'; + +export enum StakingEvmPayee { + STAKED = '0x0000000000000000000000000000000000000000000000000000000000000001', + STASH = '0x0000000000000000000000000000000000000000000000000000000000000002', +} + +export function getEvmPayeeValue( + rewardsDestination: StakingRewardsDestination +): StakingEvmPayee | null { + switch (rewardsDestination) { + case StakingRewardsDestination.STAKED: + return StakingEvmPayee.STAKED; + case StakingRewardsDestination.STASH: + return StakingEvmPayee.STASH; + // TODO: Are we missing adding all the EVM addresses for the other reward destinations? + default: + return null; + } +} + +export default getEvmPayeeValue; diff --git a/apps/tangle-dapp/utils/staking/getSubstratePayeeValue.ts b/apps/tangle-dapp/utils/staking/getSubstratePayeeValue.ts new file mode 100644 index 0000000000..c4b6bc31ac --- /dev/null +++ b/apps/tangle-dapp/utils/staking/getSubstratePayeeValue.ts @@ -0,0 +1,22 @@ +import { PalletStakingRewardDestination } from '@polkadot/types/lookup'; + +import { StakingRewardsDestination } from '../../types'; + +function getSubstratePayeeValue( + payee: StakingRewardsDestination +): PalletStakingRewardDestination['type'] { + switch (payee) { + case StakingRewardsDestination.CONTROLLER: + return 'Controller'; + case StakingRewardsDestination.STASH: + return 'Stash'; + case StakingRewardsDestination.STAKED: + return 'Staked'; + case StakingRewardsDestination.ACCOUNT: + return 'Account'; + case StakingRewardsDestination.NONE: + return 'None'; + } +} + +export default getSubstratePayeeValue; diff --git a/apps/tangle-dapp/utils/substrateToEvmAddress.ts b/apps/tangle-dapp/utils/toEvmAddress20.ts similarity index 59% rename from apps/tangle-dapp/utils/substrateToEvmAddress.ts rename to apps/tangle-dapp/utils/toEvmAddress20.ts index f73a54dd63..dffc851605 100644 --- a/apps/tangle-dapp/utils/substrateToEvmAddress.ts +++ b/apps/tangle-dapp/utils/toEvmAddress20.ts @@ -6,7 +6,7 @@ import assert from 'assert'; import { isEvmAddress } from './isEvmAddress'; /** - * Converts a Substrate address to an EVM address. + * Converts a Substrate address to a standard EVM address of 20 bytes. * * @remarks * If the address is neither an Ethereum nor a Substrate address, @@ -16,26 +16,18 @@ import { isEvmAddress } from './isEvmAddress'; * and not inverses. This means that if you convert a Substrate address * to an EVM address, you cannot convert it back to the **same** Substrate address. * - * @param address - The address to be converted, which can be either a Substrate + * @param substrateAddress - The address to be converted, which can be either a Substrate * or an EVM address. * @returns The converted EVM address. If the address is already an EVM address, * it will be returned as is. */ -export const substrateToEvmAddress = (address: string): AddressType => { - // TODO: This isn't actually returning the correct Substrate address type. - - assert( - isEvmAddress(address) || isAddress(address), - 'Address that is neither an EVM nor a Substrate address was provided (did you forget to validate an input address from the user?)' - ); - - // Nothing to do if it's already an EVM address. - if (isEvmAddress(address)) { - return address; +export const toEvmAddress20 = (substrateAddress: string): AddressType => { + if (!isAddress(substrateAddress)) { + throw new Error('Provided address is not a Substrate address'); } // EVM addresses are 20 bytes long. - const conversionResult = toHex(addressToEvm(address), 20); + const conversionResult = toHex(addressToEvm(substrateAddress), 20); assert( isEvmAddress(conversionResult), diff --git a/apps/tangle-dapp/utils/toEvmAddress32.ts b/apps/tangle-dapp/utils/toEvmAddress32.ts new file mode 100644 index 0000000000..823a68220f --- /dev/null +++ b/apps/tangle-dapp/utils/toEvmAddress32.ts @@ -0,0 +1,19 @@ +import { u8aToHex } from '@polkadot/util'; +import { decodeAddress, isAddress } from '@polkadot/util-crypto'; +import { AddressType } from '@webb-tools/dapp-config/types'; + +/** + * An EVM address that is 32 bytes long. + * + * Certain precompile functions require `bytes32` addresses instead + * of the usual 20-byte `address` type. + */ +const toEvmAddress32 = (substrateAddress: string): AddressType => { + if (!isAddress(substrateAddress)) { + throw new Error('Provided address is not a Substrate address'); + } + + return u8aToHex(decodeAddress(substrateAddress)); +}; + +export default toEvmAddress32; diff --git a/apps/tangle-dapp/utils/evmToSubstrateAddress.ts b/apps/tangle-dapp/utils/toSubstrateAddress.ts similarity index 94% rename from apps/tangle-dapp/utils/evmToSubstrateAddress.ts rename to apps/tangle-dapp/utils/toSubstrateAddress.ts index a4f768f75a..e9541d2ac3 100644 --- a/apps/tangle-dapp/utils/evmToSubstrateAddress.ts +++ b/apps/tangle-dapp/utils/toSubstrateAddress.ts @@ -18,7 +18,7 @@ import assert from 'assert'; * @returns The converted Substrate address. If the address is already a * Substrate address, it will be returned as is. */ -export const evmToSubstrateAddress = (address: string) => { +export const toSubstrateAddress = (address: string) => { // If it's an EVM address, convert it to a Substrate address. if (isEthereumAddress(address)) { return evmToAddress(address); diff --git a/apps/zk-explorer/README.md b/apps/zk-explorer/README.md index 2657d40814..80612e39e0 100644 --- a/apps/zk-explorer/README.md +++ b/apps/zk-explorer/README.md @@ -13,3 +13,37 @@ Platform for discovering and learning about zero-knowledge proof projects and circuits, featuring detailed project insights, filtering options, and more.

    + +## Run ZK Explorer + +Once the development environment is set up, you may proceed to install the required dependencies and run the dapp locally. + +1. Clone this repo + + ```bash + git clone git@github.com:webb-tools/webb-dapp.git + ``` + +2. Install dependencies by `yarn` + + ```bash + yarn install + ``` + +3. Start the dApp by the following command: + + ```bash + yarn nx serve zk-explorer + ``` + +Visit `http://localhost:4200/` to see the ZK Explorer app! + +Happy hacking! + +

    Need help?

    + +If you need help or you want to additional information please: + +- Refer to the [Webb Official Documentation](https://docs.webb.tools/). +- If you have feedback on how to improve the Webb Dapp interface or you have a specific question? Check out the [Webb Dapp Feedback Discussion](https://github.com/webb-tools/feedback/discussions/categories/webb-dapp-feedback). +- If you found a bug please [open an issue](https://github.com/webb-tools/webb-dapp/issues/new/choose) or [join our Discord](https://discord.gg/jUDeFpggrR) server to report it. diff --git a/apps/zk-explorer/containers/ProjectDetailTabs/Circuits/client/index.tsx b/apps/zk-explorer/containers/ProjectDetailTabs/Circuits/client/index.tsx index 6d914a8284..7da4814971 100644 --- a/apps/zk-explorer/containers/ProjectDetailTabs/Circuits/client/index.tsx +++ b/apps/zk-explorer/containers/ProjectDetailTabs/Circuits/client/index.tsx @@ -76,15 +76,7 @@ const CircuitsClient: FC = ({ fileTree }) => { { - if (!activeFileData?.fetchUrl) throw new Error('No fetchUrl'); - const res = await fetch(activeFileData.fetchUrl); - if (res.ok) { - const code = await res.text(); - return code; - } - throw new Error('Cannot load file'); - }} + code="contract A {}" language={activeFileData?.language} isInNextProject /> diff --git a/libs/api-provider-environment/src/transaction/utils/getExplorerURI.ts b/libs/api-provider-environment/src/transaction/utils/getExplorerURI.ts index 8f647c7a82..591caabedd 100644 --- a/libs/api-provider-environment/src/transaction/utils/getExplorerURI.ts +++ b/libs/api-provider-environment/src/transaction/utils/getExplorerURI.ts @@ -16,32 +16,30 @@ export type ExplorerVariant = 'tx' | 'address'; export const getExplorerURI = ( explorerUri: string, - addOrTxHash: string, + pathOrTxHash: string, variant: ExplorerVariant, txProviderType: WebbProviderType ): URL => { switch (txProviderType) { case 'web3': - return new URL(`${variant}/${addOrTxHash}`, explorerUri); + return new URL(`${variant}/${pathOrTxHash}`, explorerUri); case 'polkadot': { const path = variant === 'tx' - ? `#/extrinsics/${addOrTxHash}` + ? `#/extrinsics/${pathOrTxHash}` : `#/accounts/${ // encode address for all available substrate chains typeof substrateExplorerAndChainIdMap[explorerUri] === 'number' ? encodeAddress( - addOrTxHash, + pathOrTxHash, substrateExplorerAndChainIdMap[explorerUri] ) - : addOrTxHash + : pathOrTxHash }`; - return new URL(`${path}`, explorerUri); - } - default: - return new URL(''); + return new URL(path, explorerUri); + } } }; diff --git a/libs/dapp-config/src/chains/evm/index.tsx b/libs/dapp-config/src/chains/evm/index.tsx index 8544bf0856..b62ea5cc36 100644 --- a/libs/dapp-config/src/chains/evm/index.tsx +++ b/libs/dapp-config/src/chains/evm/index.tsx @@ -258,10 +258,10 @@ export const chainsConfig: Record = { nativeCurrency: DEFAULT_EVM_CURRENCY, rpcUrls: { default: { - http: [`http://127.0.0.1:${EVMChainId.HermesLocalnet}`], + http: [`http://127.0.0.1:5004`], }, public: { - http: [`http://127.0.0.1:${EVMChainId.HermesLocalnet}`], + http: [`http://127.0.0.1:5004`], }, }, env: ['development'], @@ -284,10 +284,10 @@ export const chainsConfig: Record = { nativeCurrency: DEFAULT_EVM_CURRENCY, rpcUrls: { default: { - http: [`http://127.0.0.1:${EVMChainId.AthenaLocalnet}`], + http: [`http://127.0.0.1:5005`], }, public: { - http: [`http://127.0.0.1:${EVMChainId.AthenaLocalnet}`], + http: [`http://127.0.0.1:5005`], }, }, env: ['development'], @@ -310,10 +310,10 @@ export const chainsConfig: Record = { nativeCurrency: DEFAULT_EVM_CURRENCY, rpcUrls: { default: { - http: [`http://127.0.0.1:${EVMChainId.DemeterLocalnet}`], + http: [`http://127.0.0.1:5006`], }, public: { - http: [`http://127.0.0.1:${EVMChainId.DemeterLocalnet}`], + http: [`http://127.0.0.1:5006`], }, }, env: ['development'], diff --git a/libs/dapp-config/src/constants/tangle.ts b/libs/dapp-config/src/constants/tangle.ts index f8fb7f2f67..81df7903fa 100644 --- a/libs/dapp-config/src/constants/tangle.ts +++ b/libs/dapp-config/src/constants/tangle.ts @@ -1,3 +1,5 @@ +import type { StakingQueryFlags } from '@polkadot/api-derive/staking/types'; + // MAINNET export const TANGLE_MAINNET_WS_RPC_ENDPOINT = 'wss://rpc.tangle.tools'; export const TANGLE_MAINNET_HTTP_RPC_ENDPOINT = 'https://rpc.tangle.tools'; @@ -22,9 +24,34 @@ export const TANGLE_LOCAL_HTTP_RPC_ENDPOINT = 'http://127.0.0.1:9944'; // Note: there is no official explorer for the local dev network, using Polkadot.{js} dashboard export const TANGLE_LOCAL_NATIVE_EXPLORER_URL = `https://polkadot.js.org/apps/?rpc=${TANGLE_TESTNET_WS_RPC_ENDPOINT}#/explorer`; +export const TANGLE_MAINET_SS58_PREFIX = 5845; +export const TANGLE_TESTNET_SS58_PREFIX = 5845; +export const TANGLE_LOCAL_SS58_PREFIX = 42; + // Note that the chain decimal count is usually constant, and set when // the blockchain is deployed. It could be technically changed due to // governance decisions and subsequent runtime upgrades, but that would // be exceptionally rare, so it is best to assume that it remains constant // here. Regardless, it can easily be changed here in the future if need be. export const TANGLE_TOKEN_DECIMALS = 18; + +/** + * Follow the Polkadot Apps UI's default flags for elected info. + * @see https://github.com/polkadot-js/apps/blob/3d799b04bca0b2aa50b8ce54ab6a3436ae609890/packages/page-staking/src/useSortedTargets.ts#L41 + */ +export const DEFAULT_FLAGS_ELECTED = { + withClaimedRewardsEras: false, + withController: true, + withExposure: true, + withExposureMeta: true, + withPrefs: true, +} as const satisfies StakingQueryFlags; + +/** + * Follow the Polkadot Apps UI's default flags for waiting info. + * @see https://github.com/polkadot-js/apps/blob/3d799b04bca0b2aa50b8ce54ab6a3436ae609890/packages/page-staking/src/useSortedTargets.ts#L42 + */ +export const DEFAULT_FLAGS_WAITING = { + withController: true, + withPrefs: true, +} as const satisfies StakingQueryFlags; diff --git a/libs/dapp-types/src/EVMChainId.ts b/libs/dapp-types/src/EVMChainId.ts index 16edfd8440..03ab9cd06f 100644 --- a/libs/dapp-types/src/EVMChainId.ts +++ b/libs/dapp-types/src/EVMChainId.ts @@ -22,9 +22,9 @@ export enum EVMChainId { TangleMainnetEVM = 5845, /** Local EVM */ - HermesLocalnet = 5001, - AthenaLocalnet = 5002, - DemeterLocalnet = 5003, + HermesLocalnet = 3884533462, + AthenaLocalnet = 3884533461, + DemeterLocalnet = 3884533463, } export default EVMChainId; diff --git a/libs/icons/src/TangleIcon.tsx b/libs/icons/src/TangleIcon.tsx index 2c4a83b033..8a42e2618a 100644 --- a/libs/icons/src/TangleIcon.tsx +++ b/libs/icons/src/TangleIcon.tsx @@ -1,13 +1,7 @@ -import { randNumber } from '@ngneat/falso'; import { createIcon } from './create-icon'; import { IconBase } from './types'; export const TangleIcon = (props: IconBase) => { - // TODO: This is causing a warning on the console: "Prop `fill` did not match. Server: "url(#paint0_linear_X)" Client: "url(#paint0_linear_Y)". Likely caused by the fact that a new ID is generated on each render, and the server-rendered HTML is not updated with the new ID. Why not use a static ID such as 'tangle-icon' here? - // non-unique ids problem with svg: https://stackoverflow.com/a/55846525 - // create id for each svg items in case there are multiple icons appear at the same time in html - const paintId = randNumber().toString(); - return createIcon({ ...props, viewBox: '0 0 32 28', @@ -15,17 +9,17 @@ export const TangleIcon = (props: IconBase) => { , { = ({ - getCodeFileFnc, + code, + isLoading, + error, language, + fetchCodeFnc, isInNextProject, className, }) => { - const [code, setCode] = useState(null); - const [isLoadingCode, setIsLoadingCode] = useState(false); - const [error, setError] = useState(null); - const useDarkMode = useMemo( () => (isInNextProject ? useNextDarkMode : useNormalDarkMode), [isInNextProject] ); const [isDarkMode] = useDarkMode(); - const fetchCodeFile = useCallback(async () => { - setIsLoadingCode(true); - try { - const code = await getCodeFileFnc(); - setCode(code); - } catch (e) { - if (e instanceof Error) { - setError(e); - notificationApi({ - variant: 'error', - message: 'Cannot load file', - }); - } - } finally { - setIsLoadingCode(false); - } - }, [getCodeFileFnc]); - - useEffect(() => { - fetchCodeFile(); - }, [fetchCodeFile]); - - if (isLoadingCode) { + if (isLoading) { return (
    @@ -64,7 +41,7 @@ const CodeFile: FC = ({ ); } - if (!isLoadingCode && error) { + if (!isLoading && error) { return (
    @@ -77,13 +54,15 @@ const CodeFile: FC = ({ Error when loading file
    - + {fetchCodeFnc && ( + + )}
    ); @@ -91,7 +70,7 @@ const CodeFile: FC = ({ return (
    - {!isLoadingCode && !error && code && ( + {!isLoading && !error && code && ( Promise; + code: string; + + /** + * Loading state (optional) + */ + isLoading?: boolean; + + /** + * Error when loading code (optional) + */ + error?: Error | null; + + /** + * The function to fetch the source code (optional) + */ + fetchCodeFnc?: () => Promise; + /** * The programming language of the code file (optional) */ diff --git a/libs/webb-ui-components/src/components/Dropdown/DropdownBody.tsx b/libs/webb-ui-components/src/components/Dropdown/DropdownBody.tsx index 028741cef5..e331291191 100644 --- a/libs/webb-ui-components/src/components/Dropdown/DropdownBody.tsx +++ b/libs/webb-ui-components/src/components/Dropdown/DropdownBody.tsx @@ -18,12 +18,13 @@ export const DropdownBody = forwardRef( className={twMerge( cx( 'radix-side-top:animate-slide-up radix-side-bottom:animate-slide-down', - 'min-w-[176px] shadow-md overflow-hidden webb-shadow-md', + 'min-w-[176px] shadow-md overflow-x-hidden overflow-y-auto webb-shadow-md', size === 'md' ? 'rounded-b-lg border border-t-0' : 'rounded-lg border', 'border-mono-80 dark:border-mono-120', - 'bg-mono-0 dark:bg-mono-200' + 'bg-mono-0 dark:bg-mono-200', + 'max-h-[var(--radix-dropdown-menu-content-max-height)]' ), className )} diff --git a/libs/webb-ui-components/src/components/MenuItem/MenuItem.tsx b/libs/webb-ui-components/src/components/MenuItem/MenuItem.tsx index b38f64cc8d..993de062a6 100644 --- a/libs/webb-ui-components/src/components/MenuItem/MenuItem.tsx +++ b/libs/webb-ui-components/src/components/MenuItem/MenuItem.tsx @@ -48,7 +48,7 @@ export const MenuItem = React.forwardRef( return ( - {startIcon &&
    {startIcon}
    } + {startIcon &&
    {startIcon}
    } {children} diff --git a/libs/webb-ui-components/src/components/SkeletonLoader/SkeletonLoader.tsx b/libs/webb-ui-components/src/components/SkeletonLoader/SkeletonLoader.tsx index 1afc26163f..064a0c41ea 100644 --- a/libs/webb-ui-components/src/components/SkeletonLoader/SkeletonLoader.tsx +++ b/libs/webb-ui-components/src/components/SkeletonLoader/SkeletonLoader.tsx @@ -2,7 +2,7 @@ import { type FC } from 'react'; import { twMerge } from 'tailwind-merge'; import { getSkeletonClassNamesBySize } from './utils'; -import { SkeletonLoaderProps } from './types'; +import type { SkeletonLoaderProps } from './types'; const SkeletonLoader: FC = ({ size = 'md', diff --git a/libs/webb-ui-components/src/components/SkeletonLoader/utils.ts b/libs/webb-ui-components/src/components/SkeletonLoader/utils.ts index 8d773df4f3..2b7ed094f2 100644 --- a/libs/webb-ui-components/src/components/SkeletonLoader/utils.ts +++ b/libs/webb-ui-components/src/components/SkeletonLoader/utils.ts @@ -1,4 +1,4 @@ -import { SkeletonSize } from './types'; +import type { SkeletonSize } from './types'; /** * Get the icon size in pixel based on text diff --git a/libs/webb-ui-components/src/components/Table/TData.tsx b/libs/webb-ui-components/src/components/Table/TData.tsx index 5819a5f2b0..33df5a0cd2 100644 --- a/libs/webb-ui-components/src/components/Table/TData.tsx +++ b/libs/webb-ui-components/src/components/Table/TData.tsx @@ -1,5 +1,5 @@ import cx from 'classnames'; -import { forwardRef } from 'react'; +import { forwardRef, memo } from 'react'; import { twMerge } from 'tailwind-merge'; import { TDataProps } from './types'; @@ -29,3 +29,5 @@ export const TData = forwardRef( ); } ); + +export const TDataMemo = memo(TData); diff --git a/libs/webb-ui-components/src/components/Table/THeader.tsx b/libs/webb-ui-components/src/components/Table/THeader.tsx index 73a49b1e4f..a866a4c52f 100644 --- a/libs/webb-ui-components/src/components/Table/THeader.tsx +++ b/libs/webb-ui-components/src/components/Table/THeader.tsx @@ -1,4 +1,4 @@ -import { forwardRef } from 'react'; +import { forwardRef, memo } from 'react'; import { twMerge } from 'tailwind-merge'; import { THeaderProps } from './types'; @@ -22,3 +22,5 @@ export const THeader = forwardRef( ); } ); + +export const THeaderMemo = memo(THeader); diff --git a/libs/webb-ui-components/src/components/Table/Table.tsx b/libs/webb-ui-components/src/components/Table/Table.tsx index 03d7082c50..7ebd089e7d 100644 --- a/libs/webb-ui-components/src/components/Table/Table.tsx +++ b/libs/webb-ui-components/src/components/Table/Table.tsx @@ -3,8 +3,8 @@ import React, { useCallback } from 'react'; import { twMerge } from 'tailwind-merge'; import { Pagination } from '../Pagination'; -import { TData } from './TData'; -import { THeader } from './THeader'; +import { TDataMemo as TData } from './TData'; +import { THeaderMemo as THeader } from './THeader'; import { TableProps } from './types'; export const Table = ({ diff --git a/libs/webb-ui-components/src/components/Table/types.ts b/libs/webb-ui-components/src/components/Table/types.ts index 2b6b01ad29..1b5e255e19 100644 --- a/libs/webb-ui-components/src/components/Table/types.ts +++ b/libs/webb-ui-components/src/components/Table/types.ts @@ -1,4 +1,4 @@ -import { useReactTable, type Row, type RowData } from '@tanstack/react-table'; +import type { Row, RowData, useReactTable } from '@tanstack/react-table'; import type { IWebbComponentBase, PropsOf, diff --git a/libs/webb-ui-components/src/components/TableAndChartTabs/TableAndChartTabs.tsx b/libs/webb-ui-components/src/components/TableAndChartTabs/TableAndChartTabs.tsx index 4232dab218..3c9461eaf9 100644 --- a/libs/webb-ui-components/src/components/TableAndChartTabs/TableAndChartTabs.tsx +++ b/libs/webb-ui-components/src/components/TableAndChartTabs/TableAndChartTabs.tsx @@ -44,7 +44,7 @@ export const TableAndChartTabs: FC = ({ > {tab} diff --git a/libs/webb-ui-components/src/components/ThemeToggle/ThemeToggle.tsx b/libs/webb-ui-components/src/components/ThemeToggle/ThemeToggle.tsx index feb7907f67..c1dd0b7c94 100644 --- a/libs/webb-ui-components/src/components/ThemeToggle/ThemeToggle.tsx +++ b/libs/webb-ui-components/src/components/ThemeToggle/ThemeToggle.tsx @@ -48,10 +48,10 @@ export const ThemeToggle: FC = ({ className={cx( 'relative inline-block w-14 h-8 align-middle', 'select-none transition duration-200 ease-in rounded-full', - '[&_*]:cursor-pointer', + '[&_*]:cursor-pointer shadow-md', { - 'bg-mono-200': isDarkMode, - 'bg-blue-10': !isDarkMode, + 'bg-mono-120': isDarkMode, + 'bg-mono-60': !isDarkMode, } )} onClick={(eve) => { @@ -78,14 +78,14 @@ export const ThemeToggle: FC = ({ className={cx( 'absolute inset-y-0 left-0 flex items-center transition-transform duration-200 ease-in', { - 'translate-x-full': !isDarkMode, + 'translate-x-full': isDarkMode, } )} > {isDarkMode ? ( - - ) : ( + ) : ( + )}
    diff --git a/libs/webb-ui-components/src/components/buttons/ChainButton.tsx b/libs/webb-ui-components/src/components/buttons/ChainButton.tsx deleted file mode 100644 index 475f2eb765..0000000000 --- a/libs/webb-ui-components/src/components/buttons/ChainButton.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { ChainIcon, ChevronDown } from '@webb-tools/icons'; -import { getFlexBasic } from '@webb-tools/icons/utils'; -import cx from 'classnames'; -import { forwardRef, useMemo } from 'react'; -import { twMerge } from 'tailwind-merge'; -import { ChainButtonProps } from './types'; - -const ChainButton = forwardRef( - ( - { - className, - chain, - status, - textClassname, - disabled, - placeholder = 'Select Chain', - ...props - }, - ref - ) => { - const textClsx = useMemo(() => { - return twMerge('font-bold', textClassname); - }, [textClassname]); - - return ( - - ); - } -); - -ChainButton.displayName = 'ChainButton'; - -export default ChainButton; diff --git a/libs/webb-ui-components/src/components/buttons/ChainOrTokenButton.tsx b/libs/webb-ui-components/src/components/buttons/ChainOrTokenButton.tsx new file mode 100644 index 0000000000..f36f577fb9 --- /dev/null +++ b/libs/webb-ui-components/src/components/buttons/ChainOrTokenButton.tsx @@ -0,0 +1,73 @@ +import { ChainIcon, ChevronDown, TokenIcon } from '@webb-tools/icons'; +import { getFlexBasic } from '@webb-tools/icons/utils'; +import cx from 'classnames'; +import { forwardRef, useMemo } from 'react'; +import { twMerge } from 'tailwind-merge'; +import { ChainOrTokenButtonProps } from './types'; + +const ChainOrTokenButton = forwardRef< + HTMLButtonElement, + ChainOrTokenButtonProps +>( + ( + { + className, + value, + status, + textClassName, + disabled, + placeholder = 'Select Chain', + iconType, + ...props + }, + ref + ) => { + const textClsx = useMemo(() => { + return twMerge('font-bold', textClassName); + }, [textClassName]); + + const IconCmp = useMemo(() => { + return iconType === 'chain' ? ChainIcon : TokenIcon; + }, [iconType]); + + return ( + + ); + } +); + +ChainOrTokenButton.displayName = 'ChainOrTokenButton'; + +export default ChainOrTokenButton; diff --git a/libs/webb-ui-components/src/components/buttons/index.ts b/libs/webb-ui-components/src/components/buttons/index.ts index a20321d411..8c6b2966af 100644 --- a/libs/webb-ui-components/src/components/buttons/index.ts +++ b/libs/webb-ui-components/src/components/buttons/index.ts @@ -1,5 +1,5 @@ export { default as Button } from './Button'; -export { default as ChainButton } from './ChainButton'; +export { default as ChainOrTokenButton } from './ChainOrTokenButton'; export { default as IconButton } from './IconButton'; export { default as LoadingPill } from './LoadingPill'; export { default as WalletButton } from './WalletButton'; diff --git a/libs/webb-ui-components/src/components/buttons/types.ts b/libs/webb-ui-components/src/components/buttons/types.ts index 302a1e620d..94412e9515 100644 --- a/libs/webb-ui-components/src/components/buttons/types.ts +++ b/libs/webb-ui-components/src/components/buttons/types.ts @@ -1,6 +1,5 @@ import { IconBase } from '@webb-tools/icons/types'; import { IWebbComponentBase, PropsOf, WebbComponentBase } from '../../types'; -import { ChainConfig } from '@webb-tools/dapp-config'; import { StatusIndicatorProps } from '@webb-tools/icons/StatusIndicator/types'; import { WalletConfig } from '@webb-tools/dapp-config/wallets/wallet-config.interface'; @@ -170,38 +169,43 @@ export type ButtonClassNames = { }; /** - * The ChainButton component props + * The ChainOrTokenButtonProps component props */ -export type ChainButtonProps = PropsOf<'button'> & { +export type ChainOrTokenButtonProps = PropsOf<'button'> & { /** - * The chain to display in the button + * The text to display in the button */ - chain?: ChainConfig; + value?: string; /** - * The placeholder to display when the chain is not available + * The placeholder to display when the value is not set */ placeholder?: string; /** - * The status of the chain + * The status of the button */ status?: StatusIndicatorProps['variant']; /** - * The classname of the icon + * The className of the icon + */ + iconClassName?: string; + + /** + * The className of the chain name */ - iconClassname?: string; + textClassName?: string; /** - * The classname of the chain name + * The className of the dropdown icon */ - textClassname?: string; + dropdownClassName?: string; /** - * The classname of the dropdown icon + * The icon's type */ - dropdownClassname?: string; + iconType: 'chain' | 'token'; }; /** diff --git a/libs/webb-ui-components/src/constants/index.ts b/libs/webb-ui-components/src/constants/index.ts index bee3a9a2b6..f0da68badc 100644 --- a/libs/webb-ui-components/src/constants/index.ts +++ b/libs/webb-ui-components/src/constants/index.ts @@ -42,6 +42,7 @@ export const TANGLE_MKT_URL = 'https://tangle.tools'; export const TANGLE_PRESS_KIT_URL = 'https://www.tangle.tools/press-kit'; export const TANGLE_DOCS_URL = 'https://docs.tangle.tools/docs/'; export const TANGLE_GITHUB_URL = 'https://github.com/webb-tools/tangle'; + export const WEBB_DOCS_URL = 'https://docs.webb.tools'; export const WEBB_BLOG_URL = 'https://blog.webb.tools'; export const WEBB_TANGLE_DOCS_STAKING_URL = @@ -187,6 +188,15 @@ export const SOCIAL_URLS_RECORD = { [key in (typeof WEBB_AVAILABLE_SOCIALS)[number]]: string; }; +export const TANGLE_SOCIAL_URLS_RECORD = { + commonwealth: 'https://commonwealth.im/tangle', + twitter: TANGLE_TWITTER_URL, + youTube: 'https://www.youtube.com/@TangleNetwork', + github: TANGLE_GITHUB_URL, +} as const satisfies Partial<{ + [key in (typeof WEBB_AVAILABLE_SOCIALS)[number]]: string; +}>; + export const SOCIAL_ICONS_RECORD = { telegram: TelegramFill, discord: DiscordFill, diff --git a/libs/webb-ui-components/src/constants/networks.ts b/libs/webb-ui-components/src/constants/networks.ts index 30b2bef4b8..53003b29c2 100644 --- a/libs/webb-ui-components/src/constants/networks.ts +++ b/libs/webb-ui-components/src/constants/networks.ts @@ -13,6 +13,9 @@ import { TANGLE_LOCAL_WS_RPC_ENDPOINT, TANGLE_LOCAL_HTTP_RPC_ENDPOINT, TANGLE_LOCAL_NATIVE_EXPLORER_URL, + TANGLE_MAINET_SS58_PREFIX, + TANGLE_TESTNET_SS58_PREFIX, + TANGLE_LOCAL_SS58_PREFIX, } from '@webb-tools/dapp-config/constants/tangle'; import { SUBQUERY_ENDPOINT } from '.'; @@ -31,7 +34,7 @@ export type Network = { chainId?: number; evmChainId?: number; name: string; - nativeTokenSymbol: string; + tokenSymbol: 'tTNT' | 'TNT'; nodeType: NetworkNodeType; subqueryEndpoint?: string; polkadotExplorerUrl: string; @@ -52,6 +55,7 @@ export type Network = { * client requests. */ httpRpcEndpoint?: string; + ss58Prefix?: number; }; export const TANGLE_MAINNET_NETWORK: Network = { @@ -59,12 +63,13 @@ export const TANGLE_MAINNET_NETWORK: Network = { chainId: SubstrateChainId.TangleMainnetNative, evmChainId: EVMChainId.TangleMainnetEVM, name: 'Tangle Mainnet', - nativeTokenSymbol: TANGLE_MAINNET_NATIVE_TOKEN_SYMBOL, + tokenSymbol: TANGLE_MAINNET_NATIVE_TOKEN_SYMBOL, nodeType: 'standalone', wsRpcEndpoint: TANGLE_MAINNET_WS_RPC_ENDPOINT, httpRpcEndpoint: TANGLE_MAINNET_HTTP_RPC_ENDPOINT, polkadotExplorerUrl: TANGLE_MAINNET_NATIVE_EXPLORER_URL, evmExplorerUrl: TANGLE_MAINNET_EVM_EXPLORER_URL, + ss58Prefix: TANGLE_MAINET_SS58_PREFIX, }; export const TANGLE_TESTNET_NATIVE_NETWORK: Network = { @@ -72,13 +77,14 @@ export const TANGLE_TESTNET_NATIVE_NETWORK: Network = { chainId: SubstrateChainId.TangleTestnetNative, evmChainId: EVMChainId.TangleTestnetEVM, name: 'Tangle Testnet', - nativeTokenSymbol: TANGLE_TESTNET_NATIVE_TOKEN_SYMBOL, + tokenSymbol: TANGLE_TESTNET_NATIVE_TOKEN_SYMBOL, nodeType: 'standalone', subqueryEndpoint: SUBQUERY_ENDPOINT, httpRpcEndpoint: TANGLE_TESTNET_HTTP_RPC_ENDPOINT, wsRpcEndpoint: TANGLE_TESTNET_WS_RPC_ENDPOINT, polkadotExplorerUrl: TANGLE_TESTNET_NATIVE_EXPLORER_URL, evmExplorerUrl: TANGLE_TESTNET_EVM_EXPLORER_URL, + ss58Prefix: TANGLE_TESTNET_SS58_PREFIX, }; /** @@ -89,12 +95,13 @@ export const TANGLE_LOCAL_DEV_NETWORK: Network = { chainId: SubstrateChainId.TangleTestnetNative, evmChainId: EVMChainId.TangleLocalEVM, name: 'Local endpoint', - nativeTokenSymbol: TANGLE_TESTNET_NATIVE_TOKEN_SYMBOL, + tokenSymbol: TANGLE_TESTNET_NATIVE_TOKEN_SYMBOL, nodeType: 'standalone', subqueryEndpoint: 'http://localhost:4000/graphql', wsRpcEndpoint: TANGLE_LOCAL_WS_RPC_ENDPOINT, httpRpcEndpoint: TANGLE_LOCAL_HTTP_RPC_ENDPOINT, polkadotExplorerUrl: TANGLE_LOCAL_NATIVE_EXPLORER_URL, + ss58Prefix: TANGLE_LOCAL_SS58_PREFIX, }; export const NETWORK_MAP: Partial> = { diff --git a/libs/webb-ui-components/src/css/fonts/BreezeSans-Bold.ttf b/libs/webb-ui-components/src/css/fonts/BreezeSans-Bold.ttf deleted file mode 100644 index cd41488fc1..0000000000 Binary files a/libs/webb-ui-components/src/css/fonts/BreezeSans-Bold.ttf and /dev/null differ diff --git a/libs/webb-ui-components/src/css/fonts/BreezeSans-Medium.ttf b/libs/webb-ui-components/src/css/fonts/BreezeSans-Medium.ttf deleted file mode 100644 index 8a258a3570..0000000000 Binary files a/libs/webb-ui-components/src/css/fonts/BreezeSans-Medium.ttf and /dev/null differ diff --git a/libs/webb-ui-components/src/css/fonts/BreezeSans-Regular.ttf b/libs/webb-ui-components/src/css/fonts/BreezeSans-Regular.ttf deleted file mode 100644 index 60e3e610e8..0000000000 Binary files a/libs/webb-ui-components/src/css/fonts/BreezeSans-Regular.ttf and /dev/null differ diff --git a/libs/webb-ui-components/src/css/typography.css b/libs/webb-ui-components/src/css/typography.css index 84c9e15b17..219f892864 100644 --- a/libs/webb-ui-components/src/css/typography.css +++ b/libs/webb-ui-components/src/css/typography.css @@ -1,88 +1,58 @@ /** Load fonts */ -/* Font Family Breeze Sans */ - +/* Font Family Cousine */ @font-face { - font-family: 'BreezeSans'; - src: url('fonts/BreezeSans-Regular.ttf') format('truetype'); - font-weight: normal; + font-family: 'Cousine'; + src: url('fonts/Cousine-Regular.ttf') format('truetype'); + font-weight: 400; font-style: normal; } @font-face { - font-family: 'BreezeSans'; - src: url('fonts/BreezeSans-Medium.ttf') format('truetype'); - font-weight: 600; + font-family: 'Cousine'; + src: url('fonts/Cousine-Bold.ttf') format('truetype'); + font-weight: 800; font-style: normal; } +/* Font Family Satoshi */ @font-face { - font-family: 'BreezeSans'; - src: url('fonts/BreezeSans-Bold.ttf') format('truetype'); - font-weight: 800; + font-family: 'Satoshi'; + src: url('fonts/Satoshi-Black.ttf') format('truetype'); + font-weight: 900; font-style: normal; } -/* Cousine */ - @font-face { - font-family: 'Cousine'; - src: url('fonts/Cousine-Regular.ttf') format('truetype'); - font-weight: 400; - font-style: normal; + font-family: 'Satoshi'; + src: url('fonts/Satoshi-BlackItalic.ttf') format('truetype'); + font-weight: 900; + font-style: italic; } @font-face { - font-family: 'Cousine'; - src: url('fonts/Cousine-Bold.ttf') format('truetype'); - font-weight: 800; + font-family: 'Satoshi'; + src: url('fonts/Satoshi-Bold.ttf') format('truetype'); + font-weight: 700; font-style: normal; } -/** Default font is BreezeSans use fonts */ -*:not(code, .mono1, .mono2) { - font-family: 'BreezeSans', -apple-system, BlinkMacSystemFont, Arial, - sans-serif; +@font-face { + font-family: 'Satoshi'; + src: url('fonts/Satoshi-BoldItalic.ttf') format('truetype'); + font-weight: 700; + font-style: italic; } -/* Applied Satoshi for all element when the html tag has `font-satoshi` classnames */ -html.font-satoshi *:not(code, .mono1, .mono2) { - /* Font Family Satoshi */ - @font-face { - font-family: 'Satoshi'; - src: url('fonts/Satoshi-Black.ttf') format('truetype'); - font-weight: 900; - font-style: normal; - } - - @font-face { - font-family: 'Satoshi'; - src: url('fonts/Satoshi-BlackItalic.ttf') format('truetype'); - font-weight: 900; - font-style: italic; - } - - @font-face { - font-family: 'Satoshi'; - src: url('fonts/Satoshi-Bold.ttf') format('truetype'); - font-weight: 700; - font-style: normal; - } - - @font-face { - font-family: 'Satoshi'; - src: url('fonts/Satoshi-BoldItalic.ttf') format('truetype'); - font-weight: 700; - font-style: italic; - } - - @font-face { - font-family: 'Satoshi'; - src: url('fonts/Satoshi-Medium.ttf') format('truetype'); - font-weight: 500; - font-style: normal; - } +@font-face { + font-family: 'Satoshi'; + src: url('fonts/Satoshi-Medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; +} +/** Default font is Satoshi use fonts */ +*:not(code, .mono1, .mono2) { font-family: 'Satoshi', -apple-system, BlinkMacSystemFont, Arial, sans-serif; } @@ -113,4 +83,4 @@ code, .recharts-cartesian-axis-tick-value tspan { font-family: 'Cousine', monospace !important; -} \ No newline at end of file +} diff --git a/libs/webb-ui-components/src/fonts/BreezeSans-Bold.ttf b/libs/webb-ui-components/src/fonts/BreezeSans-Bold.ttf deleted file mode 100644 index cd41488fc1..0000000000 Binary files a/libs/webb-ui-components/src/fonts/BreezeSans-Bold.ttf and /dev/null differ diff --git a/libs/webb-ui-components/src/fonts/BreezeSans-Medium.ttf b/libs/webb-ui-components/src/fonts/BreezeSans-Medium.ttf deleted file mode 100644 index 8a258a3570..0000000000 Binary files a/libs/webb-ui-components/src/fonts/BreezeSans-Medium.ttf and /dev/null differ diff --git a/libs/webb-ui-components/src/fonts/BreezeSans-Regular.ttf b/libs/webb-ui-components/src/fonts/BreezeSans-Regular.ttf deleted file mode 100644 index 60e3e610e8..0000000000 Binary files a/libs/webb-ui-components/src/fonts/BreezeSans-Regular.ttf and /dev/null differ diff --git a/libs/webb-ui-components/src/stories/molecules/ChainButton.stories.tsx b/libs/webb-ui-components/src/stories/molecules/ChainButton.stories.tsx deleted file mode 100644 index 395253922b..0000000000 --- a/libs/webb-ui-components/src/stories/molecules/ChainButton.stories.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import type { Meta, StoryObj } from '@storybook/react'; -import { chainsConfig } from '@webb-tools/dapp-config/chains/evm'; -import { PresetTypedChainId } from '@webb-tools/dapp-types/ChainId'; -import ChainButton from '../../components/buttons/ChainButton'; - -const meta: Meta = { - title: 'Design System/V2 (WIP)/Molecules/ChainButton', - component: ChainButton, -}; - -// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export -export default meta; - -type Story = StoryObj; - -// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args -export const Default: Story = { - render: () => ( - - ), -}; - -export const WithStatus: Story = { - render: () => ( - - ), -}; diff --git a/libs/webb-ui-components/src/stories/molecules/ChainOrTokenButton.stories.tsx b/libs/webb-ui-components/src/stories/molecules/ChainOrTokenButton.stories.tsx new file mode 100644 index 0000000000..737676e59e --- /dev/null +++ b/libs/webb-ui-components/src/stories/molecules/ChainOrTokenButton.stories.tsx @@ -0,0 +1,38 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { chainsConfig } from '@webb-tools/dapp-config/chains/evm'; +import { PresetTypedChainId } from '@webb-tools/dapp-types/ChainId'; +import ChainOrTokenButton from '../../components/buttons/ChainOrTokenButton'; + +const meta: Meta = { + title: 'Design System/V2 (WIP)/Molecules/ChainOrTokenButton', + component: ChainOrTokenButton, +}; + +// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export +export default meta; + +type Story = StoryObj; + +// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args +export const Chain: Story = { + render: () => ( + + ), +}; + +export const WithStatus: Story = { + render: () => ( + + ), +}; + +export const Token: Story = { + render: () => , +}; diff --git a/libs/webb-ui-components/src/stories/molecules/CodeFile.stories.tsx b/libs/webb-ui-components/src/stories/molecules/CodeFile.stories.tsx index e8ef445353..068b8e8ac2 100644 --- a/libs/webb-ui-components/src/stories/molecules/CodeFile.stories.tsx +++ b/libs/webb-ui-components/src/stories/molecules/CodeFile.stories.tsx @@ -10,23 +10,11 @@ export default meta; type Story = StoryObj; -const MOCK_FETCH_URL = - 'https://raw.githubusercontent.com/webb-tools/webb-dapp/develop/apps/zk-explorer/app/page.tsx'; - // More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args export const Default: Story = { render: () => (
    - { - const res = await fetch(MOCK_FETCH_URL); - const code = await res.text(); - return code; - }} - language="tsx" - isInNextProject={false} - /> - , +
    ), }; diff --git a/libs/webb-ui-components/src/tailwind.css b/libs/webb-ui-components/src/tailwind.css index 739322b7c4..91fbc98c9b 100644 --- a/libs/webb-ui-components/src/tailwind.css +++ b/libs/webb-ui-components/src/tailwind.css @@ -28,6 +28,8 @@ :root { --adjust-amount-width: 160px; + + --radix-dropdown-menu-content-max-height: 320px; } .bg-body-base { diff --git a/libs/webb-ui-components/src/typography/Typography/Typography.tsx b/libs/webb-ui-components/src/typography/Typography/Typography.tsx index 2f9e817a0e..929b5383ea 100644 --- a/libs/webb-ui-components/src/typography/Typography/Typography.tsx +++ b/libs/webb-ui-components/src/typography/Typography/Typography.tsx @@ -1,7 +1,7 @@ import React, { createElement, useMemo } from 'react'; import { twMerge } from 'tailwind-merge'; -import { WebbTypographyProps } from '../types'; +import type { WebbTypographyProps } from '../types'; import { getDefaultTextColor, getFontWeightClassName, diff --git a/libs/webb-ui-components/src/typography/types.ts b/libs/webb-ui-components/src/typography/types.ts index 44cc7be647..71adddceca 100644 --- a/libs/webb-ui-components/src/typography/types.ts +++ b/libs/webb-ui-components/src/typography/types.ts @@ -1,6 +1,6 @@ import { ReactHTML } from 'react'; -import { WebbComponentBase } from '../types'; +import type { WebbComponentBase } from '../types'; export type TypographyBaseProps = React.DetailedHTMLProps< React.HTMLAttributes, diff --git a/libs/webb-ui-components/src/utils/fraction.ts b/libs/webb-ui-components/src/utils/fraction.ts new file mode 100644 index 0000000000..4cf724a5d6 --- /dev/null +++ b/libs/webb-ui-components/src/utils/fraction.ts @@ -0,0 +1,13 @@ +import Decimal from 'decimal.js'; + +// Approximate the fraction p/q into a fraction. +export default function fraction( + p: number | string | bigint, + q: number | string | bigint +): number { + if (new Decimal(q.toString()).isZero()) { + return Number.NaN; + } + + return new Decimal(p.toString()).div(q.toString()).toNumber(); +} diff --git a/package.json b/package.json index ee56b7e128..9d6af13756 100644 --- a/package.json +++ b/package.json @@ -43,23 +43,23 @@ "libs/**" ], "resolutions": { - "@polkadot/api": "^10.11.2", - "@polkadot/api-augment": "^10.11.2", - "@polkadot/api-base": "^10.11.2", - "@polkadot/api-contract": "^10.11.2", - "@polkadot/api-derive": "^10.11.2", + "@polkadot/api": "^11.0.2", + "@polkadot/api-augment": "^11.0.2", + "@polkadot/api-base": "^11.0.2", + "@polkadot/api-contract": "^11.0.2", + "@polkadot/api-derive": "^11.0.2", "@polkadot/keyring": "^12.6.2", "@polkadot/networks": "^12.6.2", "@polkadot/phishing": "^0.22.1", - "@polkadot/rpc-augment": "^10.11.2", - "@polkadot/rpc-core": "^10.11.2", - "@polkadot/rpc-provider": "^10.11.2", - "@polkadot/types": "^10.11.2", - "@polkadot/types-augment": "^10.11.2", - "@polkadot/types-codec": "^10.11.2", - "@polkadot/types-create": "^10.11.2", - "@polkadot/types-known": "^10.11.2", - "@polkadot/types-support": "^10.11.2", + "@polkadot/rpc-augment": "^11.0.2", + "@polkadot/rpc-core": "^11.0.2", + "@polkadot/rpc-provider": "^11.0.2", + "@polkadot/types": "^11.0.2", + "@polkadot/types-augment": "^11.0.2", + "@polkadot/types-codec": "^11.0.2", + "@polkadot/types-create": "^11.0.2", + "@polkadot/types-known": "^11.0.2", + "@polkadot/types-support": "^11.0.2", "@polkadot/util": "^12.6.2", "@polkadot/util-crypto": "^12.6.2", "@polkadot/wasm-crypto": "^7.3.2", @@ -73,7 +73,7 @@ "@ngneat/falso": "^6.1.0", "@notionhq/client": "^2.2.3", "@octokit/request": "^8.1.1", - "@polkadot/api": "^10.11.2", + "@polkadot/api": "^11.0.2", "@polkadot/apps-config": "^0.133.1", "@polkadot/extension-dapp": "0.46.6", "@polkadot/extension-inject": "0.46.6", @@ -81,7 +81,7 @@ "@polkadot/networks": "^12.6.2", "@polkadot/react-hooks": "^0.39.1", "@polkadot/react-identicon": "^3.6.4", - "@polkadot/types": "^10.11.2", + "@polkadot/types": "^11.0.2", "@polkadot/util": "^12.6.2", "@polkadot/util-crypto": "^12.6.2", "@polkadot/wasm-crypto": "^7.3.2", @@ -103,6 +103,7 @@ "@radix-ui/react-tooltip": "^1.0.6", "@sentry/react": "^7.52.1", "@sentry/tracing": "^7.52.1", + "@shopify/react-web-worker": "^5.0.15", "@types/react-syntax-highlighter": "^15.5.11", "@webb-tools/proposals": "^1.0.8", "bn.js": "^5.2.1", @@ -232,7 +233,7 @@ "@webb-tools/contracts": "0.5.47", "@webb-tools/interfaces": "0.5.47", "@webb-tools/sdk-core": "0.1.4-127", - "@webb-tools/tangle-substrate-types": "^0.5.5", + "@webb-tools/tangle-substrate-types": "0.5.5", "@webb-tools/test-utils": "0.1.8", "@webb-tools/tokens": "1.0.8", "@webb-tools/utils": "1.0.11", @@ -307,7 +308,7 @@ "stream-http": "^3.2.0", "style-loader": "^3.3.1", "svelte2tsx": "0.6.20", - "tailwind-merge": "^1.6.0", + "tailwind-merge": "^2.3.0", "tailwind-scrollbar": "^3.0.4", "tailwindcss": "3.3.2", "tailwindcss-radix": "^2.5.0", @@ -323,4 +324,4 @@ "webpack-merge": "^5.8.0", "yargs": "^17.7.2" } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index bec11bc0a6..efa73eb6b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,6 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@acala-network/type-definitions@5.1.2": version "5.1.2" resolved "https://registry.yarnpkg.com/@acala-network/type-definitions/-/type-definitions-5.1.2.tgz#533b7e65e166f56607eb084a1efb44ca2bae6e98" @@ -21,9 +16,9 @@ uuid "^8.3.2" "@actions/http-client@^2.0.1": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.0.tgz#f8239f375be6185fcd07765efdcf0031ad5df1a0" - integrity sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg== + version "2.2.1" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.1.tgz#ed3fe7a5a6d317ac1d39886b0bb999ded229bb38" + integrity sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw== dependencies: tunnel "^0.0.6" undici "^5.25.4" @@ -44,17 +39,17 @@ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@apollo/client@^3.6.9": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.9.2.tgz#96edf2c212f828bad1ef3d84234fa473c5a27ff8" - integrity sha512-Zw9WvXjqhpbgkvAvnj52vstOWwM0iedKWtn1hSq1cODQyoe1CF2uFwMYFI7l56BrAY9CzLi6MQA0AhxpgJgvxw== + version "3.10.4" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.10.4.tgz#1abc488c79cf37dc63edf041aee6f9dc5aabc692" + integrity sha512-51gk0xOwN6Ls1EbTG5svFva1kdm2APHYTzmFhaAdvUQoJFDxfc0UwQgDxGptzH84vkPlo1qunY1FuboyF9LI3Q== dependencies: "@graphql-typed-document-node/core" "^3.1.1" "@wry/caches" "^1.0.0" @@ -64,7 +59,7 @@ hoist-non-react-statics "^3.3.2" optimism "^0.18.0" prop-types "^15.7.2" - rehackt "0.0.3" + rehackt "^0.1.0" response-iterator "^0.2.6" symbol-observable "^4.0.0" ts-invariant "^0.10.3" @@ -133,29 +128,13 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.4.0" -"@babel/cli@^7.20.7": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.23.9.tgz#06b3e76376ee53f14ac8ac422c884950c69e1b9e" - integrity sha512-vB1UXmGDNEhcf1jNAHKT9IlYk1R+hehVTLFlCLHBi8gfuHQGP6uRjgXVYU0EVlI/qwAWpstqkBdf2aez3/z/5Q== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - commander "^4.0.1" - convert-source-map "^2.0.0" - fs-readdir-recursive "^1.1.0" - glob "^7.2.0" - make-dir "^2.1.0" - slash "^2.0.0" - optionalDependencies: - "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" - chokidar "^3.4.0" - -"@babel/cli@^7.23.9": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.24.1.tgz#2e11e071e32fe82850b4fe514f56b9c9e1c44911" - integrity sha512-HbmrtxyFUr34LwAlV9jS+sSIjUp4FpdtIMGwgufY3AsxrIfsh/HxlMTywsONAZsU0RMYbZtbZFpUCrSGs7o0EA== +"@babel/cli@^7.20.7", "@babel/cli@^7.23.9": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.24.6.tgz#fac1fb099dff635efa1110882063c44a211cf18c" + integrity sha512-Sm/YhG/0REw9SKByFHDf4hkk7PYsjcsOyZgHGz1nvab4tUTQ9N4XVv+ykK0Y+VCJ3OshA/7EDyxnwCd8NEP/mQ== dependencies: "@jridgewell/trace-mapping" "^0.3.25" - commander "^4.0.1" + commander "^6.2.0" convert-source-map "^2.0.0" fs-readdir-recursive "^1.1.0" glob "^7.2.0" @@ -165,31 +144,18 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.4.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.6.tgz#ab88da19344445c3d8889af2216606d3329f3ef2" + integrity sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA== dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== - dependencies: - "@babel/highlight" "^7.24.2" + "@babel/highlight" "^7.24.6" picocolors "^1.0.0" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== - -"@babel/compat-data@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.1.tgz#31c1f66435f2a9c329bb5716a6d6186c516c3742" - integrity sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.6.tgz#b3600217688cabb26e25f8e467019e66d71b7ae2" + integrity sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ== "@babel/core@7.23.3": version "7.23.3" @@ -212,160 +178,83 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.20.12", "@babel/core@^7.21.3", "@babel/core@^7.22.0", "@babel/core@^7.22.9", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.7.5": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" - integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.17.9", "@babel/core@^7.20.12", "@babel/core@^7.21.3", "@babel/core@^7.22.0", "@babel/core@^7.22.9", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.23.9", "@babel/core@^7.24.0", "@babel/core@^7.24.4", "@babel/core@^7.7.5": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.6.tgz#8650e0e4b03589ebe886c4e4a60398db0a7ec787" + integrity sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.9" - "@babel/parser" "^7.23.9" - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/code-frame" "^7.24.6" + "@babel/generator" "^7.24.6" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helpers" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/template" "^7.24.6" + "@babel/traverse" "^7.24.6" + "@babel/types" "^7.24.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/core@^7.17.9", "@babel/core@^7.24.0": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.3.tgz#568864247ea10fbd4eff04dda1e05f9e2ea985c3" - integrity sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ== +"@babel/generator@^7.12.11", "@babel/generator@^7.14.0", "@babel/generator@^7.18.13", "@babel/generator@^7.22.9", "@babel/generator@^7.23.0", "@babel/generator@^7.23.3", "@babel/generator@^7.24.4", "@babel/generator@^7.24.6", "@babel/generator@^7.7.2": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.6.tgz#dfac82a228582a9d30c959fe50ad28951d4737a7" + integrity sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg== dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.1" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.1" - "@babel/parser" "^7.24.1" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/core@^7.23.9": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" - integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.4" - "@babel/parser" "^7.24.4" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.12.11", "@babel/generator@^7.14.0", "@babel/generator@^7.18.13", "@babel/generator@^7.22.9", "@babel/generator@^7.23.0", "@babel/generator@^7.23.3", "@babel/generator@^7.23.6", "@babel/generator@^7.7.2": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== - dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.1.tgz#e67e06f68568a4ebf194d1c6014235344f0476d0" - integrity sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A== - dependencies: - "@babel/types" "^7.24.0" + "@babel/types" "^7.24.6" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/generator@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" - integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== +"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5", "@babel/helper-annotate-as-pure@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz#517af93abc77924f9b2514c407bbef527fb8938d" + integrity sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg== dependencies: - "@babel/types" "^7.24.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" + "@babel/types" "^7.24.6" -"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.6.tgz#19e9089ee87b0d0928012c83961a8deef4b0223f" + integrity sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw== dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.24.6" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.5", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.5", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz#4a51d681f7680043d38e212715e2a7b1ad29cb51" + integrity sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg== dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" + "@babel/compat-data" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6", "@babel/helper-create-class-features-plugin@^7.23.9": - version "7.23.10" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea" - integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz#db58bf57137b623b916e24874ab7188d93d7f68f" - integrity sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.6.tgz#c50b86fa1c4ca9b7a890dc21884f097b6c4b5286" + integrity sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-member-expression-to-functions" "^7.24.6" + "@babel/helper-optimise-call-expression" "^7.24.6" + "@babel/helper-replace-supers" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz#47d382dec0d49e74ca1b6f7f3b81f5968022a3c8" + integrity sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.6" regexpu-core "^5.3.1" semver "^6.3.1" @@ -381,21 +270,10 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-define-polyfill-provider@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" - integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-define-polyfill-provider@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" - integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -403,255 +281,180 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz#ac7ad5517821641550f6698dd5468f8cef78620d" + integrity sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g== -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== +"@babel/helper-function-name@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz#cebdd063386fdb95d511d84b117e51fc68fec0c8" + integrity sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w== dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" + "@babel/template" "^7.24.6" + "@babel/types" "^7.24.6" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== +"@babel/helper-hoist-variables@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz#8a7ece8c26756826b6ffcdd0e3cf65de275af7f9" + integrity sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.6" -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== +"@babel/helper-member-expression-to-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.6.tgz#86084f3e0e4e2169a134754df3870bc7784db71e" + integrity sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.24.6" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4", "@babel/helper-module-imports@^7.22.5", "@babel/helper-module-imports@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz#65e54ffceed6a268dc4ce11f0433b82cfff57852" + integrity sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g== + dependencies: + "@babel/types" "^7.24.6" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.21.4", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== +"@babel/helper-module-transforms@^7.23.3", "@babel/helper-module-transforms@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz#22346ed9df44ce84dee850d7433c5b73fab1fe4e" + integrity sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA== dependencies: - "@babel/types" "^7.22.15" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-module-imports" "^7.24.6" + "@babel/helper-simple-access" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" + "@babel/helper-validator-identifier" "^7.24.6" -"@babel/helper-module-imports@^7.24.1", "@babel/helper-module-imports@^7.24.3": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" - integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== +"@babel/helper-optimise-call-expression@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.6.tgz#f7836e3ccca3dfa02f15d2bc8b794efe75a5256e" + integrity sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA== dependencies: - "@babel/types" "^7.24.0" + "@babel/types" "^7.24.6" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz#fa02a32410a15a6e8f8185bcbf608f10528d2a24" + integrity sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg== -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== +"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.6.tgz#c96ceb9846e877d806ce82a1521230ea7e0fc354" + integrity sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg== dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-wrap-function" "^7.24.6" -"@babel/helper-plugin-utils@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== - -"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== +"@babel/helper-replace-supers@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.6.tgz#3ea87405a2986a49ab052d10e540fe036d747c71" + integrity sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-member-expression-to-functions" "^7.24.6" + "@babel/helper-optimise-call-expression" "^7.24.6" -"@babel/helper-replace-supers@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== +"@babel/helper-simple-access@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz#1d6e04d468bba4fc963b4906f6dac6286cfedff1" + integrity sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/types" "^7.24.6" -"@babel/helper-replace-supers@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" - integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.6.tgz#c47e9b33b7ea50d1073e125ebc26661717cb7040" + integrity sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/types" "^7.24.6" -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== +"@babel/helper-split-export-declaration@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz#e830068f7ba8861c53b7421c284da30ae656d7a3" + integrity sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.6" -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== +"@babel/helper-string-parser@^7.22.5", "@babel/helper-string-parser@^7.24.1", "@babel/helper-string-parser@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz#28583c28b15f2a3339cfafafeaad42f9a0e828df" + integrity sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q== + +"@babel/helper-validator-identifier@^7.22.19", "@babel/helper-validator-identifier@^7.24.5", "@babel/helper-validator-identifier@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz#08bb6612b11bdec78f3feed3db196da682454a5e" + integrity sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw== + +"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0", "@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz#59d8e81c40b7d9109ab7e74457393442177f460a" + integrity sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ== + +"@babel/helper-wrap-function@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.6.tgz#c27af1006e310683fdc76b668a0a1f6003e36217" + integrity sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ== dependencies: - "@babel/types" "^7.22.5" + "@babel/helper-function-name" "^7.24.6" + "@babel/template" "^7.24.6" + "@babel/types" "^7.24.6" -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== +"@babel/helpers@^7.23.2", "@babel/helpers@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.6.tgz#cd124245299e494bd4e00edda0e4ea3545c2c176" + integrity sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA== dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5", "@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.22.19", "@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0", "@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.23.2", "@babel/helpers@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" - integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== - dependencies: - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" - -"@babel/helpers@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.1.tgz#183e44714b9eba36c3038e442516587b1e0a1a94" - integrity sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg== - dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" - -"@babel/helpers@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" - integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== - dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/highlight@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" - integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/template" "^7.24.6" + "@babel/types" "^7.24.6" + +"@babel/highlight@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.6.tgz#6d610c1ebd2c6e061cade0153bf69b0590b7b3df" + integrity sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ== + dependencies: + "@babel/helper-validator-identifier" "^7.24.6" chalk "^2.4.2" js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.8", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4", "@babel/parser@^7.21.8", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.3", "@babel/parser@^7.23.6", "@babel/parser@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" - integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.8", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4", "@babel/parser@^7.21.8", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.3", "@babel/parser@^7.23.6", "@babel/parser@^7.23.9", "@babel/parser@^7.24.4", "@babel/parser@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.6.tgz#5e030f440c3c6c78d195528c3b688b101a365328" + integrity sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q== -"@babel/parser@^7.24.0", "@babel/parser@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.1.tgz#1e416d3627393fab1cb5b0f2f1796a100ae9133a" - integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg== - -"@babel/parser@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" - integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz#283a74ef365b1e954cda6b2724c678a978215e88" + integrity sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" - integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz#f9f5ae4d6fb72f5950262cb6f0b2482c3bc684ef" + integrity sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz#ab9be6edfffa127bd5ec4317c76c5af0f8fc7e6c" + integrity sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" - integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" + "@babel/plugin-transform-optional-chaining" "^7.24.6" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" - integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz#0faf879249ec622d7f1c42eaebf7d11197401b2c" + integrity sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz#1181d9685984c91d657b8ddf14f0487a6bab2988" - integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-proposal-async-generator-functions@^7.20.7": version "7.20.7" @@ -681,13 +484,13 @@ "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.22.7": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.9.tgz#126d947d62ee72022ec46813983c6dd861456fa3" - integrity sha512-hJhBCb0+NnTWybvWq2WpbCYDOcflSbx0t+BYP65e5R9GVnukiDTi+on5bFkk4p7QGuv190H6KfNiV9Knf/3cZA== + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.6.tgz#20e7ed41c24d3f6a2d94af7b44ddd06d1f8a71a3" + integrity sha512-8DjR0/DzlBhz2SVi9a19/N2U5+C3y3rseXuyoKL9SP8vnbewscj1eHZtL6kpEn4UCuUmqEo0mvqyDYRFoN2gpA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.23.9" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-decorators" "^7.23.3" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-decorators" "^7.24.6" "@babel/plugin-proposal-dynamic-import@^7.18.6": version "7.18.6" @@ -824,12 +627,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz#a1d351d6c25bfdcf2e16f99b039101bc0ffcb0ca" - integrity sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA== +"@babel/plugin-syntax-decorators@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.6.tgz#904d53fc158e8fb9f0754c76071e0ce38fe318eb" + integrity sha512-gInH8LEqBp+wkwTVihCd/qf+4s28g81FZyvlIbAurHk9eSiItEKG7E0uNK2UdpgsD79aJVAW3R3c85h0YJ0jsw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -845,40 +648,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz#084564e0f3cc21ea6c70c44cff984a1c0509729a" - integrity sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA== +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.6.tgz#1102a710771326b8e2f0c85ac2aecb6f52eb601e" + integrity sha512-gNkksSdV8RbsCoHF9sjVYrHfYACMl/8U32UfUhJ9+84/ASXw8dlx+eHyyF0m6ncQJ9IBSxfuCkB36GJqYdXTOA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-syntax-import-assertions@^7.20.0", "@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== +"@babel/plugin-syntax-import-assertions@^7.20.0", "@babel/plugin-syntax-import-assertions@^7.23.3", "@babel/plugin-syntax-import-assertions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz#52521c1c1698fc2dd9cf88f7a4dd86d4d041b9e1" + integrity sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-syntax-import-assertions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz#db3aad724153a00eaac115a3fb898de544e34971" - integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== +"@babel/plugin-syntax-import-attributes@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz#12aba325534129584672920274fefa4dc2d5f68e" + integrity sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" - integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -894,19 +683,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-jsx@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" - integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.24.6", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz#bcca2964150437f88f65e3679e3d68762287b9c8" + integrity sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -964,19 +746,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.23.3", "@babel/plugin-syntax-typescript@^7.3.3", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== +"@babel/plugin-syntax-typescript@^7.24.6", "@babel/plugin-syntax-typescript@^7.3.3", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz#769daf2982d60308bc83d8936eaecb7582463c87" + integrity sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-typescript@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" - integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -986,701 +761,373 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.21.5", "@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.21.5", "@babel/plugin-transform-arrow-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz#93607d1ef5b81c70af174aff3532d57216367492" + integrity sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-arrow-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" - integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== +"@babel/plugin-transform-async-generator-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz#fa4a9e5c3a7f60f697ba36587b6c41b04f507d84" + integrity sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-async-generator-functions@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" - integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-remap-async-to-generator" "^7.24.6" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-generator-functions@^7.24.3": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" - integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== +"@babel/plugin-transform-async-to-generator@^7.20.7", "@babel/plugin-transform-async-to-generator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz#eb11434b11d73d8c0cf9f71a6f4f1e6ba441df35" + integrity sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/helper-module-imports" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-remap-async-to-generator" "^7.24.6" -"@babel/plugin-transform-async-to-generator@^7.20.7", "@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== +"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.18.6", "@babel/plugin-transform-block-scoped-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz#975555b5bfa9870b1218da536d1528735f1f8c56" + integrity sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-async-to-generator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" - integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.21.0", "@babel/plugin-transform-block-scoping@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz#a03ec8a4591c2b43cf7798bc633e698293fda179" + integrity sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w== dependencies: - "@babel/helper-module-imports" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.18.6", "@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== +"@babel/plugin-transform-class-properties@^7.22.5", "@babel/plugin-transform-class-properties@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz#d9f394e97e88ef905d5a1e5e7a16238621b7982e" + integrity sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-block-scoped-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" - integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== +"@babel/plugin-transform-class-static-block@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz#f43f29286f6f0dca33d18fd5033b817d6c3fa816" + integrity sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.21.0", "@babel/plugin-transform-block-scoping@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz#27af183d7f6dad890531256c7a45019df768ac1f" - integrity sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-class-properties@^7.22.5", "@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" - integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-class-static-block@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-class-static-block@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz#4e37efcca1d9f2fcb908d1bae8b56b4b6e9e1cb6" - integrity sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.21.0", "@babel/plugin-transform-classes@^7.23.8": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" - integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-classes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" - integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-split-export-declaration" "^7.22.6" +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.21.0", "@babel/plugin-transform-classes@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz#0cc198c02720d4eeb091004843477659c6b37977" + integrity sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-replace-supers" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.21.5", "@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" - -"@babel/plugin-transform-computed-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" - integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== +"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.21.5", "@babel/plugin-transform-computed-properties@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz#7a1765c01cdfe59c320d2d0f37a4dc4aecd14df1" + integrity sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/template" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/template" "^7.24.6" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.21.3", "@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.21.3", "@babel/plugin-transform-destructuring@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz#bdd1a6c90ffb2bfd13b6007b13316eeafc97cb53" + integrity sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-destructuring@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" - integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.24.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz#5a6b3148ec5f4f274ff48cebea90565087cad126" + integrity sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.23.3", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== +"@babel/plugin-transform-duplicate-keys@^7.18.9", "@babel/plugin-transform-duplicate-keys@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz#2716301227cf7cd4fdadcbe4353ce191f8b3dc8a" + integrity sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-dotall-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" - integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-duplicate-keys@^7.18.9", "@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" - integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-dynamic-import@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== +"@babel/plugin-transform-dynamic-import@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz#b477177761d56b15a4ba42a83be31cf72d757acf" + integrity sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-dynamic-import@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" - integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== +"@babel/plugin-transform-exponentiation-operator@^7.18.6", "@babel/plugin-transform-exponentiation-operator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz#011e9e1a429f91b024af572530873ca571f9ef06" + integrity sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-exponentiation-operator@^7.18.6", "@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-exponentiation-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" - integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-export-namespace-from@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== +"@babel/plugin-transform-export-namespace-from@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz#b64ded74d9afb3db5d47d93996c4df69f15ac97c" + integrity sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-export-namespace-from@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" - integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz#cfa7ca159cc3306fab526fc67091556b51af26ff" - integrity sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.23.3" - -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.21.5", "@babel/plugin-transform-for-of@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" - integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== +"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.6.tgz#dfd9d1c90e74335bc68d82f41ad9224960a4de84" + integrity sha512-1l8b24NoCpaQ13Vi6FtLG1nv6kNoi8PWvQb1AYO7GHZDpFfBYc3lbXArx1lP2KRt8b4pej1eWc/zrRmsQTfOdQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-flow" "^7.24.6" -"@babel/plugin-transform-for-of@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" - integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== +"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.21.5", "@babel/plugin-transform-for-of@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz#7f31780bd0c582b546372c0c0da9d9d56731e0a2" + integrity sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" -"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.18.9", "@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== +"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.18.9", "@babel/plugin-transform-function-name@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz#60d1de3f6fd816a3e3bf9538578a64527e1b9c97" + integrity sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q== dependencies: - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-function-name@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" - integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== +"@babel/plugin-transform-json-strings@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz#a84639180ea1f9001bb5e6dc01921235ab05ad8b" + integrity sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w== dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-json-strings@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-json-strings@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" - integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.18.9", "@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" - integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-logical-assignment-operators@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== +"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.18.9", "@babel/plugin-transform-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz#7f44f2871d7a4456030b0540858046f0b7bc6b18" + integrity sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-logical-assignment-operators@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" - integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== +"@babel/plugin-transform-logical-assignment-operators@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz#9cc7baa5629866566562c159dc1eae7569810f33" + integrity sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.18.6", "@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-member-expression-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" - integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-modules-amd@^7.20.11", "@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" - integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.21.5", "@babel/plugin-transform-modules-commonjs@^7.23.0", "@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== +"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.18.6", "@babel/plugin-transform-member-expression-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz#5d3681ca201ac6909419cc51ac082a6ba4c5c756" + integrity sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-modules-commonjs@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" - integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== +"@babel/plugin-transform-modules-amd@^7.20.11", "@babel/plugin-transform-modules-amd@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz#09aeac7acb7913496aaaafdc64f40683e0db7e41" + integrity sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-modules-systemjs@^7.20.11", "@babel/plugin-transform-modules-systemjs@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" - integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.21.5", "@babel/plugin-transform-modules-commonjs@^7.23.0", "@babel/plugin-transform-modules-commonjs@^7.23.3", "@babel/plugin-transform-modules-commonjs@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz#1b8269902f25bd91ca6427230d4735ddd1e1283e" + integrity sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw== dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-simple-access" "^7.24.6" -"@babel/plugin-transform-modules-systemjs@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" - integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== +"@babel/plugin-transform-modules-systemjs@^7.20.11", "@babel/plugin-transform-modules-systemjs@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz#c54eb53fe16f9b82d320abd76762d0320e3f9393" + integrity sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w== dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-hoist-variables" "^7.24.6" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-identifier" "^7.24.6" -"@babel/plugin-transform-modules-umd@^7.18.6", "@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== +"@babel/plugin-transform-modules-umd@^7.18.6", "@babel/plugin-transform-modules-umd@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz#c4ef8b6d4da230b8dc87e81cd66986728952f89b" + integrity sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-umd@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" - integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5", "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5", "@babel/plugin-transform-named-capturing-groups-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz#352ee2861ab8705320029f80238cf26a92ba65d5" + integrity sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-new-target@^7.18.6", "@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== +"@babel/plugin-transform-new-target@^7.18.6", "@babel/plugin-transform-new-target@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz#fc024294714705113720d5e3dc0f9ad7abdbc289" + integrity sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-new-target@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" - integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11", "@babel/plugin-transform-nullish-coalescing-operator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz#12b83b3cdfd1cd2066350e36e4fb912ab194545e" + integrity sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11", "@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" - integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-numeric-separator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" - integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== +"@babel/plugin-transform-numeric-separator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz#d9115669cc85aa91fbfb15f88f2226332cf4946a" + integrity sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== +"@babel/plugin-transform-object-rest-spread@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz#68d763f69955f9e599c405c6c876f5be46b47d8a" + integrity sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg== dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-parameters" "^7.24.6" -"@babel/plugin-transform-object-rest-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" - integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== +"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.18.6", "@babel/plugin-transform-object-super@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz#9cbe6f995bed343a7ab8daf0416dac057a9c3e27" + integrity sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg== dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-replace-supers" "^7.24.6" -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.18.6", "@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== +"@babel/plugin-transform-optional-catch-binding@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz#c81e90a971aad898e56f2b75a358e6c4855aeba3" + integrity sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - -"@babel/plugin-transform-object-super@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" - integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" - -"@babel/plugin-transform-optional-catch-binding@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-catch-binding@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" - integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.23.0", "@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== +"@babel/plugin-transform-optional-chaining@^7.23.0", "@babel/plugin-transform-optional-chaining@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.6.tgz#3d636b3ed8b5a506f93e4d4675fc95754d7594f5" + integrity sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" - integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3", "@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3", "@babel/plugin-transform-parameters@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.6.tgz#7aee86dfedd2fc0136fecbe6f7649fc02d86ab22" + integrity sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-parameters@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" - integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== +"@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz#258e1f859a52ff7b30ad556598224c192defcda7" + integrity sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== +"@babel/plugin-transform-private-property-in-object@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz#59ff09a099f62213112cf348e96b6b11957d1f28" + integrity sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" - integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-private-property-in-object@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-private-property-in-object@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" - integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== +"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.18.6", "@babel/plugin-transform-property-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz#243c4faabe811c405e9443059a58e834bf95dfd1" + integrity sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.18.6", "@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-property-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" - integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz#5efc001d07ef0f7da0d73c3a86c132f73d28e43c" - integrity sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.18.6", "@babel/plugin-transform-react-display-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" - integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.6.tgz#628c52aecfb2beca1e6383ce2c5b6722df3ff311" + integrity sha512-vQfyXRtG/kNIcTYRd/49uJnwvMig9X3R4XsTVXRml2RFupZFY+2RDuK+/ymb+MfX2WuIHAgUZc2xEvQrnI7QCg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-react-display-name@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz#554e3e1a25d181f040cf698b93fd289a03bfdcdb" - integrity sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw== +"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.18.6", "@babel/plugin-transform-react-display-name@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.6.tgz#2a10c732c2c87a8f06e4413fb4a14e76e6c67a99" + integrity sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-react-jsx-development@^7.18.6", "@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== +"@babel/plugin-transform-react-jsx-development@^7.18.6", "@babel/plugin-transform-react-jsx-development@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.6.tgz#e662058e8795b5fccd24c5bdd2b328728aef3305" + integrity sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w== dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.24.6" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.18.6", "@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5", "@babel/plugin-transform-react-jsx@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" - integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== +"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.18.6", "@babel/plugin-transform-react-jsx@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.6.tgz#4ca3660ca663d20095455571615d6263986cdfe4" + integrity sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/types" "^7.23.4" + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-module-imports" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-jsx" "^7.24.6" + "@babel/types" "^7.24.6" -"@babel/plugin-transform-react-pure-annotations@^7.18.6", "@babel/plugin-transform-react-pure-annotations@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" - integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== +"@babel/plugin-transform-react-pure-annotations@^7.18.6", "@babel/plugin-transform-react-pure-annotations@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.6.tgz#d2bad8d70c3635cb63a69ee66c9c891f9392435c" + integrity sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-pure-annotations@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz#c86bce22a53956331210d268e49a0ff06e392470" - integrity sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-regenerator@^7.20.5", "@babel/plugin-transform-regenerator@^7.21.5", "@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== +"@babel/plugin-transform-regenerator@^7.20.5", "@babel/plugin-transform-regenerator@^7.21.5", "@babel/plugin-transform-regenerator@^7.23.3", "@babel/plugin-transform-regenerator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz#ed10cf0c13619365e15459f88d1b915ac57ffc24" + integrity sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" regenerator-transform "^0.15.2" -"@babel/plugin-transform-regenerator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" - integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== +"@babel/plugin-transform-reserved-words@^7.18.6", "@babel/plugin-transform-reserved-words@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz#9eb16cbf339fcea0a46677716c775afb5ef14245" + integrity sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.18.6", "@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-reserved-words@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" - integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-transform-runtime@7.21.4": version "7.21.4" @@ -1694,183 +1141,94 @@ babel-plugin-polyfill-regenerator "^0.4.1" semver "^6.3.0" -"@babel/plugin-transform-runtime@^7.19.6", "@babel/plugin-transform-runtime@^7.22.9", "@babel/plugin-transform-runtime@^7.23.2": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz#2c64d0680fc8e09e1dfe8fd5c646fe72abd82004" - integrity sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ== +"@babel/plugin-transform-runtime@^7.19.6", "@babel/plugin-transform-runtime@^7.22.9", "@babel/plugin-transform-runtime@^7.23.2", "@babel/plugin-transform-runtime@^7.24.0": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.6.tgz#1e3256246004c3724b8e07c7cb25e35913c4e373" + integrity sha512-W3gQydMb0SY99y/2lV0Okx2xg/8KzmZLQsLaiCmwNRl1kKomz14VurEm+2TossUb+sRvBCnGe+wx8KtIgDtBbQ== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" - semver "^6.3.1" - -"@babel/plugin-transform-runtime@^7.24.0": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz#dc58ad4a31810a890550365cc922e1ff5acb5d7f" - integrity sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ== - dependencies: - "@babel/helper-module-imports" "^7.24.3" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-module-imports" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.10.1" babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.18.6", "@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-shorthand-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" - integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.20.7", "@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" - integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.18.6", "@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" - integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.18.9", "@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" - integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-typeof-symbol@^7.18.9", "@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.18.6", "@babel/plugin-transform-shorthand-properties@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz#ef734ebccc428d2174c7bb36015d0800faf5381e" + integrity sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-typeof-symbol@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" - integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== +"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.20.7", "@babel/plugin-transform-spread@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz#a56cecbd8617675531d1b79f5b755b7613aa0822" + integrity sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" -"@babel/plugin-transform-typescript@^7.23.3": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c" - integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== +"@babel/plugin-transform-sticky-regex@^7.18.6", "@babel/plugin-transform-sticky-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz#1a78127731fea87d954bed193840986a38f04327" + integrity sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-typescript@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.1.tgz#5c05e28bb76c7dfe7d6c5bed9951324fd2d3ab07" - integrity sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w== +"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.18.9", "@babel/plugin-transform-template-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz#aaf2ae157acd0e5c9265dba8ac0a439f8d2a6303" + integrity sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-typescript" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-unicode-escapes@^7.21.5", "@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== +"@babel/plugin-transform-typeof-symbol@^7.18.9", "@babel/plugin-transform-typeof-symbol@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz#3d02da23ebcc8f1982ddcd1f2581cf3ee4e58762" + integrity sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-unicode-escapes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" - integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== +"@babel/plugin-transform-typescript@^7.23.3", "@babel/plugin-transform-typescript@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.6.tgz#339c6127a783c32e28a5b591e6c666f899b57db0" + integrity sha512-H0i+hDLmaYYSt6KU9cZE0gb3Cbssa/oxWis7PX4ofQzbvsfix9Lbh8SRk7LCPDlLWJHUiFeHU0qRRpF/4Zv7mQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-typescript" "^7.24.6" -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== +"@babel/plugin-transform-unicode-escapes@^7.21.5", "@babel/plugin-transform-unicode-escapes@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz#c8ddca8fd5bacece837a4e27bd3b7ed64580d1a8" + integrity sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-unicode-property-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" - integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== +"@babel/plugin-transform-unicode-property-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz#e66297d5d452db0b0be56515e3d0e10b7d33fb32" + integrity sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-unicode-regex@^7.18.6", "@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" - integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== +"@babel/plugin-transform-unicode-regex@^7.18.6", "@babel/plugin-transform-unicode-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz#2001e7d87ed709eea145e0b65fb5f93c3c0e225b" + integrity sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-unicode-sets-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" - integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== +"@babel/plugin-transform-unicode-sets-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz#f18b7292222aee85c155258ceb345a146a070a46" + integrity sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/preset-env@7.21.5": version "7.21.5" @@ -1954,112 +1312,27 @@ core-js-compat "^3.25.1" semver "^6.3.0" -"@babel/preset-env@^7.20.2", "@babel/preset-env@^7.22.9", "@babel/preset-env@^7.23.2": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669" - integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.9" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.4" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.8" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.4" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.6" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.4" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.9" - "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" - "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.4" - "@babel/plugin-transform-optional-chaining" "^7.23.4" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.4" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-env@^7.24.0": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.3.tgz#f3f138c844ffeeac372597b29c51b5259e8323a3" - integrity sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA== - dependencies: - "@babel/compat-data" "^7.24.1" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" +"@babel/preset-env@^7.20.2", "@babel/preset-env@^7.22.9", "@babel/preset-env@^7.23.2", "@babel/preset-env@^7.24.0", "@babel/preset-env@^7.24.4": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.6.tgz#a5a55bc70e5ff1ed7f872067e2a9d65ff917ad6f" + integrity sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg== + dependencies: + "@babel/compat-data" "^7.24.6" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.6" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.6" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.1" - "@babel/plugin-syntax-import-attributes" "^7.24.1" + "@babel/plugin-syntax-import-assertions" "^7.24.6" + "@babel/plugin-syntax-import-attributes" "^7.24.6" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -2071,54 +1344,54 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.1" - "@babel/plugin-transform-async-generator-functions" "^7.24.3" - "@babel/plugin-transform-async-to-generator" "^7.24.1" - "@babel/plugin-transform-block-scoped-functions" "^7.24.1" - "@babel/plugin-transform-block-scoping" "^7.24.1" - "@babel/plugin-transform-class-properties" "^7.24.1" - "@babel/plugin-transform-class-static-block" "^7.24.1" - "@babel/plugin-transform-classes" "^7.24.1" - "@babel/plugin-transform-computed-properties" "^7.24.1" - "@babel/plugin-transform-destructuring" "^7.24.1" - "@babel/plugin-transform-dotall-regex" "^7.24.1" - "@babel/plugin-transform-duplicate-keys" "^7.24.1" - "@babel/plugin-transform-dynamic-import" "^7.24.1" - "@babel/plugin-transform-exponentiation-operator" "^7.24.1" - "@babel/plugin-transform-export-namespace-from" "^7.24.1" - "@babel/plugin-transform-for-of" "^7.24.1" - "@babel/plugin-transform-function-name" "^7.24.1" - "@babel/plugin-transform-json-strings" "^7.24.1" - "@babel/plugin-transform-literals" "^7.24.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" - "@babel/plugin-transform-member-expression-literals" "^7.24.1" - "@babel/plugin-transform-modules-amd" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-modules-systemjs" "^7.24.1" - "@babel/plugin-transform-modules-umd" "^7.24.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.24.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" - "@babel/plugin-transform-numeric-separator" "^7.24.1" - "@babel/plugin-transform-object-rest-spread" "^7.24.1" - "@babel/plugin-transform-object-super" "^7.24.1" - "@babel/plugin-transform-optional-catch-binding" "^7.24.1" - "@babel/plugin-transform-optional-chaining" "^7.24.1" - "@babel/plugin-transform-parameters" "^7.24.1" - "@babel/plugin-transform-private-methods" "^7.24.1" - "@babel/plugin-transform-private-property-in-object" "^7.24.1" - "@babel/plugin-transform-property-literals" "^7.24.1" - "@babel/plugin-transform-regenerator" "^7.24.1" - "@babel/plugin-transform-reserved-words" "^7.24.1" - "@babel/plugin-transform-shorthand-properties" "^7.24.1" - "@babel/plugin-transform-spread" "^7.24.1" - "@babel/plugin-transform-sticky-regex" "^7.24.1" - "@babel/plugin-transform-template-literals" "^7.24.1" - "@babel/plugin-transform-typeof-symbol" "^7.24.1" - "@babel/plugin-transform-unicode-escapes" "^7.24.1" - "@babel/plugin-transform-unicode-property-regex" "^7.24.1" - "@babel/plugin-transform-unicode-regex" "^7.24.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" + "@babel/plugin-transform-arrow-functions" "^7.24.6" + "@babel/plugin-transform-async-generator-functions" "^7.24.6" + "@babel/plugin-transform-async-to-generator" "^7.24.6" + "@babel/plugin-transform-block-scoped-functions" "^7.24.6" + "@babel/plugin-transform-block-scoping" "^7.24.6" + "@babel/plugin-transform-class-properties" "^7.24.6" + "@babel/plugin-transform-class-static-block" "^7.24.6" + "@babel/plugin-transform-classes" "^7.24.6" + "@babel/plugin-transform-computed-properties" "^7.24.6" + "@babel/plugin-transform-destructuring" "^7.24.6" + "@babel/plugin-transform-dotall-regex" "^7.24.6" + "@babel/plugin-transform-duplicate-keys" "^7.24.6" + "@babel/plugin-transform-dynamic-import" "^7.24.6" + "@babel/plugin-transform-exponentiation-operator" "^7.24.6" + "@babel/plugin-transform-export-namespace-from" "^7.24.6" + "@babel/plugin-transform-for-of" "^7.24.6" + "@babel/plugin-transform-function-name" "^7.24.6" + "@babel/plugin-transform-json-strings" "^7.24.6" + "@babel/plugin-transform-literals" "^7.24.6" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.6" + "@babel/plugin-transform-member-expression-literals" "^7.24.6" + "@babel/plugin-transform-modules-amd" "^7.24.6" + "@babel/plugin-transform-modules-commonjs" "^7.24.6" + "@babel/plugin-transform-modules-systemjs" "^7.24.6" + "@babel/plugin-transform-modules-umd" "^7.24.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.6" + "@babel/plugin-transform-new-target" "^7.24.6" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.6" + "@babel/plugin-transform-numeric-separator" "^7.24.6" + "@babel/plugin-transform-object-rest-spread" "^7.24.6" + "@babel/plugin-transform-object-super" "^7.24.6" + "@babel/plugin-transform-optional-catch-binding" "^7.24.6" + "@babel/plugin-transform-optional-chaining" "^7.24.6" + "@babel/plugin-transform-parameters" "^7.24.6" + "@babel/plugin-transform-private-methods" "^7.24.6" + "@babel/plugin-transform-private-property-in-object" "^7.24.6" + "@babel/plugin-transform-property-literals" "^7.24.6" + "@babel/plugin-transform-regenerator" "^7.24.6" + "@babel/plugin-transform-reserved-words" "^7.24.6" + "@babel/plugin-transform-shorthand-properties" "^7.24.6" + "@babel/plugin-transform-spread" "^7.24.6" + "@babel/plugin-transform-sticky-regex" "^7.24.6" + "@babel/plugin-transform-template-literals" "^7.24.6" + "@babel/plugin-transform-typeof-symbol" "^7.24.6" + "@babel/plugin-transform-unicode-escapes" "^7.24.6" + "@babel/plugin-transform-unicode-property-regex" "^7.24.6" + "@babel/plugin-transform-unicode-regex" "^7.24.6" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.6" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.10.4" @@ -2127,13 +1400,13 @@ semver "^6.3.1" "@babel/preset-flow@^7.22.15", "@babel/preset-flow@^7.22.5": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.23.3.tgz#8084e08b9ccec287bd077ab288b286fab96ffab1" - integrity sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA== + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.24.6.tgz#df09ee46558577bea49bc71d597604c03c9bf7a6" + integrity sha512-huoe0T1Qs9fQhMWbmqE/NHUeZbqmHDsN6n/jYvPcUUHfuKiPV32C9i8tDhMbQ1DEKTjbBP7Rjm3nSLwlB2X05g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-flow-strip-types" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" + "@babel/plugin-transform-flow-strip-types" "^7.24.6" "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" @@ -2167,31 +1440,19 @@ "@babel/plugin-transform-react-jsx-development" "^7.18.6" "@babel/plugin-transform-react-pure-annotations" "^7.18.6" -"@babel/preset-react@^7.18.6", "@babel/preset-react@^7.22.5": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.23.3.tgz#f73ca07e7590f977db07eb54dbe46538cc015709" - integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== +"@babel/preset-react@^7.18.6", "@babel/preset-react@^7.22.5", "@babel/preset-react@^7.23.3": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.6.tgz#92eace66dce577e5263113eb82235a0d45096cae" + integrity sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.23.3" - "@babel/plugin-transform-react-jsx" "^7.22.15" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.23.3" - -"@babel/preset-react@^7.23.3": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.1.tgz#2450c2ac5cc498ef6101a6ca5474de251e33aa95" - integrity sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-transform-react-display-name" "^7.24.1" - "@babel/plugin-transform-react-jsx" "^7.23.4" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.24.1" - -"@babel/preset-typescript@7.23.3", "@babel/preset-typescript@^7.18.6", "@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.22.5", "@babel/preset-typescript@^7.23.0": + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" + "@babel/plugin-transform-react-display-name" "^7.24.6" + "@babel/plugin-transform-react-jsx" "^7.24.6" + "@babel/plugin-transform-react-jsx-development" "^7.24.6" + "@babel/plugin-transform-react-pure-annotations" "^7.24.6" + +"@babel/preset-typescript@7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== @@ -2202,21 +1463,21 @@ "@babel/plugin-transform-modules-commonjs" "^7.23.3" "@babel/plugin-transform-typescript" "^7.23.3" -"@babel/preset-typescript@^7.23.3": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" - integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== +"@babel/preset-typescript@^7.18.6", "@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.22.5", "@babel/preset-typescript@^7.23.0", "@babel/preset-typescript@^7.23.3": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.6.tgz#27057470fb981c31338bdb897fc3d9aa0cb7dab2" + integrity sha512-U10aHPDnokCFRXgyT/MaIRTivUu2K/mu0vJlwRS9LxJmJet+PFQNKpggPyFCUtC6zWSBPjvxjnpNkAn3Uw2m5w== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-syntax-jsx" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-typescript" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" + "@babel/plugin-syntax-jsx" "^7.24.6" + "@babel/plugin-transform-modules-commonjs" "^7.24.6" + "@babel/plugin-transform-typescript" "^7.24.6" "@babel/register@^7.17.7", "@babel/register@^7.18.9", "@babel/register@^7.22.15", "@babel/register@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038" - integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ== + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.24.6.tgz#59e21dcc79e1d04eed5377633b0f88029a6bef9e" + integrity sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -2236,60 +1497,35 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.17.2", "@babel/runtime@^7.17.8", "@babel/runtime@^7.17.9", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.6", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.4", "@babel/runtime@^7.24.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.1.tgz#431f9a794d173b53720e69a6464abc6f0e2a5c57" - integrity sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.17.8", "@babel/runtime@^7.17.9", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.6", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.0", "@babel/runtime@^7.24.1", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.6.tgz#5b76eb89ad45e2e4a0a8db54c456251469a3358e" + integrity sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" - integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" - -"@babel/template@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/traverse@^7.1.6", "@babel/traverse@^7.14.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.22.8", "@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3", "@babel/traverse@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" - integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/traverse@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" - integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== - dependencies: - "@babel/code-frame" "^7.24.1" - "@babel/generator" "^7.24.1" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.1" - "@babel/types" "^7.24.0" +"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.22.15", "@babel/template@^7.24.6", "@babel/template@^7.3.3": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.6.tgz#048c347b2787a6072b24c723664c8d02b67a44f9" + integrity sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw== + dependencies: + "@babel/code-frame" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/types" "^7.24.6" + +"@babel/traverse@^7.1.6", "@babel/traverse@^7.14.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.22.8", "@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3", "@babel/traverse@^7.24.1", "@babel/traverse@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.6.tgz#0941ec50cdeaeacad0911eb67ae227a4f8424edc" + integrity sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw== + dependencies: + "@babel/code-frame" "^7.24.6" + "@babel/generator" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-hoist-variables" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/types" "^7.24.6" debug "^4.3.1" globals "^11.1.0" @@ -2302,31 +1538,22 @@ "@babel/helper-validator-identifier" "^7.22.19" to-fast-properties "^2.0.0" -"@babel/types@7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== +"@babel/types@7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7" + integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-string-parser" "^7.24.1" + "@babel/helper-validator-identifier" "^7.24.5" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.8", "@babel/types@^7.18.13", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.21.5", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== +"@babel/types@^7.0.0", "@babel/types@^7.16.8", "@babel/types@^7.18.13", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.21.5", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.24.0", "@babel/types@^7.24.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.6.tgz#ba4e1f59870c10dc2fa95a274ac4feec23b21912" + integrity sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-string-parser" "^7.24.6" + "@babel/helper-validator-identifier" "^7.24.6" to-fast-properties "^2.0.0" "@base2/pretty-print-object@1.0.1": @@ -2344,17 +1571,17 @@ resolved "https://registry.yarnpkg.com/@bifrost-finance/type-definitions/-/type-definitions-1.8.4.tgz#f6f16a3cb31b6b2a28ae46e93ac598a1202faa8a" integrity sha512-Vj1/aK3ikvlYIKSHmFQDpgiWRn8pCFRxIqPS1zRIlbqy/aj7T2iOsImdrIX9piPdJquLsJFap3VvX8Lw3YVnmw== -"@bugsnag/browser@^7.20.2", "@bugsnag/browser@^7.22.3": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@bugsnag/browser/-/browser-7.22.3.tgz#123402db4cbc0e5ee4e7ac03222c0a1de1d48799" - integrity sha512-TWQSdsCqzxEVmaKzbtmqoBLWF58yjXi/ScC+6L5VNgSj+62jkIQuw5Evjs+7kLQX8WCnaG6XLiDmUJmPx6ZUrA== +"@bugsnag/browser@^7.20.2", "@bugsnag/browser@^7.22.7": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@bugsnag/browser/-/browser-7.22.7.tgz#ba1f9f3596b9d3cf1b4db11250f8be2f178a78c1" + integrity sha512-70jFkWKscK2osm7bnFbPLevrzHClrygM3UcKetKs/l81Xuzlxnu1SS3onN5OUl9kd9RN4XMFr46Pv5jSqWqImQ== dependencies: - "@bugsnag/core" "^7.19.0" + "@bugsnag/core" "^7.22.7" -"@bugsnag/core@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@bugsnag/core/-/core-7.19.0.tgz#7663a4addb1322e8315a4012dc9db2aad3fea53b" - integrity sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA== +"@bugsnag/core@^7.22.7": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@bugsnag/core/-/core-7.22.7.tgz#ea5e0822b01913c88be4dbc67d388aff8d65f26a" + integrity sha512-9DPWBkkBjhFJc5dCFy/wVC3HE0Aw3ZiLJKjyAxgywSKbILgtpD+qT1Xe8sacWyxU92znamlZ8H8ziQOe7jhhbA== dependencies: "@bugsnag/cuid" "^3.0.0" "@bugsnag/safe-json-stringify" "^6.0.0" @@ -2363,9 +1590,9 @@ stack-generator "^2.0.3" "@bugsnag/cuid@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@bugsnag/cuid/-/cuid-3.0.2.tgz#544f8e6e7e3768c8cb618ca5c5fb1eea6aacbb7e" - integrity sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ== + version "3.1.1" + resolved "https://registry.yarnpkg.com/@bugsnag/cuid/-/cuid-3.1.1.tgz#dbd5d76559f6b7a66306fceacf503888883da514" + integrity sha512-d2z4b0rEo3chI07FNN1Xds8v25CNeekecU6FC/2Fs9MxY2EipkZTThVcV2YinMn8dvRUlViKOyC50evoUxg8tw== "@bugsnag/js@7.20.2": version "7.20.2" @@ -2376,19 +1603,19 @@ "@bugsnag/node" "^7.19.0" "@bugsnag/js@^7.0.0", "@bugsnag/js@^7.20.0": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@bugsnag/js/-/js-7.22.3.tgz#a7cb4443e0e8820aada0e15e486ac58d1b9fe257" - integrity sha512-SAZEElVlmQgZBPLbTdMAyFD2Pp1mP4t3bv+GmDVGSgBi4W6doKQVk0J/K9f5+JGw8fEh9AJHRlyub3XnlGI6Zw== + version "7.23.0" + resolved "https://registry.yarnpkg.com/@bugsnag/js/-/js-7.23.0.tgz#92df585be48e509df3c138182ce507dd4162a587" + integrity sha512-gnCpcv/v6p3CtbwwDuAjVYPPNq4NMVj4hp70MiB3OGJ+LmIS66CwElDiyvRMA8Ar6OzCF4joTeaNG5bD9cM41w== dependencies: - "@bugsnag/browser" "^7.22.3" - "@bugsnag/node" "^7.22.3" + "@bugsnag/browser" "^7.22.7" + "@bugsnag/node" "^7.23.0" -"@bugsnag/node@^7.19.0", "@bugsnag/node@^7.22.3": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@bugsnag/node/-/node-7.22.3.tgz#064b0ba332676481ab43fa46fdb56ecde91adb22" - integrity sha512-vDXu0mrduonyCjUkTp+zKSh1WHAtA2VjB49xK5s1f/HnTASiJvzUOQBRXrkqaj37sndYHUSMxUCPvLawyc75nA== +"@bugsnag/node@^7.19.0", "@bugsnag/node@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@bugsnag/node/-/node-7.23.0.tgz#cc685bb9255504dc6a4ad3f09458968e98c82b65" + integrity sha512-eXA8/h+J2booEMlKsuRl1NAszebwm4KZ9zxCSg/xN4sw5boXia7kMifLf8QTqk+UBtIhNKBsyQQKHXbawKyE6Q== dependencies: - "@bugsnag/core" "^7.19.0" + "@bugsnag/core" "^7.22.7" byline "^5.0.0" error-stack-parser "^2.0.2" iserror "^0.0.2" @@ -2401,27 +1628,19 @@ integrity sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA== "@coinbase/wallet-sdk@^3.6.6": - version "3.7.2" - resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.7.2.tgz#7a89bd9e3a06a1f26d4480d8642af33fb0c7e3aa" - integrity sha512-lIGvXMsgpsQWci/XOMQIJ2nIZ8JUy/L+bvC0wkRaYarr0YylwpXrJ2gRM3hCXPS477pkyO7N/kSiAoRgEXUdJQ== + version "3.9.3" + resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.9.3.tgz#daf10cb0c85d0363315b7270cb3f02bedc408aab" + integrity sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw== dependencies: - "@metamask/safe-event-emitter" "2.0.0" - "@solana/web3.js" "^1.70.1" - bind-decorator "^1.0.11" - bn.js "^5.1.1" + bn.js "^5.2.1" buffer "^6.0.3" - clsx "^1.1.0" - 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.1" - preact "^10.5.9" - qs "^6.10.3" - rxjs "^6.6.3" + clsx "^1.2.1" + eth-block-tracker "^7.1.0" + eth-json-rpc-filters "^6.0.0" + eventemitter3 "^5.0.1" + keccak "^3.0.3" + preact "^10.16.0" sha.js "^2.4.11" - stream-browserify "^3.0.0" - util "^0.12.4" "@colors/colors@1.5.0": version "1.5.0" @@ -2434,15 +1653,15 @@ integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== "@commitlint/cli@^18.4.3": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-18.6.0.tgz#f065e0514f3870b6dc9a3c608a78820806b46527" - integrity sha512-FiH23cr9QG8VdfbmvJJZmdfHGVMCouOOAzoXZ3Cd7czGC52RbycwNt8YCI7SA69pAl+t30vh8LMaO/N+kcel6w== - dependencies: - "@commitlint/format" "^18.6.0" - "@commitlint/lint" "^18.6.0" - "@commitlint/load" "^18.6.0" - "@commitlint/read" "^18.6.0" - "@commitlint/types" "^18.6.0" + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-18.6.1.tgz#78bffdfa00d6f01425d53096954993d83f2b343d" + integrity sha512-5IDE0a+lWGdkOvKH892HHAZgbAjcj1mT5QrfA/SVbLJV/BbBMGyKN0W5mhgjekPJJwEQdVNvhl9PwUacY58Usw== + dependencies: + "@commitlint/format" "^18.6.1" + "@commitlint/lint" "^18.6.1" + "@commitlint/load" "^18.6.1" + "@commitlint/read" "^18.6.1" + "@commitlint/types" "^18.6.1" execa "^5.0.0" lodash.isfunction "^3.0.9" resolve-from "5.0.0" @@ -2457,66 +1676,66 @@ "@commitlint/types" "^18.6.1" conventional-changelog-conventionalcommits "^7.0.2" -"@commitlint/config-validator@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-18.6.0.tgz#ea1e04e92829dd7b90cea444f245b0bdefa0a586" - integrity sha512-Ptfa865arNozlkjxrYG3qt6wT9AlhNUHeuDyKEZiTL/l0ftncFhK/KN0t/EAMV2tec+0Mwxo0FmhbESj/bI+1g== +"@commitlint/config-validator@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-18.6.1.tgz#e0d71a99c984a68586c7ae7afd3f52342022fae8" + integrity sha512-05uiToBVfPhepcQWE1ZQBR/Io3+tb3gEotZjnI4tTzzPk16NffN6YABgwFQCLmzZefbDcmwWqJWc2XT47q7Znw== dependencies: - "@commitlint/types" "^18.6.0" + "@commitlint/types" "^18.6.1" ajv "^8.11.0" -"@commitlint/ensure@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-18.6.0.tgz#3f3dc09d99016eaab0da9423123effd820d11931" - integrity sha512-xY07NmOBJ7JuhX3tic021PaeLepZARIQyqpAQoNQZoml1keBFfB6MbA7XlWZv0ebbarUFE4yhKxOPw+WFv7/qw== +"@commitlint/ensure@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-18.6.1.tgz#17141e083200ca94d8480dc23b0e8f8b1fd37b7f" + integrity sha512-BPm6+SspyxQ7ZTsZwXc7TRQL5kh5YWt3euKmEIBZnocMFkJevqs3fbLRb8+8I/cfbVcAo4mxRlpTPfz8zX7SnQ== dependencies: - "@commitlint/types" "^18.6.0" + "@commitlint/types" "^18.6.1" lodash.camelcase "^4.3.0" lodash.kebabcase "^4.1.1" lodash.snakecase "^4.1.1" lodash.startcase "^4.4.0" lodash.upperfirst "^4.3.1" -"@commitlint/execute-rule@^18.4.4": - version "18.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-18.4.4.tgz#ade986742c1944c8162a54288747e54a8c6146b5" - integrity sha512-a37Nd3bDQydtg9PCLLWM9ZC+GO7X5i4zJvrggJv5jBhaHsXeQ9ZWdO6ODYR+f0LxBXXNYK3geYXJrCWUCP8JEg== +"@commitlint/execute-rule@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-18.6.1.tgz#18175e043fe6fb5fceea7b8530316c644f93dfe6" + integrity sha512-7s37a+iWyJiGUeMFF6qBlyZciUkF8odSAnHijbD36YDctLhGKoYltdvuJ/AFfRm6cBLRtRk9cCVPdsEFtt/2rg== -"@commitlint/format@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-18.6.0.tgz#e13ef8419cd8eb37be5825a2e84e73cabbfb56ad" - integrity sha512-8UNWfs2slPPSQiiVpLGJTnPHv7Jkd5KYxfbNXbmLL583bjom4RrylvyrCVnmZReA8nNad7pPXq6mDH4FNVj6xg== +"@commitlint/format@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-18.6.1.tgz#5f2b8b3ae4d8d80bd9239178e97df63e5b8d280a" + integrity sha512-K8mNcfU/JEFCharj2xVjxGSF+My+FbUHoqR+4GqPGrHNqXOGNio47ziiR4HQUPKtiNs05o8/WyLBoIpMVOP7wg== dependencies: - "@commitlint/types" "^18.6.0" + "@commitlint/types" "^18.6.1" chalk "^4.1.0" -"@commitlint/is-ignored@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-18.6.0.tgz#d15ab04f547f7554cc3377d50f8e19178502b8af" - integrity sha512-Xjx/ZyyJ4FdLuz0FcOvqiqSFgiO2yYj3QN9XlvyrxqbXTxPVC7QFEXJYBVPulUSN/gR7WXH1Udw+HYYfD17xog== +"@commitlint/is-ignored@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-18.6.1.tgz#4ee08ba91ff3defb06e0ef19259a9c6734a8d06e" + integrity sha512-MOfJjkEJj/wOaPBw5jFjTtfnx72RGwqYIROABudOtJKW7isVjFe9j0t8xhceA02QebtYf4P/zea4HIwnXg8rvA== dependencies: - "@commitlint/types" "^18.6.0" - semver "7.5.4" + "@commitlint/types" "^18.6.1" + semver "7.6.0" -"@commitlint/lint@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-18.6.0.tgz#f54c856840a6238e0c2972588c2dc986317f1b7b" - integrity sha512-ycbuDWfyykPmslgiHzhz8dL6F0BJYltXLVfc+M49z0c+FNITM0v+r0Vd2+Tdtq06VTc894p2+YSmZhulY8Jn3Q== - dependencies: - "@commitlint/is-ignored" "^18.6.0" - "@commitlint/parse" "^18.6.0" - "@commitlint/rules" "^18.6.0" - "@commitlint/types" "^18.6.0" - -"@commitlint/load@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-18.6.0.tgz#98108294b9383aa2905781b192215df4718babb7" - integrity sha512-RRssj7TmzT0bowoEKlgwg8uQ7ORXWkw7lYLsZZBMi9aInsJuGNLNWcMxJxRZbwxG3jkCidGUg85WmqJvRjsaDA== - dependencies: - "@commitlint/config-validator" "^18.6.0" - "@commitlint/execute-rule" "^18.4.4" - "@commitlint/resolve-extends" "^18.6.0" - "@commitlint/types" "^18.6.0" +"@commitlint/lint@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-18.6.1.tgz#fe3834636c99ee14534a8eb3832831ac362e9fd8" + integrity sha512-8WwIFo3jAuU+h1PkYe5SfnIOzp+TtBHpFr4S8oJWhu44IWKuVx6GOPux3+9H1iHOan/rGBaiacicZkMZuluhfQ== + dependencies: + "@commitlint/is-ignored" "^18.6.1" + "@commitlint/parse" "^18.6.1" + "@commitlint/rules" "^18.6.1" + "@commitlint/types" "^18.6.1" + +"@commitlint/load@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-18.6.1.tgz#fb79ed7ee8b5897a9b5c274c1e24eda9162df816" + integrity sha512-p26x8734tSXUHoAw0ERIiHyW4RaI4Bj99D8YgUlVV9SedLf8hlWAfyIFhHRIhfPngLlCe0QYOdRKYFt8gy56TA== + dependencies: + "@commitlint/config-validator" "^18.6.1" + "@commitlint/execute-rule" "^18.6.1" + "@commitlint/resolve-extends" "^18.6.1" + "@commitlint/types" "^18.6.1" chalk "^4.1.0" cosmiconfig "^8.3.6" cosmiconfig-typescript-loader "^5.0.0" @@ -2525,92 +1744,85 @@ lodash.uniq "^4.5.0" resolve-from "^5.0.0" -"@commitlint/message@^18.4.4": - version "18.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-18.4.4.tgz#811682a0d147a24e5c467acdb52071434df2b9f5" - integrity sha512-lHF95mMDYgAI1LBXveJUyg4eLaMXyOqJccCK3v55ZOEUsMPrDi8upqDjd/NmzWmESYihaOMBTAnxm+6oD1WoDQ== +"@commitlint/message@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-18.6.1.tgz#107bd40923ad23d2de56c92a68b179ebfb7e314e" + integrity sha512-VKC10UTMLcpVjMIaHHsY1KwhuTQtdIKPkIdVEwWV+YuzKkzhlI3aNy6oo1eAN6b/D2LTtZkJe2enHmX0corYRw== -"@commitlint/parse@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-18.6.0.tgz#ae19ff8ceb0c8ffab131158829b06b505b9921fd" - integrity sha512-Y/G++GJpATFw54O0jikc/h2ibyGHgghtPnwsOk3O/aU092ydJ5XEHYcd7xGNQYuLweLzQis2uEwRNk9AVIPbQQ== +"@commitlint/parse@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-18.6.1.tgz#2946b814125e907b9c4d63d3e71d0c1b54b30b62" + integrity sha512-eS/3GREtvVJqGZrwAGRwR9Gdno3YcZ6Xvuaa+vUF8j++wsmxrA2En3n0ccfVO2qVOLJC41ni7jSZhQiJpMPGOQ== dependencies: - "@commitlint/types" "^18.6.0" + "@commitlint/types" "^18.6.1" conventional-changelog-angular "^7.0.0" conventional-commits-parser "^5.0.0" "@commitlint/prompt-cli@^18.4.3": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/prompt-cli/-/prompt-cli-18.6.0.tgz#b33de1af8c19717e4f63b96ecbce4880892ae3ca" - integrity sha512-N+a8cdk0Y72TKV3nHO5Rkqd7+9gh6xwlPry7CzGdOIy7VQ4AuxeuIT1bYKDlWN00aacbcyOTEOVCsg6tw5zexQ== + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/prompt-cli/-/prompt-cli-18.6.1.tgz#9a852e0270add2ac4f761b0adb766413db83b64a" + integrity sha512-bowdGsKH1X+PgiZTbJsJaMPvUiN+1CjpH9pRGbsK/G2HcO9smVCU8f3Cf1PFOcK6ICOVb+W1lQnypTivQ4Jnvg== dependencies: - "@commitlint/prompt" "^18.6.0" + "@commitlint/prompt" "^18.6.1" execa "^5.0.0" inquirer "^6.5.2" -"@commitlint/prompt@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/prompt/-/prompt-18.6.0.tgz#d97c046701e71a11e904617412af38caeaaab60e" - integrity sha512-fFeUKQryczq55VG0t7o6GEIvbPNQGDhtWnBTB65SJ4KgozSmTOE1Ns9jQsOnzfq6V3rr9ln+4NCskmDf/hcFBg== +"@commitlint/prompt@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/prompt/-/prompt-18.6.1.tgz#88dabf5ceec9cae12eb84e3ce3ad96095f3622bd" + integrity sha512-8AUAM2HuBmctBMrRKZzez87StGdVW8XNwiCRcX+iTeA0a/0rggc4gWOkwbnGqy69rm7J0vsd1jCCaJOAOWKBPw== dependencies: - "@commitlint/ensure" "^18.6.0" - "@commitlint/load" "^18.6.0" - "@commitlint/types" "^18.6.0" + "@commitlint/ensure" "^18.6.1" + "@commitlint/load" "^18.6.1" + "@commitlint/types" "^18.6.1" chalk "^4.1.0" inquirer "^6.5.2" -"@commitlint/read@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-18.6.0.tgz#324ea1fa625f88427780df23fffe4a92d383d665" - integrity sha512-w39ji8VfWhPKRquPhRHB3Yd8XIHwaNHgOh28YI1QEmZ59qVpuVUQo6h/NsVb+uoC6LbXZiofTZv2iFR084jKEA== +"@commitlint/read@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-18.6.1.tgz#8c138311ed9749427920c369f6276be136f2aa50" + integrity sha512-ia6ODaQFzXrVul07ffSgbZGFajpe8xhnDeLIprLeyfz3ivQU1dIoHp7yz0QIorZ6yuf4nlzg4ZUkluDrGN/J/w== dependencies: - "@commitlint/top-level" "^18.4.4" - "@commitlint/types" "^18.6.0" + "@commitlint/top-level" "^18.6.1" + "@commitlint/types" "^18.6.1" git-raw-commits "^2.0.11" minimist "^1.2.6" -"@commitlint/resolve-extends@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-18.6.0.tgz#db55be2b32e12593bc98dc44c6d9a9d90941bab4" - integrity sha512-k2Xp+Fxeggki2i90vGrbiLDMefPius3zGSTFFlRAPKce/SWLbZtI+uqE9Mne23mHO5lmcSV8z5m6ziiJwGpOcg== +"@commitlint/resolve-extends@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-18.6.1.tgz#f0572c682fc24dbabe2e0f42873261e0fa42c91a" + integrity sha512-ifRAQtHwK+Gj3Bxj/5chhc4L2LIc3s30lpsyW67yyjsETR6ctHAHRu1FSpt0KqahK5xESqoJ92v6XxoDRtjwEQ== dependencies: - "@commitlint/config-validator" "^18.6.0" - "@commitlint/types" "^18.6.0" + "@commitlint/config-validator" "^18.6.1" + "@commitlint/types" "^18.6.1" import-fresh "^3.0.0" lodash.mergewith "^4.6.2" resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/rules@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-18.6.0.tgz#6d933e2de5639b75b4946120b3880e72e66a6051" - integrity sha512-pTalvCEvuCWrBWZA/YqO/3B3nZnY3Ncc+TmQsRajBdC1tkQIm5Iovdo4Ec7f2Dw1tVvpYMUUNAgcWqsY0WckWg== +"@commitlint/rules@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-18.6.1.tgz#da25aeffe6c0e1c7625e44f46089fb8860986caf" + integrity sha512-kguM6HxZDtz60v/zQYOe0voAtTdGybWXefA1iidjWYmyUUspO1zBPQEmJZ05/plIAqCVyNUTAiRPWIBKLCrGew== dependencies: - "@commitlint/ensure" "^18.6.0" - "@commitlint/message" "^18.4.4" - "@commitlint/to-lines" "^18.4.4" - "@commitlint/types" "^18.6.0" + "@commitlint/ensure" "^18.6.1" + "@commitlint/message" "^18.6.1" + "@commitlint/to-lines" "^18.6.1" + "@commitlint/types" "^18.6.1" execa "^5.0.0" -"@commitlint/to-lines@^18.4.4": - version "18.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-18.4.4.tgz#546cf8d985459f3526359b6a63d7a5b421e1ed60" - integrity sha512-mwe2Roa59NCz/krniAdCygFabg7+fQCkIhXqBHw00XQ8Y7lw4poZLLxeGI3p3bLpcEOXdqIDrEGLwHmG5lBdwQ== +"@commitlint/to-lines@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-18.6.1.tgz#d28827a4a540c98eea1aae31dafd66f80b2f1b9e" + integrity sha512-Gl+orGBxYSNphx1+83GYeNy5N0dQsHBQ9PJMriaLQDB51UQHCVLBT/HBdOx5VaYksivSf5Os55TLePbRLlW50Q== -"@commitlint/top-level@^18.4.4": - version "18.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-18.4.4.tgz#df69ffa49fdc4541d1f05e814352d575fb0f3b0d" - integrity sha512-PBwW1drgeavl9CadB7IPRUk6rkUP/O8jEkxjlC+ofuh3pw0bzJdAT+Kw7M1Yc9KtTb9xTaqUB8uvRtaybHa/tQ== +"@commitlint/top-level@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-18.6.1.tgz#429fcb985e3beaba9b17e05c0ae61926c647baf0" + integrity sha512-HyiHQZUTf0+r0goTCDs/bbVv/LiiQ7AVtz6KIar+8ZrseB9+YJAIo8HQ2IC2QT1y3N1lbW6OqVEsTHjbT6hGSw== dependencies: find-up "^5.0.0" -"@commitlint/types@^18.6.0": - version "18.6.0" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-18.6.0.tgz#3d3493cb5910f60f3749a8eb56aca47dc2e1b662" - integrity sha512-oavoKLML/eJa2rJeyYSbyGAYzTxQ6voG5oeX3OrxpfrkRWhJfm4ACnhoRf5tgiybx2MZ+EVFqC1Lw3W8/uwpZA== - dependencies: - chalk "^4.1.0" - "@commitlint/types@^18.6.1": version "18.6.1" resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-18.6.1.tgz#7eb3ab2d799d9166fbb98b96b0744581e59a4ad4" @@ -2632,48 +1844,48 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@csstools/cascade-layer-name-parser@^1.0.2", "@csstools/cascade-layer-name-parser@^1.0.5", "@csstools/cascade-layer-name-parser@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.7.tgz#9cfc36de9716d219492eb0e5ee75348b2213a8fd" - integrity sha512-9J4aMRJ7A2WRjaRLvsMeWrL69FmEuijtiW1XlK/sG+V0UJiHVYUyvj9mY4WAXfU/hGIiGOgL8e0jJcRyaZTjDQ== +"@csstools/cascade-layer-name-parser@^1.0.11", "@csstools/cascade-layer-name-parser@^1.0.2": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz#c9b85dc38240c0269385f557149f714e7875fda0" + integrity sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w== "@csstools/color-helpers@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-2.1.0.tgz#b27d8376e9e8a947878f10967481c22bf046976a" integrity sha512-OWkqBa7PDzZuJ3Ha7T5bxdSVfSCfTq6K1mbAhbO1MD+GSULGjrp45i5RudyJOedstSarN/3mdwu9upJE7gDXfw== -"@csstools/color-helpers@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-4.0.0.tgz#a1d6ffcefe5c1d389cbcca15f46da3cdaf241443" - integrity sha512-wjyXB22/h2OvxAr3jldPB7R7kjTUEzopvjitS8jWtyd8fN6xJ8vy1HnHu0ZNfEkqpBJgQ76Q+sBDshWcMvTa/w== +"@csstools/color-helpers@^4.1.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-4.2.0.tgz#e8629ca9dce03a3a309506e7892b7f862673cf85" + integrity sha512-hJJrSBzbfGxUsaR6X4Bzd/FLx0F1ulKnR5ljY9AiXCtsR+H+zSWQDFWlKES1BRaVZTDHLpIIHS9K2o0h+JLlrg== -"@csstools/css-calc@^1.1.1", "@csstools/css-calc@^1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.1.6.tgz#2d4e16725c3f981f7c6e469c306bcb1f490e1082" - integrity sha512-YHPAuFg5iA4qZGzMzvrQwzkvJpesXXyIUyaONflQrjtHB+BcFFbgltJkIkb31dMGO4SE9iZFA4HYpdk7+hnYew== +"@csstools/css-calc@^1.1.1", "@csstools/css-calc@^1.2.0", "@csstools/css-calc@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.2.2.tgz#bcb856e63ecc16a7508f43e77ea43ac5daaf2833" + integrity sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q== "@csstools/css-color-parser@^1.2.0": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-1.5.1.tgz#bddf5513a7327c511c9e1ec682419dcad1f91869" - integrity sha512-x+SajGB2paGrTjPOUorGi8iCztF008YMKXTn+XzGVDBEIVJ/W1121pPerpneJYGOe1m6zWLPLnzOPaznmQxKFw== + version "1.6.3" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-1.6.3.tgz#813948662e3010672990f2366b94f6174ddba285" + integrity sha512-pQPUPo32HW3/NuZxrwr3VJHE+vGqSTVI5gK4jGbuJ7eOFUrsTmZikXcVdInCVWOvuxK5xbCzwDWoTlZUCAKN+A== dependencies: - "@csstools/color-helpers" "^4.0.0" - "@csstools/css-calc" "^1.1.6" + "@csstools/color-helpers" "^4.1.0" + "@csstools/css-calc" "^1.2.0" -"@csstools/css-parser-algorithms@^2.1.1", "@csstools/css-parser-algorithms@^2.2.0", "@csstools/css-parser-algorithms@^2.3.2", "@csstools/css-parser-algorithms@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz#0c03cd5418a9f404a05ff2ffcb1b69d04e8ec532" - integrity sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ== +"@csstools/css-parser-algorithms@^2.1.1", "@csstools/css-parser-algorithms@^2.2.0", "@csstools/css-parser-algorithms@^2.6.3": + version "2.6.3" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz#b5e7eb2bd2a42e968ef61484f1490a8a4148a8eb" + integrity sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA== -"@csstools/css-tokenizer@^2.1.1", "@csstools/css-tokenizer@^2.2.1", "@csstools/css-tokenizer@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz#b099d543ea57b64f495915a095ead583866c50c6" - integrity sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg== +"@csstools/css-tokenizer@^2.1.1", "@csstools/css-tokenizer@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz#3d47e101ad48d815a4bdce8159fb5764f087f17a" + integrity sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g== -"@csstools/media-query-list-parser@^2.1.1", "@csstools/media-query-list-parser@^2.1.7": - version "2.1.7" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.7.tgz#a4836e3dbd693081a30b32ce9c2a781e1be16788" - integrity sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ== +"@csstools/media-query-list-parser@^2.1.1", "@csstools/media-query-list-parser@^2.1.11": + version "2.1.11" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz#465aa42f268599729350e305e1ae14a30c1daf51" + integrity sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA== "@csstools/postcss-cascade-layers@^3.0.1": version "3.0.1" @@ -2765,14 +1977,14 @@ "@csstools/css-tokenizer" "^2.1.1" "@csstools/postcss-media-minmax@^1.0.4": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.2.tgz#3c7ad7bebde6b329c40c96c3a78073aaa0714bb8" - integrity sha512-7qTRTJxW96u2yiEaTep1+8nto1O/rEDacewKqH+Riq5E6EsHTOmGHxkB4Se5Ic5xgDC4I05lLZxzzxnlnSypxA== + version "1.1.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz#300581d39cfade44fd9ac2b777c5abb1d088aaa8" + integrity sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg== dependencies: - "@csstools/css-calc" "^1.1.6" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - "@csstools/media-query-list-parser" "^2.1.7" + "@csstools/css-calc" "^1.2.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/media-query-list-parser" "^2.1.11" "@csstools/postcss-media-queries-aspect-ratio-number-values@^1.0.4": version "1.0.4" @@ -2867,6 +2079,11 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== +"@csstools/utilities@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-1.0.0.tgz#42f3c213f2fb929324d465684ab9f46a0febd4bb" + integrity sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg== + "@cypress/request@^3.0.0": version "3.0.1" resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.1.tgz#72d7d5425236a2413bd3d8bb66d02d9dc3168960" @@ -2957,10 +2174,10 @@ resolved "https://registry.yarnpkg.com/@edgeware/node-types/-/node-types-3.6.2-wako.tgz#21463fe18f68d5f3f0675244683d416d45ab0a3d" integrity sha512-kBGCoWoRSUOj864BiTwHGfsfuhGr2ycWEsjw9FB2VdJ5esJDVq3K6WZs/J2rtrtybKJWADqIp5K0ptDBlg1XqA== -"@emotion/is-prop-valid@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc" - integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw== +"@emotion/is-prop-valid@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337" + integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== dependencies: "@emotion/memoize" "^0.8.1" @@ -2981,10 +2198,10 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== -"@emotion/unitless@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" - integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== +"@emotion/unitless@0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" + integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== "@emotion/use-insertion-effect-with-fallbacks@^1.0.0", "@emotion/use-insertion-effect-with-fallbacks@^1.0.1": version "1.0.1" @@ -2999,6 +2216,14 @@ "@envelop/types" "3.0.2" tslib "^2.5.0" +"@envelop/core@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@envelop/core/-/core-5.0.1.tgz#7993c5d577b1de01645539cbbe3eab26f213a35a" + integrity sha512-wxA8EyE1fPnlbP0nC/SFI7uU8wSNf4YjxZhAPu0P63QbgIvqHtHsH4L3/u+rsTruzhk3OvNRgQyLsMfaR9uzAQ== + dependencies: + "@envelop/types" "5.0.0" + tslib "^2.5.0" + "@envelop/extended-validation@^2.0.6": version "2.0.6" resolved "https://registry.yarnpkg.com/@envelop/extended-validation/-/extended-validation-2.0.6.tgz#0dd156d3cbabb5659af6dcd868cc0d1a090f4935" @@ -3007,6 +2232,23 @@ "@graphql-tools/utils" "^8.8.0" tslib "^2.5.0" +"@envelop/extended-validation@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@envelop/extended-validation/-/extended-validation-4.0.0.tgz#5c445a86d37a3143bc9e87dfe34563a2c6e3f8eb" + integrity sha512-pvJ/OL+C+lpNiiCXezHT+vP3PTq37MQicoOB1l5MdgOOZZWRAp0NDOgvEKcXUY7AWNpvNHgSE0QFSRfGwsfwFQ== + dependencies: + "@graphql-tools/utils" "^10.0.0" + tslib "^2.5.0" + +"@envelop/graphql-jit@^8.0.0": + version "8.0.3" + resolved "https://registry.yarnpkg.com/@envelop/graphql-jit/-/graphql-jit-8.0.3.tgz#6b3fe0fcf9b0dfbfb02571327dd60ebd5ef74d6e" + integrity sha512-IZnKc7dVOQV9jEi5s5RkG8fVKqc6Ss/mBN9PRt2iYFa9o6XkL/haPLJRfWFsS/CSJfFOQuzLyxYuALA8DaoOYw== + dependencies: + graphql-jit "0.8.6" + tslib "^2.5.0" + value-or-promise "^1.0.12" + "@envelop/types@3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@envelop/types/-/types-3.0.2.tgz#a4b29375b7fcee39bb5830f87f66bbc815cf305e" @@ -3014,6 +2256,13 @@ dependencies: tslib "^2.5.0" +"@envelop/types@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@envelop/types/-/types-5.0.0.tgz#3ae59b50ec31d4bdcc7bd0b47e9c8cf2ac44b0ff" + integrity sha512-IPjmgSc4KpQRlO4qbEDnBEixvtb06WDmjKfi/7fkZaryh5HuOmTtixe1EupQI5XfXO8joc3d27uUZ0QdC++euA== + dependencies: + tslib "^2.5.0" + "@envelop/validation-cache@^5.1.2": version "5.1.3" resolved "https://registry.yarnpkg.com/@envelop/validation-cache/-/validation-cache-5.1.3.tgz#8348453183af348147e2b690a431b6ca81d2a6bc" @@ -3505,12 +2754,7 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.56.0", "@eslint/js@^8.38.0", "@eslint/js@^8.46.0": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== - -"@eslint/js@8.57.0", "@eslint/js@^8.56.0": +"@eslint/js@8.57.0", "@eslint/js@^8.38.0", "@eslint/js@^8.46.0", "@eslint/js@^8.56.0": version "8.57.0" resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== @@ -3544,7 +2788,7 @@ "@ethereumjs/common" "^2.6.4" ethereumjs-util "^7.1.5" -"@ethereumjs/tx@^4.1.2": +"@ethereumjs/tx@^4.1.2", "@ethereumjs/tx@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-4.2.0.tgz#5988ae15daf5a3b3c815493bc6b495e76009e853" integrity sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw== @@ -4309,9 +3553,9 @@ fast-uri "^2.0.0" "@fastify/busboy@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" - integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== "@fastify/deepmerge@^1.0.0": version "1.3.0" @@ -4366,32 +3610,32 @@ resolved "https://registry.yarnpkg.com/@fisch0920/medium-zoom/-/medium-zoom-1.0.7.tgz#46b09b40a1be796f7ff13ea594973e1f1d3c66f6" integrity sha512-hPUrgVM/QvsZdZzDTPyL1C1mOtEw03RqTLmK7ZlJ8S/64u4O4O5BvPvjB/9kyLtE6iVaS9UDRAMSwmM9uh2JIw== -"@floating-ui/core@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1" - integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== +"@floating-ui/core@^1.0.0": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.2.tgz#d37f3e0ac1f1c756c7de45db13303a266226851a" + integrity sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg== dependencies: - "@floating-ui/utils" "^0.2.1" + "@floating-ui/utils" "^0.2.0" -"@floating-ui/dom@^1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.1.tgz#d552e8444f77f2d88534372369b3771dc3a2fa5d" - integrity sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ== +"@floating-ui/dom@^1.0.0": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.5.tgz#323f065c003f1d3ecf0ff16d2c2c4d38979f4cb9" + integrity sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw== dependencies: - "@floating-ui/core" "^1.6.0" - "@floating-ui/utils" "^0.2.1" + "@floating-ui/core" "^1.0.0" + "@floating-ui/utils" "^0.2.0" "@floating-ui/react-dom@^2.0.0": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.8.tgz#afc24f9756d1b433e1fe0d047c24bd4d9cefaa5d" - integrity sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.0.tgz#4f0e5e9920137874b2405f7d6c862873baf4beff" + integrity sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA== dependencies: - "@floating-ui/dom" "^1.6.1" + "@floating-ui/dom" "^1.0.0" -"@floating-ui/utils@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" - integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== +"@floating-ui/utils@^0.2.0": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.2.tgz#d8bae93ac8b815b2bd7a98078cf91e2724ef11e5" + integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw== "@fragnova/api-augment@0.1.0-spec-1.0.4-mainnet": version "0.1.0-spec-1.0.4-mainnet" @@ -4412,34 +3656,35 @@ "@polkadot/types" "^10.7.3" "@graphprotocol/client-add-source-name@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@graphprotocol/client-add-source-name/-/client-add-source-name-2.0.0.tgz#62d545fc497b3b18b4ceb9006d1daa806ae6136d" - integrity sha512-3vX8mVPIEJFwAoRhjTPd9IjQrBuE+Gv+JB7IEf8/9222qiU9EzHVFUekKxVtcxQXD40CfageS41CxOreWQ1enA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@graphprotocol/client-add-source-name/-/client-add-source-name-2.0.3.tgz#ec90f6ba87b78856d633729eed3828ff4b183280" + integrity sha512-30VxjW8yEytySAJ7S+6pC3SII8BGyzQbLTIDr7FPEdj5FHvVKq3WQxDNHwWPEoEYYEEWDlapw3+e7leDwW9MCQ== dependencies: lodash "^4.17.21" tslib "^2.4.0" "@graphprotocol/client-auto-pagination@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@graphprotocol/client-auto-pagination/-/client-auto-pagination-2.0.0.tgz#1042a5d636622ec5969387638fbb8f29258ce8d9" - integrity sha512-TouHgs6rQLpZSgnMoPdes8/ZTtMMEoxWeUUCkfho/xfSi49prb5DcsI83pykln0OEAUnNPnaX0MhP+xA5LtFSg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@graphprotocol/client-auto-pagination/-/client-auto-pagination-2.0.3.tgz#0d72c04e4158914bb237a956d33b9c8c2520c54c" + integrity sha512-ZYMO4/tQ5ndSYeaZ+uucJYFNVc1DYSC6jK5AfJYElEfRMRZrj7jXL6RViBNmsSYuOXR2EIyEqPBOAdy2oDLWdw== dependencies: lodash "^4.17.21" tslib "^2.4.0" "@graphprotocol/client-auto-type-merging@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@graphprotocol/client-auto-type-merging/-/client-auto-type-merging-2.0.0.tgz#bb66da3704567291cbc2c510185f08ffaa046d80" - integrity sha512-mxqXKHK2lO+k4r02Q44n3qhd5dufo+SSDduD8zGUDBsYcRQAtQD9PwmXRHyUoB9nw4A+NC+CtVh+76fueXCG1w== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@graphprotocol/client-auto-type-merging/-/client-auto-type-merging-2.0.3.tgz#3de41006912c9b80cc0406fc80d1f601fb682e1f" + integrity sha512-vJVzvxk3FRwHc4w9+GP4QBrQ3oxNbveH1k3bEGokSo5DbGMQ2HIYFrGRZ+hICUQBIcqgK+beWa35BZtEMnBWaw== dependencies: - "@graphql-mesh/transform-type-merging" "^0.93.0" + "@graphql-mesh/transform-type-merging" "^0.98.0" tslib "^2.4.0" "@graphprotocol/client-block-tracking@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@graphprotocol/client-block-tracking/-/client-block-tracking-2.0.0.tgz#01e5bd9406aa3f85ff7ab414bc2021d473548cee" - integrity sha512-mpr0JAlefFGhxeb25ndeRKZ+t9cDHcUKGfRKIsoDzCclUEh5tBVTiQCDVGt6Eu+pxnrHPF2v/NQWktaB3+6twQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/@graphprotocol/client-block-tracking/-/client-block-tracking-2.0.2.tgz#84948e9c25eb3fd20a9c018770346472ce3ccf92" + integrity sha512-gVOUq77kxniXk3kQ+Bl2GHB5HvYYDChV/e2YMxHieVgCVEmQ/CzRRDdSfBf898ZAyqeY3QNsdbR/EpcEyM4bFw== dependencies: + "@graphql-mesh/fusion-runtime" "^0.3.0" "@graphql-tools/utils" "^10.0.0" tslib "^2.4.0" @@ -4458,9 +3703,9 @@ tslib "^2.4.0" "@graphprotocol/client-polling-live@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@graphprotocol/client-polling-live/-/client-polling-live-2.0.0.tgz#3ee4e0f1b8208275bf0ab400c56e0a13ee12d40a" - integrity sha512-JQ0sKiFCX+ErR0fynBNUg/WDiVaaEndlS12fkgrFZrQA2vVpSyow9pW0nKMGVZJa4cN+VDskgwqK5BWXMvdeRA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/@graphprotocol/client-polling-live/-/client-polling-live-2.0.1.tgz#da0f56f6a26b943a8a9df7419586d5985f90c884" + integrity sha512-jE+9cOM5gAC18uMA7nC7w5X/ru4U4ZrZxWqh3N+gxoLIPpnNYerwzRfFJskPyzl0QQjMiUMua9agqKCyxNBlOA== dependencies: "@repeaterjs/repeater" "^3.0.4" tslib "^2.4.0" @@ -4749,6 +3994,23 @@ react-native-fs "2.20.0" react-native-path "0.0.5" +"@graphql-mesh/fusion-runtime@^0.3.0": + version "0.3.7" + resolved "https://registry.yarnpkg.com/@graphql-mesh/fusion-runtime/-/fusion-runtime-0.3.7.tgz#044255d031242e4da0174dd7823d65164d52351e" + integrity sha512-GIt/1SgKq5yVo+dHOLsABrRFeAMstHqGRybNqRqnLUg/nmc86TxXA+yZZk2GnxoeItOZQw4U7u/++8C1xfV1aQ== + dependencies: + "@graphql-mesh/runtime" "^0.99.7" + "@graphql-mesh/transport-common" "^0.2.6" + "@graphql-mesh/types" "^0.98.6" + "@graphql-mesh/utils" "^0.98.6" + "@graphql-tools/delegate" "^10.0.11" + "@graphql-tools/stitch" "^9.2.9" + "@graphql-tools/stitching-directives" "^3.0.2" + "@graphql-tools/utils" "^10.2.1" + "@graphql-tools/wrap" "^10.0.5" + graphql-yoga "^5.3.0" + tslib "^2.4.0" + "@graphql-mesh/graphql@^0.93.0": version "0.93.1" resolved "https://registry.yarnpkg.com/@graphql-mesh/graphql/-/graphql-0.93.1.tgz#f4dd490e8999080293660e346909f8e443726fd6" @@ -4800,6 +4062,22 @@ "@graphql-tools/wrap" "^9.4.2" "@whatwg-node/fetch" "^0.8.3" +"@graphql-mesh/runtime@^0.99.7": + version "0.99.7" + resolved "https://registry.yarnpkg.com/@graphql-mesh/runtime/-/runtime-0.99.7.tgz#5863052110bc7157a553717abdf21f007ccbac9c" + integrity sha512-WzU4n/MROYmk5OWuFhHtW6XRiU6Kw1/IGnC+WjZzsxouidhFHY8sDhEmSSr5ihPwJ0fHQU2KB/Kd/Ugih9mT2Q== + dependencies: + "@envelop/core" "^5.0.0" + "@envelop/extended-validation" "^4.0.0" + "@envelop/graphql-jit" "^8.0.0" + "@graphql-mesh/string-interpolation" "^0.5.4" + "@graphql-tools/batch-delegate" "^9.0.3" + "@graphql-tools/delegate" "^10.0.11" + "@graphql-tools/executor" "^1.2.0" + "@graphql-tools/wrap" "^10.0.5" + "@whatwg-node/fetch" "^0.9.0" + graphql-jit "0.8.2" + "@graphql-mesh/store@^0.93.1": version "0.93.1" resolved "https://registry.yarnpkg.com/@graphql-mesh/store/-/store-0.93.1.tgz#d350a9f337943d01dd9a4504a02b2067991300a2" @@ -4816,13 +4094,30 @@ json-pointer "0.6.2" lodash.get "4.4.2" -"@graphql-mesh/transform-type-merging@^0.93.0": - version "0.93.1" - resolved "https://registry.yarnpkg.com/@graphql-mesh/transform-type-merging/-/transform-type-merging-0.93.1.tgz#849103d2ad662b1169425e62493d63a83bdc6667" - integrity sha512-CUrqCMaEqO1LDusv59UPqmQju3f+LpEGxFu7CydMiIvbfKDDDrf8+dF3OVU7d/ZOMRxB6hR80JsQF0SVeXPCOQ== +"@graphql-mesh/string-interpolation@^0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@graphql-mesh/string-interpolation/-/string-interpolation-0.5.4.tgz#a66808ca20d8f35a8af4c30cf66e7eb14c72e12b" + integrity sha512-Luw/AFPcvTBBNr3KC7d9REyAEC8ZS6HUZiGMKOGYp+uviHUjX30loEVMOkLdrVNPN4Qf35k6yt4NpapTXqcl/Q== dependencies: - "@graphql-tools/delegate" "^9.0.32" - "@graphql-tools/stitching-directives" "^2.3.34" + dayjs "1.11.11" + json-pointer "0.6.2" + lodash.get "4.4.2" + +"@graphql-mesh/transform-type-merging@^0.98.0": + version "0.98.6" + resolved "https://registry.yarnpkg.com/@graphql-mesh/transform-type-merging/-/transform-type-merging-0.98.6.tgz#07373f537a0fb297365ac7a7e8122626807c5bdd" + integrity sha512-3Jj7PRS+7NnkHgYPqBKqwjxlddDenDeN1SvmIeIewvppQmRFA65cq3VLsTydjSA8g6rK7+JH6+ODzt6dQ3+yBw== + dependencies: + "@graphql-tools/delegate" "^10.0.11" + "@graphql-tools/stitching-directives" "^3.0.0" + +"@graphql-mesh/transport-common@^0.2.6": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@graphql-mesh/transport-common/-/transport-common-0.2.6.tgz#74363580a3f541ec18d3581bc5992606b8e96726" + integrity sha512-5pbUMNt5KfyDvLfY8FepC/QrWby+7vK2YDhuLhehl+Iyn0/1wa5Frd7P3uIrKvxoA4mGMrG/Y/XxcH8xaRAo8Q== + dependencies: + "@graphql-tools/delegate" "^10.0.11" + "@graphql-tools/utils" "^10.2.1" "@graphql-mesh/types@^0.93.1": version "0.93.2" @@ -4833,6 +4128,15 @@ "@graphql-tools/delegate" "^9.0.32" "@graphql-typed-document-node/core" "^3.2.0" +"@graphql-mesh/types@^0.98.6": + version "0.98.6" + resolved "https://registry.yarnpkg.com/@graphql-mesh/types/-/types-0.98.6.tgz#ef34e0675ee9cb37a37ec5241e5e8d8b522ea13c" + integrity sha512-OWhcIGPTI6lr2oVQUHooxwhfdGbDAHdbim+rfcUTJmdn9Nr1M8PfQMqpPS4mY8vyvkyVuFrD/wFOQRg8gTZCTg== + dependencies: + "@graphql-tools/batch-delegate" "^9.0.3" + "@graphql-tools/delegate" "^10.0.11" + "@graphql-typed-document-node/core" "^3.2.0" + "@graphql-mesh/utils@^0.93.1": version "0.93.2" resolved "https://registry.yarnpkg.com/@graphql-mesh/utils/-/utils-0.93.2.tgz#153b0f09f202c86160beba046c3eaeaceaa5c10d" @@ -4846,6 +4150,20 @@ lodash.topath "^4.5.2" tiny-lru "^8.0.2" +"@graphql-mesh/utils@^0.98.6": + version "0.98.6" + resolved "https://registry.yarnpkg.com/@graphql-mesh/utils/-/utils-0.98.6.tgz#ecd683249389f8b9989e41eb136c2b7793401f3a" + integrity sha512-0/Kmov8oLHR1W/qDp34cT7CCsPU7XEPovgHJryzuIrnmZ36YGbUdDMXpCV7/SUkAw5dqE6W6GmxzUcLmwTAGJQ== + dependencies: + "@graphql-mesh/string-interpolation" "^0.5.4" + "@graphql-tools/delegate" "^10.0.11" + "@whatwg-node/fetch" "^0.9.13" + dset "^3.1.2" + js-yaml "^4.1.0" + lodash.get "^4.4.2" + lodash.topath "^4.5.2" + tiny-lru "^11.0.0" + "@graphql-tools/apollo-engine-loader@^7.3.6": version "7.3.26" resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.3.26.tgz#91e54460d5579933e42a2010b8688c3459c245d8" @@ -4867,6 +4185,17 @@ tslib "^2.4.0" value-or-promise "^1.0.12" +"@graphql-tools/batch-delegate@^9.0.3": + version "9.0.3" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-delegate/-/batch-delegate-9.0.3.tgz#7d496a693e7f3226dbff5fc30989bbbd7ef5fa16" + integrity sha512-wYYbDLQeXU+lEUQJDjylN/e1V3OTVkeJSZYgroDniBfg3etDuOJruAIWZ6S6skKB1PZBy1emEbs6HjrziHeX0A== + dependencies: + "@graphql-tools/delegate" "^10.0.11" + "@graphql-tools/utils" "^10.2.1" + dataloader "2.2.2" + tslib "^2.4.0" + value-or-promise "^1.0.12" + "@graphql-tools/batch-execute@^8.5.19", "@graphql-tools/batch-execute@^8.5.22": version "8.5.22" resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.22.tgz#a742aa9d138fe794e786d8fb6429665dc7df5455" @@ -4877,6 +4206,16 @@ tslib "^2.4.0" value-or-promise "^1.0.12" +"@graphql-tools/batch-execute@^9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-9.0.4.tgz#11601409c0c33491971fc82592de12390ec58be2" + integrity sha512-kkebDLXgDrep5Y0gK1RN3DMUlLqNhg60OAz0lTCqrYeja6DshxLtLkj+zV4mVbBA4mQOEoBmw6g1LZs3dA84/w== + dependencies: + "@graphql-tools/utils" "^10.0.13" + dataloader "^2.2.2" + tslib "^2.4.0" + value-or-promise "^1.0.12" + "@graphql-tools/code-file-loader@^7.3.17", "@graphql-tools/code-file-loader@^7.3.22": version "7.3.23" resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-7.3.23.tgz#33793f9a1f8e74981f8ae6ec4ab7061f9713db15" @@ -4888,6 +4227,18 @@ tslib "^2.4.0" unixify "^1.0.0" +"@graphql-tools/delegate@^10.0.11", "@graphql-tools/delegate@^10.0.4": + version "10.0.11" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-10.0.11.tgz#d66b46a5f90b0c323848e0b38379836842d1ce72" + integrity sha512-+sKeecdIVXhFB/66e5yjeKYZ3Lpn52yNG637ElVhciuLGgFc153rC6l6zcuNd9yx5wMrNx35U/h3HsMIEI3xNw== + dependencies: + "@graphql-tools/batch-execute" "^9.0.4" + "@graphql-tools/executor" "^1.2.1" + "@graphql-tools/schema" "^10.0.4" + "@graphql-tools/utils" "^10.2.1" + dataloader "^2.2.2" + tslib "^2.5.0" + "@graphql-tools/delegate@^9.0.31", "@graphql-tools/delegate@^9.0.32", "@graphql-tools/delegate@^9.0.35": version "9.0.35" resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-9.0.35.tgz#94683f4bcec63520b4a6c8b2abf2e2e9324ea4f1" @@ -4961,6 +4312,17 @@ tslib "^2.4.0" value-or-promise "^1.0.12" +"@graphql-tools/executor@^1.2.0", "@graphql-tools/executor@^1.2.1", "@graphql-tools/executor@^1.2.5": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-1.2.6.tgz#71caa7c52108e4744bfa5ffdc958126bb4b48ff2" + integrity sha512-+1kjfqzM5T2R+dCw7F4vdJ3CqG+fY/LYJyhNiWEFtq0ToLwYzR/KKyD8YuzTirEjSxWTVlcBh7endkx5n5F6ew== + dependencies: + "@graphql-tools/utils" "^10.1.1" + "@graphql-typed-document-node/core" "3.2.0" + "@repeaterjs/repeater" "^3.0.4" + tslib "^2.4.0" + value-or-promise "^1.0.12" + "@graphql-tools/git-loader@^7.2.13": version "7.3.0" resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-7.3.0.tgz#ca10c17d4f58c4592432d9d2ac1c2b393aebad16" @@ -5046,6 +4408,14 @@ "@graphql-tools/utils" "^9.2.1" tslib "^2.4.0" +"@graphql-tools/merge@^9.0.3", "@graphql-tools/merge@^9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-9.0.4.tgz#66c34cbc2b9a99801c0efca7b8134b2c9aecdb06" + integrity sha512-MivbDLUQ+4Q8G/Hp/9V72hbn810IJDEZQ57F01sHnlrrijyadibfVhaQfW/pNH+9T/l8ySZpaR/DpL5i+ruZ+g== + dependencies: + "@graphql-tools/utils" "^10.0.13" + tslib "^2.4.0" + "@graphql-tools/optimize@^1.3.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@graphql-tools/optimize/-/optimize-1.4.0.tgz#20d6a9efa185ef8fc4af4fd409963e0907c6e112" @@ -5096,6 +4466,16 @@ tslib "^2.4.0" value-or-promise "^1.0.12" +"@graphql-tools/schema@^10.0.0", "@graphql-tools/schema@^10.0.3", "@graphql-tools/schema@^10.0.4": + version "10.0.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-10.0.4.tgz#d4fc739a2cc07b4fc5f31a714178a561cba210cd" + integrity sha512-HuIwqbKxPaJujox25Ra4qwz0uQzlpsaBOzO6CVfzB/MemZdd+Gib8AIvfhQArK0YIN40aDran/yi+E5Xf0mQww== + dependencies: + "@graphql-tools/merge" "^9.0.3" + "@graphql-tools/utils" "^10.2.1" + tslib "^2.4.0" + value-or-promise "^1.0.12" + "@graphql-tools/stitch@^8.7.48": version "8.7.50" resolved "https://registry.yarnpkg.com/@graphql-tools/stitch/-/stitch-8.7.50.tgz#bcadf4b0dd20e22fb568042e94d711750c10f122" @@ -5111,6 +4491,21 @@ tslib "^2.4.0" value-or-promise "^1.0.11" +"@graphql-tools/stitch@^9.2.9": + version "9.2.9" + resolved "https://registry.yarnpkg.com/@graphql-tools/stitch/-/stitch-9.2.9.tgz#4556c586a2e5faa6b8bce6330f4dd0b2f2748eb7" + integrity sha512-+vWcsdL5nGyKMuq08sME+hf3vmp4qnkAiSj25a9HaBU118KJCvp9wTMYRB6Om5H2nlStDxP2HMS4RK3fv7vf8w== + dependencies: + "@graphql-tools/batch-delegate" "^9.0.3" + "@graphql-tools/delegate" "^10.0.11" + "@graphql-tools/executor" "^1.2.1" + "@graphql-tools/merge" "^9.0.4" + "@graphql-tools/schema" "^10.0.4" + "@graphql-tools/utils" "^10.2.1" + "@graphql-tools/wrap" "^10.0.2" + tslib "^2.4.0" + value-or-promise "^1.0.11" + "@graphql-tools/stitching-directives@^2.3.34": version "2.3.34" resolved "https://registry.yarnpkg.com/@graphql-tools/stitching-directives/-/stitching-directives-2.3.34.tgz#b0fc9e71843e8b1729e253f54117321c445ba0bc" @@ -5120,6 +4515,15 @@ "@graphql-tools/utils" "^9.2.1" tslib "^2.4.0" +"@graphql-tools/stitching-directives@^3.0.0", "@graphql-tools/stitching-directives@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@graphql-tools/stitching-directives/-/stitching-directives-3.0.2.tgz#5e48d70c8f10575ba6ae8bc019b477db3788e8eb" + integrity sha512-xZ/gU+p3YKm/asvxiseuyDIS6NL1+LKMhoafqSadxxweDsskSpPrWZfOWGlblVq/w7iikxQhRF2b8+VVgF6Myg== + dependencies: + "@graphql-tools/delegate" "^10.0.4" + "@graphql-tools/utils" "^10.0.13" + tslib "^2.4.0" + "@graphql-tools/url-loader@^7.13.2", "@graphql-tools/url-loader@^7.17.18", "@graphql-tools/url-loader@^7.9.7": version "7.17.18" resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-7.17.18.tgz#3e253594d23483e4c0dd3a4c3dd2ad5cd0141192" @@ -5139,10 +4543,10 @@ value-or-promise "^1.0.11" ws "^8.12.0" -"@graphql-tools/utils@^10.0.0": - version "10.0.13" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-10.0.13.tgz#d0ab7a4dd02a8405f5ef62dd140b7579ba69f8cb" - integrity sha512-fMILwGr5Dm2zefNItjQ6C2rauigklv69LIwppccICuGTnGaOp3DspLt/6Lxj72cbg5d9z60Sr+Egco3CJKLsNg== +"@graphql-tools/utils@^10.0.0", "@graphql-tools/utils@^10.0.13", "@graphql-tools/utils@^10.1.0", "@graphql-tools/utils@^10.1.1", "@graphql-tools/utils@^10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-10.2.1.tgz#5816c1ebbe0adb8b039bd94b1f41c5ffa0dcc41e" + integrity sha512-U8OMdkkEt3Vp3uYHU2pMc6mwId7axVAcSSmcqJcUmWNPqY2pfee5O655ybTI2kNPWAe58Zu6gLu4Oi4QT4BgWA== dependencies: "@graphql-typed-document-node/core" "^3.1.1" cross-inspect "1.0.0" @@ -5164,6 +4568,17 @@ "@graphql-typed-document-node/core" "^3.1.1" tslib "^2.4.0" +"@graphql-tools/wrap@^10.0.2", "@graphql-tools/wrap@^10.0.5": + version "10.0.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-10.0.5.tgz#614b964a158887b4a644f5425b2b9a57b5751f72" + integrity sha512-Cbr5aYjr3HkwdPvetZp1cpDWTGdD1Owgsb3z/ClzhmrboiK86EnQDxDvOJiQkDCPWE9lNBwj8Y4HfxroY0D9DQ== + dependencies: + "@graphql-tools/delegate" "^10.0.4" + "@graphql-tools/schema" "^10.0.3" + "@graphql-tools/utils" "^10.1.1" + tslib "^2.4.0" + value-or-promise "^1.0.12" + "@graphql-tools/wrap@^9.4.2": version "9.4.2" resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-9.4.2.tgz#30835587c4c73be1780908a7cb077d8013aa2703" @@ -5187,6 +4602,13 @@ dependencies: tslib "^2.3.1" +"@graphql-yoga/logger@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@graphql-yoga/logger/-/logger-2.0.0.tgz#51c91cf07fc42b0d100d887315a20a4c9cac342e" + integrity sha512-Mg8psdkAp+YTG1OGmvU+xa6xpsAmSir0hhr3yFYPyLNwzUj95DdIwsMpKadDj9xDpYgJcH3Hp/4JMal9DhQimA== + dependencies: + tslib "^2.5.2" + "@graphql-yoga/subscription@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@graphql-yoga/subscription/-/subscription-3.1.0.tgz#4a0bb0b9db2602d02c68f9828603e1e40329140b" @@ -5197,6 +4619,16 @@ "@whatwg-node/events" "0.0.2" tslib "^2.3.1" +"@graphql-yoga/subscription@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@graphql-yoga/subscription/-/subscription-5.0.0.tgz#c0aedd3f7c0c0564a2fe687e9f45c16f70bdffc5" + integrity sha512-Ri7sK8hmxd/kwaEa0YT8uqQUb2wOLsmBMxI90QDyf96lzOMJRgBuNYoEkU1pSgsgmW2glceZ96sRYfaXqwVxUw== + dependencies: + "@graphql-yoga/typed-event-target" "^3.0.0" + "@repeaterjs/repeater" "^3.0.4" + "@whatwg-node/events" "^0.1.0" + tslib "^2.5.2" + "@graphql-yoga/typed-event-target@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@graphql-yoga/typed-event-target/-/typed-event-target-1.0.0.tgz#dae3c0146f08a4dc30b5b890f8bab706c2b62199" @@ -5205,28 +4637,36 @@ "@repeaterjs/repeater" "^3.0.4" tslib "^2.3.1" +"@graphql-yoga/typed-event-target@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.0.tgz#57dc42e052d8294555d26ee61854d72a0236fee0" + integrity sha512-w+liuBySifrstuHbFrHoHAEyVnDFVib+073q8AeAJ/qqJfvFvAwUPLLtNohR/WDVRgSasfXtl3dcNuVJWN+rjg== + dependencies: + "@repeaterjs/repeater" "^3.0.4" + tslib "^2.5.2" + "@grpc/grpc-js@^1.7.1", "@grpc/grpc-js@^1.7.3": - version "1.9.14" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.9.14.tgz#236378822876cbf7903f9d61a0330410e8dcc5a1" - integrity sha512-nOpuzZ2G3IuMFN+UPPpKrC6NsLmWsTqSsm66IRfnBt1D4pwTqE27lmbpcPM+l2Ua4gE7PfjRHI6uedAy7hoXUw== + version "1.10.8" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.10.8.tgz#99787785cd8335be861afd1cd485ae9f058e4484" + integrity sha512-vYVqYzHicDqyKB+NQhAc54I1QWCBLCrYG6unqOIcBTHx+7x8C9lcoLj3KVJXs2VB4lUbpWY+Kk9NipcbXYWmvg== dependencies: - "@grpc/proto-loader" "^0.7.8" - "@types/node" ">=12.12.47" + "@grpc/proto-loader" "^0.7.13" + "@js-sdsl/ordered-map" "^4.4.2" -"@grpc/proto-loader@^0.7.8": - version "0.7.10" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.10.tgz#6bf26742b1b54d0a473067743da5d3189d06d720" - integrity sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ== +"@grpc/proto-loader@^0.7.13": + version "0.7.13" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf" + integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw== dependencies: lodash.camelcase "^4.3.0" long "^5.0.0" - protobufjs "^7.2.4" + protobufjs "^7.2.5" yargs "^17.7.2" "@headlessui/react@^1.7.3": - version "1.7.18" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.18.tgz#30af4634d2215b2ca1aa29d07f33d02bea82d9d7" - integrity sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ== + version "1.7.19" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.19.tgz#91c78cf5fcb254f4a0ebe96936d48421caf75f40" + integrity sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw== dependencies: "@tanstack/react-virtual" "^3.0.0-beta.60" client-only "^0.0.1" @@ -5249,7 +4689,7 @@ "@opentelemetry/sdk-trace-base" "^1.13.0" axios "^1.1.3" -"@humanwhocodes/config-array@^0.11.10", "@humanwhocodes/config-array@^0.11.13", "@humanwhocodes/config-array@^0.11.14": +"@humanwhocodes/config-array@^0.11.10", "@humanwhocodes/config-array@^0.11.14": version "0.11.14" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== @@ -5269,9 +4709,14 @@ integrity sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA== "@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@iarna/toml@^2.2.5": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" + integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== "@iden3/bigarray@0.0.2": version "0.0.2" @@ -5286,6 +4731,14 @@ fastfile "0.0.20" ffjavascript "^0.2.48" +"@iden3/binfileutils@0.0.12": + version "0.0.12" + resolved "https://registry.yarnpkg.com/@iden3/binfileutils/-/binfileutils-0.0.12.tgz#3772552f57551814ff606fa68ea1e0ef52795ce3" + integrity sha512-naAmzuDufRIcoNfQ1d99d7hGHufLA3wZSibtr4dMe6ZeiOPV1KwOZWTJ1YVz4HbaWlpDuzVU72dS4ATQS4PXBQ== + dependencies: + fastfile "0.0.20" + ffjavascript "^0.3.0" + "@import-maps/resolve@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@import-maps/resolve/-/resolve-1.0.1.tgz#1e9fcadcf23aa0822256a329aabca241879d37c9" @@ -5532,16 +4985,7 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== @@ -5551,14 +4995,9 @@ "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.2.1": version "1.2.1" @@ -5566,12 +5005,12 @@ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" @@ -5586,15 +5025,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.22" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" - integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -5602,11 +5033,21 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@js-sdsl/ordered-map@^4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" + integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== + "@juggle/resize-observer@^3.3.1": version "3.4.0" resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== +"@kamilkisiela/fast-url-parser@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@kamilkisiela/fast-url-parser/-/fast-url-parser-1.1.4.tgz#9d68877a489107411b953c54ea65d0658b515809" + integrity sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew== + "@kiltprotocol/type-definitions@0.33.1": version "0.33.1" resolved "https://registry.yarnpkg.com/@kiltprotocol/type-definitions/-/type-definitions-0.33.1.tgz#d9b908cc613e6dfabdc0eeb6a1cd3f9313158c01" @@ -5625,9 +5066,9 @@ "@open-web3/orml-type-definitions" "^0.8.2-9" "@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== "@lit-labs/ssr-dom-shim@^1.0.0", "@lit-labs/ssr-dom-shim@^1.1.0": version "1.2.0" @@ -5699,6 +5140,15 @@ "@metamask/utils" "^3.4.1" superstruct "^1.0.3" +"@metamask/eth-json-rpc-provider@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-provider/-/eth-json-rpc-provider-1.0.1.tgz#3fd5316c767847f4ca107518b611b15396a5a32c" + integrity sha512-whiUMPlAOrVGmX8aKYVPvlKyG4CpQXiNNyt74vE1xb5sPvmx5oA7B/kOi/JdBvhGQq97U1/AVdXEdk2zkP8qyA== + dependencies: + "@metamask/json-rpc-engine" "^7.0.0" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^5.0.1" + "@metamask/eth-sig-util@^5.0.2": version "5.1.0" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-5.1.0.tgz#a47f62800ee1917fef976ba67544a0ccd7d1bd6b" @@ -5724,12 +5174,34 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@metamask/safe-event-emitter@2.0.0", "@metamask/safe-event-emitter@^2.0.0": +"@metamask/json-rpc-engine@^7.0.0": + version "7.3.3" + resolved "https://registry.yarnpkg.com/@metamask/json-rpc-engine/-/json-rpc-engine-7.3.3.tgz#f2b30a2164558014bfcca45db10f5af291d989af" + integrity sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg== + dependencies: + "@metamask/rpc-errors" "^6.2.1" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^8.3.0" + +"@metamask/rpc-errors@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@metamask/rpc-errors/-/rpc-errors-6.2.1.tgz#f5daf429ededa7cb83069dc621bd5738fe2a1d80" + integrity sha512-VTgWkjWLzb0nupkFl1duQi9Mk8TGT9rsdnQg6DeRrYEFxtFOh0IF8nAwxM/4GWqDl6uIB06lqUBgUrAVWl62Bw== + dependencies: + "@metamask/utils" "^8.3.0" + fast-safe-stringify "^2.0.6" + +"@metamask/safe-event-emitter@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== -"@metamask/utils@^3.0.1", "@metamask/utils@^3.4.1": +"@metamask/safe-event-emitter@^3.0.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.1.tgz#e89b840a7af8097a8ed4953d8dc8470d1302d3ef" + integrity sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw== + +"@metamask/utils@^3.4.1": version "3.6.0" resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-3.6.0.tgz#b218b969a05ca7a8093b5d1670f6625061de707d" integrity sha512-9cIRrfkWvHblSiNDVXsjivqa9Ak0RYo/1H6tqTqTbAx+oBK2Sva0lWDHxGchOqA7bySGUJKAWSNJvH6gdHZ0gQ== @@ -5739,7 +5211,7 @@ semver "^7.3.8" superstruct "^1.0.3" -"@metamask/utils@^5.0.2": +"@metamask/utils@^5.0.1", "@metamask/utils@^5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-5.0.2.tgz#140ba5061d90d9dac0280c19cab101bc18c8857c" integrity sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g== @@ -5750,6 +5222,21 @@ semver "^7.3.8" superstruct "^1.0.3" +"@metamask/utils@^8.3.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-8.4.0.tgz#f44812c96467a4e1b70b2edff6ee89a9caa4e354" + integrity sha512-dbIc3C7alOe0agCuBHM1h71UaEaEqOk2W8rAtEn8QGz4haH2Qq7MoK6i7v2guzvkJVVh79c+QCzIqphC3KvrJg== + dependencies: + "@ethereumjs/tx" "^4.2.0" + "@noble/hashes" "^1.3.1" + "@scure/base" "^1.1.3" + "@types/debug" "^4.1.7" + debug "^4.3.4" + pony-cause "^2.1.10" + semver "^7.5.4" + superstruct "^1.0.3" + uuid "^9.0.1" + "@metaverse-network-sdk/type-definitions@0.0.1-16": version "0.0.1-16" resolved "https://registry.yarnpkg.com/@metaverse-network-sdk/type-definitions/-/type-definitions-0.0.1-16.tgz#43f85125064cbd199f0b33e47990debd15e7fdbb" @@ -5966,10 +5453,11 @@ yargs "^17.6.0" "@netlify/config@^20.9.0": - version "20.11.0" - resolved "https://registry.yarnpkg.com/@netlify/config/-/config-20.11.0.tgz#78a1adcd8349982b24d3e9540f5018da7d88d3cb" - integrity sha512-MjWSgtVCtWpAb0CRmro0sfC6SiIJd37eRHSFggEyX9bSI8JytpDUt3J8wpiS4z+LhpFDp+IKAZ1pionbVvXiUw== + version "20.12.6" + resolved "https://registry.yarnpkg.com/@netlify/config/-/config-20.12.6.tgz#10fe57ea59a644299af2f69048ce84f6e7790921" + integrity sha512-COJlWkpFHRPG3bltTeQ2EX2Vm+qO/BYHUYSd5SZaM8kd49b0mb2dCocw+SxKITLalp3T1TimnajEvvye//h18g== dependencies: + "@iarna/toml" "^2.2.5" chalk "^5.0.0" cron-parser "^4.1.0" deepmerge "^4.2.2" @@ -5983,14 +5471,13 @@ is-plain-obj "^4.0.0" js-yaml "^4.0.0" map-obj "^5.0.0" - netlify "^13.1.14" - netlify-headers-parser "^7.1.3" - netlify-redirect-parser "^14.2.1" + netlify "^13.1.16" + netlify-headers-parser "^7.1.4" + netlify-redirect-parser "^14.3.0" node-fetch "^3.3.1" omit.js "^2.0.2" p-locate "^6.0.0" path-type "^5.0.0" - toml "^3.0.0" tomlify-j0.4 "^3.0.0" validate-npm-package-name "^4.0.0" yargs "^17.6.0" @@ -6182,9 +5669,9 @@ "@netlify/esbuild-windows-arm64" "0.14.39" "@netlify/framework-info@^9.8.10": - version "9.8.10" - resolved "https://registry.yarnpkg.com/@netlify/framework-info/-/framework-info-9.8.10.tgz#a18589f132dafb5cb7f86c05a9895b9118633fe1" - integrity sha512-VT8ejAaB/XU2xRpdpQinHUO1YL3+BMx6LJ49wJk2u9Yq/VI1/gYCi5VqbqTHBQXJUlOi84YuiRlrDBsLpPr8eg== + version "9.8.13" + resolved "https://registry.yarnpkg.com/@netlify/framework-info/-/framework-info-9.8.13.tgz#0a4cc2be4c2439089f9b630e19d73e2f4b09289d" + integrity sha512-ZZXCggokY/y5Sz93XYbl/Lig1UAUSWPMBiQRpkVfbrrkjmW2ZPkYS/BgrM2/MxwXRvYhc/TQpZX6y5JPe3quQg== dependencies: ajv "^8.12.0" filter-obj "^5.0.0" @@ -6194,15 +5681,15 @@ p-filter "^3.0.0" p-locate "^6.0.0" process "^0.11.10" - read-pkg-up "^9.0.0" + read-pkg-up "^9.1.0" semver "^7.3.8" "@netlify/functions-utils@^5.2.37": - version "5.2.49" - resolved "https://registry.yarnpkg.com/@netlify/functions-utils/-/functions-utils-5.2.49.tgz#d54bf01a6f9345954165805a6d0b9158c05d604a" - integrity sha512-risycfkRDJtlJ7/ixdlOth3h92toGuvkFol15VGywstXz40icIEFEw35VZR3w6TTR64gfDo4A3s4lGDdH5UdGA== + version "5.2.59" + resolved "https://registry.yarnpkg.com/@netlify/functions-utils/-/functions-utils-5.2.59.tgz#7900c79cf864cb52fdece51a7df35b2fab0f6748" + integrity sha512-v31UggZt1Hk8KZWqAP3kgsXtkk1/kd2eg6R/7t1gKsY7TD9d+MQc5KAzIrT5+URUKFfJ3xBMgYgcRIRqhT/Yjw== dependencies: - "@netlify/zip-it-and-ship-it" "9.29.0" + "@netlify/zip-it-and-ship-it" "9.33.2" cpy "^9.0.0" path-exists "^5.0.0" @@ -6214,12 +5701,11 @@ is-promise "^4.0.0" "@netlify/functions@^2.4.0": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-2.5.1.tgz#a3c111979cf14654267de8a2384348a066481b4e" - integrity sha512-7//hmiFHXGusAzuzEuXvRT9ItaeRjRs5lRs6lYUkaAXO1jnTWYDB2XdqFq5X4yMRX+/A96nrQ2HwCE+Pd0YMwg== + version "2.7.0" + resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-2.7.0.tgz#a9506191dc2c6fe888a50de28bcab1537b5b4161" + integrity sha512-4pXC/fuj3eGQ86wbgPiM4zY8+AsNrdz6vcv6FEdUJnZW+LqF8IWjQcY3S0d1hLeLKODYOqq4CkrzGyCpce63Nw== dependencies: - "@netlify/serverless-functions-api" "1.13.0" - is-promise "^4.0.0" + "@netlify/serverless-functions-api" "1.18.1" "@netlify/git-utils@^5.1.1": version "5.1.1" @@ -6331,10 +5817,10 @@ resolved "https://registry.yarnpkg.com/@netlify/node-cookies/-/node-cookies-0.1.0.tgz#dda912ba618527695cf519fafa221c5e6777c612" integrity sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g== -"@netlify/open-api@^2.19.1", "@netlify/open-api@^2.28.0": - version "2.28.0" - resolved "https://registry.yarnpkg.com/@netlify/open-api/-/open-api-2.28.0.tgz#11f22423decd54e563a4c79135ffd21e1abed86f" - integrity sha512-lSx9yVn5mzTS7u9aevQyDRoWaHJYNl15B7CU373g8We39wW8fGh4sdNY7ciPWshf42FblOVlBdoasn/LpzquXg== +"@netlify/open-api@^2.19.1", "@netlify/open-api@^2.30.0": + version "2.30.0" + resolved "https://registry.yarnpkg.com/@netlify/open-api/-/open-api-2.30.0.tgz#d0a96b73e2df02c99768607dee7621b9529ed7c9" + integrity sha512-SMRzNwaG6/2MTIBe/RThLQRm3kNpiwb90te+iDJgMLLfTdVA33P/oiinTypBMyQU4Cm3IvQm7P5zD2mXZacSsg== "@netlify/plugin-nextjs@^4.41.2": version "4.41.3" @@ -6367,9 +5853,9 @@ tiny-glob "^0.2.9" "@netlify/plugins-list@^6.71.0": - version "6.75.0" - resolved "https://registry.yarnpkg.com/@netlify/plugins-list/-/plugins-list-6.75.0.tgz#953855a92eb5ff688da4885608e85d5a30a9a6bf" - integrity sha512-xH5UWc6v6oOu53kaNhJI6o0vESVECoGBjD5hW5nmjFaIkEJFDfbtHj/gSQ2hCcwIzTlGYRGIyGVBMY+e7ki6bw== + version "6.80.0" + resolved "https://registry.yarnpkg.com/@netlify/plugins-list/-/plugins-list-6.80.0.tgz#da45e4f67e41e1623cd002273f8e6b2aea68ba8a" + integrity sha512-bCKLI51UZ70ziIWsf2nvgPd4XuG6m8AMCoHiYtl/BSsiaSBfmryZnTTqdRXerH09tBRpbPPwzaEgUJwyU9o8Qw== "@netlify/run-utils@^5.1.1": version "5.1.1" @@ -6378,20 +5864,30 @@ dependencies: execa "^6.0.0" -"@netlify/serverless-functions-api@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@netlify/serverless-functions-api/-/serverless-functions-api-1.13.0.tgz#cba7550881721ffc13db5bc7d6addcacef548d2f" - integrity sha512-H3SMpHw24jWjnEMqbXgILWdo3/Iv/2DRzOZZevqqEswRTOWcQJGlU35Dth72VAOxhPyWXjulogG1zJNRw8m2sQ== +"@netlify/serverless-functions-api@1.18.1": + version "1.18.1" + resolved "https://registry.yarnpkg.com/@netlify/serverless-functions-api/-/serverless-functions-api-1.18.1.tgz#6b4b7995b7bb58dc14cc4215b0f6eea5675f8e6b" + integrity sha512-DrSvivchuwsuQW03zbVPT3nxCQa5tn7m4aoPOsQKibuJXIuSbfxzCBxPLz0+LchU5ds7YyOaCc9872Y32ngYzg== dependencies: "@netlify/node-cookies" "^0.1.0" + "@opentelemetry/core" "^1.23.0" + "@opentelemetry/otlp-transformer" "^0.50.0" + "@opentelemetry/resources" "^1.23.0" + "@opentelemetry/sdk-trace-base" "^1.23.0" + "@opentelemetry/semantic-conventions" "^1.23.0" urlpattern-polyfill "8.0.2" -"@netlify/serverless-functions-api@^1.10.1", "@netlify/serverless-functions-api@^1.13.1": - version "1.13.1" - resolved "https://registry.yarnpkg.com/@netlify/serverless-functions-api/-/serverless-functions-api-1.13.1.tgz#d76ba1acad441b7ae4059f305803e9f36a65b407" - integrity sha512-LWi0/ku6UvkCIwlREoJc3k2y/2uTc1u2pf+ODUdCwGwtewDJW8+wduVeQYLyywWemdIdg9IoMga3Q5wW0lBitQ== +"@netlify/serverless-functions-api@^1.10.1", "@netlify/serverless-functions-api@^1.18.2": + version "1.18.2" + resolved "https://registry.yarnpkg.com/@netlify/serverless-functions-api/-/serverless-functions-api-1.18.2.tgz#f3ed62542e95419747c8512e63c903881a64d910" + integrity sha512-KHhcNWP1B+8Io2aAobzRRuT1FSWb7Bfsih16dxKgaU9IgP/OxMVvssbmhRAmoR01rVGhQEiNN0vk6juMzOafOw== dependencies: "@netlify/node-cookies" "^0.1.0" + "@opentelemetry/core" "^1.23.0" + "@opentelemetry/otlp-transformer" "^0.50.0" + "@opentelemetry/resources" "^1.23.0" + "@opentelemetry/sdk-trace-base" "^1.23.0" + "@opentelemetry/semantic-conventions" "^1.23.0" urlpattern-polyfill "8.0.2" "@netlify/zip-it-and-ship-it@9.25.4": @@ -6432,17 +5928,17 @@ urlpattern-polyfill "8.0.2" yargs "^17.0.0" -"@netlify/zip-it-and-ship-it@9.29.0": - version "9.29.0" - resolved "https://registry.yarnpkg.com/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.29.0.tgz#cdbf7879980e27df2f8c0d9a0b0354343adbfc6b" - integrity sha512-z6DxHmFmBiBRMZ1FgM/LnfnS0PFy9xdBVxk8SlzFPiNwOSQKpz1zV+DFcAfrWKEa4hvTtNzW05+teIqXRLLIqA== +"@netlify/zip-it-and-ship-it@9.33.2": + version "9.33.2" + resolved "https://registry.yarnpkg.com/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.33.2.tgz#f2a500180e52a278b42dd0678d626cf1da606005" + integrity sha512-5BC51IdR5JldgRwyFEXgTS+GJ/04QhlWY/GhcwXzOblrhugBl1VTK5ErIiEBCWX+56zIP+0QS0Dq5MwgrqaFqA== dependencies: "@babel/parser" "^7.22.5" - "@babel/types" "7.23.6" + "@babel/types" "7.24.5" "@netlify/binary-info" "^1.0.0" - "@netlify/serverless-functions-api" "^1.13.1" + "@netlify/serverless-functions-api" "^1.18.2" "@vercel/nft" "^0.23.0" - archiver "^6.0.0" + archiver "^7.0.0" common-path-prefix "^3.0.0" cp-file "^10.0.0" es-module-lexer "^1.0.0" @@ -6471,62 +5967,62 @@ urlpattern-polyfill "8.0.2" yargs "^17.0.0" -"@next/env@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.0.tgz#43d92ebb53bc0ae43dcc64fb4d418f8f17d7a341" - integrity sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw== +"@next/env@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.3.tgz#d6def29d1c763c0afb397343a15a82e7d92353a0" + integrity sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA== -"@next/eslint-plugin-next@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.0.tgz#29b041233fac7417e22eefa4146432d5cd910820" - integrity sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q== +"@next/eslint-plugin-next@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz#287ad8620e7061ba01e8d3313d464db6d217b6df" + integrity sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw== dependencies: glob "10.3.10" -"@next/swc-darwin-arm64@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz#70a57c87ab1ae5aa963a3ba0f4e59e18f4ecea39" - integrity sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ== +"@next/swc-darwin-arm64@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz#db1a05eb88c0224089b815ad10ac128ec79c2cdb" + integrity sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A== -"@next/swc-darwin-x64@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz#0863a22feae1540e83c249384b539069fef054e9" - integrity sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g== +"@next/swc-darwin-x64@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz#a3f8af05b5f9a52ac3082e66ac29e125ab1d7b9c" + integrity sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA== -"@next/swc-linux-arm64-gnu@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz#893da533d3fce4aec7116fe772d4f9b95232423c" - integrity sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ== +"@next/swc-linux-arm64-gnu@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz#4e63f43879285b52554bfd39e6e0cc78a9b27bbf" + integrity sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA== -"@next/swc-linux-arm64-musl@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz#d81ddcf95916310b8b0e4ad32b637406564244c0" - integrity sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g== +"@next/swc-linux-arm64-musl@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz#ebdaed26214448b1e6f2c3e8b3cd29bfba387990" + integrity sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw== -"@next/swc-linux-x64-gnu@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz#18967f100ec19938354332dcb0268393cbacf581" - integrity sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ== +"@next/swc-linux-x64-gnu@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz#19e3bcc137c3b582a1ab867106817e5c90a20593" + integrity sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w== -"@next/swc-linux-x64-musl@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz#77077cd4ba8dda8f349dc7ceb6230e68ee3293cf" - integrity sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg== +"@next/swc-linux-x64-musl@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz#794a539b98e064169cf0ff7741b2a4fb16adec7d" + integrity sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ== -"@next/swc-win32-arm64-msvc@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz#5f0b8cf955644104621e6d7cc923cad3a4c5365a" - integrity sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ== +"@next/swc-win32-arm64-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz#eda9fa0fbf1ff9113e87ac2668ee67ce9e5add5a" + integrity sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A== -"@next/swc-win32-ia32-msvc@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz#21f4de1293ac5e5a168a412b139db5d3420a89d0" - integrity sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw== +"@next/swc-win32-ia32-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz#7c1190e3f640ab16580c6bdbd7d0e766b9920457" + integrity sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw== -"@next/swc-win32-x64-msvc@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz#e561fb330466d41807123d932b365cf3d33ceba2" - integrity sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg== +"@next/swc-win32-x64-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz#2be4e39ee25bfbd85be78eea17c0e7751dc4323c" + integrity sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA== "@ngneat/falso@^6.1.0": version "6.4.0" @@ -6548,23 +6044,35 @@ dependencies: "@noble/hashes" "1.3.2" -"@noble/curves@1.3.0", "@noble/curves@^1.2.0", "@noble/curves@^1.3.0", "@noble/curves@~1.3.0": +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== dependencies: "@noble/hashes" "1.3.3" +"@noble/curves@^1.3.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6" + integrity sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg== + dependencies: + "@noble/hashes" "1.4.0" + "@noble/hashes@1.3.2": version "1.3.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== -"@noble/hashes@1.3.3", "@noble/hashes@^1.3.2", "@noble/hashes@^1.3.3", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": version "1.3.3" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== +"@noble/hashes@1.4.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.3.3", "@noble/hashes@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -6587,26 +6095,26 @@ fastq "^1.6.0" "@notionhq/client@^2.2.3": - version "2.2.14" - resolved "https://registry.yarnpkg.com/@notionhq/client/-/client-2.2.14.tgz#6807ec27ee89584529abfd28d058b2661f828b74" - integrity sha512-oqUefZtCiJPCX+74A1Os9OVTef3fSnVWe2eVQtU1HJSD+nsfxfhwvDKnzJTh2Tw1ZHKLxpieHB/nzGdY+Uo12A== + version "2.2.15" + resolved "https://registry.yarnpkg.com/@notionhq/client/-/client-2.2.15.tgz#739fc8edb1357a2e2e35d026571fafe17c089606" + integrity sha512-XhdSY/4B1D34tSco/GION+23GMjaS9S2zszcqYkMHo8RcWInymF6L1x+Gk7EmHdrSxNFva2WM8orhC4BwQCwgw== dependencies: "@types/node-fetch" "^2.5.10" node-fetch "^2.6.1" -"@nrwl/cypress@*", "@nrwl/cypress@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-18.0.1.tgz#38ce04ec50cdd918a0333f849f89597d25f69041" - integrity sha512-QBxIwyMaiCE4MXMkj4ODISLTfVsTwf6Sgia9dUjIxZkrJOqWyGjkoT0+55irhnUxkhyUbUkN1FnPgGfjOh6eEw== +"@nrwl/cypress@*", "@nrwl/cypress@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-19.1.0.tgz#38a9ec6c850cb6a028f87ac543311f03a18f894d" + integrity sha512-V+lCej/t1HknAtIT3be48palqvynrHlcNR+ivZWDN7kTw6DQw4aAXbWyEUP7f0Qgn4AaahlYkdBJRssQ0IDBGA== dependencies: - "@nx/cypress" "18.0.1" + "@nx/cypress" "19.1.0" -"@nrwl/devkit@*", "@nrwl/devkit@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-18.0.1.tgz#67b2e30acf92ba63755e747991e5502b184e80cb" - integrity sha512-9SXlKk+LSNMVaKE6RqjIZ2agPKQVljOrt2cMyQe0SQCsqxrzqajwGD19zDGISiOLiiq24QPz30Q+vM7W98Yb9g== +"@nrwl/devkit@*", "@nrwl/devkit@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-19.1.0.tgz#5a3277f868f6329bc2766b7c42d118f76c6ea5af" + integrity sha512-n4YxtAMSdlXAmwcSKcLEX48kpcPGI/sX7lCfDeoSnTKud8Y1tlNeD8rf0YZV3ae+srE6j4lxfoJrRCpWweMcEQ== dependencies: - "@nx/devkit" "18.0.1" + "@nx/devkit" "19.1.0" "@nrwl/devkit@18.0.4": version "18.0.4" @@ -6615,12 +6123,12 @@ dependencies: "@nx/devkit" "18.0.4" -"@nrwl/eslint-plugin-nx@*", "@nrwl/eslint-plugin-nx@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-18.0.1.tgz#1af2150077a68a31b8daa55831a2aa34e1a36d89" - integrity sha512-/E7b09yLtFHf9QCfoqqZpw+HGBnH/Bz1pbZTAvY8zdduhDYO6Em5HRy+Y40pfuWJPUcOgA50j2zNGR+sTCrtRA== +"@nrwl/eslint-plugin-nx@*", "@nrwl/eslint-plugin-nx@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-19.1.0.tgz#69dd9e8352bc84dbb1741b81d7cbcffe46e62964" + integrity sha512-ZH34DlUoWD7p9aDVu3Uor/+jROqEfBGI+XIzBLDLjnmHkobsFwmvjbvDqvFeTMM3qvVJih1GfezbVRAhh2f4ZA== dependencies: - "@nx/eslint-plugin" "18.0.1" + "@nx/eslint-plugin" "19.1.0" "@nrwl/jest@18.0.4": version "18.0.4" @@ -6629,12 +6137,12 @@ dependencies: "@nx/jest" "18.0.4" -"@nrwl/js@*", "@nrwl/js@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-18.0.1.tgz#5c2891a8534d5b1fe01bbde219d894ad1b619b20" - integrity sha512-O1wfFdDMvObgqZgH/5qebm9YeN5cJ+UL2fJV2ZnsWVz3e8jhOQLflN3J7jXUWxzsz5stYiplsGpBjgXQRcNwaQ== +"@nrwl/js@*", "@nrwl/js@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-19.1.0.tgz#58bf19aeccf352c520f5409484d416915868439b" + integrity sha512-bzjHWDwOpQ/Xju6Kei4MFOJvsO6zhoHE94IRKJobj2yLewy0P2gStyp05XOE/bMpY4GJ6ggthINkaxgl6ae0DA== dependencies: - "@nx/js" "18.0.1" + "@nx/js" "19.1.0" "@nrwl/js@18.0.4": version "18.0.4" @@ -6644,46 +6152,46 @@ "@nx/js" "18.0.4" "@nrwl/linter@*": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-18.0.1.tgz#2e003019211e36078175c80ba9dad3b85a066c3c" - integrity sha512-VmSRowo5/VFhAd16Oizb0PHGmx9unzv6ZdLfqQNZwcyKLKbYfBxwg6odSRZjm2ta/5A86lEE9cgF3XQQR77hQw== + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-19.1.0.tgz#3cf27e6536237d4cfd9b982e5b0a7e496b14ae5f" + integrity sha512-zyuafxxrqxEPu8efPU5TGTnH+s/rcrvgO4OpwRWNcx7Qilb+rIcH2z6gXYB4/WPG3OpOdIv2S2Nud3n/I7DPGA== dependencies: - "@nx/eslint" "18.0.1" + "@nx/eslint" "19.1.0" -"@nrwl/next@*", "@nrwl/next@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/next/-/next-18.0.1.tgz#f5596c477e4338bbf83958d2e6da7f8561799f83" - integrity sha512-K+W/XOBXsT5VpZztuhWh+MNekpuoa+G8TX8+pP4bgPJ5X2TaY7XWVV9WdHdubpdPXKmI3cG6fmd7XEXfR1XD4Q== +"@nrwl/next@*", "@nrwl/next@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/next/-/next-19.1.0.tgz#aa3ef271b1860f04f575586878a7c09d27b226c9" + integrity sha512-QFfrZ8xfJprzgqPPX99AbO5BIEvdleRwW+QltZGVuik8Od1xjuYgZiGKKAnnjMyR8tsainb+Nldg6RKLDmYGxw== dependencies: - "@nx/next" "18.0.1" + "@nx/next" "19.1.0" -"@nrwl/react@*", "@nrwl/react@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-18.0.1.tgz#b26016b315260e3ebed8a9c7032cb8de8c45a660" - integrity sha512-/YiOdu/GeOd9cXwaY3iZ+sz0m4Dm8L7ZG7YxMK5mcOhIRjyY6JBsig3zBXkAY/JC1IGfXj6pMW54L2F2J43b9g== +"@nrwl/react@*", "@nrwl/react@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-19.1.0.tgz#002a6ebc3241e5ddf800eaee109a5912191632cf" + integrity sha512-hLHxM+OGzjQmBOo+e661H6M2/9JBPeFh9l9Muh0iM3Hy/h+AEUTLh4//tpdNv1FDba551/nv6fnbcSezbjr2lw== dependencies: - "@nx/react" "18.0.1" + "@nx/react" "19.1.0" -"@nrwl/rollup@*", "@nrwl/rollup@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/rollup/-/rollup-18.0.1.tgz#7567ab4fcf9557b3083b1597e0803a809fdbb132" - integrity sha512-ObCgvfgbmu13f3EFGqi59mGzHa4WGB9pYQPaYcXy2xLF/kiOhsa5D1fqhYjgbqyHPGOFWdJRsac9qsf1Re/R+w== +"@nrwl/rollup@*", "@nrwl/rollup@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/rollup/-/rollup-19.1.0.tgz#fd088e3c4412cf901321ec67e223a898eb4ef27e" + integrity sha512-wGgG/67ZeB6oiDeAOKcULEKGjFB8D9eTop/ehwsLsYm6uS7WbPPSJyBa0USeEeZvQ6lKvU5DsLUmLuPNEqK3bQ== dependencies: - "@nx/rollup" "18.0.1" + "@nx/rollup" "19.1.0" -"@nrwl/storybook@*", "@nrwl/storybook@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-18.0.1.tgz#b70591cb50c808cbe5220429f29061b6f959b1b5" - integrity sha512-p/No82W2dVCwAbr8Hg3jKS1KpmzsEWZKoTfWq/6KNSMtaEYAwHb9yhmPulHRpl96MHddQkKBqaBokGth5h8LRQ== +"@nrwl/storybook@*", "@nrwl/storybook@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-19.1.0.tgz#e006b8b72315a9a0ef6fa8b087db38e113e3c5e1" + integrity sha512-C7Fi2nhFCSfp49OGJ1RThu+9yQ46xT9qjleDRTglQReSJLQYOe+WUnFHaMnILtBiUAhnGjcA7LYjaKL5tX4Gng== dependencies: - "@nx/storybook" "18.0.1" + "@nx/storybook" "19.1.0" -"@nrwl/tao@*", "@nrwl/tao@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-18.0.1.tgz#a212e247bd6fc1bacfc8780d40e5ac7df3ec79e5" - integrity sha512-marSAWRyBAiXciwE+893ptwB6kHR+BKxqERBvH6/+2TWhbnOdC8Czf2VnmQIgIjL+bg+76UUZPt5B2r+qGfeAg== +"@nrwl/tao@*", "@nrwl/tao@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-19.1.0.tgz#5bcfadda866b42f87998b1745c053a9991339003" + integrity sha512-Mayqkuh2EXkac5prri5fQFd19RBRxBQRjVwTcezk7yTKWI7V+bJzbgZANybtcKGsPCH34cpqrlV4inVwtyaVzw== dependencies: - nx "18.0.1" + nx "19.1.0" tslib "^2.3.0" "@nrwl/tao@18.0.4": @@ -6694,26 +6202,26 @@ nx "18.0.4" tslib "^2.3.0" -"@nrwl/web@*", "@nrwl/web@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-18.0.1.tgz#e584e39fff7ce1fb62a40383f0bd1a2aa4cee45c" - integrity sha512-x6EXhFpgNsLHWQMVilkQBsXI2+otLbTT5TnpwfVUkulNXtA79M6rfnikzt+gQS/vp7l10dXb84Ys2yd4eUyaFQ== +"@nrwl/web@*", "@nrwl/web@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-19.1.0.tgz#f0c2564c60f3eba420c2a7254b12f0c202ad551b" + integrity sha512-46V8VR0BUP/PJ2k+2BMxh+xzlew7UwI+xbMAXKcBwRSPHJXipuqQuVfnGMl5HRIKf1fxXtRuvDtx0qQjSzNxMA== dependencies: - "@nx/web" "18.0.1" + "@nx/web" "19.1.0" -"@nrwl/webpack@*", "@nrwl/webpack@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/webpack/-/webpack-18.0.1.tgz#ea2a8ae06d51f6995091d363f9f6594f6f8486a0" - integrity sha512-lVWO7Y8yZi9k1qzJ/Z2bCGPdELlZ9RmlOPzV8yV1Hl9G/cQE8F4W7dUyGe0R9oQNVSwMKbNbHQLvlKOhU+GsBA== +"@nrwl/webpack@*", "@nrwl/webpack@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/webpack/-/webpack-19.1.0.tgz#61e7537979414db032e326ecc7adfe01fbd25d96" + integrity sha512-vGeLnvsaBM2M+zroMsCFqqjEcY4TaOrnFGqPUFOT6T019S+b1/1AmSK+GQOVake90/klpR2T/p8WcdCDvzqkvw== dependencies: - "@nx/webpack" "18.0.1" + "@nx/webpack" "19.1.0" -"@nrwl/workspace@*", "@nrwl/workspace@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-18.0.1.tgz#713e3018a0b7af4a97922ed5888c80f9c489f5a1" - integrity sha512-kkPaSYUAprEWNgXejBgY7DsSn83A6e0wh7jBOY+ou63Al9THWkqYVaAQ/5F8i65HxUlIuCSxhYvKMUoaI/yOLQ== +"@nrwl/workspace@*", "@nrwl/workspace@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-19.1.0.tgz#4c7c1414cd854906b26c75d2e00e7f04962e9ff6" + integrity sha512-NSscB84tRn0VRmqZ3W8Zn+tnowCrF0TNCNq8cTFLRqzmg8/kyKrJMEMJmUwPPR9F1u66ciYkbGPbGwGVlEGQSw== dependencies: - "@nx/workspace" "18.0.1" + "@nx/workspace" "19.1.0" "@nrwl/workspace@18.0.4": version "18.0.4" @@ -6736,18 +6244,17 @@ semver "7.5.3" tslib "^2.3.0" -"@nx/cypress@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/cypress/-/cypress-18.0.1.tgz#ea17a8fba6519cb3bfb756fc6c4edbe244d56cce" - integrity sha512-gyglJENcwHL1aya0V4rIT+cpqlfHIb6JrOaDy6UsEtrbdqOea6g7dXHEyXv1wWNnUDrs1FfH2EYqF+VlwO/plw== +"@nx/cypress@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/cypress/-/cypress-19.1.0.tgz#3a4403b57255af035685165f325a0807122a70d0" + integrity sha512-sxXhRv7/FJ+e9nWx0Vm+eS7nCUksvBwye5iSq4/DtSLgnYAP9OzQ+zEbAkD2SJdE3VFDrNK+kCSUcwip1mn3zw== dependencies: - "@nrwl/cypress" "18.0.1" - "@nx/devkit" "18.0.1" - "@nx/eslint" "18.0.1" - "@nx/js" "18.0.1" + "@nrwl/cypress" "19.1.0" + "@nx/devkit" "19.1.0" + "@nx/eslint" "19.1.0" + "@nx/js" "19.1.0" "@phenomnomnominal/tsquery" "~5.0.1" detect-port "^1.5.1" - semver "^7.5.3" tslib "^2.3.0" "@nx/devkit@16.9.0": @@ -6763,12 +6270,12 @@ tmp "~0.2.1" tslib "^2.3.0" -"@nx/devkit@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-18.0.1.tgz#1c5cce313815683b647636d57c94cec8c67a506c" - integrity sha512-YmX5YqZAGqIK6ACwj6+BmogbOr/HVrILnx5ybiHPwNzMTv5HQpJ67HfBRYUDKIFiY4zTjciYyWAmqG89UYCq1w== +"@nx/devkit@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-18.0.4.tgz#fec28139ef5d078933c5f1b5a7e0a585672dbdd6" + integrity sha512-Vs1AXgOjMJyaWpKopD04dy0FwQ22n5ZR1bFf98Ab4Ht0WJwJE90IpUVAkwI03n5BYxAKOlQnFltsB4gu6Y8mZQ== dependencies: - "@nrwl/devkit" "18.0.1" + "@nrwl/devkit" "18.0.4" ejs "^3.1.7" enquirer "~2.3.6" ignore "^5.0.4" @@ -6777,15 +6284,16 @@ tslib "^2.3.0" yargs-parser "21.1.1" -"@nx/devkit@18.0.4": - version "18.0.4" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-18.0.4.tgz#fec28139ef5d078933c5f1b5a7e0a585672dbdd6" - integrity sha512-Vs1AXgOjMJyaWpKopD04dy0FwQ22n5ZR1bFf98Ab4Ht0WJwJE90IpUVAkwI03n5BYxAKOlQnFltsB4gu6Y8mZQ== +"@nx/devkit@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-19.1.0.tgz#32b02aed9105a69af89c35d50194912d493612a9" + integrity sha512-jn8uNgavpRhYZ1u63YFNWc2lEoAr3YA7bvPK9yaBmV++tFj+Ig+eFKkQxRou4tvOUnIyVPrs/fmi/TBLVQcpQg== dependencies: - "@nrwl/devkit" "18.0.4" + "@nrwl/devkit" "19.1.0" ejs "^3.1.7" enquirer "~2.3.6" ignore "^5.0.4" + minimatch "9.0.3" semver "^7.5.3" tmp "~0.2.1" tslib "^2.3.0" @@ -6807,33 +6315,33 @@ semver "7.5.3" tslib "^2.3.0" -"@nx/eslint-plugin@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/eslint-plugin/-/eslint-plugin-18.0.1.tgz#5e51fda660f36c1e337d826746d0c5769ce0bdc1" - integrity sha512-RGFGKZWh3EsRq+vJjdsFk5zkBLSZJrYoMQpZufudHcT2+WY61UkbVOdWTwG0GdegcPCDU9+UztDAH3HXCOeQaw== - dependencies: - "@nrwl/eslint-plugin-nx" "18.0.1" - "@nx/devkit" "18.0.1" - "@nx/js" "18.0.1" - "@typescript-eslint/type-utils" "^6.13.2" - "@typescript-eslint/utils" "^6.13.2" +"@nx/eslint-plugin@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/eslint-plugin/-/eslint-plugin-19.1.0.tgz#64dcda8ba7c91fde0fb4db0a3b0cc7197b1e9795" + integrity sha512-lLWJvBCvpREBFIxNWk+d1Xfoe0RqH2+v6fkZB/pk/n/q9mHPvSE7JwFMxIw+QrIguAxKhAHGqDskTRH4llzz6w== + dependencies: + "@nrwl/eslint-plugin-nx" "19.1.0" + "@nx/devkit" "19.1.0" + "@nx/js" "19.1.0" + "@typescript-eslint/type-utils" "^7.3.0" + "@typescript-eslint/utils" "^7.3.0" chalk "^4.1.0" confusing-browser-globals "^1.0.9" jsonc-eslint-parser "^2.1.0" semver "^7.5.3" tslib "^2.3.0" -"@nx/eslint@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/eslint/-/eslint-18.0.1.tgz#1d431932afc22a33217633de6ad479533730e135" - integrity sha512-0IZOFt/58f47TC2atMa1ClmA3lKrflnG8YEJznvy86iwHMARxCSxsBEK+DKxMSeFMKBbxuC26aN+9MweFGohKA== +"@nx/eslint@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/eslint/-/eslint-19.1.0.tgz#f16bd877cb6c925298eca4ff8ed4d14b17fd53cd" + integrity sha512-UIeNUyUw9Dq21dXP+0vXplOtowgcWET7WnOLP9p4FD9LVMAS0mlR8noVwHjo6V9YgGhGisfzr/DFlJB7xqEDEw== dependencies: - "@nx/devkit" "18.0.1" - "@nx/js" "18.0.1" - "@nx/linter" "18.0.1" - eslint "^8.0.0" + "@nx/devkit" "19.1.0" + "@nx/js" "19.1.0" + "@nx/linter" "19.1.0" + semver "^7.5.3" tslib "^2.3.0" - typescript "~5.3.2" + typescript "~5.4.2" "@nx/jest@18.0.4": version "18.0.4" @@ -6891,10 +6399,10 @@ tsconfig-paths "^4.1.2" tslib "^2.3.0" -"@nx/js@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/js/-/js-18.0.1.tgz#c1512423bc87c32ee7bdb5ac4096941909f9c0f0" - integrity sha512-U/l8K09UMrE4zVXEpmwpRWaY4fCrdcaaB3NXsEUwghJE6OuacADdaQ5ZWPxa0ji3nARKW7Umj87sOlUu8YjpTQ== +"@nx/js@18.0.4": + version "18.0.4" + resolved "https://registry.yarnpkg.com/@nx/js/-/js-18.0.4.tgz#7df0f30f858c1c9af2326aaeb1f67b8eb54369c5" + integrity sha512-ma8QMTHZm0LzGYZ1xdVfSUONKb1S5qbiI1DHxhztrsSo3jARZfSAMKM3Bm7ag9MBitpDsoUlgy7JCPmGCAcxAw== dependencies: "@babel/core" "^7.23.2" "@babel/plugin-proposal-decorators" "^7.22.7" @@ -6903,9 +6411,9 @@ "@babel/preset-env" "^7.23.2" "@babel/preset-typescript" "^7.22.5" "@babel/runtime" "^7.22.6" - "@nrwl/js" "18.0.1" - "@nx/devkit" "18.0.1" - "@nx/workspace" "18.0.1" + "@nrwl/js" "18.0.4" + "@nx/devkit" "18.0.4" + "@nx/workspace" "18.0.4" "@phenomnomnominal/tsquery" "~5.0.1" babel-plugin-const-enum "^1.0.1" babel-plugin-macros "^2.8.0" @@ -6927,10 +6435,10 @@ tsconfig-paths "^4.1.2" tslib "^2.3.0" -"@nx/js@18.0.4": - version "18.0.4" - resolved "https://registry.yarnpkg.com/@nx/js/-/js-18.0.4.tgz#7df0f30f858c1c9af2326aaeb1f67b8eb54369c5" - integrity sha512-ma8QMTHZm0LzGYZ1xdVfSUONKb1S5qbiI1DHxhztrsSo3jARZfSAMKM3Bm7ag9MBitpDsoUlgy7JCPmGCAcxAw== +"@nx/js@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/js/-/js-19.1.0.tgz#ac69d1295b60d8fa68c7e05b0458329b35abd1ff" + integrity sha512-szEmGGMYMsl57LVe80V9ZAp8BIo41cQf11DGe72J2tHXVi2H7+hGN6VA0dqGWxfffbpHJyIDy/NXpB4Y0z1vPw== dependencies: "@babel/core" "^7.23.2" "@babel/plugin-proposal-decorators" "^7.22.7" @@ -6939,10 +6447,9 @@ "@babel/preset-env" "^7.23.2" "@babel/preset-typescript" "^7.22.5" "@babel/runtime" "^7.22.6" - "@nrwl/js" "18.0.4" - "@nx/devkit" "18.0.4" - "@nx/workspace" "18.0.4" - "@phenomnomnominal/tsquery" "~5.0.1" + "@nrwl/js" "19.1.0" + "@nx/devkit" "19.1.0" + "@nx/workspace" "19.1.0" babel-plugin-const-enum "^1.0.1" babel-plugin-macros "^2.8.0" babel-plugin-transform-typescript-metadata "^0.3.1" @@ -6976,12 +6483,12 @@ tslib "^2.3.0" typescript "~5.1.3" -"@nx/linter@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/linter/-/linter-18.0.1.tgz#221884c05cc33c7bc3a38a834246135cc158f280" - integrity sha512-RE24Jjdi3R56g9r05hOe37oXx8d5VkVvUC/njgxdaVYy569lgPdiXD9FHaHBXOwjQ3JF7ItVOd2zNhTiZA1S4Q== +"@nx/linter@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/linter/-/linter-19.1.0.tgz#bbccd264cafdb132177319c9877135a6a18d3207" + integrity sha512-se8akeKL7AHimBdE3ucVtWFi6fWwe8u0wkN6TOzS0IUDVS6JoCRwbbIhPy9yQYFtUokBxg/h/aVthwGwMMNWgw== dependencies: - "@nx/eslint" "18.0.1" + "@nx/eslint" "19.1.0" "@nx/next@16.9.0": version "16.9.0" @@ -7006,27 +6513,28 @@ url-loader "^4.1.1" webpack-merge "^5.8.0" -"@nx/next@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/next/-/next-18.0.1.tgz#265df639d090f8243d6711fe0f1a0b6b6f70a8ae" - integrity sha512-XBHrLfov3z/T/gEpYVdv0acxjXZXlRHH5+vjvdnT8/35VS+BvwFnSwA+HYGH2q4N+7rNABE4UCAbq0j+YY5a4w== +"@nx/next@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/next/-/next-19.1.0.tgz#1588d2eaf2243334195bd396c7d7dd6ecfc4bb71" + integrity sha512-mPiKAMT/ICEu1Wb2GLygW6xrrle226X4fx1BVidV9MvnssdNo+k+0nRLoSDfpNvy8NHsyZUDfZL2Cv/QyPFyuw== dependencies: "@babel/plugin-proposal-decorators" "^7.22.7" - "@nrwl/next" "18.0.1" - "@nx/devkit" "18.0.1" - "@nx/eslint" "18.0.1" - "@nx/js" "18.0.1" - "@nx/react" "18.0.1" - "@nx/web" "18.0.1" - "@nx/workspace" "18.0.1" + "@nrwl/next" "19.1.0" + "@nx/devkit" "19.1.0" + "@nx/eslint" "19.1.0" + "@nx/js" "19.1.0" + "@nx/react" "19.1.0" + "@nx/web" "19.1.0" + "@nx/webpack" "19.1.0" + "@nx/workspace" "19.1.0" "@svgr/webpack" "^8.0.1" chalk "^4.1.0" copy-webpack-plugin "^10.2.4" + file-loader "^6.2.0" fs-extra "^11.1.0" ignore "^5.0.4" semver "^7.5.3" tslib "^2.3.0" - url-loader "^4.1.1" webpack-merge "^5.8.0" "@nx/nx-darwin-arm64@16.9.0": @@ -7034,151 +6542,151 @@ resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.9.0.tgz#26fc149f14c867d130dd06dea8cf89f8ff4e754b" integrity sha512-I+045kSIQgdHMfqpJ/bplWzTc82DM/c7VOM/XlrBUwaM9nsDchIC2mo1F93HDe/oJ+oxz9awHbED4GUzS6uc5g== -"@nx/nx-darwin-arm64@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.0.1.tgz#efb3ea8ec9c8aba8cd6644133967056bac21a2b3" - integrity sha512-8/fRlTmOLrYyMCwIF/gEU/lYjA5pJ3hVDhmHpCy+VBvCHSJFF2JpFZMOV17XADirlqdlUDiuK1/ZueaTZAUcNg== - "@nx/nx-darwin-arm64@18.0.4": version "18.0.4" resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.0.4.tgz#c199b44ee21699acb14f6ecbada56ed19af936a3" integrity sha512-9KJVONxUwdnFHHRNocsg7q5pliOTTfbjlr3rvhLuroV5HeTJFhUipKCQrVEhLy8e4auRdLuSz/HsgpJat3Z2cg== +"@nx/nx-darwin-arm64@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.1.0.tgz#12ffea944e606fc885ea6c2f3e5713d7a1e05d27" + integrity sha512-qUPZmVusnYrgqwhIYKBbabB1RpVQZiTcKfBdW1XiBTk+dXOuIVyWVCsg2ohoBJpHJiENYjtCprxR3RWPaxFs5Q== + "@nx/nx-darwin-x64@16.9.0": version "16.9.0" resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.9.0.tgz#806fb83384fa01a7ebe8993a53d2b2dfe3e6a87e" integrity sha512-Yop/nZlJ+j4RIDB5bfuse583lWLiHtyL7bRPj2IsXAWiQHvXfrNnJJwYH7cGHgtR4ctSAZdOi7SZWlmgHO7Hyw== -"@nx/nx-darwin-x64@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-18.0.1.tgz#3a4ba392bdc39cce2927237163597bddc19a7c8e" - integrity sha512-ejOCxw2wmQimrxrgmsJD+RbblZCnstEfXzLCcqoIgxvuZJjNGvePQJ8INVFq8nFY/imGVFp2YcEiKX5HO6mvjg== - "@nx/nx-darwin-x64@18.0.4": version "18.0.4" resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-18.0.4.tgz#859896881930d346afd6397b593f8d436722b80d" integrity sha512-rFKHjeU0Ngz1R7UJAsbncpqwuFDjUdpcvI783r6s2eP7JoiiwtDBXvDcHiy8Odk0lPYmwDELaFZBhvdENqaDNA== +"@nx/nx-darwin-x64@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-19.1.0.tgz#cf041f7ff56cf713fbf7b409d194be9ec2318b83" + integrity sha512-0Gf45EQTq8Q9/inGDzX5SqNY4jXDtqqVsz6wAJ07M9CeyjwDIXOzPe36uoMUhcvXQMbMp3QUH2E/X9poxOOubg== + "@nx/nx-freebsd-x64@16.9.0": version "16.9.0" resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.9.0.tgz#2865cd20e309c21880def9b05a6c66af834c53e3" integrity sha512-qDg7Sd4V6edRuqR4Y+eEPec0J0Nf5ebGGGDegKjV7X4OfgagOb7k8o3cAGiKkKXuaAUg1OnqVw5nF7JysAmrLQ== -"@nx/nx-freebsd-x64@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.0.1.tgz#c1e446f3be3ec899e90e2c440baa3fcbcb554ba8" - integrity sha512-Hq64UBjbFN02dLCp12vzNLAx7U94p+NvuV3uh+G1Z9BpCD6FDIgoELY20J37wuz4H7B36vJgXPshWnGEw+XNdA== - "@nx/nx-freebsd-x64@18.0.4": version "18.0.4" resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.0.4.tgz#2f295ff841e38f720aa9761e2c9eda90e372b380" integrity sha512-jJx47wgRoUxVpQ+WG5+yLdxtJVuVgjphiTMRc0LOfUwKQaEHWyCA0hMK5fNmo0FAHIhGVCb/j2j9FxnCWTWpkg== +"@nx/nx-freebsd-x64@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.1.0.tgz#82805f555d17b971e69e2a0d085ebe8edbef337b" + integrity sha512-bw3sKpXy1R17OTStOkeRUE4EkPsvXjAEp26qmKX3G7a7bCVjH7cn+UXdgF8jsEyyiqb8WY1LG63abIlbyfecIA== + "@nx/nx-linux-arm-gnueabihf@16.9.0": version "16.9.0" resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.9.0.tgz#819bf24fc493d053711502a3bebe95c7eeae3c80" integrity sha512-eyG4PP5jSyDkO8Hm3zrchjm/coVY2L66/ExalfO8j+FSqwlipFIWwkpQM3Tw2fYrrMZpWXa7VlHj10Eu2xF5pQ== -"@nx/nx-linux-arm-gnueabihf@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.0.1.tgz#8b469c6db49592ff18141bc15d23d889aacf30ee" - integrity sha512-dPC2PTFuumglw8ZbkURRU+eksEAAyV5SyUcFnn1T9Il9+V1F1aZ9yQ0Yjg3YpMBHHkJO2hNgNjHTZp2hMTkW4A== - "@nx/nx-linux-arm-gnueabihf@18.0.4": version "18.0.4" resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.0.4.tgz#7ceb5531887996f4cf5e9ebda8dab34421d3a061" integrity sha512-C3qWbFhEMIdTzvAHlIUHecZN3YBu7bx3S0p3gPNGmEMUMbYHP2zMlimBrZIbAxzntyGqWCqhXiFB21QhJ0t1Dw== +"@nx/nx-linux-arm-gnueabihf@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.1.0.tgz#2d29583f555c6978890858a7426fba4c7881206e" + integrity sha512-jJzkPWptqFnl7Q7clTMGvI6OT1x8Jw7JHLCi6JgKBqb2ieF4vUCUsLHkrfS/95l9hCUeIHeBrfHJxEXLZIhOgQ== + "@nx/nx-linux-arm64-gnu@16.9.0": version "16.9.0" resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.9.0.tgz#ee064ab6f7a2fe747844ee73a51c9eac8abf27f2" integrity sha512-oJBf2J1qwfACoSN+Hutb6iq0XvIllRdR+52HUXriCWLe6At4kaDW/p+sBcmtlsdgVY3BRs32rqTgYb8qJ1CJRA== -"@nx/nx-linux-arm64-gnu@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.0.1.tgz#aa289005cbcac87eaad3e783fdebd1f671a8e3df" - integrity sha512-dX5ZF7OAFcE0CnWKOGWWD8yJ9Lz62EdSXafMwZgGWMlgTC1EBF5Rugg224LkCohl9J6Y9JPL6LGNzQsNEDu/oA== - "@nx/nx-linux-arm64-gnu@18.0.4": version "18.0.4" resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.0.4.tgz#cfda70cedab2f3a7c5a9bb11ad4be180993b68c8" integrity sha512-PxVMh9ikp8Q3hKagb66FAsek8O/08GcMF5dXBH7xc5AiQMaZ6Az/gAXOeHp274nmu3StQEpl9Il/YH6Z9f4V0w== +"@nx/nx-linux-arm64-gnu@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.1.0.tgz#61762282aad137951445524a279e7e2fe3705dac" + integrity sha512-zycD7+PbVStbjlPsxE3G+bdwFDzXE7LKWtQOrGLvBxG99pXbTr+Oq1GtqL68p2Jp4MEYjIO5qdxWdNt9bBsSwA== + "@nx/nx-linux-arm64-musl@16.9.0": version "16.9.0" resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.9.0.tgz#f2b071ea4ac4e3d31c79cd9d41b214f7e1e8edac" integrity sha512-RxAI0ls5Zy/HyL51PMmbaTX+tbZklgAeMqtQhziyjD/awao/9Jt783IqVPFfKoWTNmDq6/bjOG8obcnQlLKsaw== -"@nx/nx-linux-arm64-musl@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.0.1.tgz#64017e517881d95d742624b4f0d9f965f2e7d483" - integrity sha512-86jV6SOUdWSvNnQ7QQVeNnSgANpZ+cTJQ4gWnVMkR6DKn2wmneMuChyWuK6I1qTbVMjH6qoclx4zHF51I6S6yQ== - "@nx/nx-linux-arm64-musl@18.0.4": version "18.0.4" resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.0.4.tgz#1ce43e4803d3d5b3aeefa43ec54df7501b04a0b7" integrity sha512-Iz7Z4h2/dXJJvBcyeRHa+d3Ncc4Qz+OiGm6iRDXv4zjFm5EyC1tkSZIFNlNiRjmTToNHFr4savrCjCh8wRYejw== +"@nx/nx-linux-arm64-musl@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.1.0.tgz#72cdabbbba64a98c88e0097484b54c467aae626a" + integrity sha512-NBUUbj/3NXHrqgkoLdMTnd8e9qduRVcSoGqpYDha0HBFc+Fspacw5+U26LjnmIuk/BT4yMtMrgFKU29Rq1a56w== + "@nx/nx-linux-x64-gnu@16.9.0": version "16.9.0" resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.9.0.tgz#f3c58d41a8e8ffe5b54414dc5c5a3a5031da530f" integrity sha512-xFaA3lOQn1hZ4mzXdCUe/CCioEjRJ0E18AekD2g0r9mMRVyrxEk0KH71jMQwbbVYzkvG9a2Vjiptp8hjmEejAw== -"@nx/nx-linux-x64-gnu@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.0.1.tgz#16a37decf2208b8f3ddb66dbfb4cc665c1abd919" - integrity sha512-yvfifJYIJDgaiiWtrpGY7Ggd/wZC61zSunIMmzVyvckDa9NtjtsesYzh05oGy/FHht1avvOKEKrW7VTGOaVNpw== - "@nx/nx-linux-x64-gnu@18.0.4": version "18.0.4" resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.0.4.tgz#0981787e067d6dd7e3f4f457eb3e24c9b12dccaa" integrity sha512-BVLkegIwxHnEB64VBraBxyC01D3C3dVNxq2b4iNaqr4mpWNmos+G/mvcTU3NS7W8ZjpBjlXgdEkpgkl2hMKTEA== +"@nx/nx-linux-x64-gnu@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.1.0.tgz#836cec2456c0578b2ae25d1f4adb67c2c2e07ccf" + integrity sha512-jaPrd1VIdz/dqcjEKUJ5BnU+ONSZmG1G/g1HrNb+SIl3Ztputrwz8yJ7CwpUryRo+xSwWhZXIiNJ5r7z09kaKw== + "@nx/nx-linux-x64-musl@16.9.0": version "16.9.0" resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.9.0.tgz#0c7fdcf459d10dc17d8b489724ab72fe4145b4ca" integrity sha512-8tfqvCajTOH5Tt/NFMNJRePwkoUbGYUK7qHJU2LDAazDUsjvpawdvEM8FkJWsNgIsQBej+zcSYA16+sffjsY2g== -"@nx/nx-linux-x64-musl@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.0.1.tgz#d6ba07a277169693249eaf12bb414f3712f1334e" - integrity sha512-DZl0pJzla6y6Cr9SWpjLHeSkOefUmt4AC+ag1aqWWO3HSei7dtIBQ2fvM6C26Z8TMD75kXSpCd2nJmJSrb3gYw== - "@nx/nx-linux-x64-musl@18.0.4": version "18.0.4" resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.0.4.tgz#d2857870922ee76ed9f50763ec8bd3c6244c998a" integrity sha512-WgVy41psjCE9uxjFi4P62UrWyKQ1e2IN2FZaIuwXEB9h8OU/+g9PFpL1Cs1llNoEKnapKXX4+9b5FHF9i7EKQw== +"@nx/nx-linux-x64-musl@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.1.0.tgz#dd0a6188e48ce9bfc9170c74f73f413c96519d44" + integrity sha512-gj3Bq81s1NWzjtWteyTgczbbd2yq6xmic4H3PGFZkA5THjFAD/MiYiS9b5oQVzPWONyFgtk+gsTWVbiM7dOhew== + "@nx/nx-win32-arm64-msvc@16.9.0": version "16.9.0" resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.9.0.tgz#0ba710f46ac64028a13288c6a414379fec55e3b3" integrity sha512-tUCu1rg76zHdCmov25K2uHUK2rZBTnzbe58r8Wieytmywijp6vGW53RZzYT86YIvInvPJsH7tULdbZpPW56Ruw== -"@nx/nx-win32-arm64-msvc@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.0.1.tgz#0d84cc0a48274f16260c70973e02d96fe81f6d39" - integrity sha512-fFUmqytVq/jUg6+f0QdnCTyjswNnDKSVeePvsLHU0us6ihmt7QgQS9x/xb41mXFSYLpUSU/ESZhpn7Ao3bdaAQ== - "@nx/nx-win32-arm64-msvc@18.0.4": version "18.0.4" resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.0.4.tgz#92c76b7b0e1616c273a231afc0f23f1a5e68f655" integrity sha512-YoxhOrVKnS+kcNTnCg9M61cbigzGErYgnlI8kdZzH2ArD7mhv8bfZnSZUInf5Y8oDBVpKusel7AkCSofzSwigA== +"@nx/nx-win32-arm64-msvc@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.1.0.tgz#8e0e642ebf8299c2be0460eeaf33e61e0b02ef8e" + integrity sha512-PIGy+uu8dzhWodIHXC0jbPtYcpi95NdtkghD1yZ32jcoVzAcHOohM07tTMHXbl7WyLqXw+De0XkmZadMJoVNAg== + "@nx/nx-win32-x64-msvc@16.9.0": version "16.9.0" resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.9.0.tgz#495a46e64f7c33377f9e8417ade50b9d9a823a79" integrity sha512-YTYDZIvqo+2aZl6/ovnBFsEfxoQ/M2sYICJ3zyp00i13VkMdttrIqf8MFqNCD4K+usDQxSpq5M9QLSZ4yltydQ== -"@nx/nx-win32-x64-msvc@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.0.1.tgz#2f5a5573a5c31473a7fbc41955bb84633687ded6" - integrity sha512-vCzMpSfJNvAuK2LNW44XVV77GMI8anrVY9XQAFH5TmEYmsHs9NcyPYJL2QfjD/0oiGhtmepd9GfZJvr95SJ3xQ== - "@nx/nx-win32-x64-msvc@18.0.4": version "18.0.4" resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.0.4.tgz#c57cbb5e42b10322cb966270a32a2f7869634186" integrity sha512-FdAdl5buvtUXp8hZVRkK0AZeiCu35l0u+yHsulNViYdh3OXRT1hYJ0CeqpxlLfvbHqB9JzDPtJtG0dpKHH/O0Q== +"@nx/nx-win32-x64-msvc@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.1.0.tgz#83a1e0af8977adfbf0244999690cf20d8df32a42" + integrity sha512-aTbwZLIpViWgMZqyDl+2fyO5LJjtz0J4a0+0qPpEW46BAZ/kcEuE7Xv33Yoob+KorLr27n6BpzTs+7Wg4dXXFw== + "@nx/react@16.9.0": version "16.9.0" resolved "https://registry.yarnpkg.com/@nx/react/-/react-16.9.0.tgz#a6b26c533096ef1725bffbd703055d51d81f750c" @@ -7196,19 +6704,20 @@ minimatch "3.0.5" tslib "^2.3.0" -"@nx/react@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/react/-/react-18.0.1.tgz#bd1778745ba274c7474db618f9c5e1a858f56e43" - integrity sha512-X6zZF0Nzgiz00LDzHt8paanna7tnwjxnRbOWVc0+TvJ7uOzFJkyThYcwQhK+69d+dQrW+Sot+lQmkrLCT+ilVg== - dependencies: - "@nrwl/react" "18.0.1" - "@nx/devkit" "18.0.1" - "@nx/eslint" "18.0.1" - "@nx/js" "18.0.1" - "@nx/web" "18.0.1" +"@nx/react@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/react/-/react-19.1.0.tgz#269eb8ea815a503eb98830daed41e8e93fc7345b" + integrity sha512-cm3I1jBb6aMkRruzq84D74llhv5VZjHKaARj4G6KRL7ku3PmgPGfs/KrmbQCGyYTJuS5VMHeg2khdqBfDxXj8Q== + dependencies: + "@nrwl/react" "19.1.0" + "@nx/devkit" "19.1.0" + "@nx/eslint" "19.1.0" + "@nx/js" "19.1.0" + "@nx/web" "19.1.0" "@phenomnomnominal/tsquery" "~5.0.1" "@svgr/webpack" "^8.0.1" chalk "^4.1.0" + file-loader "^6.2.0" minimatch "9.0.3" tslib "^2.3.0" @@ -7238,29 +6747,27 @@ rxjs "^7.8.0" tslib "^2.3.0" -"@nx/rollup@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/rollup/-/rollup-18.0.1.tgz#e05740bca387066f29e6f09306dafdf210e3dcaf" - integrity sha512-VEAGyLV+1NLtPCgO03JwPuWl2kgGrcGA3/QiDMfvBkzXOXr2dY3rZd9qiGmDMeKXhQX6mI9QghIF8SWQWP/kSw== +"@nx/rollup@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/rollup/-/rollup-19.1.0.tgz#ef71597bf7f9649d10a5926d189781d9f85855ef" + integrity sha512-WcjYconrs8ZBDg6JJ/27SSuq8qS45HNwYHUM+lzCDHRyzznl6tKi0xkhDu47hXlAxz9U/7bQpdHWfwliDx2HHg== dependencies: - "@nrwl/rollup" "18.0.1" - "@nx/devkit" "18.0.1" - "@nx/js" "18.0.1" - "@rollup/plugin-babel" "^5.3.0" - "@rollup/plugin-commonjs" "^20.0.0" - "@rollup/plugin-image" "^2.1.0" - "@rollup/plugin-json" "^4.1.0" - "@rollup/plugin-node-resolve" "^13.0.4" + "@nrwl/rollup" "19.1.0" + "@nx/devkit" "19.1.0" + "@nx/js" "19.1.0" + "@rollup/plugin-babel" "^6.0.4" + "@rollup/plugin-commonjs" "^25.0.7" + "@rollup/plugin-image" "^3.0.3" + "@rollup/plugin-json" "^6.1.0" + "@rollup/plugin-node-resolve" "^15.2.3" autoprefixer "^10.4.9" babel-plugin-transform-async-to-promises "^0.8.15" chalk "^4.1.0" postcss "^8.4.14" - rollup "^2.56.2" - rollup-plugin-copy "^3.4.0" - rollup-plugin-peer-deps-external "^2.2.4" - rollup-plugin-postcss "^4.0.1" - rollup-plugin-typescript2 "0.34.1" - rxjs "^7.8.0" + rollup "^4.14.0" + rollup-plugin-copy "^3.5.0" + rollup-plugin-postcss "^4.0.2" + rollup-plugin-typescript2 "^0.36.0" tslib "^2.3.0" "@nx/storybook@16.9.0": @@ -7278,16 +6785,16 @@ semver "7.5.3" tslib "^2.3.0" -"@nx/storybook@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/storybook/-/storybook-18.0.1.tgz#c608e39d4475835174659c9ec2f0e987c5042aa4" - integrity sha512-J5A33aygXGMGWv7gb/8M8k/7DqELWWPLzIxle0+hFowaHlmJuzBeAroJRisb3ZmOizuXbDD6Ct6hA+A+5frwlQ== - dependencies: - "@nrwl/storybook" "18.0.1" - "@nx/cypress" "18.0.1" - "@nx/devkit" "18.0.1" - "@nx/eslint" "18.0.1" - "@nx/js" "18.0.1" +"@nx/storybook@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/storybook/-/storybook-19.1.0.tgz#215510e97e2ea956b3d183a2d93f90c50abe5f61" + integrity sha512-7EZglm1v4oV2wGyzBvvR60jAXHJi6loBebn4j9g1gE7zjeTIj3KLpwpgmNfpZG29TfPqj2EO8Tu2Rl1byZcmlg== + dependencies: + "@nrwl/storybook" "19.1.0" + "@nx/cypress" "19.1.0" + "@nx/devkit" "19.1.0" + "@nx/eslint" "19.1.0" + "@nx/js" "19.1.0" "@phenomnomnominal/tsquery" "~5.0.1" semver "^7.5.3" tslib "^2.3.0" @@ -7305,14 +6812,14 @@ http-server "^14.1.0" tslib "^2.3.0" -"@nx/web@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/web/-/web-18.0.1.tgz#888e3dc9b39d3bddc3562653410512e403ef37db" - integrity sha512-F/O/hhbk/tdqbLPfWg+fRVOUVzpmZr6m1tNiHMnK0FPY6r7i66JdhzA/KaaiuH2PD0VJ6gXvkYEauPRvvuOqjQ== +"@nx/web@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/web/-/web-19.1.0.tgz#5f5cf8487f51c56b6f38a1618232e408964391b7" + integrity sha512-9t9QyVB8VPWDJmh5NdTnWwAghCkjS9F4rhKcN+oI3gD7CXFYkRkr9y/RPnfc+RlT9aapA67do2hwgY8ZVw43vw== dependencies: - "@nrwl/web" "18.0.1" - "@nx/devkit" "18.0.1" - "@nx/js" "18.0.1" + "@nrwl/web" "19.1.0" + "@nx/devkit" "19.1.0" + "@nx/js" "19.1.0" chalk "^4.1.0" detect-port "^1.5.1" http-server "^14.1.0" @@ -7360,15 +6867,16 @@ webpack-node-externals "^3.0.0" webpack-subresource-integrity "^5.1.0" -"@nx/webpack@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/webpack/-/webpack-18.0.1.tgz#719aafbc30a498fb6c0622a9bc0d533b23799b09" - integrity sha512-W5/kO5LRGn4iWxZmXc3OeSCVnhCqD65lIMmsqZN3t25XLsaGSKjhUUWyf6G4zV29K0orkhZbqGmDyJqEnnOXbg== +"@nx/webpack@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/webpack/-/webpack-19.1.0.tgz#df0e34c5725e932da3beb2b5df8e99db8e27af46" + integrity sha512-9bs1efN6PCTDJiDcYGiCd5baZbyjglBYxPevMIVLjs5Otds2PGNWcTnZaqGrIK23l8eTm1j8KbevFvc88i6X0Q== dependencies: "@babel/core" "^7.23.2" - "@nrwl/webpack" "18.0.1" - "@nx/devkit" "18.0.1" - "@nx/js" "18.0.1" + "@nrwl/webpack" "19.1.0" + "@nx/devkit" "19.1.0" + "@nx/js" "19.1.0" + ajv "^8.12.0" autoprefixer "^10.4.9" babel-loader "^9.1.2" browserslist "^4.21.4" @@ -7417,19 +6925,6 @@ tslib "^2.3.0" yargs-parser "21.1.1" -"@nx/workspace@18.0.1": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-18.0.1.tgz#1ca331fcc82ed8d1c6e14a4af03a8390690766f4" - integrity sha512-yxURsmyx0XuXdxm/IoeM05CKdHepq2YGJjZISofMyqZG22Gr/TR2ygU2JxSgeuOdEkEHsEp11SSqFwb8CSVYZw== - dependencies: - "@nrwl/workspace" "18.0.1" - "@nx/devkit" "18.0.1" - chalk "^4.1.0" - enquirer "~2.3.6" - nx "18.0.1" - tslib "^2.3.0" - yargs-parser "21.1.1" - "@nx/workspace@18.0.4": version "18.0.4" resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-18.0.4.tgz#e7b0b598ce7e60ee125b584135d6b76c8f99616a" @@ -7443,6 +6938,19 @@ tslib "^2.3.0" yargs-parser "21.1.1" +"@nx/workspace@19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-19.1.0.tgz#40c5f6551812291b84ae3feed222c583e90d8c5d" + integrity sha512-1W+zwRP4Uma0Ui0Za8qcd0rAt4InaLZ3yfAN66MaqQlyIPMsJDSqLBAVKEJfn4wS7zgoeeIwmQoXi6ACLKqZZA== + dependencies: + "@nrwl/workspace" "19.1.0" + "@nx/devkit" "19.1.0" + chalk "^4.1.0" + enquirer "~2.3.6" + nx "19.1.0" + tslib "^2.3.0" + yargs-parser "21.1.1" + "@octokit/auth-token@^3.0.0": version "3.0.4" resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" @@ -7492,10 +7000,10 @@ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== -"@octokit/openapi-types@^22.1.0": - version "22.1.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-22.1.0.tgz#6aa72f35fb29318064e4ab60972f40429857eb2e" - integrity sha512-pGUdSP+eEPfZiQHNkZI0U01HLipxncisdJQB4G//OAmfeO8sqTQ9KRa0KF03TUPCziNsoXUrTg4B2Q1EX++T0Q== +"@octokit/openapi-types@^22.2.0": + version "22.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-22.2.0.tgz#75aa7dcd440821d99def6a60b5f014207ae4968e" + integrity sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg== "@octokit/plugin-paginate-rest@^6.1.2": version "6.1.2" @@ -7580,11 +7088,11 @@ "@octokit/openapi-types" "^18.0.0" "@octokit/types@^13.1.0": - version "13.4.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.4.1.tgz#ad3574488cce6792e5d981a1bdf4b694e1ca349f" - integrity sha512-Y73oOAzRBAUzR/iRAbGULzpNkX8vaxKCqEtg6K74Ff3w9f5apFnWtE/2nade7dMWWW3bS5Kkd6DJS4HF04xreg== + version "13.5.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.5.0.tgz#4796e56b7b267ebc7c921dcec262b3d5bfb18883" + integrity sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ== dependencies: - "@octokit/openapi-types" "^22.1.0" + "@octokit/openapi-types" "^22.2.0" "@octokit/types@^9.0.0", "@octokit/types@^9.2.3": version "9.3.2" @@ -7647,10 +7155,17 @@ dependencies: "@opentelemetry/api" "^1.0.0" +"@opentelemetry/api-logs@0.50.0": + version "0.50.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.50.0.tgz#d46b76daab0bc18fa92dcdabacfc106c380d19a1" + integrity sha512-JdZuKrhOYggqOpUljAq4WWNi5nB10PmgoF0y2CvedLGXd0kSawb/UBnWT8gg1ND3bHCNHStAIVT0ELlxJJRqrA== + dependencies: + "@opentelemetry/api" "^1.0.0" + "@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.4.1": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.7.0.tgz#b139c81999c23e3c8d3c0a7234480e945920fc40" - integrity sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw== + version "1.8.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.8.0.tgz#5aa7abb48f23f693068ed2999ae627d2f7d902ec" + integrity sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w== "@opentelemetry/context-async-hooks@1.13.0": version "1.13.0" @@ -7671,12 +7186,19 @@ dependencies: "@opentelemetry/semantic-conventions" "1.15.2" -"@opentelemetry/core@1.21.0", "@opentelemetry/core@^1.13.0": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.21.0.tgz#8c16faf16edf861b073c03c9d45977b3f4003ee1" - integrity sha512-KP+OIweb3wYoP7qTYL/j5IpOlu52uxBv5M4+QhSmmUfLyTgu1OIS71msK3chFo1D6Y61BIH3wMiMYRCxJCQctA== +"@opentelemetry/core@1.23.0": + version "1.23.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.23.0.tgz#f2e7ada7f35750f3c1674aef1e52c879005c0731" + integrity sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ== + dependencies: + "@opentelemetry/semantic-conventions" "1.23.0" + +"@opentelemetry/core@1.24.1", "@opentelemetry/core@^1.13.0", "@opentelemetry/core@^1.23.0": + version "1.24.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.24.1.tgz#35ab9d2ac9ca938e0ffbdfa40c49c169ac8ba80d" + integrity sha512-wMSGfsdmibI88K9wB498zXY04yThPexo8jvwNNlm542HZB7XrrMRBbAyKJqG8qDRJwIBdBrPMi4V9ZPW/sqrcg== dependencies: - "@opentelemetry/semantic-conventions" "1.21.0" + "@opentelemetry/semantic-conventions" "1.24.1" "@opentelemetry/exporter-jaeger@1.13.0": version "1.13.0" @@ -7890,6 +7412,18 @@ "@opentelemetry/sdk-metrics" "1.15.2" "@opentelemetry/sdk-trace-base" "1.15.2" +"@opentelemetry/otlp-transformer@^0.50.0": + version "0.50.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.50.0.tgz#211fe512fcce9d76042680f955336dbde3be03ef" + integrity sha512-s0sl1Yfqd5q1Kjrf6DqXPWzErL+XHhrXOfejh4Vc/SMTNqC902xDsC8JQxbjuramWt/+hibfguIvi7Ns8VLolA== + dependencies: + "@opentelemetry/api-logs" "0.50.0" + "@opentelemetry/core" "1.23.0" + "@opentelemetry/resources" "1.23.0" + "@opentelemetry/sdk-logs" "0.50.0" + "@opentelemetry/sdk-metrics" "1.23.0" + "@opentelemetry/sdk-trace-base" "1.23.0" + "@opentelemetry/propagator-b3@1.13.0": version "1.13.0" resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-1.13.0.tgz#30a19a24e61ae8dbc26c2d7d7d3423d804d48f07" @@ -7920,13 +7454,21 @@ "@opentelemetry/core" "1.15.2" "@opentelemetry/semantic-conventions" "1.15.2" -"@opentelemetry/resources@1.21.0", "@opentelemetry/resources@^1.13.0": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.21.0.tgz#e773e918cc8ca26493a987dfbfc6b8a315a2ab45" - integrity sha512-1Z86FUxPKL6zWVy2LdhueEGl9AHDJcx+bvHStxomruz6Whd02mE3lNUMjVJ+FGRoktx/xYQcxccYb03DiUP6Yw== +"@opentelemetry/resources@1.23.0": + version "1.23.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.23.0.tgz#4c71430f3e20c4d88b67ef5629759fae108485e5" + integrity sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg== + dependencies: + "@opentelemetry/core" "1.23.0" + "@opentelemetry/semantic-conventions" "1.23.0" + +"@opentelemetry/resources@1.24.1", "@opentelemetry/resources@^1.13.0", "@opentelemetry/resources@^1.23.0": + version "1.24.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.24.1.tgz#5e2cb84814824f3b1e1017e6caeeee8402e0ad6e" + integrity sha512-cyv0MwAaPF7O86x5hk3NNgenMObeejZFLJJDVuSeSMIsknlsj3oOZzRv3qSzlwYomXsICfBeFFlxwHQte5mGXQ== dependencies: - "@opentelemetry/core" "1.21.0" - "@opentelemetry/semantic-conventions" "1.21.0" + "@opentelemetry/core" "1.24.1" + "@opentelemetry/semantic-conventions" "1.24.1" "@opentelemetry/sdk-logs@0.39.1": version "0.39.1" @@ -7944,6 +7486,14 @@ "@opentelemetry/core" "1.15.2" "@opentelemetry/resources" "1.15.2" +"@opentelemetry/sdk-logs@0.50.0": + version "0.50.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.50.0.tgz#6636492cf626a9666f61d91025e25243d1a43bfc" + integrity sha512-PeUEupBB29p9nlPNqXoa1PUWNLsZnxG0DCDj3sHqzae+8y76B/A5hvZjg03ulWdnvBLYpnJslqzylG9E0IL87g== + dependencies: + "@opentelemetry/core" "1.23.0" + "@opentelemetry/resources" "1.23.0" + "@opentelemetry/sdk-metrics@1.13.0": version "1.13.0" resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.13.0.tgz#4e859107a7a4389bcda7b37d3952bc7dd34211d7" @@ -7962,13 +7512,22 @@ "@opentelemetry/resources" "1.15.2" lodash.merge "^4.6.2" +"@opentelemetry/sdk-metrics@1.23.0": + version "1.23.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.23.0.tgz#b4cf3cc86b6dedf5c438c67c829df7399bf64be1" + integrity sha512-4OkvW6+wST4h6LFG23rXSTf6nmTf201h9dzq7bE0z5R9ESEVLERZz6WXwE7PSgg1gdjlaznm1jLJf8GttypFDg== + dependencies: + "@opentelemetry/core" "1.23.0" + "@opentelemetry/resources" "1.23.0" + lodash.merge "^4.6.2" + "@opentelemetry/sdk-metrics@^1.13.0": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.21.0.tgz#40d71aaec5b696e58743889ce6d5bf2593f9a23d" - integrity sha512-on1jTzIHc5DyWhRP+xpf+zrgrREXcHBH4EDAfaB5mIG7TWpKxNXooQ1JCylaPsswZUv4wGnVTinr4HrBdGARAQ== + version "1.24.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.24.1.tgz#82ee3069b2ca9bb7c1e91272ff81536dc2e9bc8d" + integrity sha512-FrAqCbbGao9iKI+Mgh+OsC9+U2YMoXnlDHe06yH7dvavCKzE3S892dGtX54+WhSFVxHR/TMRVJiK/CV93GR0TQ== dependencies: - "@opentelemetry/core" "1.21.0" - "@opentelemetry/resources" "1.21.0" + "@opentelemetry/core" "1.24.1" + "@opentelemetry/resources" "1.24.1" lodash.merge "^4.6.2" "@opentelemetry/sdk-node@^0.39.1": @@ -8007,14 +7566,23 @@ "@opentelemetry/resources" "1.15.2" "@opentelemetry/semantic-conventions" "1.15.2" -"@opentelemetry/sdk-trace-base@^1.13.0": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.21.0.tgz#ffad912e453a92044fb220bd5d2f6743bf37bb8a" - integrity sha512-yrElGX5Fv0umzp8Nxpta/XqU71+jCAyaLk34GmBzNcrW43nqbrqvdPs4gj4MVy/HcTjr6hifCDCYA3rMkajxxA== +"@opentelemetry/sdk-trace-base@1.23.0": + version "1.23.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.23.0.tgz#ff0a0f8ec47205e0b14b3b765ea2a34de1ad01dd" + integrity sha512-PzBmZM8hBomUqvCddF/5Olyyviayka44O5nDWq673np3ctnvwMOvNrsUORZjKja1zJbwEuD9niAGbnVrz3jwRQ== + dependencies: + "@opentelemetry/core" "1.23.0" + "@opentelemetry/resources" "1.23.0" + "@opentelemetry/semantic-conventions" "1.23.0" + +"@opentelemetry/sdk-trace-base@^1.13.0", "@opentelemetry/sdk-trace-base@^1.23.0": + version "1.24.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.24.1.tgz#dc2ab89126e75e442913fb5af98803fde67b2536" + integrity sha512-zz+N423IcySgjihl2NfjBf0qw1RWe11XIAWVrTNOSSI6dtSPJiVom2zipFB2AEEtJWpv0Iz6DY6+TjnyTV5pWg== dependencies: - "@opentelemetry/core" "1.21.0" - "@opentelemetry/resources" "1.21.0" - "@opentelemetry/semantic-conventions" "1.21.0" + "@opentelemetry/core" "1.24.1" + "@opentelemetry/resources" "1.24.1" + "@opentelemetry/semantic-conventions" "1.24.1" "@opentelemetry/sdk-trace-node@1.13.0": version "1.13.0" @@ -8038,10 +7606,15 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz#3bafb5de3e20e841dff6cb3c66f4d6e9694c4241" integrity sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw== -"@opentelemetry/semantic-conventions@1.21.0": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.21.0.tgz#83f7479c524ab523ac2df702ade30b9724476c72" - integrity sha512-lkC8kZYntxVKr7b8xmjCVUgE0a8xgDakPyDo9uSWavXPyYqLgYYGdEd2j8NxihRyb6UwpX3G/hFUF4/9q2V+/g== +"@opentelemetry/semantic-conventions@1.23.0": + version "1.23.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.23.0.tgz#627f2721b960fe586b7f72a07912cb7699f06eef" + integrity sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg== + +"@opentelemetry/semantic-conventions@1.24.1", "@opentelemetry/semantic-conventions@^1.23.0": + version "1.24.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.24.1.tgz#d4bcebda1cb5146d47a2a53daaa7922f8e084dfb" + integrity sha512-VkliWlS4/+GHLLW7J/rVBA00uXus1SWvwFvcUDxDwmFxYfg/2VI6ekwdXS28cjI8Qz2ky2BzG8OUHo+WeYIWqw== "@parallel-finance/type-definitions@2.0.0": version "2.0.0" @@ -8050,74 +7623,74 @@ dependencies: "@open-web3/orml-type-definitions" "^2.0.1" -"@parcel/watcher-android-arm64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.0.tgz#9c93763794153e4f76920994a423b6ea3257059d" - integrity sha512-+fPtO/GsbYX1LJnCYCaDVT3EOBjvSFdQN9Mrzh9zWAOOfvidPWyScTrHIZHHfJBvlHzNA0Gy0U3NXFA/M7PHUA== +"@parcel/watcher-android-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz#c2c19a3c442313ff007d2d7a9c2c1dd3e1c9ca84" + integrity sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg== -"@parcel/watcher-darwin-arm64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.0.tgz#2c79c2abde16aa24cac67e555b60802fd13fe210" - integrity sha512-T/At5pansFuQ8VJLRx0C6C87cgfqIYhW2N/kBfLCUvDhCah0EnLLwaD/6MW3ux+rpgkpQAnMELOCTKlbwncwiA== +"@parcel/watcher-darwin-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz#c817c7a3b4f3a79c1535bfe54a1c2818d9ffdc34" + integrity sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA== -"@parcel/watcher-darwin-x64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.0.tgz#23d82f198c5d033f047467c68d7c335f3df49b46" - integrity sha512-vZMv9jl+szz5YLsSqEGCMSllBl1gU1snfbRL5ysJU03MEa6gkVy9OMcvXV1j4g0++jHEcvzhs3Z3LpeEbVmY6Q== +"@parcel/watcher-darwin-x64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz#1a3f69d9323eae4f1c61a5f480a59c478d2cb020" + integrity sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg== -"@parcel/watcher-freebsd-x64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.0.tgz#7310cc86abc27dacd57624bcdba1f0ba092e76df" - integrity sha512-dHTRMIplPDT1M0+BkXjtMN+qLtqq24sLDUhmU+UxxLP2TEY2k8GIoqIJiVrGWGomdWsy5IO27aDV1vWyQ6gfHA== +"@parcel/watcher-freebsd-x64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz#0d67fef1609f90ba6a8a662bc76a55fc93706fc8" + integrity sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w== -"@parcel/watcher-linux-arm-glibc@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.0.tgz#c31b76e695027eeb1078d3d6f1d641d0b900c335" - integrity sha512-9NQXD+qk46RwATNC3/UB7HWurscY18CnAPMTFcI9Y8CTbtm63/eex1SNt+BHFinEQuLBjaZwR2Lp+n7pmEJPpQ== +"@parcel/watcher-linux-arm-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz#ce5b340da5829b8e546bd00f752ae5292e1c702d" + integrity sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA== -"@parcel/watcher-linux-arm64-glibc@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.0.tgz#56e09b86e9d8a4096f606be118b588da6e965080" - integrity sha512-QuJTAQdsd7PFW9jNGaV9Pw+ZMWV9wKThEzzlY3Lhnnwy7iW23qtQFPql8iEaSFMCVI5StNNmONUopk+MFKpiKg== +"@parcel/watcher-linux-arm64-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz#6d7c00dde6d40608f9554e73998db11b2b1ff7c7" + integrity sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA== -"@parcel/watcher-linux-arm64-musl@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.0.tgz#27ffd5ca5f510ecd638f9ad22e2e813049db54e7" - integrity sha512-oyN+uA9xcTDo/45bwsd6TFHa7Lc7hKujyMlvwrCLvSckvWogndCEoVYFNfZ6JJ2KNL/6fFiGPcbjp8jJmEh5Ng== +"@parcel/watcher-linux-arm64-musl@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz#bd39bc71015f08a4a31a47cd89c236b9d6a7f635" + integrity sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA== -"@parcel/watcher-linux-x64-glibc@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.0.tgz#44cbbb1e5884a1ca900655f47a0775218318f934" - integrity sha512-KphV8awJmxU3q52JQvJot0QMu07CIyEjV+2Tb2ZtbucEgqyRcxOBDMsqp1JNq5nuDXtcCC0uHQICeiEz38dPBQ== +"@parcel/watcher-linux-x64-glibc@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz#0ce29966b082fb6cdd3de44f2f74057eef2c9e39" + integrity sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg== -"@parcel/watcher-linux-x64-musl@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.0.tgz#4c33993618c8d5113722852806239cb80360494b" - integrity sha512-7jzcOonpXNWcSijPpKD5IbC6xC7yTibjJw9jviVzZostYLGxbz8LDJLUnLzLzhASPlPGgpeKLtFUMjAAzM+gSA== +"@parcel/watcher-linux-x64-musl@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz#d2ebbf60e407170bb647cd6e447f4f2bab19ad16" + integrity sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ== -"@parcel/watcher-wasm@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-wasm/-/watcher-wasm-2.4.0.tgz#84a3959c8ef1cd67b36b9fec487edbc8f27719f6" - integrity sha512-MNgQ4WCbBybqQ97KwR/hqJGYTg3+s8qHpgIyFWB2qJOBvoJWbXuJGmm4ZkPLq2bMaANqCZqrXwmKYagZTkMKZA== +"@parcel/watcher-wasm@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-wasm/-/watcher-wasm-2.4.1.tgz#c4353e4fdb96ee14389856f7f6f6d21b7dcef9e1" + integrity sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA== dependencies: is-glob "^4.0.3" micromatch "^4.0.5" napi-wasm "^1.1.0" -"@parcel/watcher-win32-arm64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.0.tgz#2a172fd2fda95fe5389298ca3e70b5a96316162a" - integrity sha512-NOej2lqlq8bQNYhUMnOD0nwvNql8ToQF+1Zhi9ULZoG+XTtJ9hNnCFfyICxoZLXor4bBPTOnzs/aVVoefYnjIg== +"@parcel/watcher-win32-arm64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz#eb4deef37e80f0b5e2f215dd6d7a6d40a85f8adc" + integrity sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg== -"@parcel/watcher-win32-ia32@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.0.tgz#279225b2ebe1fadd3c5137c9b2365ad422656904" - integrity sha512-IO/nM+K2YD/iwjWAfHFMBPz4Zqn6qBDqZxY4j2n9s+4+OuTSRM/y/irksnuqcspom5DjkSeF9d0YbO+qpys+JA== +"@parcel/watcher-win32-ia32@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz#94fbd4b497be39fd5c8c71ba05436927842c9df7" + integrity sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw== -"@parcel/watcher-win32-x64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.0.tgz#93e0bd0ad1bda2c9a688764b9b30b71dc5b72a71" - integrity sha512-pAUyUVjfFjWaf/pShmJpJmNxZhbMvJASUpdes9jL6bTEJ+gDxPRSpXTIemNyNsb9AtbiGXs9XduP1reThmd+dA== +"@parcel/watcher-win32-x64@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz#4bf920912f67cae5f2d264f58df81abfea68dadf" + integrity sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A== "@parcel/watcher@2.0.4": version "2.0.4" @@ -8127,28 +7700,28 @@ node-addon-api "^3.2.1" node-gyp-build "^4.3.0" -"@parcel/watcher@^2.1.0", "@parcel/watcher@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.4.0.tgz#2d3c4ef8832a5cdfdbb76b914f022489933e664f" - integrity sha512-XJLGVL0DEclX5pcWa2N9SX1jCGTDd8l972biNooLFtjneuGqodupPQh6XseXIBBeVIMaaJ7bTcs3qGvXwsp4vg== +"@parcel/watcher@^2.1.0", "@parcel/watcher@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.4.1.tgz#a50275151a1bb110879c6123589dba90c19f1bf8" + integrity sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA== dependencies: detect-libc "^1.0.3" is-glob "^4.0.3" micromatch "^4.0.5" node-addon-api "^7.0.0" optionalDependencies: - "@parcel/watcher-android-arm64" "2.4.0" - "@parcel/watcher-darwin-arm64" "2.4.0" - "@parcel/watcher-darwin-x64" "2.4.0" - "@parcel/watcher-freebsd-x64" "2.4.0" - "@parcel/watcher-linux-arm-glibc" "2.4.0" - "@parcel/watcher-linux-arm64-glibc" "2.4.0" - "@parcel/watcher-linux-arm64-musl" "2.4.0" - "@parcel/watcher-linux-x64-glibc" "2.4.0" - "@parcel/watcher-linux-x64-musl" "2.4.0" - "@parcel/watcher-win32-arm64" "2.4.0" - "@parcel/watcher-win32-ia32" "2.4.0" - "@parcel/watcher-win32-x64" "2.4.0" + "@parcel/watcher-android-arm64" "2.4.1" + "@parcel/watcher-darwin-arm64" "2.4.1" + "@parcel/watcher-darwin-x64" "2.4.1" + "@parcel/watcher-freebsd-x64" "2.4.1" + "@parcel/watcher-linux-arm-glibc" "2.4.1" + "@parcel/watcher-linux-arm64-glibc" "2.4.1" + "@parcel/watcher-linux-arm64-musl" "2.4.1" + "@parcel/watcher-linux-x64-glibc" "2.4.1" + "@parcel/watcher-linux-x64-musl" "2.4.1" + "@parcel/watcher-win32-arm64" "2.4.1" + "@parcel/watcher-win32-ia32" "2.4.1" + "@parcel/watcher-win32-x64" "2.4.1" "@peaqnetwork/type-definitions@0.0.4": version "0.0.4" @@ -8174,15 +7747,15 @@ tslib "^2.0.0" "@peculiar/webcrypto@^1.4.0": - version "1.4.5" - resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.5.tgz#424bed6b0d133b772f5cbffd143d0468a90f40a0" - integrity sha512-oDk93QCDGdxFRM8382Zdminzs44dg3M2+E5Np+JWkpqLDyJC9DviMh8F8mEJkYuUcUOGA5jHO5AJJ10MFWdbZw== + version "1.4.6" + resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.6.tgz#607af294c4f205efeeb172aa32cb20024fe4aecf" + integrity sha512-YBcMfqNSwn3SujUJvAaySy5tlYbYm6tVt9SKoXu8BaTdKGROiJDgPR3TXpZdAKUfklzm3lRapJEAltiMQtBgZg== dependencies: "@peculiar/asn1-schema" "^2.3.8" "@peculiar/json-schema" "^1.1.12" pvtsutils "^1.3.5" tslib "^2.6.2" - webcrypto-core "^1.7.8" + webcrypto-core "^1.7.9" "@pendulum-chain/type-definitions@0.3.7": version "0.3.7" @@ -8210,15 +7783,13 @@ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@pmmmwh/react-refresh-webpack-plugin@^0.5.5", "@pmmmwh/react-refresh-webpack-plugin@^0.5.7": - version "0.5.11" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz#7c2268cedaa0644d677e8c4f377bc8fb304f714a" - integrity sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ== + version "0.5.13" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.13.tgz#02338a92a92f541a5189b97e922caf3215221e49" + integrity sha512-odZVYXly+JwzYri9rKqqUAk0cY6zLpv4dxoKinhoJNShV36Gpxf+CyDIILJ4tYsJ1ZxIWs233Y39iVnynvDA/g== dependencies: ansi-html-community "^0.0.8" - common-path-prefix "^3.0.0" core-js-pure "^3.23.3" error-stack-parser "^2.0.6" - find-up "^5.0.0" html-entities "^2.1.0" loader-utils "^2.0.4" schema-utils "^3.0.0" @@ -8246,82 +7817,130 @@ config-chain "^1.1.11" "@polka/url@^1.0.0-next.24": - version "1.0.0-next.24" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" - integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== - -"@polkadot/api-augment@10.11.2", "@polkadot/api-augment@10.12.2", "@polkadot/api-augment@10.3.2", "@polkadot/api-augment@8.1.1", "@polkadot/api-augment@^10.11.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-10.11.2.tgz#9ea6f3a25edb61a03d571f06f6ec87ced6d29a2a" - integrity sha512-PTpnqpezc75qBqUtgrc0GYB8h9UHjfbHSRZamAbecIVAJ2/zc6CqtnldeaBlIu1IKTgBzi3FFtTyYu+ZGbNT2Q== - dependencies: - "@polkadot/api-base" "10.11.2" - "@polkadot/rpc-augment" "10.11.2" - "@polkadot/types" "10.11.2" - "@polkadot/types-augment" "10.11.2" - "@polkadot/types-codec" "10.11.2" + version "1.0.0-next.25" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817" + integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ== + +"@polkadot-api/json-rpc-provider-proxy@0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.0.1.tgz#bb5c943642cdf0ec7bc48c0a2647558b9fcd7bdb" + integrity sha512-gmVDUP8LpCH0BXewbzqXF2sdHddq1H1q+XrAW2of+KZj4woQkIGBRGTJHeBEVHe30EB+UejR1N2dT4PO/RvDdg== + +"@polkadot-api/json-rpc-provider@0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz#333645d40ccd9bccfd1f32503f17e4e63e76e297" + integrity sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA== + +"@polkadot-api/metadata-builders@0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@polkadot-api/metadata-builders/-/metadata-builders-0.0.1.tgz#a76b48febef9ea72be8273d889e2677101045a05" + integrity sha512-GCI78BHDzXAF/L2pZD6Aod/yl82adqQ7ftNmKg51ixRL02JpWUA+SpUKTJE5MY1p8kiJJIo09P2um24SiJHxNA== + dependencies: + "@polkadot-api/substrate-bindings" "0.0.1" + "@polkadot-api/utils" "0.0.1" + +"@polkadot-api/observable-client@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/observable-client/-/observable-client-0.1.0.tgz#472045ea06a2bc4bccdc2db5c063eadcbf6f5351" + integrity sha512-GBCGDRztKorTLna/unjl/9SWZcRmvV58o9jwU2Y038VuPXZcr01jcw/1O3x+yeAuwyGzbucI/mLTDa1QoEml3A== + dependencies: + "@polkadot-api/metadata-builders" "0.0.1" + "@polkadot-api/substrate-bindings" "0.0.1" + "@polkadot-api/substrate-client" "0.0.1" + "@polkadot-api/utils" "0.0.1" + +"@polkadot-api/substrate-bindings@0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-bindings/-/substrate-bindings-0.0.1.tgz#c4b7f4d6c3672d2c15cbc6c02964f014b73cbb0b" + integrity sha512-bAe7a5bOPnuFVmpv7y4BBMRpNTnMmE0jtTqRUw/+D8ZlEHNVEJQGr4wu3QQCl7k1GnSV1wfv3mzIbYjErEBocg== + dependencies: + "@noble/hashes" "^1.3.1" + "@polkadot-api/utils" "0.0.1" + "@scure/base" "^1.1.1" + scale-ts "^1.6.0" + +"@polkadot-api/substrate-client@0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-client/-/substrate-client-0.0.1.tgz#0e8010a0abe2fb47d6fa7ab94e45e1d0de083314" + integrity sha512-9Bg9SGc3AwE+wXONQoW8GC00N3v6lCZLW74HQzqB6ROdcm5VAHM4CB/xRzWSUF9CXL78ugiwtHx3wBcpx4H4Wg== + +"@polkadot-api/utils@0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@polkadot-api/utils/-/utils-0.0.1.tgz#908b22becac705149d7cc946532143d0fb003bfc" + integrity sha512-3j+pRmlF9SgiYDabSdZsBSsN5XHbpXOAce1lWj56IEEaFZVjsiCaxDOA7C9nCcgfVXuvnbxqqEGQvnY+QfBAUw== + +"@polkadot/api-augment@10.12.2", "@polkadot/api-augment@10.3.2", "@polkadot/api-augment@11.1.1", "@polkadot/api-augment@8.1.1", "@polkadot/api-augment@^11.0.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-11.1.1.tgz#6e9614e6d236472a9aaed8415a2999befe26031e" + integrity sha512-3rJZmW5RH/A9ajO75Fmc20FMQRFytk/hZOqFAlhik/UuRCOgtU4fNouSWaWN0a75iBT8+01/sS917XRibHDysQ== + dependencies: + "@polkadot/api-base" "11.1.1" + "@polkadot/rpc-augment" "11.1.1" + "@polkadot/types" "11.1.1" + "@polkadot/types-augment" "11.1.1" + "@polkadot/types-codec" "11.1.1" "@polkadot/util" "^12.6.2" tslib "^2.6.2" -"@polkadot/api-base@10.11.2", "@polkadot/api-base@^10.11.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-10.11.2.tgz#135de5ab83769a1fd3ad9f845f27338a65b0ffe3" - integrity sha512-4LIjaUfO9nOzilxo7XqzYKCNMtmUypdk8oHPdrRnSjKEsnK7vDsNi+979z2KXNXd2KFSCFHENmI523fYnMnReg== +"@polkadot/api-base@11.1.1", "@polkadot/api-base@^11.0.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-11.1.1.tgz#225422d6e4ccaad5b250f8e85a7d1e4f4b922f58" + integrity sha512-+hH7Azj7pOj0iyjLj8ORxJVNUKAfZCH68rM9VQRs+/N9NmpxSMx8AxBKCynSgSJoiDXr84Zm862wJHoa4Ytf2g== dependencies: - "@polkadot/rpc-core" "10.11.2" - "@polkadot/types" "10.11.2" + "@polkadot/rpc-core" "11.1.1" + "@polkadot/types" "11.1.1" "@polkadot/util" "^12.6.2" rxjs "^7.8.1" tslib "^2.6.2" -"@polkadot/api-contract@^10.11.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-10.11.2.tgz#2211fc17ea470413b279bafccea8f70f3308fa4d" - integrity sha512-n+G1puptaQA5CwO2EHmD29QR1qlV/dVs6R0cBSGFaXvYJxqYJvN2LEir3i9vWjO0IVqulTjLPWvv7MbR3CxhmA== - dependencies: - "@polkadot/api" "10.11.2" - "@polkadot/api-augment" "10.11.2" - "@polkadot/types" "10.11.2" - "@polkadot/types-codec" "10.11.2" - "@polkadot/types-create" "10.11.2" +"@polkadot/api-contract@^11.0.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-11.1.1.tgz#cfba80047c764108f9a126a36a981910996c1991" + integrity sha512-pKujs7Qh6vVOaWbg1HWBK40P8T5XVkePV3VNw4HOpVrPi2vOFT50+BppgFNXCRhGiTKaET+9fY07C07ssaTfdQ== + dependencies: + "@polkadot/api" "11.1.1" + "@polkadot/api-augment" "11.1.1" + "@polkadot/types" "11.1.1" + "@polkadot/types-codec" "11.1.1" + "@polkadot/types-create" "11.1.1" "@polkadot/util" "^12.6.2" "@polkadot/util-crypto" "^12.6.2" rxjs "^7.8.1" tslib "^2.6.2" -"@polkadot/api-derive@10.11.2", "@polkadot/api-derive@10.12.2", "@polkadot/api-derive@10.3.2", "@polkadot/api-derive@8.1.1", "@polkadot/api-derive@^10.11.1", "@polkadot/api-derive@^10.11.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-10.11.2.tgz#eb9e3f681ef3dda88ee2dfa538a6bded937de77e" - integrity sha512-m3BQbPionkd1iSlknddxnL2hDtolPIsT+aRyrtn4zgMRPoLjHFmTmovvg8RaUyYofJtZeYrnjMw0mdxiSXx7eA== - dependencies: - "@polkadot/api" "10.11.2" - "@polkadot/api-augment" "10.11.2" - "@polkadot/api-base" "10.11.2" - "@polkadot/rpc-core" "10.11.2" - "@polkadot/types" "10.11.2" - "@polkadot/types-codec" "10.11.2" +"@polkadot/api-derive@10.12.2", "@polkadot/api-derive@10.3.2", "@polkadot/api-derive@11.1.1", "@polkadot/api-derive@8.1.1", "@polkadot/api-derive@^10.11.1", "@polkadot/api-derive@^11.0.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-11.1.1.tgz#1084b1964cd2554da64c225f938c3e0a9555a9a9" + integrity sha512-OR2DfUg9Nd3JvCw3hUXbLPyiaUBPzb1mVXc2qngqdz4Y1Sg0yakTwKjSiFBEgQE7qO0Fjq9BYKLi5Ci66jciAw== + dependencies: + "@polkadot/api" "11.1.1" + "@polkadot/api-augment" "11.1.1" + "@polkadot/api-base" "11.1.1" + "@polkadot/rpc-core" "11.1.1" + "@polkadot/types" "11.1.1" + "@polkadot/types-codec" "11.1.1" "@polkadot/util" "^12.6.2" "@polkadot/util-crypto" "^12.6.2" rxjs "^7.8.1" tslib "^2.6.2" -"@polkadot/api@10.11.2", "@polkadot/api@10.12.2", "@polkadot/api@10.3.2", "@polkadot/api@8.1.1", "@polkadot/api@^10.11.1", "@polkadot/api@^10.11.2", "@polkadot/api@^10.7.3", "@polkadot/api@^10.9.1", "@polkadot/api@^7.2.1", "@polkadot/api@^9.13.2", "@polkadot/api@^9.14.1", "@polkadot/api@latest": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-10.11.2.tgz#16cd07062d51cc9cf77a3a6afa3cb4e526e44a82" - integrity sha512-AorCZxCWCoTtdbl4DPUZh+ACe/pbLIS1BkdQY0AFJuZllm0x/yWzjgampcPd5jQAA/O3iKShRBkZqj6Mk9yG/A== +"@polkadot/api@10.12.2", "@polkadot/api@10.3.2", "@polkadot/api@11.1.1", "@polkadot/api@8.1.1", "@polkadot/api@^10.11.1", "@polkadot/api@^10.7.3", "@polkadot/api@^10.9.1", "@polkadot/api@^11.0.2", "@polkadot/api@^7.2.1", "@polkadot/api@^9.13.2", "@polkadot/api@^9.14.1", "@polkadot/api@latest": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-11.1.1.tgz#13c7dfd1df6a806355ff444bbb0707669cf9eee7" + integrity sha512-SGKIFMan0o4cjRxpndAaEG7aPb9TwAPVgjS/DKJDpzdKA7rEqDTe+SFw/vuzbt9CSl2nx1LBd10xbOeV7Ak+KA== dependencies: - "@polkadot/api-augment" "10.11.2" - "@polkadot/api-base" "10.11.2" - "@polkadot/api-derive" "10.11.2" + "@polkadot/api-augment" "11.1.1" + "@polkadot/api-base" "11.1.1" + "@polkadot/api-derive" "11.1.1" "@polkadot/keyring" "^12.6.2" - "@polkadot/rpc-augment" "10.11.2" - "@polkadot/rpc-core" "10.11.2" - "@polkadot/rpc-provider" "10.11.2" - "@polkadot/types" "10.11.2" - "@polkadot/types-augment" "10.11.2" - "@polkadot/types-codec" "10.11.2" - "@polkadot/types-create" "10.11.2" - "@polkadot/types-known" "10.11.2" + "@polkadot/rpc-augment" "11.1.1" + "@polkadot/rpc-core" "11.1.1" + "@polkadot/rpc-provider" "11.1.1" + "@polkadot/types" "11.1.1" + "@polkadot/types-augment" "11.1.1" + "@polkadot/types-codec" "11.1.1" + "@polkadot/types-create" "11.1.1" + "@polkadot/types-known" "11.1.1" "@polkadot/util" "^12.6.2" "@polkadot/util-crypto" "^12.6.2" eventemitter3 "^5.0.1" @@ -8387,10 +8006,10 @@ jsdom "^21.1.1" tslib "^2.5.0" -"@polkadot/dev-test@^0.78.11": - version "0.78.11" - resolved "https://registry.yarnpkg.com/@polkadot/dev-test/-/dev-test-0.78.11.tgz#4c6a46208ce87da8d52d612237fbc94e7417d4eb" - integrity sha512-uQfi9ZlKUgDAhOAdBAkaVBeMKQIEU+BkmUR/bfHNrH2i0b+vjCkbBZGAEvYj1xRWEuQaxZvbA9343InPxL7ZDQ== +"@polkadot/dev-test@^0.78.13": + version "0.78.13" + resolved "https://registry.yarnpkg.com/@polkadot/dev-test/-/dev-test-0.78.13.tgz#3ce7e89e1f78058d2e2bf30fabf634d37e929145" + integrity sha512-KImClEradZP2vqfy+d0eDORLZ3EdShqEe9AM0p9kekOIT5gUOP9RwoDAP/wkmTnk/A4nfFm2W6eFyghLBBBHxw== dependencies: jsdom "^24.0.0" tslib "^2.6.2" @@ -8404,10 +8023,10 @@ tslib "^2.5.0" typescript "^5.0.4" -"@polkadot/dev-ts@^0.78.11": - version "0.78.11" - resolved "https://registry.yarnpkg.com/@polkadot/dev-ts/-/dev-ts-0.78.11.tgz#1588581812fa7535aeffc4033b3b0a31cd237b63" - integrity sha512-IN4jh2XlX7tVZ1eq8APgWHVCQR+8252k28TL8NYAGZv93+DoQsJp8aHnr+cbUyHtJKH3654OnPbQAAAieXuBDQ== +"@polkadot/dev-ts@^0.78.13": + version "0.78.13" + resolved "https://registry.yarnpkg.com/@polkadot/dev-ts/-/dev-ts-0.78.13.tgz#e9df39a7fac8d671d239ad59d3ea1424a0366400" + integrity sha512-eKesupafGSs9qon+K174ifLB1HDcbNNLLRjgxNf7c2EyfqGp+3itqqymbQZ13XT3T/fqdt7WqKNd+Bzup1RhJA== dependencies: json5 "^2.2.3" tslib "^2.6.2" @@ -8461,13 +8080,13 @@ yargs "^17.7.1" "@polkadot/dev@^0.78.11": - version "0.78.11" - resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.78.11.tgz#957f2a0dcc9ad1a5c44a6ceafa447b8e4b6f9c65" - integrity sha512-KnK01rM15GZYne9w5HPTLVou09eQxE3fnUuwv1n31MuQLFhIzHqZwHKl+jsvj2Nt0jcAS0V6Xd2zamHD2CJkjQ== + version "0.78.13" + resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.78.13.tgz#b1912aa1e8d7dc7f06d887ac452dbe7760d097c7" + integrity sha512-PWezAVbOossaMEPsLVFV6PD3RzJ7ql8fKYlpGVd3aw8O1+J9U7EI0NBq7TrxxDnP1qLnaT1kSuUjAJYXTdmfvA== dependencies: "@eslint/js" "^8.56.0" - "@polkadot/dev-test" "^0.78.11" - "@polkadot/dev-ts" "^0.78.11" + "@polkadot/dev-test" "^0.78.13" + "@polkadot/dev-ts" "^0.78.13" "@rollup/plugin-alias" "^5.1.0" "@rollup/plugin-commonjs" "^25.0.7" "@rollup/plugin-dynamic-import-vars" "^2.1.2" @@ -8532,7 +8151,7 @@ "@polkadot/x-global" "^12.6.1" tslib "^2.6.2" -"@polkadot/keyring@9.0.1", "@polkadot/keyring@^12.6.1", "@polkadot/keyring@^12.6.2", "@polkadot/keyring@^6.9.1", "@polkadot/keyring@^7.4.1", "@polkadot/keyring@^8.2.2": +"@polkadot/keyring@9.0.1", "@polkadot/keyring@^12.6.2", "@polkadot/keyring@^6.9.1", "@polkadot/keyring@^7.4.1", "@polkadot/keyring@^8.2.2": version "12.6.2" resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-12.6.2.tgz#6067e6294fee23728b008ac116e7e9db05cecb9b" integrity sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw== @@ -8551,13 +8170,13 @@ tslib "^2.6.2" "@polkadot/phishing@^0.22.1": - version "0.22.1" - resolved "https://registry.yarnpkg.com/@polkadot/phishing/-/phishing-0.22.1.tgz#7fd014793797ee2ceb2670a1700284b62ec662bd" - integrity sha512-IDII8jSdfoAHyABGlgTg6O8xpUYaSDc+NSnJ8U/V8XCjVYAEe3j/w/H3LnXKMVKWHexbpLzO4MMbu5ldNw7AjQ== + version "0.22.8" + resolved "https://registry.yarnpkg.com/@polkadot/phishing/-/phishing-0.22.8.tgz#2fc4f7f117b73c5a579e48fe9786cc5954db8b4b" + integrity sha512-rU6JgOJqnXeNZX5kR+haHQvJrbxlKN3rTcCZS9vvenhUZmLMeGxLLnaIa18G+hzOPNKLY/rCaODM7JwPQer7jA== dependencies: - "@polkadot/util" "^12.6.1" - "@polkadot/util-crypto" "^12.6.1" - "@polkadot/x-fetch" "^12.6.1" + "@polkadot/util" "^12.6.2" + "@polkadot/util-crypto" "^12.6.2" + "@polkadot/x-fetch" "^12.6.2" tslib "^2.6.2" "@polkadot/react-hooks@^0.39.1": @@ -8568,52 +8187,52 @@ "@babel/runtime" "^7.8.3" "@polkadot/react-identicon@^3.6.4": - version "3.6.4" - resolved "https://registry.yarnpkg.com/@polkadot/react-identicon/-/react-identicon-3.6.4.tgz#1fd5915e63ceb21a6c6a07cd3bd0a2032213486e" - integrity sha512-y8DFLXEVVZ1dKAQDdvtASxPyR4JqnqokRzbuZF1eDUleNxOJruNDGLGrfuM6rqVNHdHRy35Rku546aFqVE5Ldg== + version "3.6.6" + resolved "https://registry.yarnpkg.com/@polkadot/react-identicon/-/react-identicon-3.6.6.tgz#815a58ae84985f96551b38582738497b04e7542d" + integrity sha512-fcIqfXdQqmfVPquytfCPtG//4CEcdYCZQI7mO0zJCwH1RlUuxmhp5Gmm8TS+4ATOZ5utO6/IB+et9yAZ99PSNg== dependencies: - "@polkadot/keyring" "^12.6.1" - "@polkadot/ui-settings" "3.6.4" - "@polkadot/ui-shared" "3.6.4" - "@polkadot/util" "^12.6.1" - "@polkadot/util-crypto" "^12.6.1" + "@polkadot/keyring" "^12.6.2" + "@polkadot/ui-settings" "3.6.6" + "@polkadot/ui-shared" "3.6.6" + "@polkadot/util" "^12.6.2" + "@polkadot/util-crypto" "^12.6.2" ethereum-blockies-base64 "^1.0.2" jdenticon "3.2.0" react-copy-to-clipboard "^5.1.0" styled-components "^6.1.1" tslib "^2.6.2" -"@polkadot/rpc-augment@10.11.2", "@polkadot/rpc-augment@10.12.2", "@polkadot/rpc-augment@10.3.2", "@polkadot/rpc-augment@8.1.1", "@polkadot/rpc-augment@^10.11.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-10.11.2.tgz#4458ee62bd95cd1f016f097f607767d1e6dfc709" - integrity sha512-9AhT0WW81/8jYbRcAC6PRmuxXqNhJje8OYiulBQHbG1DTCcjAfz+6VQBke9BwTStzPq7d526+yyBKD17O3zlAA== +"@polkadot/rpc-augment@10.12.2", "@polkadot/rpc-augment@10.3.2", "@polkadot/rpc-augment@11.1.1", "@polkadot/rpc-augment@8.1.1", "@polkadot/rpc-augment@^11.0.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-11.1.1.tgz#4e9466ed320fd664f49c5e894afcf2191f1357b0" + integrity sha512-jkKhKAqgPivgNltmLmeD7oiMD6ekxe9bv2qOGEc1BVopSnS+PXCuGOeftTuv7Qo4rXaoEkMP1rlxmbjOZ4o3sg== dependencies: - "@polkadot/rpc-core" "10.11.2" - "@polkadot/types" "10.11.2" - "@polkadot/types-codec" "10.11.2" + "@polkadot/rpc-core" "11.1.1" + "@polkadot/types" "11.1.1" + "@polkadot/types-codec" "11.1.1" "@polkadot/util" "^12.6.2" tslib "^2.6.2" -"@polkadot/rpc-core@10.11.2", "@polkadot/rpc-core@8.1.1", "@polkadot/rpc-core@^10.11.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-10.11.2.tgz#a63ef288133d32abfeff8e80a94d3787e91e87be" - integrity sha512-Ot0CFLWx8sZhLZog20WDuniPA01Bk2StNDsdAQgcFKPwZw6ShPaZQCHuKLQK6I6DodOrem9FXX7c1hvoKJP5Ww== +"@polkadot/rpc-core@11.1.1", "@polkadot/rpc-core@8.1.1", "@polkadot/rpc-core@^11.0.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-11.1.1.tgz#13370585376d4591ea494d30a30106a01fa8784b" + integrity sha512-XDEIxWajwS0DIJeqImWYeSDHcMZNXUDunI+mXK/ihtZJY6/s3CY1UHo6SgdWCK05IukQhr9CjRVtKNU7DYGS4Q== dependencies: - "@polkadot/rpc-augment" "10.11.2" - "@polkadot/rpc-provider" "10.11.2" - "@polkadot/types" "10.11.2" + "@polkadot/rpc-augment" "11.1.1" + "@polkadot/rpc-provider" "11.1.1" + "@polkadot/types" "11.1.1" "@polkadot/util" "^12.6.2" rxjs "^7.8.1" tslib "^2.6.2" -"@polkadot/rpc-provider@10.11.2", "@polkadot/rpc-provider@10.12.2", "@polkadot/rpc-provider@10.3.2", "@polkadot/rpc-provider@8.1.1", "@polkadot/rpc-provider@^10.11.1", "@polkadot/rpc-provider@^10.11.2", "@polkadot/rpc-provider@^10.7.3", "@polkadot/rpc-provider@^9.13.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-10.11.2.tgz#b50a11d4baffa39519f786951e68d8c4953672a8" - integrity sha512-he5jWMpDJp7e+vUzTZDzpkB7ps3H8psRally+/ZvZZScPvFEjfczT7I1WWY9h58s8+ImeVP/lkXjL9h/gUOt3Q== +"@polkadot/rpc-provider@10.12.2", "@polkadot/rpc-provider@10.3.2", "@polkadot/rpc-provider@11.1.1", "@polkadot/rpc-provider@8.1.1", "@polkadot/rpc-provider@^10.11.1", "@polkadot/rpc-provider@^10.7.3", "@polkadot/rpc-provider@^11.0.2", "@polkadot/rpc-provider@^9.13.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-11.1.1.tgz#5fa8dcbeab8cf2747697fbfd745b664f4bbb8746" + integrity sha512-m4v964Cs7dM9cLiMD5XVLPvKAT1yOcvTX618875pLe5LU67b7MLUT2xxCchXf61jvM6b3NKNKulKSMmlQJkYtw== dependencies: "@polkadot/keyring" "^12.6.2" - "@polkadot/types" "10.11.2" - "@polkadot/types-support" "10.11.2" + "@polkadot/types" "11.1.1" + "@polkadot/types-support" "11.1.1" "@polkadot/util" "^12.6.2" "@polkadot/util-crypto" "^12.6.2" "@polkadot/x-fetch" "^12.6.2" @@ -8621,10 +8240,10 @@ "@polkadot/x-ws" "^12.6.2" eventemitter3 "^5.0.1" mock-socket "^9.3.1" - nock "^13.4.0" + nock "^13.5.0" tslib "^2.6.2" optionalDependencies: - "@substrate/connect" "0.7.35" + "@substrate/connect" "0.8.10" "@polkadot/typegen@10.12.2": version "10.12.2" @@ -8691,83 +8310,83 @@ websocket "^1.0.34" yargs "^17.4.1" -"@polkadot/types-augment@10.11.2", "@polkadot/types-augment@10.12.2", "@polkadot/types-augment@10.3.2", "@polkadot/types-augment@8.1.1", "@polkadot/types-augment@^10.11.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-10.11.2.tgz#197b24f2c85c9ca483d5cb6d2acc06f42c707abd" - integrity sha512-8eB8ew04wZiE5GnmFvEFW1euJWmF62SGxb1O+8wL3zoUtB9Xgo1vB6w6xbTrd+HLV6jNSeXXnbbF1BEUvi9cNg== +"@polkadot/types-augment@10.12.2", "@polkadot/types-augment@10.3.2", "@polkadot/types-augment@11.1.1", "@polkadot/types-augment@8.1.1", "@polkadot/types-augment@^11.0.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-11.1.1.tgz#2d65b416b0d6ddce25e0185692ef52e4cc122365" + integrity sha512-aBfM+vu76YIym8Dvy00FJZRVz9cHqeghlTj3Lj1WjolVc+GuFxAWDx87p778Sb9d+iebA3pVY0wXNF+ZlRNDtg== dependencies: - "@polkadot/types" "10.11.2" - "@polkadot/types-codec" "10.11.2" + "@polkadot/types" "11.1.1" + "@polkadot/types-codec" "11.1.1" "@polkadot/util" "^12.6.2" tslib "^2.6.2" -"@polkadot/types-codec@10.11.2", "@polkadot/types-codec@10.12.2", "@polkadot/types-codec@10.3.2", "@polkadot/types-codec@8.1.1", "@polkadot/types-codec@^10.11.1", "@polkadot/types-codec@^10.11.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-10.11.2.tgz#e4570f8c92ffad090fb1d04a94731979537ced33" - integrity sha512-3xjOQL+LOOMzYqlgP9ROL0FQnzU8lGflgYewzau7AsDlFziSEtb49a9BpYo6zil4koC+QB8zQ9OHGFumG08T8w== +"@polkadot/types-codec@10.12.2", "@polkadot/types-codec@10.3.2", "@polkadot/types-codec@11.1.1", "@polkadot/types-codec@8.1.1", "@polkadot/types-codec@^10.11.1", "@polkadot/types-codec@^11.0.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-11.1.1.tgz#f4969b908c0515ddf7f68297d7f60576ccf4f842" + integrity sha512-YMLEwerOO17M++EUAnh0SQWcDQNZ/l2nGmbSSvLEUBZdjXdtfLQ8NFVZakH5ehNHD+X3t0NLOQJg0hOBlVIj4A== dependencies: "@polkadot/util" "^12.6.2" "@polkadot/x-bigint" "^12.6.2" tslib "^2.6.2" -"@polkadot/types-create@10.11.2", "@polkadot/types-create@10.12.2", "@polkadot/types-create@10.3.2", "@polkadot/types-create@8.1.1", "@polkadot/types-create@^10.11.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-10.11.2.tgz#dfd52cdde45619c90f42ec4c681bc5ec8d9e6f43" - integrity sha512-SJt23NxYvefRxVZZm6mT9ed1pR6FDoIGQ3xUpbjhTLfU2wuhpKjekMVorYQ6z/gK2JLMu2kV92Ardsz+6GX5XQ== +"@polkadot/types-create@10.12.2", "@polkadot/types-create@10.3.2", "@polkadot/types-create@11.1.1", "@polkadot/types-create@8.1.1", "@polkadot/types-create@^11.0.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-11.1.1.tgz#cdfaff59acd5aca3af30374973904c044061d3b5" + integrity sha512-Ro/9lYyEhGYTFoIvFUvAzdJ+0Of/tVnqewtwV35iXX9C86GazE8URJPrHFh4J/GBLQY0/JiT++PwxwFNH/kJsw== dependencies: - "@polkadot/types-codec" "10.11.2" + "@polkadot/types-codec" "11.1.1" "@polkadot/util" "^12.6.2" tslib "^2.6.2" -"@polkadot/types-known@10.11.2", "@polkadot/types-known@^10.11.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-10.11.2.tgz#2ce647b0dd49dec07032547a53d7aa30208a825f" - integrity sha512-kbEIX7NUQFxpDB0FFGNyXX/odY7jbp56RGD+Z4A731fW2xh/DgAQrI994xTzuh0c0EqPE26oQm3kATSpseqo9w== +"@polkadot/types-known@11.1.1", "@polkadot/types-known@^11.0.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-11.1.1.tgz#2ee3b324573cbc7caa538688743b16fc87f72103" + integrity sha512-Kp+KrCIxy8FkfqzyV/KpRGJC8bBAK8eKC/ta7bCo++kmdGc9FFfpmTMPIYOtd8vxYdL71KA40bI9LqodCaopQg== dependencies: "@polkadot/networks" "^12.6.2" - "@polkadot/types" "10.11.2" - "@polkadot/types-codec" "10.11.2" - "@polkadot/types-create" "10.11.2" + "@polkadot/types" "11.1.1" + "@polkadot/types-codec" "11.1.1" + "@polkadot/types-create" "11.1.1" "@polkadot/util" "^12.6.2" tslib "^2.6.2" -"@polkadot/types-support@10.11.2", "@polkadot/types-support@10.12.2", "@polkadot/types-support@10.3.2", "@polkadot/types-support@8.1.1", "@polkadot/types-support@^10.11.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-10.11.2.tgz#3ab2252688ea50dbb35055789d0b775b0f5a7b2f" - integrity sha512-X11hoykFYv/3efg4coZy2hUOUc97JhjQMJLzDhHniFwGLlYU8MeLnPdCVGkXx0xDDjTo4/ptS1XpZ5HYcg+gRw== +"@polkadot/types-support@10.12.2", "@polkadot/types-support@10.3.2", "@polkadot/types-support@11.1.1", "@polkadot/types-support@8.1.1", "@polkadot/types-support@^11.0.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-11.1.1.tgz#de2c732e81bd793a33e761bc5f12c884ecb8a293" + integrity sha512-Wf1aYs5lEtwksFH8EBNZMxBJlcRFx/sewErzpwGJJFT8BGcrQpc6HlNjVXJpTdXj+0VzUBHE9B8eAWfWQl8YIA== dependencies: "@polkadot/util" "^12.6.2" tslib "^2.6.2" -"@polkadot/types@10.11.2", "@polkadot/types@10.12.2", "@polkadot/types@10.3.2", "@polkadot/types@8.1.1", "@polkadot/types@^10.11.1", "@polkadot/types@^10.11.2", "@polkadot/types@^10.7.3", "@polkadot/types@^4.13.1", "@polkadot/types@^6.0.5", "@polkadot/types@^7.2.1", "@polkadot/types@^9.13.2": - version "10.11.2" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-10.11.2.tgz#3317b6fcee53bbfba7bf654413f93ccd742c478e" - integrity sha512-d52j3xXni+C8GdYZVTSfu8ROAnzXFMlyRvXtor0PudUc8UQHOaC4+mYAkTBGA2gKdmL8MHSfRSbhcxHhsikY6Q== +"@polkadot/types@10.12.2", "@polkadot/types@10.3.2", "@polkadot/types@11.1.1", "@polkadot/types@8.1.1", "@polkadot/types@^10.11.1", "@polkadot/types@^10.7.3", "@polkadot/types@^11.0.2", "@polkadot/types@^4.13.1", "@polkadot/types@^6.0.5", "@polkadot/types@^7.2.1", "@polkadot/types@^9.13.2": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-11.1.1.tgz#bfb8964cdb09031af72e4bbe5d94cd119796b7f0" + integrity sha512-v4cbkRXYGcgtESg5oF/fVFNSrkmxw+rFxWslOWVB0mDJ74ooPDyasBR0FjxrPdoMlbxtrBbs+TixFEKng63chA== dependencies: "@polkadot/keyring" "^12.6.2" - "@polkadot/types-augment" "10.11.2" - "@polkadot/types-codec" "10.11.2" - "@polkadot/types-create" "10.11.2" + "@polkadot/types-augment" "11.1.1" + "@polkadot/types-codec" "11.1.1" + "@polkadot/types-create" "11.1.1" "@polkadot/util" "^12.6.2" "@polkadot/util-crypto" "^12.6.2" rxjs "^7.8.1" tslib "^2.6.2" -"@polkadot/ui-settings@3.6.4": - version "3.6.4" - resolved "https://registry.yarnpkg.com/@polkadot/ui-settings/-/ui-settings-3.6.4.tgz#459ee4bee8aa9a81c21ad1bac96130a43a0f14bd" - integrity sha512-0vZPiMqGP9wv1SNBt0Snt6ScmrNHI2aqd9mixKs0pneDI0EO6ZndGanF3xgC51SCpS/N9qNh+VXckghmQMgaNQ== +"@polkadot/ui-settings@3.6.6": + version "3.6.6" + resolved "https://registry.yarnpkg.com/@polkadot/ui-settings/-/ui-settings-3.6.6.tgz#99091457cde3a8e39880abdb1fb7171387172880" + integrity sha512-DoXXnj4KASxZWE+hnBkNXOkm3AX6CbyyZLzPBAPR4ZyyGTqushJNmyaiTiArqMtBh7rYFT2cDStt+qOa/hjyhQ== dependencies: - "@polkadot/networks" "^12.6.1" - "@polkadot/util" "^12.6.1" + "@polkadot/networks" "^12.6.2" + "@polkadot/util" "^12.6.2" eventemitter3 "^5.0.1" store "^2.0.12" tslib "^2.6.2" -"@polkadot/ui-shared@3.6.4": - version "3.6.4" - resolved "https://registry.yarnpkg.com/@polkadot/ui-shared/-/ui-shared-3.6.4.tgz#cc392313c7859b93e0d7c480905a74528175e5b6" - integrity sha512-nDlfKRPLxjSFm0769Nmkm+8vamH4HwZtKYZ5X+e2yDF1QkgaRUIc9+xJ/eeXp5lkfH985s0IAEmeNw8dQ0SbYg== +"@polkadot/ui-shared@3.6.6": + version "3.6.6" + resolved "https://registry.yarnpkg.com/@polkadot/ui-shared/-/ui-shared-3.6.6.tgz#b52b9ec2775a5b919640eb4871b9d6553e13cf5e" + integrity sha512-cZkgis83y9U0SxsXZalvOqRWvq0tLHnFIYlyMzitolC4xePUQjamSar6mUedp+mneyPIq+GW46wyUzPbuBFuhw== dependencies: colord "^2.9.3" tslib "^2.6.2" @@ -9593,10 +9212,15 @@ dependencies: "@babel/runtime" "^7.13.10" -"@remix-run/router@1.15.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.15.0.tgz#461a952c2872dd82c8b2e9b74c4dfaff569123e2" - integrity sha512-HOil5aFtme37dVQTB6M34G95kPM3MMuqSmIRVCC52eKV+Y/tGSqw9P3rWhlAx6A+mz+MoX+XxsGsNJbaI5qCgQ== +"@remix-run/router@1.16.1": + version "1.16.1" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.16.1.tgz#73db3c48b975eeb06d0006481bde4f5f2d17d1cd" + integrity sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig== + +"@remote-ui/rpc@^1.2.5": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@remote-ui/rpc/-/rpc-1.4.5.tgz#20328970c314374d96fdaae1cf93aca4b47fefee" + integrity sha512-Cr+06niG/vmE4A9YsmaKngRuuVSWKMY42NMwtZfy+gctRWGu6Wj9BWuMJg5CEp+JTkRBPToqT5rqnrg1G/Wvow== "@repeaterjs/repeater@3.0.4": version "3.0.4" @@ -9604,9 +9228,9 @@ integrity sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA== "@repeaterjs/repeater@^3.0.4": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.5.tgz#b77571685410217a548a9c753aa3cdfc215bfc78" - integrity sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA== + version "3.0.6" + resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.6.tgz#be23df0143ceec3c69f8b6c2517971a5578fdaa2" + integrity sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA== "@rollup/plugin-alias@^5.0.0", "@rollup/plugin-alias@^5.1.0": version "5.1.0" @@ -9623,6 +9247,14 @@ "@babel/helper-module-imports" "^7.10.4" "@rollup/pluginutils" "^3.1.0" +"@rollup/plugin-babel@^6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz#bd698e351fa9aa9619fcae780aea2a603d98e4c4" + integrity sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@rollup/pluginutils" "^5.0.1" + "@rollup/plugin-commonjs@^20.0.0": version "20.0.0" resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz#3246872dcbcb18a54aaa6277a8c7d7f1b155b745" @@ -9649,9 +9281,9 @@ magic-string "^0.27.0" "@rollup/plugin-commonjs@^25.0.0", "@rollup/plugin-commonjs@^25.0.7": - version "25.0.7" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz#145cec7589ad952171aeb6a585bbeabd0fd3b4cf" - integrity sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ== + version "25.0.8" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz#c77e608ab112a666b7f2a6bea625c73224f7dd34" + integrity sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A== dependencies: "@rollup/pluginutils" "^5.0.1" commondir "^1.0.1" @@ -9671,7 +9303,7 @@ fast-glob "^3.2.12" magic-string "^0.30.3" -"@rollup/plugin-image@3.0.3": +"@rollup/plugin-image@3.0.3", "@rollup/plugin-image@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@rollup/plugin-image/-/plugin-image-3.0.3.tgz#025b557180bae20f2349ff5130ef2114169feaac" integrity sha512-qXWQwsXpvD4trSb8PeFPFajp8JLpRtqqOeNYRUKnEQNHm7e5UP7fuSRcbjQAJ7wDZBbnJvSdY5ujNBQd9B1iFg== @@ -9768,140 +9400,90 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz#38c3abd1955a3c21d492af6b1a1dca4bb1d894d6" - integrity sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w== - -"@rollup/rollup-android-arm-eabi@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz#b98786c1304b4ff8db3a873180b778649b5dff2b" - integrity sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg== - -"@rollup/rollup-android-arm64@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz#3822e929f415627609e53b11cec9a4be806de0e2" - integrity sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ== - -"@rollup/rollup-android-arm64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz#8833679af11172b1bf1ab7cb3bad84df4caf0c9e" - integrity sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q== - -"@rollup/rollup-darwin-arm64@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz#6c082de71f481f57df6cfa3701ab2a7afde96f69" - integrity sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ== - -"@rollup/rollup-darwin-arm64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz#ef02d73e0a95d406e0eb4fd61a53d5d17775659b" - integrity sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g== - -"@rollup/rollup-darwin-x64@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz#c34ca0d31f3c46a22c9afa0e944403eea0edcfd8" - integrity sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg== - -"@rollup/rollup-darwin-x64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz#3ce5b9bcf92b3341a5c1c58a3e6bcce0ea9e7455" - integrity sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg== - -"@rollup/rollup-linux-arm-gnueabihf@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz#48e899c1e438629c072889b824a98787a7c2362d" - integrity sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA== - -"@rollup/rollup-linux-arm-gnueabihf@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz#3d3d2c018bdd8e037c6bfedd52acfff1c97e4be4" - integrity sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ== - -"@rollup/rollup-linux-arm64-gnu@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz#788c2698a119dc229062d40da6ada8a090a73a68" - integrity sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA== - -"@rollup/rollup-linux-arm64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz#5fc8cc978ff396eaa136d7bfe05b5b9138064143" - integrity sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w== - -"@rollup/rollup-linux-arm64-musl@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz#3882a4e3a564af9e55804beeb67076857b035ab7" - integrity sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ== - -"@rollup/rollup-linux-arm64-musl@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz#f2ae7d7bed416ffa26d6b948ac5772b520700eef" - integrity sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw== - -"@rollup/rollup-linux-riscv64-gnu@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz#0c6ad792e1195c12bfae634425a3d2aa0fe93ab7" - integrity sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw== - -"@rollup/rollup-linux-riscv64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz#303d57a328ee9a50c85385936f31cf62306d30b6" - integrity sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA== - -"@rollup/rollup-linux-x64-gnu@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz#9d62485ea0f18d8674033b57aa14fb758f6ec6e3" - integrity sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA== - -"@rollup/rollup-linux-x64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz#f672f6508f090fc73f08ba40ff76c20b57424778" - integrity sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA== - -"@rollup/rollup-linux-x64-musl@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz#50e8167e28b33c977c1f813def2b2074d1435e05" - integrity sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw== - -"@rollup/rollup-linux-x64-musl@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz#d2f34b1b157f3e7f13925bca3288192a66755a89" - integrity sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw== - -"@rollup/rollup-win32-arm64-msvc@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz#68d233272a2004429124494121a42c4aebdc5b8e" - integrity sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw== - -"@rollup/rollup-win32-arm64-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz#8ffecc980ae4d9899eb2f9c4ae471a8d58d2da6b" - integrity sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA== - -"@rollup/rollup-win32-ia32-msvc@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz#366ca62221d1689e3b55a03f4ae12ae9ba595d40" - integrity sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA== - -"@rollup/rollup-win32-ia32-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz#a7505884f415662e088365b9218b2b03a88fc6f2" - integrity sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw== - -"@rollup/rollup-win32-x64-msvc@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz#9ffdf9ed133a7464f4ae187eb9e1294413fab235" - integrity sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg== - -"@rollup/rollup-win32-x64-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz#6abd79db7ff8d01a58865ba20a63cfd23d9e2a10" - integrity sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw== +"@rollup/rollup-android-arm-eabi@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27" + integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== + +"@rollup/rollup-android-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203" + integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== + +"@rollup/rollup-darwin-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096" + integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== + +"@rollup/rollup-darwin-x64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c" + integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== + +"@rollup/rollup-linux-arm-gnueabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8" + integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== + +"@rollup/rollup-linux-arm-musleabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549" + integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== + +"@rollup/rollup-linux-arm64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577" + integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== + +"@rollup/rollup-linux-arm64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c" + integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== + +"@rollup/rollup-linux-powerpc64le-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf" + integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== + +"@rollup/rollup-linux-riscv64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9" + integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== + +"@rollup/rollup-linux-s390x-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec" + integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== + +"@rollup/rollup-linux-x64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942" + integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w== + +"@rollup/rollup-linux-x64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d" + integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== + +"@rollup/rollup-win32-arm64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf" + integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== + +"@rollup/rollup-win32-ia32-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54" + integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== + +"@rollup/rollup-win32-x64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4" + integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== "@rushstack/eslint-patch@^1.2.0", "@rushstack/eslint-patch@^1.3.3": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz#2d4260033e199b3032a08b41348ac10de21c47e9" - integrity sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA== + version "1.10.3" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz#391d528054f758f81e53210f1a1eebcf1a8b1d20" + integrity sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg== "@safe-global/safe-apps-provider@^0.18.1": version "0.18.2" @@ -9928,9 +9510,9 @@ viem "^1.6.0" "@safe-global/safe-gateway-typescript-sdk@^3.5.3": - version "3.14.0" - resolved "https://registry.yarnpkg.com/@safe-global/safe-gateway-typescript-sdk/-/safe-gateway-typescript-sdk-3.14.0.tgz#9581c524c1ea4956555f40761eb6b4007392aa82" - integrity sha512-/dqU66RvHw50n+7x3nwnJedq8V6iLQyoWitNdjx5cFTBmae+rpP+LvHq+LqZfXJVkB1qNytMdjFjdyES0t79gQ== + version "3.21.1" + resolved "https://registry.yarnpkg.com/@safe-global/safe-gateway-typescript-sdk/-/safe-gateway-typescript-sdk-3.21.1.tgz#984ec2d3d4211caf6a96786ab922b39909093538" + integrity sha512-7nakIjcRSs6781LkizYpIfXh1DYlkUDqyALciqz/BjFU/S97sVjZdL4cuKsG9NEarytE+f6p0Qbq2Bo1aocVUA== "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" @@ -9939,10 +9521,10 @@ dependencies: any-observable "^0.3.0" -"@scure/base@^1.1.5", "@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" - integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== +"@scure/base@^1.1.1", "@scure/base@^1.1.3", "@scure/base@^1.1.5", "@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== "@scure/bip32@1.3.2": version "1.3.2" @@ -9978,94 +9560,160 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.4" -"@sentry-internal/feedback@7.99.0": - version "7.99.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.99.0.tgz#c3fec1500cb24c9a5e09479d478fddca909477da" - integrity sha512-exIO1o+bE0MW4z30FxC0cYzJ4ZHSMlDPMHCBDPzU+MWGQc/fb8s58QUrx5Dnm6HTh9G3H+YlroCxIo9u0GSwGQ== - dependencies: - "@sentry/core" "7.99.0" - "@sentry/types" "7.99.0" - "@sentry/utils" "7.99.0" - -"@sentry-internal/replay-canvas@7.99.0": - version "7.99.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.99.0.tgz#d6ba7eec7ab2f7210a7deb6daa4dd82f7b1e9e29" - integrity sha512-PoIkfusToDq0snfl2M6HJx/1KJYtXxYhQplrn11kYadO04SdG0XGXf4h7wBTMEQ7LDEAtQyvsOu4nEQtTO3YjQ== - dependencies: - "@sentry/core" "7.99.0" - "@sentry/replay" "7.99.0" - "@sentry/types" "7.99.0" - "@sentry/utils" "7.99.0" - -"@sentry-internal/tracing@7.99.0": - version "7.99.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.99.0.tgz#ad13f8343444ecf7323a4220d4e57a55166565d7" - integrity sha512-z3JQhHjoM1KdM20qrHwRClKJrNLr2CcKtCluq7xevLtXHJWNAQQbafnWD+Aoj85EWXBzKt9yJMv2ltcXJ+at+w== - dependencies: - "@sentry/core" "7.99.0" - "@sentry/types" "7.99.0" - "@sentry/utils" "7.99.0" - -"@sentry/browser@7.99.0": - version "7.99.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.99.0.tgz#3e78beb490d141c988038ea902689a1e9171c6cf" - integrity sha512-bgfoUv3wkwwLgN5YUOe0ibB3y268ZCnamZh6nLFqnY/UBKC1+FXWFdvzVON/XKUm62LF8wlpCybOf08ebNj2yg== - dependencies: - "@sentry-internal/feedback" "7.99.0" - "@sentry-internal/replay-canvas" "7.99.0" - "@sentry-internal/tracing" "7.99.0" - "@sentry/core" "7.99.0" - "@sentry/replay" "7.99.0" - "@sentry/types" "7.99.0" - "@sentry/utils" "7.99.0" - -"@sentry/core@7.99.0": - version "7.99.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.99.0.tgz#6881aae5ac1436637b3d88e0b12df4ab56016c5f" - integrity sha512-vOAtzcAXEUtS/oW7wi3wMkZ3hsb5Ch96gKyrrj/mXdOp2zrcwdNV6N9/pawq2E9P/7Pw8AXw4CeDZztZrjQLuA== - dependencies: - "@sentry/types" "7.99.0" - "@sentry/utils" "7.99.0" +"@sentry-internal/feedback@7.116.0": + version "7.116.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.116.0.tgz#f1352b1a0d5fd7b7167775330ccf03bcc1b7892b" + integrity sha512-tmfO+RTCrhIWMs3yg8X0axhbjWRZLsldSfoXBgfjNCk/XwkYiVGp7WnYVbb+IO+01mHCsis9uaYOBggLgFRB5Q== + dependencies: + "@sentry/core" "7.116.0" + "@sentry/types" "7.116.0" + "@sentry/utils" "7.116.0" + +"@sentry-internal/replay-canvas@7.116.0": + version "7.116.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.116.0.tgz#1cd4a85f99dd3cd61120e087232f5cbea21d5eb2" + integrity sha512-Sy0ydY7A97JY/IFTIj8U25kHqR5rL9oBk3HFE5EK9Phw56irVhHzEwLWae0jlFeCQEWoBYqpPgO5vXsaYzrWvw== + dependencies: + "@sentry/core" "7.116.0" + "@sentry/replay" "7.116.0" + "@sentry/types" "7.116.0" + "@sentry/utils" "7.116.0" + +"@sentry-internal/tracing@7.114.0": + version "7.114.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.114.0.tgz#bdcd364f511e2de45db6e3004faf5685ca2e0f86" + integrity sha512-dOuvfJN7G+3YqLlUY4HIjyWHaRP8vbOgF+OsE5w2l7ZEn1rMAaUbPntAR8AF9GBA6j2zWNoSo8e7GjbJxVofSg== + dependencies: + "@sentry/core" "7.114.0" + "@sentry/types" "7.114.0" + "@sentry/utils" "7.114.0" + +"@sentry-internal/tracing@7.116.0": + version "7.116.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.116.0.tgz#af3e4e264c440aa5525b5877a10b9a0f870b40e3" + integrity sha512-y5ppEmoOlfr77c/HqsEXR72092qmGYS4QE5gSz5UZFn9CiinEwGfEorcg2xIrrCuU7Ry/ZU2VLz9q3xd04drRA== + dependencies: + "@sentry/core" "7.116.0" + "@sentry/types" "7.116.0" + "@sentry/utils" "7.116.0" + +"@sentry/browser@7.116.0": + version "7.116.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.116.0.tgz#950c1a9672bf886c556c2c7b9198b90189e3f0c2" + integrity sha512-2aosATT5qE+QLKgTmyF9t5Emsluy1MBczYNuPmLhDxGNfB+MA86S8u7Hb0CpxdwjS0nt14gmbiOtJHoeAF3uTw== + dependencies: + "@sentry-internal/feedback" "7.116.0" + "@sentry-internal/replay-canvas" "7.116.0" + "@sentry-internal/tracing" "7.116.0" + "@sentry/core" "7.116.0" + "@sentry/integrations" "7.116.0" + "@sentry/replay" "7.116.0" + "@sentry/types" "7.116.0" + "@sentry/utils" "7.116.0" + +"@sentry/core@7.114.0": + version "7.114.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.114.0.tgz#3efe86b92a5379c44dfd0fd4685266b1a30fa898" + integrity sha512-YnanVlmulkjgZiVZ9BfY9k6I082n+C+LbZo52MTvx3FY6RE5iyiPMpaOh67oXEZRWcYQEGm+bKruRxLVP6RlbA== + dependencies: + "@sentry/types" "7.114.0" + "@sentry/utils" "7.114.0" + +"@sentry/core@7.116.0": + version "7.116.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.116.0.tgz#7cff43134878a696b2b3b981ae384ec3db9ac8c3" + integrity sha512-J6Wmjjx+o7RwST0weTU1KaKUAlzbc8MGkJV1rcHM9xjNTWTva+nrcCM3vFBagnk2Gm/zhwv3h0PvWEqVyp3U1Q== + dependencies: + "@sentry/types" "7.116.0" + "@sentry/utils" "7.116.0" + +"@sentry/integrations@7.116.0": + version "7.116.0" + resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.116.0.tgz#b641342249da76cd2feb2fb5511424b66f967449" + integrity sha512-UZb60gaF+7veh1Yv79RiGvgGYOnU6xA97H+hI6tKgc1uT20YpItO4X56Vhp0lvyEyUGFZzBRRH1jpMDPNGPkqw== + dependencies: + "@sentry/core" "7.116.0" + "@sentry/types" "7.116.0" + "@sentry/utils" "7.116.0" + localforage "^1.8.1" "@sentry/react@^7.52.1": - version "7.99.0" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.99.0.tgz#5adab8f0e3314ad12a128ae6a79f587c46b32243" - integrity sha512-RtHwgzMHJhzJfSQpVG0SDPQYMTGDX3Q37/YWI59S4ALMbSW4/F6n/eQAvGVYZKbh2UCSqgFuRWaXOYkSZT17wA== - dependencies: - "@sentry/browser" "7.99.0" - "@sentry/core" "7.99.0" - "@sentry/types" "7.99.0" - "@sentry/utils" "7.99.0" + version "7.116.0" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.116.0.tgz#7157200c66675949b126feaa5de155fe83510dd8" + integrity sha512-b7sYSIewK/h3dGzm7Rx6tBUzA6w7zw6m5rVIO3fWCy7T3xEUDggUaqklrFVHXUYx2yjzEgTFPg/Dd2NrSzua4w== + dependencies: + "@sentry/browser" "7.116.0" + "@sentry/core" "7.116.0" + "@sentry/types" "7.116.0" + "@sentry/utils" "7.116.0" hoist-non-react-statics "^3.3.2" -"@sentry/replay@7.99.0": - version "7.99.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.99.0.tgz#c63f2bd79a791538ba54bcd91f02379dc4d5c1cc" - integrity sha512-gyN/I2WpQrLAZDT+rScB/0jnFL2knEVBo8U8/OVt8gNP20Pq8T/rDZKO/TG0cBfvULDUbJj2P4CJryn2p/O2rA== +"@sentry/replay@7.116.0": + version "7.116.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.116.0.tgz#cde921133c8927be92d60baf03c2b0aea73380f1" + integrity sha512-OrpDtV54pmwZuKp3g7PDiJg6ruRMJKOCzK08TF7IPsKrr4x4UQn56rzMOiABVuTjuS8lNfAWDar6c6vxXFz5KA== dependencies: - "@sentry-internal/tracing" "7.99.0" - "@sentry/core" "7.99.0" - "@sentry/types" "7.99.0" - "@sentry/utils" "7.99.0" + "@sentry-internal/tracing" "7.116.0" + "@sentry/core" "7.116.0" + "@sentry/types" "7.116.0" + "@sentry/utils" "7.116.0" "@sentry/tracing@^7.52.1": - version "7.99.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.99.0.tgz#75ecdda05fa37e1a3e6bc43b39d71b5b51db2290" - integrity sha512-Cf622gSeamiSsi0JEj3PTXnq019OymaCrGf91x1d6OPyJ5jAXdlNuhw7NkqCEw8euIhhULuS81l5nGfBrgjj9Q== + version "7.114.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.114.0.tgz#32a3438b0f2d02fb7b7359fe7712c5a349a2a329" + integrity sha512-eldEYGADReZ4jWdN5u35yxLUSTOvjsiZAYd4KBEpf+Ii65n7g/kYOKAjNl7tHbrEG1EsMW4nDPWStUMk1w+tfg== dependencies: - "@sentry-internal/tracing" "7.99.0" + "@sentry-internal/tracing" "7.114.0" + +"@sentry/types@7.114.0": + version "7.114.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.114.0.tgz#ab8009d5f6df23b7342121083bed34ee2452e856" + integrity sha512-tsqkkyL3eJtptmPtT0m9W/bPLkU7ILY7nvwpi1hahA5jrM7ppoU0IMaQWAgTD+U3rzFH40IdXNBFb8Gnqcva4w== -"@sentry/types@7.99.0": - version "7.99.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.99.0.tgz#bba7a514abab445026ee42f40f92f81275a6deba" - integrity sha512-94qwOw4w40sAs5mCmzcGyj8ZUu/KhnWnuMZARRq96k+SjRW/tHFAOlIdnFSrt3BLPvSOK7R3bVAskZQ0N4FTmA== +"@sentry/types@7.116.0": + version "7.116.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.116.0.tgz#0be3434e7e53c86db4993e668af1c3a65bfb7519" + integrity sha512-QCCvG5QuQrwgKzV11lolNQPP2k67Q6HHD9vllZ/C4dkxkjoIym8Gy+1OgAN3wjsR0f/kG9o5iZyglgNpUVRapQ== -"@sentry/utils@7.99.0": - version "7.99.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.99.0.tgz#ef96c3b59e23c79f3ef500db508234a48fa1cfbe" - integrity sha512-cYZy5WNTkWs5GgggGnjfGqC44CWir0pAv4GVVSx0fsup4D4pMKBJPrtub15f9uC+QkUf3vVkqwpBqeFxtmJQTQ== +"@sentry/utils@7.114.0": + version "7.114.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.114.0.tgz#59d30a79f4acff3c9268de0b345f0bcbc6335112" + integrity sha512-319N90McVpupQ6vws4+tfCy/03AdtsU0MurIE4+W5cubHME08HtiEWlfacvAxX+yuKFhvdsO4K4BB/dj54ideg== dependencies: - "@sentry/types" "7.99.0" + "@sentry/types" "7.114.0" + +"@sentry/utils@7.116.0": + version "7.116.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.116.0.tgz#f32463ab10f76f464274233a9df202e5357d17ff" + integrity sha512-Vn9fcvwTq91wJvCd7WTMWozimqMi+dEZ3ie3EICELC2diONcN16ADFdzn65CQQbYwmUzRjN9EjDN2k41pKZWhQ== + dependencies: + "@sentry/types" "7.116.0" + +"@shopify/react-hooks@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@shopify/react-hooks/-/react-hooks-3.1.1.tgz#83e098956ff9a2417304763f4ba2f6d4a5bebada" + integrity sha512-XRw/GH29soCFvh1/BKSoZdd1VhcdWYdoDfE6cEXclwVKR/o6eBof8OtrApu809HNNP3b2kK+9kzukHlVQp7z9w== + +"@shopify/react-web-worker@^5.0.15": + version "5.0.17" + resolved "https://registry.yarnpkg.com/@shopify/react-web-worker/-/react-web-worker-5.0.17.tgz#04c1e9ee3acf4a2d8fd2b787098a6edb826fa854" + integrity sha512-V5T9eDIEc7Vti/5qCrJUEakCOVKZWlmsfSFOgY6yaX2iJ4SlAgu0xW1RT723GuXmkJ2T5i4FB4FUqTylcvSbWw== + dependencies: + "@shopify/react-hooks" "^3.1.1" + "@shopify/useful-types" "^5.1.2" + "@shopify/web-worker" "^6.1.2" + +"@shopify/useful-types@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@shopify/useful-types/-/useful-types-5.1.2.tgz#da8f2aaa8b3496705068b21deb76091cc58fcdc4" + integrity sha512-EjwIljAYHT1pfIxdMFp6ytJvCUmKXa5NWsvG7zXFX5EnLs7wYp66M/QCuoyJjI0Lq+5ZVyrJXJqqeBiXQVVs0w== + +"@shopify/web-worker@^6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@shopify/web-worker/-/web-worker-6.1.2.tgz#ef1abeb9fe589972e25f6d5ae30fbc57358fc74f" + integrity sha512-4T2XXtZwc/7/g42eevbRyi1/VA7WNM7k4qKqYvvchT+qu9V+92/oYXdlsXNPEd+jHmCwWUqor1oNhgxXBhc6mA== + dependencies: + "@remote-ui/rpc" "^1.2.5" "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -10087,6 +9735,11 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== +"@sindresorhus/merge-streams@^2.1.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" + integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== + "@sindresorhus/slugify@^2.0.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@sindresorhus/slugify/-/slugify-2.2.1.tgz#fa2e2e25d6e1e74a2eeb5e2c37f5ccc516ed2c4b" @@ -10125,34 +9778,6 @@ "@polkadot/keyring" "^8.2.2" "@polkadot/types" "^7.2.1" -"@solana/buffer-layout@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" - integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== - dependencies: - buffer "~6.0.3" - -"@solana/web3.js@^1.70.1": - version "1.89.1" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.89.1.tgz#52df6820f2d088c4558aa359af40580a03d10ec9" - integrity sha512-t9TTLtPQxtQB3SAf/5E8xPXfVDsC6WGOsgKY02l2cbe0HLymT7ynE8Hu48Lk5qynHCquj6nhISfEHcjMkYpu/A== - dependencies: - "@babel/runtime" "^7.23.4" - "@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.7.0" - rpc-websockets "^7.5.1" - superstruct "^0.14.2" - "@sora-substrate/type-definitions@1.20.1": version "1.20.1" resolved "https://registry.yarnpkg.com/@sora-substrate/type-definitions/-/type-definitions-1.20.1.tgz#d4cafa99e02812ebe4f4b111a4262ccd14673857" @@ -10546,12 +10171,12 @@ prop-types "^15.7.2" "@storybook/api@^7.0.12": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-7.6.12.tgz#ac8eb0bc69d30245ba1e2f1da378626bfe18e6bb" - integrity sha512-ePKOszvvpZ7gcprUHp1lM5wbrSngFLYbHeFnm6J1BWewEQ+TdWujlVxRJJs+HYEL1vW+se3IR2nvJVM1Sq7vLQ== + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-7.6.17.tgz#78846f1cca1758020594e9f0cf7262506e9fe613" + integrity sha512-l92PI+5XL4zB/o4IBWFCKQWTXvPg9hR45DCJqlPHrLZStiR6Xj1mbrtOjUlgIOH+nYb/SZFZqO53hhrs7X4Nvg== dependencies: - "@storybook/client-logger" "7.6.12" - "@storybook/manager-api" "7.6.12" + "@storybook/client-logger" "7.6.17" + "@storybook/manager-api" "7.6.17" "@storybook/blocks@7.4.5": version "7.4.5" @@ -10604,19 +10229,19 @@ process "^0.11.10" util "^0.12.4" -"@storybook/builder-manager@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-8.0.6.tgz#ec2fffddbcaa3680380f1ff529b585452289bd0d" - integrity sha512-N61Gh9FKsSYvsbdBy5qFvq1anTIuUAjh2Z+ezDMlxnfMGG77nZP9heuy1NnCaYCTFzl+lq4BsmRfXXDcKtSPRA== +"@storybook/builder-manager@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-8.1.4.tgz#357e633d52a0177924614d4220e34a674ebfc814" + integrity sha512-kbbekBBZ+OKsHknHqAQSRDAQiXBP8RJn0QGX/nF0colq6wkTB4T8KiH7hEGpwFb6gECFCu47T8Ku+wkY8nlfMw== dependencies: "@fal-works/esbuild-plugin-global-externals" "^2.1.2" - "@storybook/core-common" "8.0.6" - "@storybook/manager" "8.0.6" - "@storybook/node-logger" "8.0.6" + "@storybook/core-common" "8.1.4" + "@storybook/manager" "8.1.4" + "@storybook/node-logger" "8.1.4" "@types/ejs" "^3.1.1" "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10" browser-assert "^1.2.1" - ejs "^3.1.8" + ejs "^3.1.10" esbuild "^0.18.0 || ^0.19.0 || ^0.20.0" esbuild-plugin-alias "^0.2.1" express "^4.17.3" @@ -10690,26 +10315,27 @@ telejson "^7.2.0" tiny-invariant "^1.3.1" -"@storybook/channels@7.6.12": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.6.12.tgz#eafcbb1c26de94ed15db62dd0f8ea88d20154312" - integrity sha512-TaPl5Y3lOoVi5kTLgKNRX8xh2sUPekH0Id1l4Ymw+lpgriEY6r60bmkZLysLG1GhlskpQ/da2+S2ap2ht8P2TQ== +"@storybook/channels@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.6.17.tgz#5be1d1222a3ffdc90e1868230c2b2ee5dfc7a97f" + integrity sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA== dependencies: - "@storybook/client-logger" "7.6.12" - "@storybook/core-events" "7.6.12" + "@storybook/client-logger" "7.6.17" + "@storybook/core-events" "7.6.17" "@storybook/global" "^5.0.0" qs "^6.10.0" telejson "^7.2.0" tiny-invariant "^1.3.1" -"@storybook/channels@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-8.0.6.tgz#bd87e5f14933e00b10c23098d7a85b83025aebb2" - integrity sha512-IbNvjxeyQKiMpb+gSpQ7yYsFqb8BM/KYgfypJM3yJV6iU/NFeevrC/DA6/R+8xWFyPc70unRNLv8fPvxhcIu8Q== +"@storybook/channels@7.6.19": + version "7.6.19" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.6.19.tgz#730fa74f7800e2069707f8a880996ca6fc8957ab" + integrity sha512-2JGh+i95GwjtjqWqhtEh15jM5ifwbRGmXeFqkY7dpdHH50EEWafYHr2mg3opK3heVDwg0rJ/VBptkmshloXuvA== dependencies: - "@storybook/client-logger" "8.0.6" - "@storybook/core-events" "8.0.6" + "@storybook/client-logger" "7.6.19" + "@storybook/core-events" "7.6.19" "@storybook/global" "^5.0.0" + qs "^6.10.0" telejson "^7.2.0" tiny-invariant "^1.3.1" @@ -10724,22 +10350,33 @@ telejson "^7.2.0" tiny-invariant "^1.3.1" -"@storybook/cli@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-8.0.6.tgz#c9b789474be5b51182dc78e30ca06f7b7961b49d" - integrity sha512-gAnl9soQUu1BtB4sANaqaaeTZAt/ThBSwCdzSLut5p21fP4ovi3FeP7hcDCJbyJZ/AvnD4k6leDrqRQxMVPr0A== +"@storybook/channels@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-8.1.4.tgz#a77da3cfcb8a051cf882bb77e962bc79140e2f1a" + integrity sha512-cmITS0w8e9Ys1vqp8S7+uyQKgqVIdUEWs9FK90XeAs0lcuvW10S3qdrarWPbUgKFFFsGIGPIvImbT1vf80/bcQ== dependencies: - "@babel/core" "^7.23.0" - "@babel/types" "^7.23.0" + "@storybook/client-logger" "8.1.4" + "@storybook/core-events" "8.1.4" + "@storybook/global" "^5.0.0" + telejson "^7.2.0" + tiny-invariant "^1.3.1" + +"@storybook/cli@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-8.1.4.tgz#963a515242d6da941b95bd78068864a6c5b80855" + integrity sha512-WFUIJdhkpaTWRRdXahi6lgTdRMTLPfJP2+jehUhhxc/7Yg5VP1FTjS/diSCKEb1yKz8ybBta+ybuoVrM0qQRaA== + dependencies: + "@babel/core" "^7.24.4" + "@babel/types" "^7.24.0" "@ndelangen/get-tarball" "^3.0.7" - "@storybook/codemod" "8.0.6" - "@storybook/core-common" "8.0.6" - "@storybook/core-events" "8.0.6" - "@storybook/core-server" "8.0.6" - "@storybook/csf-tools" "8.0.6" - "@storybook/node-logger" "8.0.6" - "@storybook/telemetry" "8.0.6" - "@storybook/types" "8.0.6" + "@storybook/codemod" "8.1.4" + "@storybook/core-common" "8.1.4" + "@storybook/core-events" "8.1.4" + "@storybook/core-server" "8.1.4" + "@storybook/csf-tools" "8.1.4" + "@storybook/node-logger" "8.1.4" + "@storybook/telemetry" "8.1.4" + "@storybook/types" "8.1.4" "@types/semver" "^7.3.4" "@yarnpkg/fslib" "2.10.3" "@yarnpkg/libzip" "2.3.0" @@ -10753,7 +10390,7 @@ fs-extra "^11.1.0" get-npm-tarball-url "^2.0.3" giget "^1.0.0" - globby "^11.0.2" + globby "^14.0.1" jscodeshift "^0.15.1" leven "^3.1.0" ora "^5.4.1" @@ -10780,17 +10417,17 @@ dependencies: "@storybook/global" "^5.0.0" -"@storybook/client-logger@7.6.12": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.6.12.tgz#ee571b22e6f31a3d2fd1ad357a5725f46cfb6ded" - integrity sha512-hiRv6dXsOttMPqm9SxEuFoAtDe9rs7TUS8XcO5rmJ9BgfwBJsYlHzAxXkazxmvlyZtKL7gMx6m8OYbCdZgUqtA== +"@storybook/client-logger@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.6.17.tgz#5031c47b7df8d8792fe9dfed5828222f515e5803" + integrity sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ== dependencies: "@storybook/global" "^5.0.0" -"@storybook/client-logger@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-8.0.6.tgz#70a96ad63318dcf856edeca366a8d21576f8cc09" - integrity sha512-et/IHPHiiOwMg93l5KSgw47NZXz5xOyIrIElRcsT1wr8OJeIB9DzopB/suoHBZ/IML+t8x91atdutzUN2BLF6A== +"@storybook/client-logger@7.6.19": + version "7.6.19" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.6.19.tgz#a6f91af8cdc640ace9903674b6340ad8173238cc" + integrity sha512-oGzOxbmLmciSIfd5gsxDzPmX8DttWhoYdPKxjMuCuWLTO2TWpkCWp1FTUMWO72mm/6V/FswT/aqpJJBBvdZ3RQ== dependencies: "@storybook/global" "^5.0.0" @@ -10801,21 +10438,28 @@ dependencies: "@storybook/global" "^5.0.0" -"@storybook/codemod@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-8.0.6.tgz#c6a1f40697a8409b01481042d41b8709f74aa85c" - integrity sha512-IMaTVI+EvmFxkz4leKWKForPC3LFxzfeTmd/QnTNF3nCeyvmIXvP01pQXRjro0+XcGDncEStuxa1d9ClMlac9Q== +"@storybook/client-logger@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-8.1.4.tgz#e1c4bb9f933649918f30c261c2ad3a1fca594763" + integrity sha512-I0PqDoNZf4rqrJYwFHhCwuXumpxvzyTzI5qI5R2JT93i49QShI3pLXY31C9VemVBJmS+pBWVOm6RTIdkQiKVWw== dependencies: - "@babel/core" "^7.23.2" - "@babel/preset-env" "^7.23.2" - "@babel/types" "^7.23.0" - "@storybook/csf" "^0.1.2" - "@storybook/csf-tools" "8.0.6" - "@storybook/node-logger" "8.0.6" - "@storybook/types" "8.0.6" + "@storybook/global" "^5.0.0" + +"@storybook/codemod@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-8.1.4.tgz#6a45b536b532fe1e49507834e68d8f4af33f7188" + integrity sha512-glPwKFc07h3h4ZhakEZIF/8fq3fGGM19hpB+RZRHU3dz4NL/TiZXwboxa61wNZe1ehWqbGDaecwANK45DWsNuA== + dependencies: + "@babel/core" "^7.24.4" + "@babel/preset-env" "^7.24.4" + "@babel/types" "^7.24.0" + "@storybook/csf" "^0.1.7" + "@storybook/csf-tools" "8.1.4" + "@storybook/node-logger" "8.1.4" + "@storybook/types" "8.1.4" "@types/cross-spawn" "^6.0.2" cross-spawn "^7.0.3" - globby "^11.0.2" + globby "^14.0.1" jscodeshift "^0.15.1" lodash "^4.17.21" prettier "^3.1.1" @@ -10839,17 +10483,17 @@ util-deprecate "^1.0.2" "@storybook/components@^7.0.12": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.6.12.tgz#7833ecc17da716a30bd2f40bbceb11306c762b61" - integrity sha512-PCijPqmlZd7qyTzNr+vD0Kf8sAI9vWJIaxbSjXwn/De3e63m4fsEcIf8FaUT8cMZ46AWZvaxaxX5km2u0UISJQ== + version "7.6.19" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.6.19.tgz#c9e36100faef6310455daf5bf915a21447c332d1" + integrity sha512-8Zw/RQ4crzKkUR7ojxvRIj8vktKiBBO8Nq93qv4JfDqDWrcR7cro0hOlZgmZmrzbFunBBt6WlsNNO6nVP7R4Xw== dependencies: "@radix-ui/react-select" "^1.2.2" "@radix-ui/react-toolbar" "^1.0.4" - "@storybook/client-logger" "7.6.12" + "@storybook/client-logger" "7.6.19" "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/theming" "7.6.12" - "@storybook/types" "7.6.12" + "@storybook/theming" "7.6.19" + "@storybook/types" "7.6.19" memoizerific "^1.11.3" use-resize-observer "^9.1.0" util-deprecate "^1.0.2" @@ -10920,15 +10564,15 @@ resolve-from "^5.0.0" ts-dedent "^2.0.0" -"@storybook/core-common@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-8.0.6.tgz#5fcd551a3498a052e198a80afb9fa18861e610c2" - integrity sha512-Z4cA52SjcW6SAV9hayqVm5kyr362O20Zmwz7+H2nYEhcu8bY69y5p45aaoyElMxL1GDNu84GrmTp7dY4URw1fQ== +"@storybook/core-common@8.0.8": + version "8.0.8" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-8.0.8.tgz#3a6136097559bcfa581a372516f67f13ace85655" + integrity sha512-CL15M2oeQW+Rb1l7ciunLDI2Re+ojL2lX1ZFAiDedcOU+JHsdq43zAuXoZVzp8icUi2AUSwEjZIxGCSingj+JQ== dependencies: - "@storybook/core-events" "8.0.6" - "@storybook/csf-tools" "8.0.6" - "@storybook/node-logger" "8.0.6" - "@storybook/types" "8.0.6" + "@storybook/core-events" "8.0.8" + "@storybook/csf-tools" "8.0.8" + "@storybook/node-logger" "8.0.8" + "@storybook/types" "8.0.8" "@yarnpkg/fslib" "2.10.3" "@yarnpkg/libzip" "2.3.0" chalk "^4.1.0" @@ -10954,15 +10598,15 @@ ts-dedent "^2.0.0" util "^0.12.4" -"@storybook/core-common@8.0.8": - version "8.0.8" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-8.0.8.tgz#3a6136097559bcfa581a372516f67f13ace85655" - integrity sha512-CL15M2oeQW+Rb1l7ciunLDI2Re+ojL2lX1ZFAiDedcOU+JHsdq43zAuXoZVzp8icUi2AUSwEjZIxGCSingj+JQ== +"@storybook/core-common@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-8.1.4.tgz#26b1d64bbad42f86eb5c6eccef56d712eab55ee2" + integrity sha512-hpJ1tDkseNzcf0XpNFbt2gEYdw5OjskWmviSjQwoGHjCvpvWQCo0hvuj7v9cZHgSScOreLu7kh7cl9hoXhA+dQ== dependencies: - "@storybook/core-events" "8.0.8" - "@storybook/csf-tools" "8.0.8" - "@storybook/node-logger" "8.0.8" - "@storybook/types" "8.0.8" + "@storybook/core-events" "8.1.4" + "@storybook/csf-tools" "8.1.4" + "@storybook/node-logger" "8.1.4" + "@storybook/types" "8.1.4" "@yarnpkg/fslib" "2.10.3" "@yarnpkg/libzip" "2.3.0" chalk "^4.1.0" @@ -10980,6 +10624,7 @@ node-fetch "^2.0.0" picomatch "^2.3.0" pkg-dir "^5.0.0" + prettier-fallback "npm:prettier@^3" pretty-hrtime "^1.0.3" resolve-from "^5.0.0" semver "^7.3.7" @@ -10989,13 +10634,13 @@ util "^0.12.4" "@storybook/core-common@^7.0.12": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.6.12.tgz#a42bdcdb5c68aafcf57492666ad99cfe8261e3f9" - integrity sha512-kM9YiBBMM2x5v/oylL7gdO1PS4oehgJC21MivS9p5QZ8uuXKtCQ6UQvI3rzaV+1ZzUA4n+I8MyaMrNIQk8KDbw== + version "7.6.19" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.6.19.tgz#fdbfc3c5b24d12e74ef9d1f0e15cd4b1ee2cd02c" + integrity sha512-njwpGzFJrfbJr/AFxGP8KMrfPfxN85KOfSlxYnQwRm5Z0H1D/lT33LhEBf5m37gaGawHeG7KryxO6RvaioMt2Q== dependencies: - "@storybook/core-events" "7.6.12" - "@storybook/node-logger" "7.6.12" - "@storybook/types" "7.6.12" + "@storybook/core-events" "7.6.19" + "@storybook/node-logger" "7.6.19" + "@storybook/types" "7.6.19" "@types/find-cache-dir" "^3.2.1" "@types/node" "^18.0.0" "@types/node-fetch" "^2.6.4" @@ -11031,17 +10676,17 @@ dependencies: ts-dedent "^2.0.0" -"@storybook/core-events@7.6.12", "@storybook/core-events@^7.0.12": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.6.12.tgz#b622a51ee905ca1adb83163a912bb9dcfee3ba4a" - integrity sha512-IO4cwk7bBCKH6lLnnIlHO9FwQXt/9CzLUAoZSY9msWsdPppCdKlw8ynJI5YarSNKDBUn8ArIfnRf0Mve0KQr9Q== +"@storybook/core-events@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.6.17.tgz#9e1a795558193089fb227cfe2cf768c99418a640" + integrity sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA== dependencies: ts-dedent "^2.0.0" -"@storybook/core-events@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-8.0.6.tgz#efc5bfb2d5da8f374851bc934e6055364d88c569" - integrity sha512-EwGmuMm8QTUAHPhab4yftQWoSCX3OzEk6cQdpLtbNFtRRLE9aPZzxhk5Z/d3KhLNSCUAGyCiDt5I9JxTBetT9A== +"@storybook/core-events@7.6.19", "@storybook/core-events@^7.0.12": + version "7.6.19" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.6.19.tgz#cfa7d4581ad6cff1ee7eeade31d602a7d879d2b7" + integrity sha512-K/W6Uvum0ocZSgjbi8hiotpe+wDEHDZlvN+KlPqdh9ae9xDK8aBNBq9IelCoqM+uKO1Zj+dDfSQds7CD781DJg== dependencies: ts-dedent "^2.0.0" @@ -11052,6 +10697,14 @@ dependencies: ts-dedent "^2.0.0" +"@storybook/core-events@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-8.1.4.tgz#043b1f210aa6b8da78b8cf9fc4763fb8ac198395" + integrity sha512-oZAP3aRDeRyo2GQmADh4R3wJLIb9Ie0FUcWx8V4fvuydzeh6Pprgo//COCR+kySG4kRLqofWeF1Zzvft58Q0kg== + dependencies: + "@storybook/csf" "^0.1.7" + ts-dedent "^2.0.0" + "@storybook/core-server@7.4.5": version "7.4.5" resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.4.5.tgz#df6bba0178b2470789103463450461d39de54279" @@ -11100,29 +10753,31 @@ watchpack "^2.2.0" ws "^8.2.3" -"@storybook/core-server@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-8.0.6.tgz#e51fb7103448e18349e10289f7eb46ae4dfd60dd" - integrity sha512-COmcjrry8vZXDh08ZGbfDz2bFB4of5wnwOwYf8uwlVND6HnhQzV22On1s3/p8qw+dKOpjpwDdHWtMnndnPNuqQ== +"@storybook/core-server@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-8.1.4.tgz#07e7a1604970dda09206206f408e56d125bbf385" + integrity sha512-g7x3vzk3jOZrOySMbtxk8u4x/MAZyDIjrHMMBQO9mNXKl0AJfU0X1v3Qx9wg+314KfFG/Iq63mYaBjj3EDVFEg== dependencies: "@aw-web-design/x-default-browser" "1.4.126" - "@babel/core" "^7.23.9" + "@babel/core" "^7.24.4" + "@babel/parser" "^7.24.4" "@discoveryjs/json-ext" "^0.5.3" - "@storybook/builder-manager" "8.0.6" - "@storybook/channels" "8.0.6" - "@storybook/core-common" "8.0.6" - "@storybook/core-events" "8.0.6" - "@storybook/csf" "^0.1.2" - "@storybook/csf-tools" "8.0.6" - "@storybook/docs-mdx" "3.0.0" + "@storybook/builder-manager" "8.1.4" + "@storybook/channels" "8.1.4" + "@storybook/core-common" "8.1.4" + "@storybook/core-events" "8.1.4" + "@storybook/csf" "^0.1.7" + "@storybook/csf-tools" "8.1.4" + "@storybook/docs-mdx" "3.1.0-next.0" "@storybook/global" "^5.0.0" - "@storybook/manager" "8.0.6" - "@storybook/manager-api" "8.0.6" - "@storybook/node-logger" "8.0.6" - "@storybook/preview-api" "8.0.6" - "@storybook/telemetry" "8.0.6" - "@storybook/types" "8.0.6" + "@storybook/manager" "8.1.4" + "@storybook/manager-api" "8.1.4" + "@storybook/node-logger" "8.1.4" + "@storybook/preview-api" "8.1.4" + "@storybook/telemetry" "8.1.4" + "@storybook/types" "8.1.4" "@types/detect-port" "^1.3.0" + "@types/diff" "^5.0.9" "@types/node" "^18.0.0" "@types/pretty-hrtime" "^1.0.0" "@types/semver" "^7.3.4" @@ -11131,9 +10786,10 @@ cli-table3 "^0.6.1" compression "^1.7.4" detect-port "^1.3.0" + diff "^5.2.0" express "^4.17.3" fs-extra "^11.1.0" - globby "^11.0.2" + globby "^14.0.1" ip "^2.0.1" lodash "^4.17.21" open "^8.4.0" @@ -11183,21 +10839,6 @@ recast "^0.23.1" ts-dedent "^2.0.0" -"@storybook/csf-tools@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-8.0.6.tgz#8630289cf04aea6fefd0368a786832240e236eb2" - integrity sha512-MEBVxpnzqkBPyYXdtYQrY0SQC3oflmAQdEM0qWFzPvZXTnIMk3Q2ft8JNiBht6RlrKGvKql8TodwpbOiPeJI/w== - dependencies: - "@babel/generator" "^7.23.0" - "@babel/parser" "^7.23.0" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" - "@storybook/csf" "^0.1.2" - "@storybook/types" "8.0.6" - fs-extra "^11.1.0" - recast "^0.23.5" - ts-dedent "^2.0.0" - "@storybook/csf-tools@8.0.8": version "8.0.8" resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-8.0.8.tgz#04f843bfc3961271adbb3e64be7e5e32396c51f8" @@ -11213,6 +10854,21 @@ recast "^0.23.5" ts-dedent "^2.0.0" +"@storybook/csf-tools@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-8.1.4.tgz#be25a0d85f612f2e9e5011bd9a44546a471a5bba" + integrity sha512-0Bper543cY8k01MtFoatewpsw3popuukISeYbzz/26H6QHTojm7PD4ol2yQkcDC/EBA5cU0NbOKACXicd1b3WQ== + dependencies: + "@babel/generator" "^7.24.4" + "@babel/parser" "^7.24.4" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + "@storybook/csf" "^0.1.7" + "@storybook/types" "8.1.4" + fs-extra "^11.1.0" + recast "^0.23.5" + ts-dedent "^2.0.0" + "@storybook/csf@^0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.0.1.tgz#95901507dc02f0bc6f9ac8ee1983e2fc5bb98ce6" @@ -11220,17 +10876,17 @@ dependencies: lodash "^4.17.15" -"@storybook/csf@^0.1.0", "@storybook/csf@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.2.tgz#8e7452f0097507f5841b5ade3f5da1525bc9afb2" - integrity sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA== +"@storybook/csf@^0.1.0", "@storybook/csf@^0.1.2", "@storybook/csf@^0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.7.tgz#dcc6c16a353bc09c8c619ba1a23ba93b2aab0b9d" + integrity sha512-53JeLZBibjQxi0Ep+/AJTfxlofJlxy1jXcSKENlnKxHjWEYyHQCumMP5yTFjf7vhNnMjEpV3zx6t23ssFiGRyw== dependencies: type-fest "^2.19.0" -"@storybook/docs-mdx@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@storybook/docs-mdx/-/docs-mdx-3.0.0.tgz#5c9b5ce35dcb00ad8aa5dddbabf52ad09fab3974" - integrity sha512-NmiGXl2HU33zpwTv1XORe9XG9H+dRUC1Jl11u92L4xr062pZtrShLmD4VKIsOQujxhhOrbxpwhNOt+6TdhyIdQ== +"@storybook/docs-mdx@3.1.0-next.0": + version "3.1.0-next.0" + resolved "https://registry.yarnpkg.com/@storybook/docs-mdx/-/docs-mdx-3.1.0-next.0.tgz#9567c6eb621110dcf6554923a975238953d06305" + integrity sha512-t4syFIeSyufieNovZbLruPt2DmRKpbwL4fERCZ1MifWDRIORCKLc4NCEHy+IqvIqd71/SJV2k4B51nF7vlJfmQ== "@storybook/docs-mdx@^0.1.0": version "0.1.0" @@ -11316,19 +10972,19 @@ telejson "^7.2.0" ts-dedent "^2.0.0" -"@storybook/manager-api@7.6.12", "@storybook/manager-api@^7.0.12": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.6.12.tgz#226f343873b75bfd31db90a54c5829bfd7c6d819" - integrity sha512-XA5KQpY44d6mlqt0AlesZ7fsPpm1PCpoV+nRGFBR0YtF6RdPFvrPyHhlGgLkJC4xSyb2YJmLKn8cERSluAcEgQ== +"@storybook/manager-api@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.6.17.tgz#cdf0bb8e5bdc3da2559150125b3d6a3ff72f0def" + integrity sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg== dependencies: - "@storybook/channels" "7.6.12" - "@storybook/client-logger" "7.6.12" - "@storybook/core-events" "7.6.12" + "@storybook/channels" "7.6.17" + "@storybook/client-logger" "7.6.17" + "@storybook/core-events" "7.6.17" "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/router" "7.6.12" - "@storybook/theming" "7.6.12" - "@storybook/types" "7.6.12" + "@storybook/router" "7.6.17" + "@storybook/theming" "7.6.17" + "@storybook/types" "7.6.17" dequal "^2.0.2" lodash "^4.17.21" memoizerific "^1.11.3" @@ -11336,20 +10992,40 @@ telejson "^7.2.0" ts-dedent "^2.0.0" -"@storybook/manager-api@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-8.0.6.tgz#3b1bef655a6e51a5e311d3752b8bff68669be335" - integrity sha512-khYA5CM+LY/B5VsqqUmt2ivNLNqyIKfcgGsXHkOs3Kr5BOz8LhEmSwZOB348ey2C2ejFJmvKlkcsE+rB9ixlww== +"@storybook/manager-api@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-8.1.4.tgz#2bdfaae51dac0e5e0723b0c37d5f7b725c47128c" + integrity sha512-cupFijTFID2+XB4Utkqjtayw7uisPFYRGpfvpom+4Aq42sCNKWkE2WYoXCtgxB7SKWSHll6zL9+ZpesvJ6tWNg== dependencies: - "@storybook/channels" "8.0.6" - "@storybook/client-logger" "8.0.6" - "@storybook/core-events" "8.0.6" - "@storybook/csf" "^0.1.2" + "@storybook/channels" "8.1.4" + "@storybook/client-logger" "8.1.4" + "@storybook/core-events" "8.1.4" + "@storybook/csf" "^0.1.7" "@storybook/global" "^5.0.0" "@storybook/icons" "^1.2.5" - "@storybook/router" "8.0.6" - "@storybook/theming" "8.0.6" - "@storybook/types" "8.0.6" + "@storybook/router" "8.1.4" + "@storybook/theming" "8.1.4" + "@storybook/types" "8.1.4" + dequal "^2.0.2" + lodash "^4.17.21" + memoizerific "^1.11.3" + store2 "^2.14.2" + telejson "^7.2.0" + ts-dedent "^2.0.0" + +"@storybook/manager-api@^7.0.12": + version "7.6.19" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.6.19.tgz#d08787dabe4143cf34d5805a023499889d572032" + integrity sha512-dVCx1Q+HZEA4U08XqYljiG88BeS3I3ahnPAQLZAeWQXQRkoc9G2jMgLNPKYPIqEtq7Xrn6SRlFMIofhwWrwZpg== + dependencies: + "@storybook/channels" "7.6.19" + "@storybook/client-logger" "7.6.19" + "@storybook/core-events" "7.6.19" + "@storybook/csf" "^0.1.2" + "@storybook/global" "^5.0.0" + "@storybook/router" "7.6.19" + "@storybook/theming" "7.6.19" + "@storybook/types" "7.6.19" dequal "^2.0.2" lodash "^4.17.21" memoizerific "^1.11.3" @@ -11362,10 +11038,10 @@ resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.4.5.tgz#efd7c44eac0dc309ee96ab8c4eed54ffabde76d8" integrity sha512-yoqVktWzzC0f8cXsxErOEUfT+VFfWV/W7soytIPQuJFqNaq+BqR5A7WCeoY7BIv3mdpRjo4GKwerCsgoHYeHhg== -"@storybook/manager@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-8.0.6.tgz#c2ab7077c6f77eaf7928b7dcd3335127eacd2997" - integrity sha512-wdL3lG72qrCOLkxEUW49+hmwA4fIFXFvAEU7wVgEt4KyRRGWhHa8Dr/5Tnq54CWJrA+BTrTPHaoo/Vu4BAjgow== +"@storybook/manager@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-8.1.4.tgz#e4206da6c3dc9367511898351d9f0e4d9069b5b1" + integrity sha512-hn6tSN/9vQqaeUDCp7KBNTPzxAHXgp2JRw5C3t0vKpJP0Pv2mfL2eeT/9liFMcTaCa3NU04rTq5C9vxIRLG70A== "@storybook/mdx2-csf@^1.0.0": version "1.1.0" @@ -11382,21 +11058,21 @@ resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.5.3.tgz#23133787f5b3427cef7301e10c6caf9132969fc1" integrity sha512-7ZZDw/q3hakBj1FngsBjaHNIBguYAWojp7R1fFTvwkeunCi21EUzZjRBcqp10kB6BP3/NLX32bIQknsCWD76rQ== -"@storybook/node-logger@7.6.12", "@storybook/node-logger@^7.0.12": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.6.12.tgz#2232fc45ca8439649d8cb2cefe38f0a97c1aa275" - integrity sha512-iS44/EjfF6hLecKzICmcpQoB9bmVi4tXx5gVXnbI5ZyziBibRQcg/U191Njl7wY2ScN/RCQOr8lh5k57rI3Prg== - -"@storybook/node-logger@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-8.0.6.tgz#2d3b948d281eee25de49ba5469563c1347fc8baf" - integrity sha512-mDRJLVAuTWauO0mnrwajfJV/6zKBJVPp/9g0ULccE3Q+cuqNfUefqfCd17cZBlJHeRsdB9jy9tod48d4qzGEkQ== +"@storybook/node-logger@7.6.19", "@storybook/node-logger@^7.0.12": + version "7.6.19" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.6.19.tgz#8a911288ee8052cf2c77cf5e2db2367b1b852b43" + integrity sha512-2g29QC44Zl1jKY37DmQ0/dO7+VSKnGgPI/x0mwVwQffypSapxH3rwLLT5Q5XLHeFyD+fhRu5w9Cj4vTGynJgpA== "@storybook/node-logger@8.0.8": version "8.0.8" resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-8.0.8.tgz#12d29cac99ef439aba0050f2fb03894ed4c52c86" integrity sha512-ymps3MMTxtMWq0eDiXk1iO7iv0Eg0PuUvOpPPohEJauGzU9THv81xx01aaHKSprFFJYD2LMQr1aFuUplItO12g== +"@storybook/node-logger@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-8.1.4.tgz#8e4cab3f0b71f64ab44e7e3a181ab198aa581bf8" + integrity sha512-tMcVPdTPN3ZWgzc4YA2MC3GQEuE6Cbx2AN2hQYhdF8O0v+IlAbnad5heUFVEM+fGBpoxZJtVaRohuAd6BR/Ffw== + "@storybook/postinstall@7.4.5": version "7.4.5" resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.4.5.tgz#3258ae9831436df295aa04d4260ed4e54051da4b" @@ -11464,17 +11140,17 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/preview-api@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.0.6.tgz#9fdcd3deb486cc4861df28da87c059216702c159" - integrity sha512-O5SvBqlHIO/Cf5oGZUJV2npkp9bLqg9Sn0T0a5zXolJbRy+gP7MDyz4AnliLpTn5bT2rzVQ6VH8IDlhHBq3K6g== +"@storybook/preview-api@8.0.8": + version "8.0.8" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.0.8.tgz#0684226cd822b9266cceced26ce288b91ea6aa02" + integrity sha512-khgw2mNiBrSZS3KNGQPzjneL3Csh3BOq0yLAtJpT7CRSrI/YjlE7jjcTkKzoxW+UCgvNTnLvsowcuzu82e69fA== dependencies: - "@storybook/channels" "8.0.6" - "@storybook/client-logger" "8.0.6" - "@storybook/core-events" "8.0.6" + "@storybook/channels" "8.0.8" + "@storybook/client-logger" "8.0.8" + "@storybook/core-events" "8.0.8" "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/types" "8.0.6" + "@storybook/types" "8.0.8" "@types/qs" "^6.9.5" dequal "^2.0.2" lodash "^4.17.21" @@ -11484,17 +11160,17 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/preview-api@8.0.8": - version "8.0.8" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.0.8.tgz#0684226cd822b9266cceced26ce288b91ea6aa02" - integrity sha512-khgw2mNiBrSZS3KNGQPzjneL3Csh3BOq0yLAtJpT7CRSrI/YjlE7jjcTkKzoxW+UCgvNTnLvsowcuzu82e69fA== +"@storybook/preview-api@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.1.4.tgz#636b0dfa001a14cc1a4f0d7333d55e4986e0db51" + integrity sha512-WHS3k/8UZT5vYJ+evSAMLG89sv1rBaojTQ2XNgv/DX74vK4l0MQ61wsORC0v7ScGyEuwYIuSCqHH5NNrOBLxmA== dependencies: - "@storybook/channels" "8.0.8" - "@storybook/client-logger" "8.0.8" - "@storybook/core-events" "8.0.8" - "@storybook/csf" "^0.1.2" + "@storybook/channels" "8.1.4" + "@storybook/client-logger" "8.1.4" + "@storybook/core-events" "8.1.4" + "@storybook/csf" "^0.1.7" "@storybook/global" "^5.0.0" - "@storybook/types" "8.0.8" + "@storybook/types" "8.1.4" "@types/qs" "^6.9.5" dequal "^2.0.2" lodash "^4.17.21" @@ -11505,16 +11181,16 @@ util-deprecate "^1.0.2" "@storybook/preview-api@^7.0.12": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.6.12.tgz#d431cc76d733c17ba1943a31fc3297de8f40c467" - integrity sha512-uSzeMSLnCRROjiofJP0F0niLWL+sboQ5ktHW6BAYoPwprumXduPxKBUVEZNxMbVYoAz9v/kEZmaLauh8LRP2Hg== + version "7.6.19" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.6.19.tgz#5f4b36489a7662e4671030dc2580cc11a1dd854e" + integrity sha512-04hdMSQucroJT4dBjQzRd7ZwH2hij8yx2nm5qd4HYGkd1ORkvlH6GOLph4XewNJl5Um3xfzFQzBhvkqvG0WaCQ== dependencies: - "@storybook/channels" "7.6.12" - "@storybook/client-logger" "7.6.12" - "@storybook/core-events" "7.6.12" + "@storybook/channels" "7.6.19" + "@storybook/client-logger" "7.6.19" + "@storybook/core-events" "7.6.19" "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/types" "7.6.12" + "@storybook/types" "7.6.19" "@types/qs" "^6.9.5" dequal "^2.0.2" lodash "^4.17.21" @@ -11630,21 +11306,30 @@ memoizerific "^1.11.3" qs "^6.10.0" -"@storybook/router@7.6.12": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.6.12.tgz#c8699e2c0a5d1ac644e96f72150ab993a7ea132a" - integrity sha512-1fqscJbePFJXhapqiv7fAIIqAvouSsdPnqWjJGJrUMR6JBtRYMcrb3MnDeqi9OYnU73r65BrQBPtSzWM8nP0LQ== +"@storybook/router@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.6.17.tgz#de5016086191846ed12af7495aeddcc373cbd0d4" + integrity sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A== dependencies: - "@storybook/client-logger" "7.6.12" + "@storybook/client-logger" "7.6.17" memoizerific "^1.11.3" qs "^6.10.0" -"@storybook/router@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-8.0.6.tgz#ce022c368e12826a6628ac7e9abcec080c77843f" - integrity sha512-ektN0+TyQPxVxcUvt9ksGizgDM1bKFEdGJeeqv0yYaOSyC4M1e4S8QZ+Iq/p/NFNt5XJWsWU+HtQ8AzQWagQfQ== +"@storybook/router@7.6.19": + version "7.6.19" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.6.19.tgz#b9805344d35bb00c9139787f7c561603ffe0d3c2" + integrity sha512-q2/AvY8rG0znFEfbg50OIhkS5yQ6OmyzdCdztoEsDDdsbq87YPmsDj7k8Op1EkTa2T5CB8XhBOCQDtcj7gUUtg== dependencies: - "@storybook/client-logger" "8.0.6" + "@storybook/client-logger" "7.6.19" + memoizerific "^1.11.3" + qs "^6.10.0" + +"@storybook/router@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-8.1.4.tgz#30cbff9f895752e1c4e6aa79455cc1ceba462670" + integrity sha512-1470aScDa8Z1cVQEi3DotrgiyHW1b88vumFsYVyAZjaqs+21NHE9uIbnyIajVoSuyGxZD0sb2PWeATjsD1FDcQ== + dependencies: + "@storybook/client-logger" "8.1.4" memoizerific "^1.11.3" qs "^6.10.0" @@ -11662,14 +11347,14 @@ fs-extra "^11.1.0" read-pkg-up "^7.0.1" -"@storybook/telemetry@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-8.0.6.tgz#5a7cf64fb7fb6f3fc3ca2e9a871e383782415095" - integrity sha512-kzxhhzGRSBYR4oe/Vlp/adKVxD8KWbIDMCgLWaINe14ILfEmpyrC00MXRSjS1tMF1qfrtn600Oe/xkHFQUpivQ== +"@storybook/telemetry@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-8.1.4.tgz#8084a4865a0c0493c4dae730c5fa57cfece1fb83" + integrity sha512-KRy1xKBWhTr6QOA/R21QPD9lCvD8vLUuAkxWy7QUd9kamXqLSXMTAogGPZRNwsVO5rubRsf0kSu0KEA+8kyJlA== dependencies: - "@storybook/client-logger" "8.0.6" - "@storybook/core-common" "8.0.6" - "@storybook/csf-tools" "8.0.6" + "@storybook/client-logger" "8.1.4" + "@storybook/core-common" "8.1.4" + "@storybook/csf-tools" "8.1.4" chalk "^4.1.0" detect-package-manager "^2.0.1" fetch-retry "^5.0.2" @@ -11695,23 +11380,33 @@ "@storybook/global" "^5.0.0" memoizerific "^1.11.3" -"@storybook/theming@7.6.12", "@storybook/theming@^7.0.12", "@storybook/theming@^7.2.3": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.12.tgz#d05057ace62718e07b20ca0665c93f73d117081c" - integrity sha512-P4zoMKlSYbNrWJjQROuz+DZSDEpdf3TUvk203EqBRdElqw2EMHcqZ8+0HGPFfVHpqEj05+B9Mr6R/Z/BURj0lw== +"@storybook/theming@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.17.tgz#8170e3e72b921380c51a3970890d4cb479a65c2f" + integrity sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA== + dependencies: + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" + "@storybook/client-logger" "7.6.17" + "@storybook/global" "^5.0.0" + memoizerific "^1.11.3" + +"@storybook/theming@7.6.19", "@storybook/theming@^7.0.12", "@storybook/theming@^7.2.3": + version "7.6.19" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.19.tgz#f5032d74d5c0cf5f7c7a389a0b9d2d3bc5e62a25" + integrity sha512-sAho13MmtA80ctOaLn8lpkQBsPyiqSdLcOPH5BWFhatQzzBQCpTAKQk+q/xGju8bNiPZ+yQBaBzbN8SfX8ceCg== dependencies: "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.6.12" + "@storybook/client-logger" "7.6.19" "@storybook/global" "^5.0.0" memoizerific "^1.11.3" -"@storybook/theming@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.0.6.tgz#ae71f2a00d12666644bf0a99f3034d4f07d98045" - integrity sha512-o/b12+nDp8WDFlE0qQilzJ2aIeOHD48MCoc+ouFRPRH4tUS5xNaBPYxBxTgdtFbwZNuOC2my4A37Uhjn6IwkuQ== +"@storybook/theming@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.1.4.tgz#2da22b2b79700955530feaeafd6bc1b178b067c0" + integrity sha512-ujJIBEnNXW8SXxwZp2mQ5k9vHFDqL0dB7bLACVdBJO7+euBJRGeJLRRoFJ/5LivQh0kKdIkaIrp1om32kgPrEA== dependencies: "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@storybook/client-logger" "8.0.6" + "@storybook/client-logger" "8.1.4" "@storybook/global" "^5.0.0" memoizerific "^1.11.3" @@ -11735,22 +11430,23 @@ "@types/express" "^4.7.0" file-system-cache "2.3.0" -"@storybook/types@7.6.12", "@storybook/types@^7.0.12": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.12.tgz#af7813e6f4ca31c500f9e28af5f591c8b1ea1b13" - integrity sha512-Wsbd+NS10/2yMHQ/26rXHflXam0hm2qufTFiHOX6VXZWxij3slRU88Fnwzp+1QSyjXb0qkEr8dOx7aG00+ItVw== +"@storybook/types@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.17.tgz#0b3c27cb1708c0545a9ea1a23b73aa8852dd47c4" + integrity sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q== dependencies: - "@storybook/channels" "7.6.12" + "@storybook/channels" "7.6.17" "@types/babel__core" "^7.0.0" "@types/express" "^4.7.0" file-system-cache "2.3.0" -"@storybook/types@8.0.6": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-8.0.6.tgz#5dd9c6ec89f79a4f1b318be9560ae81b405f7733" - integrity sha512-YKq4A+3diQ7UCGuyrB/9LkB29jjGoEmPl3TfV7mO1FvdRw22BNuV3GyJCiLUHigSKiZgFo+pfQhmsNRJInHUnQ== +"@storybook/types@7.6.19", "@storybook/types@^7.0.12": + version "7.6.19" + resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.19.tgz#ec73c9afb6003c57e260e1709441af4db9f50190" + integrity sha512-DeGYrRPRMGTVfT7o2rEZtRzyLT2yKTI2exgpnxbwPWEFAduZCSfzBrcBXZ/nb5B0pjA9tUNWls1YzGkJGlkhpg== dependencies: - "@storybook/channels" "8.0.6" + "@storybook/channels" "7.6.19" + "@types/babel__core" "^7.0.0" "@types/express" "^4.7.0" file-system-cache "2.3.0" @@ -11763,6 +11459,15 @@ "@types/express" "^4.7.0" file-system-cache "2.3.0" +"@storybook/types@8.1.4": + version "8.1.4" + resolved "https://registry.yarnpkg.com/@storybook/types/-/types-8.1.4.tgz#a50bfa21aa12212fb37b1185b6742d1ae70e474f" + integrity sha512-QfTJg5Hu3c0eiD38Z75bZsw0iCIpruOTGV5O65vCpNun7D6WUyyMM0aUJN3ytujGiHfjsWVgiSe+WoHxdy/fEA== + dependencies: + "@storybook/channels" "8.1.4" + "@types/express" "^4.7.0" + file-system-cache "2.3.0" + "@subsocial/definitions@0.8.13": version "0.8.13" resolved "https://registry.yarnpkg.com/@subsocial/definitions/-/definitions-0.8.13.tgz#5470fc503d574f8c85655202ba5fe1dbfbb0b43d" @@ -11771,23 +11476,43 @@ "@polkadot/api" latest lodash.camelcase "^4.3.0" -"@substrate/connect-extension-protocol@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz#fa5738039586c648013caa6a0c95c43265dbe77d" - integrity sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg== +"@substrate/connect-extension-protocol@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.0.0.tgz#badaa6e6b5f7c7d56987d778f4944ddb83cd9ea7" + integrity sha512-nKu8pDrE3LNCEgJjZe1iGXzaD6OSIDD4Xzz/yo4KO9mQ6LBvf49BVrt4qxBFGL6++NneLiWUZGoh+VSd4PyVIg== -"@substrate/connect@0.7.35": - version "0.7.35" - resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.7.35.tgz#853d8ff50717a8c9ee8f219d11a86e61a54b88b8" - integrity sha512-Io8vkalbwaye+7yXfG1Nj52tOOoJln2bMlc7Q9Yy3vEWqZEVkgKmcPVzbwV0CWL3QD+KMPDA2Dnw/X7EdwgoLw== +"@substrate/connect-known-chains@^1.1.4": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@substrate/connect-known-chains/-/connect-known-chains-1.1.5.tgz#4aed3c402458bfb31ddfc54eeb5cb4a4c74ca88e" + integrity sha512-GCdDMs5q9xDYyP/KEwrlWMdqv8OIPjuVMZvNowvUrvEFo5d+x+VqfRPzyl/RbV+snRQVWTTacRydE7GqyjCYPQ== + +"@substrate/connect@0.8.10": + version "0.8.10" + resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.8.10.tgz#810b6589f848828aa840c731a1f36b84fe0e5956" + integrity sha512-DIyQ13DDlXqVFnLV+S6/JDgiGowVRRrh18kahieJxhgvzcWicw5eLc6jpfQ0moVVLBYkO7rctB5Wreldwpva8w== dependencies: - "@substrate/connect-extension-protocol" "^1.0.1" - smoldot "2.0.7" + "@substrate/connect-extension-protocol" "^2.0.0" + "@substrate/connect-known-chains" "^1.1.4" + "@substrate/light-client-extension-helpers" "^0.0.6" + smoldot "2.0.22" + +"@substrate/light-client-extension-helpers@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-0.0.6.tgz#bec1c7997241226db50b44ad85a992b4348d21c3" + integrity sha512-girltEuxQ1BvkJWmc8JJlk4ZxnlGXc/wkLcNguhY+UoDEMBK0LsdtfzQKIfrIehi4QdeSBlFEFBoI4RqPmsZzA== + dependencies: + "@polkadot-api/json-rpc-provider" "0.0.1" + "@polkadot-api/json-rpc-provider-proxy" "0.0.1" + "@polkadot-api/observable-client" "0.1.0" + "@polkadot-api/substrate-client" "0.0.1" + "@substrate/connect-extension-protocol" "^2.0.0" + "@substrate/connect-known-chains" "^1.1.4" + rxjs "^7.8.1" "@substrate/ss58-registry@^1.44.0": - version "1.46.0" - resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.46.0.tgz#bfe3e6a30d39929f57ecc178acde4e74a773e2b6" - integrity sha512-rBvWnlrBeFTd5LVG7oX3rOHzR16yqyffOFHKmUiVcblpXI3D89CXOvAljW9tWlA1H/2/FegaZnHPhdObPsvi+w== + version "1.48.0" + resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.48.0.tgz#b50b577b491274dbab55711d2e933456637e73d0" + integrity sha512-lE9TGgtd93fTEIoHhSdtvSFBoCsvTbqiCvQIMvX4m6BO/hESywzzTzTFMVP1doBwDDMAN4lsMfIM3X3pdmt7kQ== "@svgr/babel-plugin-add-jsx-attribute@8.0.0": version "8.0.0" @@ -11910,91 +11635,94 @@ "@svgr/plugin-jsx" "8.1.0" "@svgr/plugin-svgo" "8.1.0" -"@swc/core-darwin-arm64@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.0.tgz#11abf23b884929a467ba270cf6789b9c50c4248b" - integrity sha512-UTJ/Vz+s7Pagef6HmufWt6Rs0aUu+EJF4Pzuwvr7JQQ5b1DZeAAUeUtkUTFx/PvCbM8Xfw4XdKBUZfrIKCfW8A== - -"@swc/core-darwin-x64@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.0.tgz#f044ddaca60c5081e907b148721ad7461f6f6dfe" - integrity sha512-f8v58u2GsGak8EtZFN9guXqE0Ep10Suny6xriaW2d8FGqESPyNrnBzli3aqkSeQk5gGqu2zJ7WiiKp3XoUOidA== - -"@swc/core-linux-arm-gnueabihf@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.0.tgz#52ceea673fc76692c0bd6d58e1863125c3e6173b" - integrity sha512-q2KAkBzmPcTnRij/Y1fgHCKAGevUX/H4uUESrw1J5gmUg9Qip6onKV80lTumA1/aooGJ18LOsB31qdbwmZk9OA== - -"@swc/core-linux-arm64-gnu@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.0.tgz#7f3ff1ab824ec48acdb39d231cbcb4096a4f9dd0" - integrity sha512-SknGu96W0mzHtLHWm+62fk5+Omp9fMPFO7AWyGFmz2tr8EgRRXtTSrBUnWhAbgcalnhen48GsvtMdxf1KNputg== - -"@swc/core-linux-arm64-musl@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.0.tgz#26c3b1f7947c19ef725997af716f230957d586f8" - integrity sha512-/k3TDvpBRMDNskHooNN1KqwUhcwkfBlIYxRTnJvsfT2C7My4pffR+4KXmt0IKynlTTbCdlU/4jgX4801FSuliw== - -"@swc/core-linux-x64-gnu@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.0.tgz#2c7d03a04a7d045394cfed7d46419ff8816ec22e" - integrity sha512-GYsTMvNt5+WTVlwwQzOOWsPMw6P/F41u5PGHWmfev8Nd4QJ1h3rWPySKk4mV42IJwH9MgQCVSl3ygwNqwl6kFg== - -"@swc/core-linux-x64-musl@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.0.tgz#0e76442dfb6d5026d8d6e7db6b2f4922b7692d0f" - integrity sha512-jGVPdM/VwF7kK/uYRW5N6FwzKf/FnDjGIR3RPvQokjYJy7Auk+3Oj21C0Jev7sIT9RYnO/TrFEoEozKeD/z2Qw== - -"@swc/core-win32-arm64-msvc@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.0.tgz#0177bebf312eb251d6749ab76259c0e08088e837" - integrity sha512-biHYm1AronEKlt47O/H8sSOBM2BKXMmWT+ApvlxUw50m1RGNnVnE0bgY7tylFuuSiWyXsQPJbmUV708JqORXVg== - -"@swc/core-win32-ia32-msvc@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.0.tgz#27fa650280e5651aa42129eaf03e02787b866417" - integrity sha512-TL5L2tFQb19kJwv6+elToGBj74QXCn9j+hZfwQatvZEJRA5rDK16eH6oAE751dGUArhnWlW3Vj65hViPvTuycw== - -"@swc/core-win32-x64-msvc@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.0.tgz#bd575c599bd6847bddc4863a3babd85e3db5e11e" - integrity sha512-e2xVezU7XZ2Stzn4i7TOQe2Kn84oYdG0M3A7XI7oTdcpsKCcKwgiMoroiAhqCv+iN20KNqhnWwJiUiTj/qN5AA== +"@swc/core-darwin-arm64@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.7.tgz#2b5cdbd34e4162e50de6147dd1a5cb12d23b08e8" + integrity sha512-bZLVHPTpH3h6yhwVl395k0Mtx8v6CGhq5r4KQdAoPbADU974Mauz1b6ViHAJ74O0IVE5vyy7tD3OpkQxL/vMDQ== + +"@swc/core-darwin-x64@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.5.7.tgz#6aa7e3c01ab8e5e41597f8a24ff24c4e50936a46" + integrity sha512-RpUyu2GsviwTc2qVajPL0l8nf2vKj5wzO3WkLSHAHEJbiUZk83NJrZd1RVbEknIMO7+Uyjh54hEh8R26jSByaw== + +"@swc/core-linux-arm-gnueabihf@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.7.tgz#160108633b9e1d1ad05f815bedc7e9eb5d59fc2a" + integrity sha512-cTZWTnCXLABOuvWiv6nQQM0hP6ZWEkzdgDvztgHI/+u/MvtzJBN5lBQ2lue/9sSFYLMqzqff5EHKlFtrJCA9dQ== + +"@swc/core-linux-arm64-gnu@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.7.tgz#cbfa512683c73227ad25552f3b3e722b0e7fbd1d" + integrity sha512-hoeTJFBiE/IJP30Be7djWF8Q5KVgkbDtjySmvYLg9P94bHg9TJPSQoC72tXx/oXOgXvElDe/GMybru0UxhKx4g== + +"@swc/core-linux-arm64-musl@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.7.tgz#80239cb58fe57f3c86b44617fe784530ec55ee2b" + integrity sha512-+NDhK+IFTiVK1/o7EXdCeF2hEzCiaRSrb9zD7X2Z7inwWlxAntcSuzZW7Y6BRqGQH89KA91qYgwbnjgTQ22PiQ== + +"@swc/core-linux-x64-gnu@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.7.tgz#a699c1632de60b6a63b7fdb7abcb4fef317e57ca" + integrity sha512-25GXpJmeFxKB+7pbY7YQLhWWjkYlR+kHz5I3j9WRl3Lp4v4UD67OGXwPe+DIcHqcouA1fhLhsgHJWtsaNOMBNg== + +"@swc/core-linux-x64-musl@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.7.tgz#8e4c203d6bc41e7f85d7d34d0fdf4ef751fa626c" + integrity sha512-0VN9Y5EAPBESmSPPsCJzplZHV26akC0sIgd3Hc/7S/1GkSMoeuVL+V9vt+F/cCuzr4VidzSkqftdP3qEIsXSpg== + +"@swc/core-win32-arm64-msvc@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.7.tgz#31e3d42b8c0aa79f0ea1a980c0dd1a999d378ed7" + integrity sha512-RtoNnstBwy5VloNCvmvYNApkTmuCe4sNcoYWpmY7C1+bPR+6SOo8im1G6/FpNem8AR5fcZCmXHWQ+EUmRWJyuA== + +"@swc/core-win32-ia32-msvc@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.7.tgz#a235285f9f62850aefcf9abb03420f2c54f63638" + integrity sha512-Xm0TfvcmmspvQg1s4+USL3x8D+YPAfX2JHygvxAnCJ0EHun8cm2zvfNBcsTlnwYb0ybFWXXY129aq1wgFC9TpQ== + +"@swc/core-win32-x64-msvc@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.7.tgz#f84641393b5223450d00d97bfff877b8b69d7c9b" + integrity sha512-tp43WfJLCsKLQKBmjmY/0vv1slVywR5Q4qKjF5OIY8QijaEW7/8VwPyUyVoJZEnDgv9jKtUTG5PzqtIYPZGnyg== "@swc/core@^1.3.82": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.4.0.tgz#3a0ceeea5b889173f4592955fe1da4d071d86a76" - integrity sha512-wc5DMI5BJftnK0Fyx9SNJKkA0+BZSJQx8430yutWmsILkHMBD3Yd9GhlMaxasab9RhgKqZp7Ht30hUYO5ZDvQg== + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.5.7.tgz#e1db7b9887d5f34eb4a3256a738d0c5f1b018c33" + integrity sha512-U4qJRBefIJNJDRCCiVtkfa/hpiZ7w0R6kASea+/KLp+vkus3zcLSB8Ub8SvKgTIxjWpwsKcZlPf5nrv4ls46SQ== dependencies: - "@swc/counter" "^0.1.1" - "@swc/types" "^0.1.5" + "@swc/counter" "^0.1.2" + "@swc/types" "0.1.7" optionalDependencies: - "@swc/core-darwin-arm64" "1.4.0" - "@swc/core-darwin-x64" "1.4.0" - "@swc/core-linux-arm-gnueabihf" "1.4.0" - "@swc/core-linux-arm64-gnu" "1.4.0" - "@swc/core-linux-arm64-musl" "1.4.0" - "@swc/core-linux-x64-gnu" "1.4.0" - "@swc/core-linux-x64-musl" "1.4.0" - "@swc/core-win32-arm64-msvc" "1.4.0" - "@swc/core-win32-ia32-msvc" "1.4.0" - "@swc/core-win32-x64-msvc" "1.4.0" - -"@swc/counter@^0.1.1", "@swc/counter@^0.1.3": + "@swc/core-darwin-arm64" "1.5.7" + "@swc/core-darwin-x64" "1.5.7" + "@swc/core-linux-arm-gnueabihf" "1.5.7" + "@swc/core-linux-arm64-gnu" "1.5.7" + "@swc/core-linux-arm64-musl" "1.5.7" + "@swc/core-linux-x64-gnu" "1.5.7" + "@swc/core-linux-x64-musl" "1.5.7" + "@swc/core-win32-arm64-msvc" "1.5.7" + "@swc/core-win32-ia32-msvc" "1.5.7" + "@swc/core-win32-x64-msvc" "1.5.7" + +"@swc/counter@^0.1.2", "@swc/counter@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== -"@swc/helpers@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" - integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw== +"@swc/helpers@0.5.5": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.5.tgz#12689df71bfc9b21c4f4ca00ae55f2f16c8b77c0" + integrity sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A== dependencies: + "@swc/counter" "^0.1.3" tslib "^2.4.0" -"@swc/types@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" - integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== +"@swc/types@0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.7.tgz#ea5d658cf460abff51507ca8d26e2d391bafb15e" + integrity sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ== + dependencies: + "@swc/counter" "^0.1.3" "@szmarczak/http-timer@^1.1.2": version "1.1.2" @@ -12025,11 +11753,11 @@ mini-svg-data-uri "^1.2.3" "@tanstack/match-sorter-utils@^8.1.1": - version "8.11.8" - resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.11.8.tgz#9132c2a21cf18ca2f0071b604ddadb7a66e73367" - integrity sha512-3VPh0SYMGCa5dWQEqNab87UpCMk+ANWHDP4ALs5PeEW9EpfTAbrezzaOk/OiM52IESViefkoAOYuxdoa04p6aA== + version "8.15.1" + resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.15.1.tgz#715e028ff43cf79ece10bd5a757047a1016c3bba" + integrity sha512-PnVV3d2poenUM31ZbZi/yXkBu3J7kd5k2u51CGwwNojag451AjTH9N6n41yjXz2fpLeewleyLBmNS6+HcGDlXw== dependencies: - remove-accents "0.4.2" + remove-accents "0.5.0" "@tanstack/query-core@4.36.1": version "4.36.1" @@ -12066,28 +11794,28 @@ use-sync-external-store "^1.2.0" "@tanstack/react-table@^8.9.1": - version "8.11.8" - resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.11.8.tgz#4eef4a2d91116ca51c8c9b2f00b455d8d99886c7" - integrity sha512-NEwvIq4iSiDQozEyvbdiSdCOiLa+g5xHmdEnvwDb98FObcK6YkBOkRrs/CNqrKdDy+/lqoIllIWHk+M80GW6+g== + version "8.17.3" + resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.17.3.tgz#4e10b4cf5355a40d6d72a83d3f4b3ecd32f56bf4" + integrity sha512-5gwg5SvPD3lNAXPuJJz1fOCEZYk9/GeBFH3w/hCgnfyszOIzwkwgp5I7Q4MJtn0WECp84b5STQUDdmvGi8m3nA== dependencies: - "@tanstack/table-core" "8.11.8" + "@tanstack/table-core" "8.17.3" "@tanstack/react-virtual@^3.0.0-beta.60": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.0.4.tgz#32a90aa6faa2eeebb5f4ca561d26bae9f3435e45" - integrity sha512-tiqKW/e2MJVCr7/pRUXulpkyxllaOclkHNfhKTo4pmHjJIqnhMfwIjc1Q1R0Un3PI3kQywywu/791c8z9u0qeA== + version "3.5.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.5.0.tgz#873b5b77cf78af563a4a11e6251ed51ee8868132" + integrity sha512-rtvo7KwuIvqK9zb0VZ5IL7fiJAEnG+0EiFZz8FUOs+2mhGqdGmjKIaT1XU7Zq0eFqL0jonLlhbayJI/J2SA/Bw== dependencies: - "@tanstack/virtual-core" "3.0.0" + "@tanstack/virtual-core" "3.5.0" -"@tanstack/table-core@8.11.8": - version "8.11.8" - resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.11.8.tgz#7f46c31894249dbb57e43ad95c80e891236a895f" - integrity sha512-DECHvtq4YW4U/gqg6etup7ydt/RB1Bi1pJaMpHUXl65ooW1d71Nv7BzD66rUdHrBSNdyiW3PLTPUQlpXjAgDeA== +"@tanstack/table-core@8.17.3": + version "8.17.3" + resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.17.3.tgz#d7a9830abb29cd369b52b2a7159dc0360af646fd" + integrity sha512-mPBodDGVL+fl6d90wUREepHa/7lhsghg2A3vFpakEhrhtbIlgNAZiMr7ccTgak5qbHqF14Fwy+W1yFWQt+WmYQ== -"@tanstack/virtual-core@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.0.0.tgz#637bee36f0cabf96a1d436887c90f138a7e9378b" - integrity sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg== +"@tanstack/virtual-core@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.5.0.tgz#108208d0f1d75271300bc5560cf9a85a1fa01e89" + integrity sha512-KnPRCkQTyqhanNC0K63GBG3wA8I+D1fQuVnAvcBF8f13akOKeQp1gSbu6f77zCxhEk727iV5oQnbHLYzHrECLg== "@testing-library/dom@^9.0.0": version "9.3.4" @@ -12145,9 +11873,9 @@ integrity sha512-JzoZ0h299JRLPfV5VBsMq1TuMy+OmU9bdV/7NcjfRojL0eIcA1k5ESrtjWrDwJRJnk9B0QmgR0rq04LERbdfWw== "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" @@ -12164,15 +11892,10 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@tsconfig/strictest@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/strictest/-/strictest-2.0.2.tgz#97167bf99c03d0a010d9946ae8a702c4f62e2783" - integrity sha512-jt4jIsWKvUvuY6adJnQJlb/UR7DdjC8CjHI/OaSQruj2yX9/K6+KOvDt/vD6udqos/FUk5Op66CvYT7TBLYO5Q== - -"@tsconfig/strictest@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/strictest/-/strictest-2.0.4.tgz#8287de7019ce202a03de7e1c27ee3f652c526a06" - integrity sha512-/VKO/oufDOvAE48KGzZOEXFBKtR3PnGlb4cJoRtw3Ax5tYwaWnaNgyTJDviIbvjlnn82WMfTNvhegFkj5Xt2UA== +"@tsconfig/strictest@^2.0.1", "@tsconfig/strictest@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@tsconfig/strictest/-/strictest-2.0.5.tgz#2cbc67f207ba87fdec2a84ad79b1708cf4edd93b" + integrity sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg== "@types/aria-query@^5.0.1": version "5.0.4" @@ -12206,9 +11929,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== dependencies: "@babel/types" "^7.20.7" @@ -12252,7 +11975,7 @@ "@types/express-serve-static-core" "*" "@types/node" "*" -"@types/connect@*", "@types/connect@^3.4.33": +"@types/connect@*": version "3.4.38" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== @@ -12294,9 +12017,9 @@ "@types/d3-color" "*" "@types/d3-path@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.0.2.tgz#4327f4a05d475cf9be46a93fc2e0f8d23380805a" - integrity sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.0.tgz#2b907adce762a78e98828f0b438eaca339ae410a" + integrity sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ== "@types/d3-scale@^4.0.2": version "4.0.8" @@ -12334,6 +12057,11 @@ resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.5.tgz#deecde143245989dee0e82115f3caba5ee0ea747" integrity sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA== +"@types/diff@^5.0.9": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.2.1.tgz#cceae9c4b2dae5c6b8ab1ce1263601c255d87fb3" + integrity sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g== + "@types/doctrine@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@types/doctrine/-/doctrine-0.0.3.tgz#e892d293c92c9c1d3f9af72c15a554fbc7e0895a" @@ -12345,9 +12073,9 @@ integrity sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg== "@types/emscripten@^1.39.6": - version "1.39.10" - resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.10.tgz#da6e58a6171b46a41d3694f812d845d515c77e18" - integrity sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw== + version "1.39.12" + resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.12.tgz#e43b4fdd4b389861897d6cbb9665532f3afd5abd" + integrity sha512-AQImDBgudQfMqUBfrjZYilRxoHDzTBp+ejh+g1fY67eSMalwIKtBXofjpyI0JBgNpHGzxeGAR2QDya0wxW9zbA== "@types/escodegen@^0.0.6": version "0.0.6" @@ -12371,17 +12099,17 @@ "@types/estree" "*" "@types/eslint@*": - version "8.56.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.2.tgz#1c72a9b794aa26a8b94ad26d5b9aa51c8a6384bb" - integrity sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw== + version "8.56.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" + integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/estree-jsx@^1.0.0": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.4.tgz#8d34b43444887dde8a73af530f772f23e1d3287c" - integrity sha512-5idy3hvI9lAMqsyilBM+N+boaCf1MgoefbDxN6KEO5aK17TOHwFAYT9sjxzeKAiIWRUBgLxmZ9mPcnzZXtTcRQ== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== dependencies: "@types/estree" "*" @@ -12401,9 +12129,9 @@ integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.43" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" - integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== + version "4.19.1" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.1.tgz#57d34698bb580720fd6e3c360d4b2fdef579b979" + integrity sha512-ej0phymbFLoCB26dbbq5PGScsf2JAJ4IJHjG10LalgUV36XKTmA4GdA+PVllKvRk0sEKt64X8975qFnkSi0hqA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -12557,9 +12285,9 @@ "@types/node" "*" "@types/lodash@^4.14.167": - version "4.14.202" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" - integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== + version "4.17.4" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.4.tgz#0303b64958ee070059e3a7184048a55159fe20b7" + integrity sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ== "@types/mdast@^3.0.0": version "3.0.15" @@ -12569,21 +12297,16 @@ "@types/unist" "^2" "@types/mdast@^4.0.0": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.3.tgz#1e011ff013566e919a4232d1701ad30d70cab333" - integrity sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg== + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== dependencies: "@types/unist" "*" "@types/mdx@^2.0.0": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.11.tgz#21f4c166ed0e0a3a733869ba04cd8daea9834b8e" - integrity sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw== - -"@types/mime@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + version "2.0.13" + resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd" + integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== "@types/mime@^1": version "1.3.5" @@ -12620,10 +12343,10 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": - version "20.11.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.16.tgz#4411f79411514eb8e2926f036c86c9f0e4ec6708" - integrity sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ== +"@types/node@*", "@types/node@>=13.7.0": + version "20.12.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050" + integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw== dependencies: undici-types "~5.26.4" @@ -12634,20 +12357,20 @@ dependencies: undici-types "~5.25.1" -"@types/node@^12.12.54", "@types/node@^12.12.6": +"@types/node@^12.12.6": version "12.20.55" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== -"@types/node@^16.0.0", "@types/node@^16.10.2": - version "16.18.79" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.79.tgz#153e25561b271cf87dc1b28d38f98cebd514d788" - integrity sha512-Qd7jdLR5zmnIyMhfDrfPqN5tUCvreVpP3Qrf2oSM+F7SNzlb/MwHISGUkdFHtevfkPJ3iAGyeQI/jsbh9EStgQ== +"@types/node@^16.0.0": + version "16.18.97" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.97.tgz#d7926a8030f0d714d555b4550c0cc7731495cfe5" + integrity sha512-4muilE1Lbfn57unR+/nT9AFjWk0MtWi5muwCEJqnOvfRQDbSfLCUdN7vCIg8TYuaANfhLOV85ve+FNpiUsbSRg== "@types/node@^18.0.0": - version "18.19.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.14.tgz#1880ff1b3ac913f3877f711588e5ed227da01886" - integrity sha512-EnQ4Us2rmOS64nHDWr0XqAD8DsO6f3XR6lf9UIIrZQpUzPVdN/oPuEzfDWNHSyXLvoGgjuEm/sPwFGSSs35Wtg== + version "18.19.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.33.tgz#98cd286a1b8a5e11aa06623210240bcc28e95c48" + integrity sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A== dependencies: undici-types "~5.26.4" @@ -12674,14 +12397,14 @@ integrity sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA== "@types/prop-types@*": - version "15.7.11" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" - integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== "@types/qs@*", "@types/qs@^6.9.5": - version "6.9.11" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== + version "6.9.15" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" + integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== "@types/range-parser@*": version "1.2.7" @@ -12696,9 +12419,9 @@ "@types/react" "*" "@types/react-dom@^18.0.0": - version "18.2.18" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd" - integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw== + version "18.3.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" + integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== dependencies: "@types/react" "*" @@ -12720,19 +12443,18 @@ "@types/react" "*" "@types/react-syntax-highlighter@^15.5.11": - version "15.5.11" - resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.11.tgz#e050745b22eff81fc13cb0c763dd0d063413bbf1" - integrity sha512-ZqIJl+Pg8kD+47kxUjvrlElrraSUrYa4h0dauY/U/FTUuprSCqvUj+9PNQNQzVc6AJgIWUUxn87/gqsMHNbRjw== + version "15.5.13" + resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.13.tgz#c5baf62a3219b3bf28d39cfea55d0a49a263d1f2" + integrity sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA== dependencies: "@types/react" "*" "@types/react@*", "@types/react@>=16": - version "18.2.54" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.54.tgz#0899236363ab39cb12690367cbb62febb56bc94c" - integrity sha512-039k+vrVJymDoe2y+HLk3O3oI3sa+C8KNjuDKofqrIJK26ramnqLNj9VJTaxAzFGMvpW/79HrrAJapHzpQ9fGQ== + version "18.3.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" "@types/react@18.2.14": @@ -12774,9 +12496,9 @@ integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== "@types/scheduler@*": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== + version "0.23.0" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.23.0.tgz#0a6655b3e2708eaabca00b7372fafd7a792a7b09" + integrity sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw== "@types/secp256k1@^4.0.1": version "4.0.6" @@ -12786,9 +12508,9 @@ "@types/node" "*" "@types/semver@^7.3.12", "@types/semver@^7.3.4", "@types/semver@^7.5.0": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/send@*": version "0.17.4" @@ -12806,13 +12528,13 @@ "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.5" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: "@types/http-errors" "*" - "@types/mime" "*" "@types/node" "*" + "@types/send" "*" "@types/sinonjs__fake-timers@8.1.1": version "8.1.1" @@ -12836,10 +12558,10 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== -"@types/stylis@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.0.tgz#199a3f473f0c3a6f6e4e1b17cdbc967f274bdc6b" - integrity sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw== +"@types/stylis@4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.5.tgz#1daa6456f40959d06157698a653a9ab0a70281df" + integrity sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw== "@types/tough-cookie@*": version "4.0.5" @@ -12878,13 +12600,6 @@ dependencies: "@types/node" "*" -"@types/ws@^7.4.4": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - dependencies: - "@types/node" "*" - "@types/ws@^8.0.0", "@types/ws@^8.5.1", "@types/ws@^8.5.5": version "8.5.10" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" @@ -12961,7 +12676,18 @@ "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" -"@typescript-eslint/parser@^5.4.2 || ^6.0.0", "@typescript-eslint/parser@^6.19.1": +"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.2.0.tgz#44356312aea8852a3a82deebdacd52ba614ec07a" + integrity sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg== + dependencies: + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/typescript-estree" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" + debug "^4.3.4" + +"@typescript-eslint/parser@^6.19.1": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== @@ -12988,6 +12714,22 @@ "@typescript-eslint/types" "6.21.0" "@typescript-eslint/visitor-keys" "6.21.0" +"@typescript-eslint/scope-manager@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz#054a27b1090199337a39cf755f83d9f2ce26546b" + integrity sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg== + dependencies: + "@typescript-eslint/types" "7.10.0" + "@typescript-eslint/visitor-keys" "7.10.0" + +"@typescript-eslint/scope-manager@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz#cfb437b09a84f95a0930a76b066e89e35d94e3da" + integrity sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg== + dependencies: + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" + "@typescript-eslint/type-utils@5.62.0", "@typescript-eslint/type-utils@^5.60.1": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" @@ -12998,7 +12740,7 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/type-utils@6.21.0", "@typescript-eslint/type-utils@^6.13.2": +"@typescript-eslint/type-utils@6.21.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== @@ -13008,6 +12750,16 @@ debug "^4.3.4" ts-api-utils "^1.0.1" +"@typescript-eslint/type-utils@^7.3.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.10.0.tgz#8a75accce851d0a331aa9331268ef64e9b300270" + integrity sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g== + dependencies: + "@typescript-eslint/typescript-estree" "7.10.0" + "@typescript-eslint/utils" "7.10.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + "@typescript-eslint/types@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" @@ -13023,7 +12775,17 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== -"@typescript-eslint/typescript-estree@5.62.0", "@typescript-eslint/typescript-estree@^5.55.0", "@typescript-eslint/typescript-estree@^5.59.5": +"@typescript-eslint/types@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.10.0.tgz#da92309c97932a3a033762fd5faa8b067de84e3b" + integrity sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg== + +"@typescript-eslint/types@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.2.0.tgz#0feb685f16de320e8520f13cca30779c8b7c403f" + integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA== + +"@typescript-eslint/typescript-estree@5.62.0", "@typescript-eslint/typescript-estree@^5.55.0", "@typescript-eslint/typescript-estree@^5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== @@ -13050,6 +12812,34 @@ semver "^7.5.4" ts-api-utils "^1.0.1" +"@typescript-eslint/typescript-estree@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz#6dcdc5de3149916a6a599fa89dde5c471b88b8bb" + integrity sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g== + dependencies: + "@typescript-eslint/types" "7.10.0" + "@typescript-eslint/visitor-keys" "7.10.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/typescript-estree@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz#5beda2876c4137f8440c5a84b4f0370828682556" + integrity sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA== + dependencies: + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/typescript-estree@^4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" @@ -13077,7 +12867,7 @@ eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/utils@6.21.0", "@typescript-eslint/utils@^6.0.0", "@typescript-eslint/utils@^6.13.2": +"@typescript-eslint/utils@6.21.0", "@typescript-eslint/utils@^6.0.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== @@ -13090,6 +12880,16 @@ "@typescript-eslint/typescript-estree" "6.21.0" semver "^7.5.4" +"@typescript-eslint/utils@7.10.0", "@typescript-eslint/utils@^7.3.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.10.0.tgz#8ee43e5608c9f439524eaaea8de5b358b15c51b3" + integrity sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "7.10.0" + "@typescript-eslint/types" "7.10.0" + "@typescript-eslint/typescript-estree" "7.10.0" + "@typescript-eslint/visitor-keys@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" @@ -13114,6 +12914,22 @@ "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" +"@typescript-eslint/visitor-keys@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz#2af2e91e73a75dd6b70b4486c48ae9d38a485a78" + integrity sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg== + dependencies: + "@typescript-eslint/types" "7.10.0" + eslint-visitor-keys "^3.4.3" + +"@typescript-eslint/visitor-keys@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz#5035f177752538a5750cca1af6044b633610bf9e" + integrity sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A== + dependencies: + "@typescript-eslint/types" "7.2.0" + eslint-visitor-keys "^3.4.1" + "@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" @@ -13335,16 +13151,16 @@ tslib "1.14.1" "@walletconnect/jsonrpc-http-connection@^1.0.4", "@walletconnect/jsonrpc-http-connection@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.7.tgz#a6973569b8854c22da707a759d241e4f5c2d5a98" - integrity sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ== + version "1.0.8" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.8.tgz#2f4c3948f074960a3edd07909560f3be13e2c7ae" + integrity sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw== dependencies: "@walletconnect/jsonrpc-utils" "^1.0.6" "@walletconnect/safe-json" "^1.0.1" cross-fetch "^3.1.4" - tslib "1.14.1" + events "^3.3.0" -"@walletconnect/jsonrpc-provider@1.0.13", "@walletconnect/jsonrpc-provider@^1.0.13", "@walletconnect/jsonrpc-provider@^1.0.6": +"@walletconnect/jsonrpc-provider@1.0.13": version "1.0.13" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz#9a74da648d015e1fffc745f0c7d629457f53648b" integrity sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g== @@ -13353,7 +13169,16 @@ "@walletconnect/safe-json" "^1.0.2" tslib "1.14.1" -"@walletconnect/jsonrpc-types@1.0.3", "@walletconnect/jsonrpc-types@^1.0.2", "@walletconnect/jsonrpc-types@^1.0.3": +"@walletconnect/jsonrpc-provider@^1.0.13", "@walletconnect/jsonrpc-provider@^1.0.6": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz#696f3e3b6d728b361f2e8b853cfc6afbdf2e4e3e" + integrity sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.8" + "@walletconnect/safe-json" "^1.0.2" + events "^3.3.0" + +"@walletconnect/jsonrpc-types@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz#65e3b77046f1a7fa8347ae02bc1b841abe6f290c" integrity sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw== @@ -13361,6 +13186,14 @@ keyvaluestorage-interface "^1.0.0" tslib "1.14.1" +"@walletconnect/jsonrpc-types@^1.0.2", "@walletconnect/jsonrpc-types@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz#ce1a667d79eadf2a2d9d002c152ceb68739c230c" + integrity sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ== + dependencies: + events "^3.3.0" + keyvaluestorage-interface "^1.0.0" + "@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.4", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.7", "@walletconnect/jsonrpc-utils@^1.0.8": version "1.0.8" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" @@ -13450,12 +13283,12 @@ query-string "^6.13.5" "@walletconnect/logger@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.0.1.tgz#7f489b96e9a1ff6bf3e58f0fbd6d69718bf844a8" - integrity sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ== + version "2.1.2" + resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.1.2.tgz#813c9af61b96323a99f16c10089bfeb525e2a272" + integrity sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw== dependencies: + "@walletconnect/safe-json" "^1.0.2" pino "7.11.0" - tslib "1.14.1" "@walletconnect/modal-core@2.6.2": version "2.6.2" @@ -13493,12 +13326,11 @@ tslib "1.14.1" "@walletconnect/relay-api@^1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.9.tgz#f8c2c3993dddaa9f33ed42197fc9bfebd790ecaf" - integrity sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg== + version "1.0.10" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.10.tgz#5aef3cd07c21582b968136179aa75849dcc65499" + integrity sha512-tqrdd4zU9VBNqUaXXQASaexklv6A54yEyQQEXYOCr+Jz8Ket0dmPBDyg19LVSNUN2cipAghQc45/KVmfFJ0cYw== dependencies: "@walletconnect/jsonrpc-types" "^1.0.2" - tslib "1.14.1" "@walletconnect/relay-auth@^1.0.4": version "1.0.4" @@ -13603,10 +13435,10 @@ "@walletconnect/window-getters" "^1.0.1" tslib "1.14.1" -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.11.5": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== dependencies: "@webassemblyjs/helper-numbers" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" @@ -13621,10 +13453,10 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== "@webassemblyjs/helper-numbers@1.11.6": version "1.11.6" @@ -13640,15 +13472,15 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/ieee754@1.11.6": version "1.11.6" @@ -13670,58 +13502,58 @@ integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== "@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-api-error" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@xtuc/long" "4.2.2" "@webb-tools/anchors@1.0.11": @@ -13898,7 +13730,7 @@ ffjavascript "^0.2.57" snarkjs "^0.7.2" -"@webb-tools/tangle-substrate-types@^0.5.5": +"@webb-tools/tangle-substrate-types@0.5.5": version "0.5.5" resolved "https://registry.yarnpkg.com/@webb-tools/tangle-substrate-types/-/tangle-substrate-types-0.5.5.tgz#03ee0e9380c3f9744b5ee210a97eaa0d92c97c37" integrity sha512-fNCkugerqerFlF15DMPuVrHEQIacRajCqh5hHAihkB5wvKlEtWd6JivrrWihPqiQVX6OBnkE6SbEfqPvbBgrKw== @@ -14044,6 +13876,11 @@ resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.0.3.tgz#13a65dd4f5893f55280f766e29ae48074927acad" integrity sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA== +"@whatwg-node/events@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.1.1.tgz#0ca718508249419587e130da26d40e29d99b5356" + integrity sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w== + "@whatwg-node/fetch@^0.8.0", "@whatwg-node/fetch@^0.8.1", "@whatwg-node/fetch@^0.8.2", "@whatwg-node/fetch@^0.8.3", "@whatwg-node/fetch@^0.8.4": version "0.8.8" resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.8.8.tgz#48c6ad0c6b7951a73e812f09dd22d75e9fa18cae" @@ -14055,6 +13892,14 @@ urlpattern-polyfill "^8.0.0" web-streams-polyfill "^3.2.1" +"@whatwg-node/fetch@^0.9.0", "@whatwg-node/fetch@^0.9.13", "@whatwg-node/fetch@^0.9.17": + version "0.9.17" + resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.9.17.tgz#10e4ea2392926c8d41ff57e3156857e885317d3f" + integrity sha512-TDYP3CpCrxwxpiNY0UMNf096H5Ihf67BK1iKGegQl5u9SlpEDYrvnV71gWBGJm+Xm31qOy8ATgma9rm8Pe7/5Q== + dependencies: + "@whatwg-node/node-fetch" "^0.5.7" + urlpattern-polyfill "^10.0.0" + "@whatwg-node/node-fetch@^0.3.6": version "0.3.6" resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz#e28816955f359916e2d830b68a64493124faa6d0" @@ -14066,6 +13911,17 @@ fast-url-parser "^1.1.3" tslib "^2.3.1" +"@whatwg-node/node-fetch@^0.5.7": + version "0.5.11" + resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.5.11.tgz#4bed979cebc18438e936bb753418b5b0450eb5ab" + integrity sha512-LS8tSomZa3YHnntpWt3PP43iFEEl6YeIsvDakczHBKlay5LdkXFr8w7v8H6akpG5nRrzydyB0k1iE2eoL6aKIQ== + dependencies: + "@kamilkisiela/fast-url-parser" "^1.1.4" + "@whatwg-node/events" "^0.1.0" + busboy "^1.6.0" + fast-querystring "^1.1.1" + tslib "^2.3.1" + "@whatwg-node/server@^0.7.3", "@whatwg-node/server@^0.7.4": version "0.7.7" resolved "https://registry.yarnpkg.com/@whatwg-node/server/-/server-0.7.7.tgz#daaae73999cf8ea4d4f7e617276dcb8e84a6e49e" @@ -14074,6 +13930,14 @@ "@whatwg-node/fetch" "^0.8.3" tslib "^2.3.1" +"@whatwg-node/server@^0.9.33": + version "0.9.34" + resolved "https://registry.yarnpkg.com/@whatwg-node/server/-/server-0.9.34.tgz#6b4c578c90c57099984f6085b3e2db9ab01fad3f" + integrity sha512-1sHRjqUtZIyTR2m2dS/dJpzS5OcNDpPuUSVDa2PoEgzYVKr4GsqJaYtRaEXXFohvvyh6PkouYCc1rE7jMDWVCA== + dependencies: + "@whatwg-node/fetch" "^0.9.17" + tslib "^2.3.1" + "@wry/caches@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@wry/caches/-/caches-1.0.1.tgz#8641fd3b6e09230b86ce8b93558d44cf1ece7e52" @@ -14251,6 +14115,13 @@ dependencies: argparse "^2.0.1" +"@zkochan/js-yaml@0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz#4b0cb785220d7c28ce0ec4d0804deb5d821eae89" + integrity sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ== + dependencies: + argparse "^2.0.1" + JSONStream@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -14354,7 +14225,7 @@ acorn@^7.1.1, acorn@^7.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.1.0, acorn@^8.11.2, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.6.0, acorn@^8.7.1, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.0.4, acorn@^8.1.0, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.6.0, acorn@^8.7.1, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: version "8.11.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -14390,19 +14261,12 @@ agent-base@6: debug "4" agent-base@^7.0.2, agent-base@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" - integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== dependencies: debug "^4.3.4" -agentkeepalive@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -14431,6 +14295,13 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" @@ -14443,7 +14314,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.11.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -14454,14 +14325,14 @@ ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0, ajv@^8.11.2, ajv@^8.12.0, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + version "8.14.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.14.0.tgz#f514ddfd4756abb200e1704414963620a625ebbb" + integrity sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" + uri-js "^4.4.1" all-node-versions@^11.3.0: version "11.3.0" @@ -14494,7 +14365,7 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@6.2.0, ansi-escapes@^6.0.0: +ansi-escapes@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== @@ -14520,6 +14391,11 @@ ansi-escapes@^5.0.0: dependencies: type-fest "^1.0.2" +ansi-escapes@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.1.tgz#76c54ce9b081dad39acec4b5d53377913825fb0f" + integrity sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig== + ansi-html-community@0.0.8, ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" @@ -14650,10 +14526,23 @@ archiver-utils@^4.0.1: normalize-path "^3.0.0" readable-stream "^3.6.0" +archiver-utils@^5.0.0, archiver-utils@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-5.0.2.tgz#63bc719d951803efc72cf961a56ef810760dd14d" + integrity sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA== + dependencies: + glob "^10.0.0" + graceful-fs "^4.2.0" + is-stream "^2.0.1" + lazystream "^1.0.0" + lodash "^4.17.15" + normalize-path "^3.0.0" + readable-stream "^4.0.0" + archiver@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-6.0.1.tgz#d56968d4c09df309435adb5a1bbfc370dae48133" - integrity sha512-CXGy4poOLBKptiZH//VlWdFuUC1RESbdZjGjILwBuZ73P7WkAUN0htfSfBq/7k6FRFlpu7bg4JOkj1vU9G6jcQ== + version "6.0.2" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-6.0.2.tgz#f45e7598dfe48e834ac8c7a0c37033f826f5a639" + integrity sha512-UQ/2nW7NMl1G+1UnrLypQw1VdT9XZg/ECcKPq7l+STzStrSivFIXIp34D8M5zeNGW5NoOupdYCHv6VySCPNNlw== dependencies: archiver-utils "^4.0.1" async "^3.2.4" @@ -14663,10 +14552,18 @@ archiver@^6.0.0: tar-stream "^3.0.0" zip-stream "^5.0.1" -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== +archiver@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-7.0.1.tgz#c9d91c350362040b8927379c7aa69c0655122f61" + integrity sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ== + dependencies: + archiver-utils "^5.0.2" + async "^3.2.4" + buffer-crc32 "^1.0.0" + readable-stream "^4.0.0" + readdir-glob "^1.1.2" + tar-stream "^3.0.0" + zip-stream "^6.0.1" are-we-there-yet@^2.0.0: version "2.0.0" @@ -14699,9 +14596,9 @@ argparse@^2.0.1: integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== aria-hidden@^1.1.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.3.tgz#14aeb7fb692bbb72d69bebfa47279c1fd725e954" - integrity sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ== + version "1.2.4" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" + integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== dependencies: tslib "^2.0.0" @@ -14753,14 +14650,15 @@ array-ify@^1.0.0: integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== array-includes@^3.1.6, array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" array-timsort@^1.0.3: @@ -14795,27 +14693,29 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== -array.prototype.filter@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" - integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== +array.prototype.findlast@^1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: version "1.3.2" @@ -14837,7 +14737,17 @@ array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.tosorted@^1.1.1: +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.1, array.prototype.tosorted@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== @@ -14848,7 +14758,7 @@ array.prototype.tosorted@^1.1.1: es-errors "^1.1.0" es-shim-unscopables "^1.0.2" -arraybuffer.prototype.slice@^1.0.2: +arraybuffer.prototype.slice@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== @@ -14882,15 +14792,14 @@ ascii-table@0.0.9: resolved "https://registry.yarnpkg.com/ascii-table/-/ascii-table-0.0.9.tgz#06a6604d6a55d4bf41a9a47d9872d7a78da31e73" integrity sha512-xpkr6sCDIYTPqzvjG8M3ncw1YOTaloWZOyrUmicoEifBEKzQzt+ooUpRpQ/AbOoJfO/p2ZKiyp79qHThzJDulQ== -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== +asn1.js@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" asn1@~0.2.3: version "0.2.6" @@ -14913,7 +14822,7 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== -assert@^2.0.0, assert@^2.1.0: +assert@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== @@ -15022,13 +14931,6 @@ async@~1.5: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -15072,30 +14974,30 @@ autoprefixer@10.4.14: postcss-value-parser "^4.2.0" autoprefixer@^10.4.14, autoprefixer@^10.4.9: - version "10.4.17" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.17.tgz#35cd5695cbbe82f536a50fa025d561b01fdec8be" - integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg== + version "10.4.19" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" + integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== dependencies: - browserslist "^4.22.2" - caniuse-lite "^1.0.30001578" + browserslist "^4.23.0" + caniuse-lite "^1.0.30001599" fraction.js "^4.3.7" normalize-range "^0.1.2" picocolors "^1.0.0" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" - integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" avvio@^8.2.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/avvio/-/avvio-8.3.0.tgz#1e019433d935730b814978a583eefac41a65082f" - integrity sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q== + version "8.3.2" + resolved "https://registry.yarnpkg.com/avvio/-/avvio-8.3.2.tgz#cb5844a612e8421d1f3aef8895ef7fa12f73563f" + integrity sha512-st8e519GWHa/azv8S87mcJvZs4WsgTBjOw/Ih1CP6u+8SZvcOeAYNG6JbsIrAUUJJ7JfmrnOkR8ipDS+u9SIRQ== dependencies: "@fastify/error" "^3.3.0" - archy "^1.0.0" - debug "^4.0.0" fastq "^1.17.1" aws-sign2@~0.7.0: @@ -15104,9 +15006,9 @@ aws-sign2@~0.7.0: integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + version "1.13.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.0.tgz#d9b802e9bb9c248d7be5f7f5ef178dc3684e9dcc" + integrity sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g== axe-core@=4.7.0: version "4.7.0" @@ -15114,16 +15016,16 @@ axe-core@=4.7.0: integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== axe-core@^4.2.0, axe-core@^4.6.2: - version "4.8.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.8.3.tgz#205df863dd9917d5979e9435dab4d47692759051" - integrity sha512-d5ZQHPSPkF9Tw+yfyDcRoUOc4g/8UloJJe5J8m4L5+c7AtDdjDLRxew/knnI4CxvtdxEUVgWz4x3OIQUIFiMfw== + version "4.9.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.9.1.tgz#fcd0f4496dad09e0c899b44f6c4bb7848da912ae" + integrity sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw== axios@^1.0.0, axios@^1.1.3, axios@^1.6.0: - version "1.6.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" - integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + version "1.7.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" + integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== dependencies: - follow-redirects "^1.15.4" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -15135,9 +15037,9 @@ axobject-query@^3.1.1, axobject-query@^3.2.1: dequal "^2.0.3" b4a@^1.0.1, b4a@^1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" - integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== + version "1.6.6" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" + integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== babel-code-frame@^6.26.0: version "6.26.0" @@ -15272,15 +15174,15 @@ babel-plugin-module-extension-resolver@^1.0.0: integrity sha512-TIwNuS8jfdmoyn+tKMM9T6fczI5y6hHbicbCTIF+RyPSNSnQMlZNnCs/pQceOEZ/0qFNbaj5p0LCLG2VS1EF7g== babel-plugin-module-resolver@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz#2b7fc176bd55da25f516abf96015617b4f70fc73" - integrity sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q== + version "5.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz#cdeac5d4aaa3b08dd1ac23ddbf516660ed2d293e" + integrity sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg== dependencies: - find-babel-config "^2.0.0" - glob "^8.0.3" + find-babel-config "^2.1.1" + glob "^9.3.3" pkg-up "^3.1.0" reselect "^4.1.7" - resolve "^1.22.1" + resolve "^1.22.8" babel-plugin-named-exports-order@^0.0.2: version "0.0.2" @@ -15297,21 +15199,12 @@ babel-plugin-polyfill-corejs2@^0.3.3: semver "^6.1.1" babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" - integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.1" - semver "^6.3.1" - -babel-plugin-polyfill-corejs2@^0.4.8: - version "0.4.8" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" - integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.5.0" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: @@ -15330,14 +15223,6 @@ babel-plugin-polyfill-corejs3@^0.6.0: "@babel/helper-define-polyfill-provider" "^0.3.3" core-js-compat "^3.25.1" -babel-plugin-polyfill-corejs3@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" - integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - core-js-compat "^3.34.0" - babel-plugin-polyfill-regenerator@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" @@ -15345,19 +15230,12 @@ babel-plugin-polyfill-regenerator@^0.4.1: dependencies: "@babel/helper-define-polyfill-provider" "^0.3.3" -babel-plugin-polyfill-regenerator@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" - integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" - integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" babel-plugin-preval@^5.1.0: version "5.1.0" @@ -15546,6 +15424,39 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +bare-events@^2.0.0, bare-events@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.2.2.tgz#a98a41841f98b2efe7ecc5c5468814469b018078" + integrity sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ== + +bare-fs@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.0.tgz#0872f8e33cf291c9fd527d827154f156a298d402" + integrity sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw== + dependencies: + bare-events "^2.0.0" + bare-path "^2.0.0" + bare-stream "^1.0.0" + +bare-os@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.3.0.tgz#718e680b139effff0624a7421c098e7a2c2d63da" + integrity sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg== + +bare-path@^2.0.0, bare-path@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.3.tgz#594104c829ef660e43b5589ec8daef7df6cedb3e" + integrity sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA== + dependencies: + bare-os "^2.1.0" + +bare-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-1.0.0.tgz#25c3e56198d922187320c3f8c52d75c4051178b4" + integrity sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ== + dependencies: + streamx "^2.16.1" + base-64@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" @@ -15644,29 +15555,17 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bigint-buffer@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" - integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== - dependencies: - bindings "^1.3.0" - "bignumber.js@^8 || ^9", bignumber.js@^9.0.0: version "9.1.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bind-decorator@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/bind-decorator/-/bind-decorator-1.0.11.tgz#e41bc06a1f65dd9cec476c91c5daf3978488252f" - integrity sha512-yzkH0uog6Vv/vQ9+rhSKxecnqGUZHYncg7qS7voz3Q76+TAi1SGiOKk2mlOvusQnFz9Dc4BC/NMkeXu11YgjJg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -bindings@^1.3.0, bindings@^1.4.0, bindings@^1.5.0: +bindings@^1.4.0, bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== @@ -15746,7 +15645,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.6, bn.js@^4.11.9, bn.js@^4.12.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== @@ -15769,7 +15668,7 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" -body-parser@^1.16.0: +body-parser@1.20.2, body-parser@^1.16.0: version "1.20.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== @@ -15800,15 +15699,6 @@ boolbase@^1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -borsh@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" - integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - boxen@7.1.1, boxen@^7.0.0: version "7.1.1" resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4" @@ -15875,12 +15765,12 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" @@ -15892,7 +15782,7 @@ browser-assert@^1.2.1: resolved "https://registry.yarnpkg.com/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200" integrity sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ== -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: +browserify-aes@^1.0.4, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -15932,18 +15822,19 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e" - integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== + version "4.2.3" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.3.tgz#7afe4c01ec7ee59a89a558a4b75bd85ae62d4208" + integrity sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw== dependencies: bn.js "^5.2.1" browserify-rsa "^4.1.0" create-hash "^1.2.0" create-hmac "^1.1.7" - elliptic "^6.5.4" + elliptic "^6.5.5" + hash-base "~3.0" inherits "^2.0.4" - parse-asn1 "^5.1.6" - readable-stream "^3.6.2" + parse-asn1 "^5.1.7" + readable-stream "^2.3.8" safe-buffer "^5.2.1" browserify-zlib@^0.1.4: @@ -15960,17 +15851,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.21.9, browserslist@^4.22.2: - version "4.22.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" - integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== - dependencies: - caniuse-lite "^1.0.30001580" - electron-to-chromium "^1.4.648" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -browserslist@^4.23.0: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.21.9, browserslist@^4.22.2, browserslist@^4.23.0: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== @@ -15987,7 +15868,7 @@ bs-logger@0.x: dependencies: fast-json-stable-stringify "2.x" -bs58@^4.0.0, bs58@^4.0.1: +bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== @@ -16015,6 +15896,11 @@ buffer-crc32@^0.2.1, buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== +buffer-crc32@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-1.0.0.tgz#a10993b9055081d55304bd9feb4a072de179f405" + integrity sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w== + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -16035,15 +15921,7 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: +buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0, buffer@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -16051,6 +15929,14 @@ buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + bufferutil@4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" @@ -16086,9 +15972,9 @@ builtin-status-codes@^3.0.0: integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== builtins@^5.0.0, builtins@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.1.0.tgz#6d85eeb360c4ebc166c3fdef922a15aa7316a5e8" + integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg== dependencies: semver "^7.0.0" @@ -16206,14 +16092,16 @@ cachedir@^2.3.0: resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsite@^1.0.0: version "1.0.0" @@ -16277,15 +16165,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001580: - version "1.0.30001584" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001584.tgz#5e3ea0625d048d5467670051687655b1f7bf7dfd" - integrity sha512-LOz7CCQ9M1G7OjJOF9/mzmqmj3jE/7VOmrfw6Mgs0E8cjOsbRXQJHsPBfmBOXDskXKrHLyyW3n7kpDW/4BsfpQ== - -caniuse-lite@^1.0.30001587: - version "1.0.30001600" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz#93a3ee17a35aa6a9f0c6ef1b2ab49507d1ab9079" - integrity sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: + version "1.0.30001623" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001623.tgz#e982099dcb229bb6ab35f5aebe2f8d79ccf6e8a8" + integrity sha512-X/XhAVKlpIxWPpgRTnlgZssJrF0m6YtRA0QDWgsBNT12uZM6LPRydR7ip405Y3t1LamD8cP2TZFEDZFBf5ApcA== canvas-renderer@~2.2.0: version "2.2.1" @@ -16486,9 +16369,9 @@ chardet@^0.7.0: integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chart.js@^4.3.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.1.tgz#ac5dc0e69a7758909158a96fe80ce43b3bb96a9f" - integrity sha512-C74QN1bxwV1v2PEujhmKjOZ7iUM4w6BWs23Md/6aOZZSlwMzeCIDGuZay++rBgChYru7/+QFeoQW0fQoP534Dg== + version "4.4.3" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.3.tgz#3b2e11e7010fefa99b07d0349236f5098e5226ad" + integrity sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw== dependencies: "@kurkle/color" "^0.3.0" @@ -16509,7 +16392,7 @@ check-types@^11.2.3: resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.3.tgz#1ffdf68faae4e941fce252840b1787b8edc93b71" integrity sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg== -chokidar@3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.0, chokidar@^3.5.3: +chokidar@3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -16524,6 +16407,21 @@ chokidar@3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.0, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.0, chokidar@^3.5.3, chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^1.1.1, chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -16585,12 +16483,12 @@ circom_runtime@0.1.22: dependencies: ffjavascript "0.2.57" -circom_runtime@0.1.24: - version "0.1.24" - resolved "https://registry.yarnpkg.com/circom_runtime/-/circom_runtime-0.1.24.tgz#60ca8a31c3675802fbab5a0bcdeb02556e510733" - integrity sha512-H7/7I2J/cBmRnZm9docOCGhfxzS61BEm4TMCWcrZGsWNBQhePNfQq88Oj2XpUfzmBTCd8pRvRb3Mvazt3TMrJw== +circom_runtime@0.1.25: + version "0.1.25" + resolved "https://registry.yarnpkg.com/circom_runtime/-/circom_runtime-0.1.25.tgz#62a33b371f4633f30238db7a326c43d988e3a170" + integrity sha512-xBGsBFF5Uv6AKvbpgExYqpHfmfawH2HKe+LyjfKSRevqEV8u63i9KGHVIILsbJNW+0c5bm/66f0PUYQ7qZSkJA== dependencies: - ffjavascript "0.2.60" + ffjavascript "0.3.0" circomlibjs@0.1.7: version "0.1.7" @@ -16613,17 +16511,17 @@ circomlibjs@^0.0.8: web3 "^1.6.0" web3-utils "^1.6.0" -citty@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.5.tgz#fe37ceae5dc764af75eb2fece99d2bf527ea4e50" - integrity sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ== +citty@^0.1.5, citty@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" + integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== dependencies: consola "^3.2.3" cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + version "1.3.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" + integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== class-is@^1.1.0: version "1.1.0" @@ -16722,9 +16620,9 @@ cli-spinners@^2.2.0, cli-spinners@^2.5.0, cli-spinners@^2.6.1: integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-table3@^0.6.1, cli-table3@~0.6.1: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + version "0.6.5" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== dependencies: string-width "^4.2.0" optionalDependencies: @@ -16826,15 +16724,15 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -clsx@^1.1.0: +clsx@^1.1.0, clsx@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== clsx@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" - integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== cluster-key-slot@^1.1.0: version "1.1.2" @@ -17008,7 +16906,7 @@ commander@^4.0.0, commander@^4.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^6.2.1: +commander@^6.2.0, commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== @@ -17073,15 +16971,26 @@ component-emitter@^1.2.1: integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== compress-commons@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-5.0.1.tgz#e46723ebbab41b50309b27a0e0f6f3baed2d6590" - integrity sha512-MPh//1cERdLtqwO3pOFLeXtpuai0Y2WCd5AhtKxznqM7WtaMYaOEMSgn45d9D10sIHSfIKE603HlOp8OPGrvag== + version "5.0.3" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-5.0.3.tgz#36b6572fdfc220c88c9c939b48667818806667e9" + integrity sha512-/UIcLWvwAQyVibgpQDPtfNM3SvqN7G9elAPAV7GM0L53EbNWwWiCsWtK8Fwed/APEbptPHXs5PuW+y8Bq8lFTA== dependencies: crc-32 "^1.2.0" crc32-stream "^5.0.0" normalize-path "^3.0.0" readable-stream "^3.6.0" +compress-commons@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-6.0.2.tgz#26d31251a66b9d6ba23a84064ecd3a6a71d2609e" + integrity sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg== + dependencies: + crc-32 "^1.2.0" + crc32-stream "^6.0.0" + is-stream "^2.0.1" + normalize-path "^3.0.0" + readable-stream "^4.0.0" + compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -17128,6 +17037,11 @@ concordance@5.0.4: semver "^7.3.2" well-known-symbols "^2.0.0" +confbox@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" + integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== + config-chain@^1.1.11: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -17249,32 +17163,31 @@ convert-source-map@^2.0.0: integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== cookie-es@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.0.0.tgz#4759684af168dfc54365b2c2dda0a8d7ee1e4865" - integrity sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.1.0.tgz#68f8d9f48aeb5a534f3896f80e792760d3d20def" + integrity sha512-L2rLOcK0wzWSfSDA33YR+PUHDG10a8px7rUHKWbGLP4YfbsMed2KFUw5fczvDPbT98DDe3LEzviswl810apTEw== cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.5.0, cookie@^0.5.0: +cookie@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -cookie@^0.6.0: +cookie@0.6.0, cookie@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== cookies-next@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/cookies-next/-/cookies-next-4.1.1.tgz#54498efe867bb5c1a47b5a99a7ea8563601c2413" - integrity sha512-20QaN0iQSz87Os0BhNg9M71eM++gylT3N5szTlhq2rK6QvXn1FYGPB4eAgU4qFTunbQKhD35zfQ95ZWgzUy3Cg== + version "4.2.1" + resolved "https://registry.yarnpkg.com/cookies-next/-/cookies-next-4.2.1.tgz#a0c2942afee16f1ffc2bc05a003c7c0cf32deda5" + integrity sha512-qsjtZ8TLlxCSX2JphMQNhkm3V3zIMQ05WrLkBKBwu50npBbBfiZWIdmSMzBGcdGKfMK19E0PIitTfRFAdMGHXg== dependencies: "@types/cookie" "^0.6.0" - "@types/node" "^16.10.2" cookie "^0.6.0" copy-anything@^2.0.1: @@ -17335,24 +17248,17 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.25.1, core-js-compat@^3.31.0, core-js-compat@^3.34.0: - version "3.35.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.35.1.tgz#215247d7edb9e830efa4218ff719beb2803555e2" - integrity sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw== - dependencies: - browserslist "^4.22.2" - -core-js-compat@^3.36.1: - version "3.36.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.1.tgz#1818695d72c99c25d621dca94e6883e190cea3c8" - integrity sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA== +core-js-compat@^3.25.1, core-js-compat@^3.31.0, core-js-compat@^3.36.1: + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" + integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== dependencies: browserslist "^4.23.0" core-js-pure@^3.23.3: - version "3.35.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.35.1.tgz#f33ad7fdf9dddae260339a30e5f8363f5c49a3bc" - integrity sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ== + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.37.1.tgz#2b4b34281f54db06c9a9a5bd60105046900553bd" + integrity sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA== core-js@^2.4.0: version "2.6.12" @@ -17360,9 +17266,9 @@ core-js@^2.4.0: integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.30.2: - version "3.35.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.35.1.tgz#9c28f8b7ccee482796f8590cc8d15739eaaf980c" - integrity sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw== + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.1.tgz#d21751ddb756518ac5a00e4d66499df981a62db9" + integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw== core-util-is@1.0.2: version "1.0.2" @@ -17437,9 +17343,9 @@ cosmiconfig@^8.1.3, cosmiconfig@^8.3.5, cosmiconfig@^8.3.6: path-type "^4.0.0" country-flag-icons@^1.5.5: - version "1.5.9" - resolved "https://registry.yarnpkg.com/country-flag-icons/-/country-flag-icons-1.5.9.tgz#5ee10d9c8c1dcfb031724121b2adecdf166996cd" - integrity sha512-9jrjv2w7kRbqNtdtMdK2j3gmDIZzd5l9L2pZiQjF9J0mUcB+NKIGDNADTDHBEp8EQtjOkCOcciJGGSOpERdXPQ== + version "1.5.11" + resolved "https://registry.yarnpkg.com/country-flag-icons/-/country-flag-icons-1.5.11.tgz#04c0556728e517a6207946656355698ac6237080" + integrity sha512-B+mvFywunkRJs270k7kCBjhogvIA0uNn6GAXv6m2cPn3rrwqZzZVr2gBWcz+Cz7OGVWlcbERlYRIX0S6OGr8Bw== cp-file@^10.0.0: version "10.0.0" @@ -17480,13 +17386,21 @@ crc-32@^1.2.0: integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== crc32-stream@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-5.0.0.tgz#a97d3a802c8687f101c27cc17ca5253327354720" - integrity sha512-B0EPa1UK+qnpBZpG+7FgPCu0J2ETLpXq09o9BkLkEAhdB6Z61Qo4pJ3JYu0c+Qi+/SAL7QThqnzS06pmSSyZaw== + version "5.0.1" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-5.0.1.tgz#bc1581c9a9022a9242605dc91b14e069e3aa87a5" + integrity sha512-lO1dFui+CEUh/ztYIpgpKItKW9Bb4NWakCRJrnqAbFIYD+OZAwb2VfD5T5eXMw2FNcsDHkQcNl/Wh3iVXYwU6g== dependencies: crc-32 "^1.2.0" readable-stream "^3.4.0" +crc32-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-6.0.0.tgz#8529a3868f8b27abb915f6c3617c0fadedbf9430" + integrity sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g== + dependencies: + crc-32 "^1.2.0" + readable-stream "^4.0.0" + create-ecdh@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" @@ -17580,10 +17494,10 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crossws@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.1.1.tgz#3a85a8140568e4828d9747a884171ea7e6a8bbe2" - integrity sha512-c9c/o7bS3OjsdpSkvexpka0JNlesBF2JU9B2V1yNsYGwRbAafxhJQ7VI9b48D5bpONz/oxbPGMzBojy9sXoQIQ== +crossws@^0.2.0, crossws@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.2.4.tgz#82a8b518bff1018ab1d21ced9e35ffbe1681ad03" + integrity sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg== crypto-browserify@^3.12.0: version "3.12.0" @@ -17631,10 +17545,10 @@ css-declaration-sorter@^6.3.1: resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== -css-declaration-sorter@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.1.1.tgz#9796bcc257b4647c39993bda8d431ce32b666f80" - integrity sha512-dZ3bVTEEc1vxr3Bek9vGwfB5Z6ESPULhcRvO472mfjVnj8jRcTnKO8/JTczlvxM10Myb+wBM++1MtdO76eWcaQ== +css-declaration-sorter@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024" + integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== css-has-pseudo@^5.0.2: version "5.0.2" @@ -17667,15 +17581,15 @@ css-loader@6.8.1: semver "^7.3.8" css-loader@^6.4.0, css-loader@^6.7.1, css-loader@^6.7.3: - version "6.10.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.10.0.tgz#7c172b270ec7b833951b52c348861206b184a4b7" - integrity sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw== + version "6.11.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" + integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== dependencies: icss-utils "^5.1.0" postcss "^8.4.33" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.4" - postcss-modules-scope "^3.1.1" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" semver "^7.5.4" @@ -17758,9 +17672,9 @@ css-what@^6.0.1, css-what@^6.1.0: integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssdb@^7.6.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.10.0.tgz#08816db7b793f088263e8f61dfe8d7f11a3459f2" - integrity sha512-yGZ5tmA57gWh/uvdQBHs45wwFY0IBh3ypABk5sEubPBPSzXzkNgsWReqx7gdx6uhC+QoFBe+V8JwBB9/hQ6cIA== + version "7.11.2" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.11.2.tgz#127a2f5b946ee653361a5af5333ea85a39df5ae5" + integrity sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A== cssesc@^3.0.0: version "3.0.0" @@ -17807,50 +17721,51 @@ cssnano-preset-default@^5.2.14: postcss-svgo "^5.1.0" postcss-unique-selectors "^5.1.1" -cssnano-preset-default@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.0.3.tgz#b4ce755974f4dc8d3d09ac13bb6281cce3ced45e" - integrity sha512-4y3H370aZCkT9Ev8P4SO4bZbt+AExeKhh8wTbms/X7OLDo5E7AYUUy6YPxa/uF5Grf+AJwNcCnxKhZynJ6luBA== +cssnano-preset-default@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz#adf4b89b975aa775f2750c89dbaf199bbd9da35e" + integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg== dependencies: - css-declaration-sorter "^7.1.1" - cssnano-utils "^4.0.1" + browserslist "^4.23.0" + css-declaration-sorter "^7.2.0" + cssnano-utils "^4.0.2" postcss-calc "^9.0.1" - postcss-colormin "^6.0.2" - postcss-convert-values "^6.0.2" - postcss-discard-comments "^6.0.1" - postcss-discard-duplicates "^6.0.1" - postcss-discard-empty "^6.0.1" - postcss-discard-overridden "^6.0.1" - postcss-merge-longhand "^6.0.2" - postcss-merge-rules "^6.0.3" - postcss-minify-font-values "^6.0.1" - postcss-minify-gradients "^6.0.1" - postcss-minify-params "^6.0.2" - postcss-minify-selectors "^6.0.2" - postcss-normalize-charset "^6.0.1" - postcss-normalize-display-values "^6.0.1" - postcss-normalize-positions "^6.0.1" - postcss-normalize-repeat-style "^6.0.1" - postcss-normalize-string "^6.0.1" - postcss-normalize-timing-functions "^6.0.1" - postcss-normalize-unicode "^6.0.2" - postcss-normalize-url "^6.0.1" - postcss-normalize-whitespace "^6.0.1" - postcss-ordered-values "^6.0.1" - postcss-reduce-initial "^6.0.2" - postcss-reduce-transforms "^6.0.1" - postcss-svgo "^6.0.2" - postcss-unique-selectors "^6.0.2" + postcss-colormin "^6.1.0" + postcss-convert-values "^6.1.0" + postcss-discard-comments "^6.0.2" + postcss-discard-duplicates "^6.0.3" + postcss-discard-empty "^6.0.3" + postcss-discard-overridden "^6.0.2" + postcss-merge-longhand "^6.0.5" + postcss-merge-rules "^6.1.1" + postcss-minify-font-values "^6.1.0" + postcss-minify-gradients "^6.0.3" + postcss-minify-params "^6.1.0" + postcss-minify-selectors "^6.0.4" + postcss-normalize-charset "^6.0.2" + postcss-normalize-display-values "^6.0.2" + postcss-normalize-positions "^6.0.2" + postcss-normalize-repeat-style "^6.0.2" + postcss-normalize-string "^6.0.2" + postcss-normalize-timing-functions "^6.0.2" + postcss-normalize-unicode "^6.1.0" + postcss-normalize-url "^6.0.2" + postcss-normalize-whitespace "^6.0.2" + postcss-ordered-values "^6.0.2" + postcss-reduce-initial "^6.1.0" + postcss-reduce-transforms "^6.0.2" + postcss-svgo "^6.0.3" + postcss-unique-selectors "^6.0.4" cssnano-utils@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== -cssnano-utils@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.1.tgz#fd18b42f95938bf55ab47967705355d6047bf1da" - integrity sha512-6qQuYDqsGoiXssZ3zct6dcMxiqfT6epy7x4R0TQJadd4LWO3sPR6JH6ZByOvVLoZ6EdwPGgd7+DR1EmX3tiXQQ== +cssnano-utils@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.2.tgz#56f61c126cd0f11f2eef1596239d730d9fceff3c" + integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ== cssnano@^5.0.1: version "5.1.15" @@ -17862,12 +17777,12 @@ cssnano@^5.0.1: yaml "^1.10.2" cssnano@^6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.0.3.tgz#46db972da71aa159437287fb4c6bc9c5d3cc5d93" - integrity sha512-MRq4CIj8pnyZpcI2qs6wswoYoDD1t0aL28n+41c1Ukcpm56m1h6mCexIHBGjfZfnTqtGSSCP4/fB1ovxgjBOiw== + version "6.1.2" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.1.2.tgz#4bd19e505bd37ee7cf0dc902d3d869f6d79c66b8" + integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA== dependencies: - cssnano-preset-default "^6.0.3" - lilconfig "^3.0.0" + cssnano-preset-default "^6.1.2" + lilconfig "^3.1.1" csso@^4.2.0: version "4.2.0" @@ -17914,12 +17829,7 @@ cssstyle@^4.0.1: dependencies: rrweb-cssom "^0.6.0" -csstype@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -csstype@^3.0.2, csstype@^3.1.2: +csstype@3.1.3, csstype@^3.0.2, csstype@^3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== @@ -17930,9 +17840,9 @@ cyclist@^1.0.1: integrity sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA== cypress@^13.0.0: - version "13.6.4" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.6.4.tgz#42c88d3ee0342f1681abfacabf9c1f082676bc53" - integrity sha512-pYJjCfDYB+hoOoZuhysbbYhEmNW7DEDsqn+ToCLwuVowxUXppIWRr7qk4TVRIU471ksfzyZcH+mkoF0CQUKnpw== + version "13.10.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.10.0.tgz#0cfdb54eb046a30c78998e41effb635a50326935" + integrity sha512-tOhwRlurVOQbMduX+KonoMeQILs2cwR3yHGGENoFvvSoLUBHmJ8b9/n21gFSDqjlOJ+SRVcwuh+fG/JDsHsT6Q== dependencies: "@cypress/request" "^3.0.0" "@cypress/xvfb" "^1.2.4" @@ -17941,7 +17851,7 @@ cypress@^13.0.0: arch "^2.2.0" blob-util "^2.0.2" bluebird "^3.7.2" - buffer "^5.6.0" + buffer "^5.7.1" cachedir "^2.3.0" chalk "^4.1.0" check-more-types "^2.24.0" @@ -17959,7 +17869,7 @@ cypress@^13.0.0: figures "^3.2.0" fs-extra "^9.1.0" getos "^3.2.1" - is-ci "^3.0.0" + is-ci "^3.0.1" is-installed-globally "~0.4.0" lazy-ass "^1.6.0" listr2 "^3.8.3" @@ -18048,13 +17958,13 @@ d3-timer@^3.0.1: resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== +d@1, d@^1.0.1, d@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" + integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== dependencies: - es5-ext "^0.10.50" - type "^1.0.1" + es5-ext "^0.10.64" + type "^2.7.2" damerau-levenshtein@^1.0.8: version "1.0.8" @@ -18104,15 +18014,42 @@ data-urls@^5.0.0: whatwg-mimetype "^4.0.0" whatwg-url "^14.0.0" +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + dataloader@2.2.2, dataloader@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0" integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g== date-fns-tz@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-2.0.0.tgz#1b14c386cb8bc16fc56fe333d4fc34ae1d1099d5" - integrity sha512-OAtcLdB9vxSXTWHdT8b398ARImVwQMyjfYGkKD2zaGpHseG2UPHbHjXELReErZFxWdSLph3c2zOaaTyHfOhERQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-2.0.1.tgz#0a9b2099031c0d74120b45de9fd23192e48ea495" + integrity sha512-fJCG3Pwx8HUoLhkepdsP7Z5RsucUi+ZBOxyM5d0ZZ6c4SdYustq0VMmOu6Wf7bli+yS/Jwp91TOCqn9jMcVrUA== date-fns@^1.27.2: version "1.30.1" @@ -18133,16 +18070,16 @@ date-time@^3.1.0: dependencies: time-zone "^1.0.0" +dayjs@1.11.11, dayjs@^1.10.4: + version "1.11.11" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e" + integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg== + dayjs@1.11.7: version "1.11.7" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== -dayjs@^1.10.4: - version "1.11.10" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" - integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== - debounce@^1.2.0, debounce@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" @@ -18241,9 +18178,9 @@ dedent@^0.7.0: integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== deep-eql@^4.1.3: version "4.1.3" @@ -18323,14 +18260,14 @@ defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" define-lazy-prop@^2.0.0: version "2.0.0" @@ -18387,11 +18324,6 @@ del@^6.0.0: rimraf "^3.0.2" slash "^3.0.0" -delay@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" - integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -18456,10 +18388,10 @@ destr@^1.1.1: resolved "https://registry.yarnpkg.com/destr/-/destr-1.2.2.tgz#7ba9befcafb645a50e76b260449c63927b51e22f" integrity sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA== -destr@^2.0.1, destr@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.2.tgz#8d3c0ee4ec0a76df54bc8b819bca215592a8c218" - integrity sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg== +destr@^2.0.1, destr@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.3.tgz#7f9e97cb3d16dbdca7be52aca1644ce402cfe449" + integrity sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ== destroy@1.2.0: version "1.2.0" @@ -18482,9 +18414,9 @@ detect-libc@^1.0.3: integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== detect-libc@^2.0.0, detect-libc@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== detect-newline@^3.0.0: version "3.1.0" @@ -18509,9 +18441,9 @@ detect-package-manager@^2.0.1: execa "^5.1.1" detect-port@^1.3.0, detect-port@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" - integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== + version "1.6.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67" + integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q== dependencies: address "^1.0.1" debug "4" @@ -18688,14 +18620,14 @@ detective-stylus@^4.0.0: integrity sha512-TfPotjhszKLgFBzBhTOxNHDsutIxx9GTWjrL5Wh7Qx/ydxKhwUrlSFeLIn+ZaHPF+h0siVBkAQSuy6CADyTxgQ== detective-typescript@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-11.1.0.tgz#2deea5364cae1f0d9d3688bc596e662b049438cc" - integrity sha512-Mq8egjnW2NSCkzEb/Az15/JnBI/Ryyl6Po0Y+0mABTFvOS6DAyUGRZqz1nyhu4QJmWWe0zaGs/ITIBeWkvCkGw== + version "11.2.0" + resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-11.2.0.tgz#5b1450b518cb84b6cfb98ea72d5edd9660668e1b" + integrity sha512-ARFxjzizOhPqs1fYC/2NMC3N4jrQ6HvVflnXBTRqNEqJuXwyKLRr9CrJwkRcV/SnZt1sNXgsF6FPm0x57Tq0rw== dependencies: - "@typescript-eslint/typescript-estree" "^5.59.5" + "@typescript-eslint/typescript-estree" "^5.62.0" ast-module-types "^5.0.0" - node-source-walk "^6.0.1" - typescript "^5.0.4" + node-source-walk "^6.0.2" + typescript "^5.4.4" detective-typescript@^7.0.0: version "7.0.2" @@ -18730,9 +18662,9 @@ dexie-react-hooks@^1.1.7: integrity sha512-Lwv5W0Hk+uOW3kGnsU9GZoR1er1B7WQ5DSdonoNG+focTNeJbHW6vi6nBoX534VKI3/uwHebYzSw1fwY6a7mTw== dexie@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/dexie/-/dexie-3.2.4.tgz#b22a9729be1102acb2eee16102ea6e2bc76454cf" - integrity sha512-VKoTQRSv7+RnffpOJ3Dh6ozknBqzWw/F3iqMdsZg958R0AS8AnY9x9d1lbwENr0gzeGJHXKcGhAMRaqys6SxqA== + version "3.2.7" + resolved "https://registry.yarnpkg.com/dexie/-/dexie-3.2.7.tgz#1346541c9c81e3bc6055a042a928837890595e3a" + integrity sha512-2a+BXvVhY5op+smDRLxeBAivE7YcYaneXJ1la3HOkUfX9zKkE/AJ8CNgjiXbtXepFyFmJNGSbmjOwqbT749r/w== didyoumean@^1.2.2: version "1.2.2" @@ -18749,10 +18681,10 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== +diff@^5.0.0, diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== diffie-hellman@^5.0.0: version "5.0.3" @@ -18821,12 +18753,13 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" -dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== +dom-helpers@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: - "@babel/runtime" "^7.1.2" + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" dom-serializer@^1.0.1: version "1.4.1" @@ -18935,9 +18868,9 @@ dotenv@16.0.3: integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== dotenv@^16.0.0, dotenv@^16.0.3, dotenv@^16.3.1: - version "16.4.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.1.tgz#1d9931f1d3e5d2959350d1250efab299561f7f11" - integrity sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ== + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== dotenv@~16.3.1: version "16.3.2" @@ -18970,14 +18903,14 @@ duplexify@^3.5.0, duplexify@^3.6.0: stream-shift "^1.0.0" duplexify@^4.1.1, duplexify@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + version "4.1.3" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" + integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== dependencies: end-of-stream "^1.4.1" inherits "^2.0.3" readable-stream "^3.1.1" - stream-shift "^1.0.0" + stream-shift "^1.0.2" eastasianwidth@^0.2.0: version "0.2.0" @@ -19013,29 +18946,24 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@^3.1.6, ejs@^3.1.7, ejs@^3.1.8: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== +ejs@^3.1.10, ejs@^3.1.6, ejs@^3.1.7, ejs@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.648: - version "1.4.657" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.657.tgz#8a07ee3faa552976970843a80a1c94088ea59c9a" - integrity sha512-On2ymeleg6QbRuDk7wNgDdXtNqlJLM2w4Agx1D/RiTmItiL+a9oq5p7HUa2ZtkAtGBe/kil2dq/7rPfkbe0r5w== - electron-to-chromium@^1.4.668: - version "1.4.715" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz#bb16bcf2a3537962fccfa746b5c98c5f7404ff46" - integrity sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg== + version "1.4.783" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.783.tgz#933887165b8b6025a81663d2d97cf4b85cde27b2" + integrity sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ== elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ== -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: +elliptic@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -19048,7 +18976,7 @@ elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -elliptic@^6.5.2, elliptic@^6.5.5: +elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4, elliptic@^6.5.5: version "6.5.5" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== @@ -19130,9 +19058,9 @@ endent@^2.0.1: objectorarray "^1.0.5" enhanced-resolve@^5.0.0, enhanced-resolve@^5.12.0, enhanced-resolve@^5.15.0, enhanced-resolve@^5.7.0, enhanced-resolve@^5.8.3: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + version "5.16.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567" + integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -19173,9 +19101,9 @@ envinfo@7.8.1: integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== envinfo@^7.7.3: - version "7.11.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.1.tgz#2ffef77591057081b0129a8fd8cf6118da1b94e1" - integrity sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg== + version "7.13.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== errno@^0.1.1: version "0.1.8" @@ -19213,57 +19141,66 @@ error@^7.0.0: dependencies: string-template "~0.2.1" -es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" - is-typed-array "^1.1.12" + is-typed-array "^1.1.13" is-weakref "^1.0.2" object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" + which-typed-array "^1.1.15" -es-array-method-boxes-properly@^1.0.0: +es-define-property@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" -es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1: +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== @@ -19283,39 +19220,46 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: - version "1.0.15" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" - integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== +es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17: + version "1.0.19" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" + integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - internal-slot "^1.0.5" + internal-slot "^1.0.7" iterator.prototype "^1.1.2" - safe-array-concat "^1.0.1" + safe-array-concat "^1.1.2" es-module-lexer@^1.0.0, es-module-lexer@^1.2.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== + version "1.5.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.3.tgz#25969419de9c0b1fbe54279789023e8a9a788412" + integrity sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg== -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" @@ -19333,13 +19277,14 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== +es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.63, es5-ext@^0.10.64, es5-ext@~0.10.14: + version "0.10.64" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== dependencies: es6-iterator "^2.0.3" es6-symbol "^3.1.3" + esniff "^2.0.1" next-tick "^1.1.0" es6-iterator@^2.0.3: @@ -19351,30 +19296,23 @@ es6-iterator@^2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.0.3, es6-promise@^4.2.8: +es6-promise@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== - dependencies: - es6-promise "^4.0.3" - es6-promisify@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-6.1.1.tgz#46837651b7b06bf6fff893d03f29393668d01621" integrity sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg== es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + version "3.1.4" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" + integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== dependencies: - d "^1.0.1" - ext "^1.1.2" + d "^1.0.2" + ext "^1.7.0" esbuild-plugin-alias@^0.2.1: version "0.2.1" @@ -19502,7 +19440,7 @@ esbuild@^0.18.0: "@esbuild/win32-ia32" "0.20.2" "@esbuild/win32-x64" "0.20.2" -escalade@^3.1.1: +escalade@^3.1.1, escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== @@ -19573,13 +19511,13 @@ eslint-compat-utils@^0.5.0: semver "^7.5.4" eslint-config-next@^14.0.3: - version "14.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.0.tgz#7e309d426b8afacaba3b32fdbb02ba220b6d0a97" - integrity sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg== + version "14.2.3" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.2.3.tgz#2fb0f7c4eccda530a4b5054438162b2303786d4f" + integrity sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg== dependencies: - "@next/eslint-plugin-next" "14.1.0" + "@next/eslint-plugin-next" "14.2.3" "@rushstack/eslint-patch" "^1.3.3" - "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0" eslint-import-resolver-node "^0.3.6" eslint-import-resolver-typescript "^3.5.2" eslint-plugin-import "^2.28.1" @@ -19620,9 +19558,9 @@ eslint-import-resolver-typescript@^3.5.2, eslint-import-resolver-typescript@^3.6 is-glob "^4.0.3" eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" @@ -19673,12 +19611,7 @@ eslint-plugin-header@^3.1.1: resolved "https://registry.yarnpkg.com/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz#6ce512432d57675265fac47292b50d1eff11acd6" integrity sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg== -eslint-plugin-import-newlines@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-import-newlines/-/eslint-plugin-import-newlines-1.3.4.tgz#c3917ae478b1dcce2a920637eaa8af001b8e1477" - integrity sha512-Lmf/BbK+EQKUfjKPcZpslE/KTGYlgaI8ZJ/sYzdbb3BVTg5+GmLBLHBjsUKNEVRM1SEhDTF/didtOSYKi4tSnQ== - -eslint-plugin-import-newlines@^1.3.4: +eslint-plugin-import-newlines@^1.3.1, eslint-plugin-import-newlines@^1.3.4: version "1.4.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import-newlines/-/eslint-plugin-import-newlines-1.4.0.tgz#469cf3ebb5a8691ba827bdceb00e751bf2f084d1" integrity sha512-+Cz1x2xBLtI9gJbmuYEpvY7F8K75wskBmJ7rk4VRObIJo+jklUJaejFJgtnWeL0dCFWabGEkhausrikXaNbtoQ== @@ -19727,14 +19660,7 @@ eslint-plugin-import@^2.27.5, eslint-plugin-import@^2.28.1, eslint-plugin-import semver "^6.3.1" tsconfig-paths "^3.15.0" -eslint-plugin-jest@^27.2.1: - version "27.6.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.6.3.tgz#8acb8b1e45597fe1f4d4cf25163d90119efc12be" - integrity sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA== - dependencies: - "@typescript-eslint/utils" "^5.10.0" - -eslint-plugin-jest@^27.6.3: +eslint-plugin-jest@^27.2.1, eslint-plugin-jest@^27.6.3: version "27.9.0" resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== @@ -19826,16 +19752,21 @@ eslint-plugin-neverthrow@^1.1.4: tsutils "3.21.0" eslint-plugin-promise@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" - integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + version "6.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz#e24ab0e3c0a25fa227d98d9ff612156b5af15945" + integrity sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA== -eslint-plugin-react-hooks@4.6.0, "eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705", eslint-plugin-react-hooks@^4.6.0: +eslint-plugin-react-hooks@4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@7.33.2, eslint-plugin-react@^7.32.2, eslint-plugin-react@^7.33.2: +"eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705", eslint-plugin-react-hooks@^4.6.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== + +eslint-plugin-react@7.33.2: version "7.33.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== @@ -19857,15 +19788,39 @@ eslint-plugin-react@7.33.2, eslint-plugin-react@^7.32.2, eslint-plugin-react@^7. semver "^6.3.1" string.prototype.matchall "^4.0.8" +eslint-plugin-react@^7.32.2, eslint-plugin-react@^7.33.2: + version "7.34.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" + integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" + doctrine "^2.1.0" + es-iterator-helpers "^1.0.17" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.10" + eslint-plugin-simple-import-sort@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz#cc4ceaa81ba73252427062705b64321946f61351" integrity sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw== eslint-plugin-sort-destructure-keys@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-1.5.0.tgz#dc45ff119b6886d4e72d3e0ff8a528af83b89388" - integrity sha512-xGLyqHtbFXZNXQSvAiQ4ISBYokrbUywEhmaA50fKtSKgceCv5y3zjoNuZwcnajdM6q29Nxj+oXC9KcqfMsAPrg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-1.6.0.tgz#237837aebf7cd4a6780b5a06331a66bb0832631d" + integrity sha512-cdjR/+D6RlMSgOcDA48nXOF5S+fMKhVFgJs9n59PZVH7dv5xzeCReujM9Qkwcz4jiHt5GPti5wjCJpM58CMmkg== dependencies: natural-compare-lite "^1.4.0" @@ -19890,9 +19845,9 @@ eslint-plugin-storybook@^0.6.13: ts-dedent "^2.2.0" eslint-plugin-unused-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz#d25175b0072ff16a91892c3aa72a09ca3a9e69e7" - integrity sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.2.0.tgz#63a98c9ad5f622cd9f830f70bc77739f25ccfe0d" + integrity sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ== dependencies: eslint-rule-composer "^0.3.0" @@ -19989,51 +19944,7 @@ eslint@8.46.0: strip-ansi "^6.0.1" text-table "^0.2.0" -eslint@^8.0.0, eslint@^8.38.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -eslint@^8.56.0: +eslint@^8.38.0, eslint@^8.56.0: version "8.57.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== @@ -20077,6 +19988,16 @@ eslint@^8.56.0: strip-ansi "^6.0.1" text-table "^0.2.0" +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + espree@^6.1.2: version "6.2.1" resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" @@ -20168,13 +20089,14 @@ etag@1.8.1, etag@^1.8.1, etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -eth-block-tracker@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-6.1.0.tgz#0481f97bbb88a100b9d45806fe7e37af741cbefc" - integrity sha512-K9SY8+/xMBi4M5HHTDdxnpEqEEGjbNpzHFqvxyjMZej8InV/B+CkFRKM6W+uvrFJ7m8Zd1E0qUkseU3vdIDFYQ== +eth-block-tracker@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-7.1.0.tgz#dfc16085c6817cc30caabba381deb8d204c1c766" + integrity sha512-8YdplnuE1IK4xfqpf4iU7oBxnOYAc35934o083G8ao+8WM8QQtt/mVlAY6yIAdY1eMeLqg4Z//PZjJGmWGPMRg== dependencies: - "@metamask/safe-event-emitter" "^2.0.0" - "@metamask/utils" "^3.0.1" + "@metamask/eth-json-rpc-provider" "^1.0.0" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^5.0.1" json-rpc-random-id "^1.0.1" pify "^3.0.0" @@ -20186,12 +20108,12 @@ eth-ens-namehash@2.0.8: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" -eth-json-rpc-filters@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-5.1.0.tgz#f0c2aeaec2a45e2dc6ca1b9843d8e85447821427" - integrity sha512-fos+9xmoa1A2Ytsc9eYof17r81BjdJOUcGcgZn4K/tKdCCTb+a8ytEtwlu1op5qsXFDlgGmstTELFrDEc89qEQ== +eth-json-rpc-filters@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-6.0.1.tgz#0b3e370f017f5c6f58d3e7bd0756d8099ed85c56" + integrity sha512-ITJTvqoCw6OVMLs7pI8f4gG92n/St6x80ACtHodeS+IXmO0w+t1T5OOzfSt7KLSMLRkVUoexV7tztLgDxg+iig== dependencies: - "@metamask/safe-event-emitter" "^2.0.0" + "@metamask/safe-event-emitter" "^3.0.0" async-mutex "^0.2.6" eth-query "^2.1.2" json-rpc-engine "^6.1.0" @@ -20226,13 +20148,6 @@ eth-query@^2.1.2: json-rpc-random-id "^1.0.0" xtend "^4.0.1" -eth-rpc-errors@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.2.tgz#11bc164e25237a679061ac05b7da7537b673d3b7" - integrity sha512-n+Re6Gu8XGyfFy1it0AwbD1x0MUzspQs0D5UiPs1fFPCr6WAwZM+vbIhXheBFrpgosqN9bs5PqlB4Q61U/QytQ== - dependencies: - fast-safe-stringify "^2.0.6" - eth-rpc-errors@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz#6ddb6190a4bf360afda82790bb7d9d5e724f423a" @@ -20248,11 +20163,11 @@ ethereum-blockies-base64@^1.0.2: pnglib "0.0.1" ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz#b3fc1eb789509ee30db0bf99a2988ccacb8d0397" + integrity sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw== dependencies: - js-sha3 "^0.8.0" + "@noble/hashes" "^1.4.0" ethereum-cryptography@^0.1.3: version "0.1.3" @@ -20420,6 +20335,14 @@ ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" @@ -20571,7 +20494,7 @@ express-logging@1.1.1: dependencies: on-headers "^1.0.0" -express@4.18.2, express@^4.14.0, express@^4.17.3: +express@4.18.2: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== @@ -20608,6 +20531,43 @@ express@4.18.2, express@^4.14.0, express@^4.17.3: utils-merge "1.0.1" vary "~1.1.2" +express@^4.14.0, express@^4.17.3: + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.6.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + ext-list@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" @@ -20623,7 +20583,7 @@ ext-name@^5.0.0: ext-list "^2.0.0" sort-keys-length "^1.0.0" -ext@^1.1.2: +ext@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== @@ -20699,11 +20659,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== -eyes@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== - fast-content-type-parse@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz#4087162bf5af3294d4726ff29b334f72e3a1092c" @@ -20729,7 +20684,7 @@ fast-equals@^3.0.1: resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-3.0.3.tgz#8e6cb4e51ca1018d87dd41982ef92758b3e4197f" integrity sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg== -fast-equals@^5.0.0: +fast-equals@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.0.1.tgz#a4eefe3c5d1c0d021aeed0bc10ba5e0c12ee405d" integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ== @@ -20771,14 +20726,23 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-sta resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-json-stringify@^5.7.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.12.0.tgz#e9f77dc0b4face74351320c3618f1d869de5cb18" - integrity sha512-7Nnm9UPa7SfHRbHVA1kJQrGXCRzB7LMlAAqHXQFkEQqueJm1V8owm0FsE/2Do55/4CcdhwiLQERaKomOnKQkyA== +fast-json-stringify@^1.21.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-1.21.0.tgz#51bc8c6d77d8c7b2cc7e5fa754f7f909f9e1262f" + integrity sha512-xY6gyjmHN3AK1Y15BCbMpeO9+dea5ePVsp3BouHCdukcx0hOHbXwFhRodhcI0NpZIgDChSeAKkHW9YjKvhwKBA== + dependencies: + ajv "^6.11.0" + deepmerge "^4.2.2" + string-similarity "^4.0.1" + +fast-json-stringify@^5.7.0, fast-json-stringify@^5.8.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.16.0.tgz#e35baa9f85a61f81680b2845969f91bd02d1b30e" + integrity sha512-A4bg6E15QrkuVO3f0SwIASgzMzR6XC4qTyTqhf3hYXy0iazbAdZKwkE+ox4WgzKyzM6ygvbdq3r134UjOaaAnA== dependencies: "@fastify/merge-json-schemas" "^0.1.0" ajv "^8.10.0" - ajv-formats "^2.1.1" + ajv-formats "^3.0.1" fast-deep-equal "^3.1.3" fast-uri "^2.1.0" json-schema-ref-resolver "^1.0.1" @@ -20802,9 +20766,9 @@ fast-querystring@^1.0.0, fast-querystring@^1.1.1: fast-decode-uri-component "^1.0.1" fast-redact@^3.0.0, fast-redact@^3.1.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== + version "3.5.0" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" + integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.0.7, fast-safe-stringify@^2.1.1: version "2.1.1" @@ -20821,11 +20785,6 @@ fast-shallow-equal@^1.0.0: resolved "https://registry.yarnpkg.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw== -fast-stable-stringify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" - integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== - fast-uri@^2.0.0, fast-uri@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-2.3.0.tgz#bdae493942483d299e7285dcb4627767d42e2793" @@ -20994,16 +20953,16 @@ ffjavascript@0.2.57: wasmcurves "0.2.0" web-worker "^1.2.0" -ffjavascript@0.2.60: - version "0.2.60" - resolved "https://registry.yarnpkg.com/ffjavascript/-/ffjavascript-0.2.60.tgz#4d8ae613d6bf4e98b3cc29ba10c626f5853854cf" - integrity sha512-T/9bnEL5xAZRDbQoEMf+pM9nrhK+C3JyZNmqiWub26EQorW7Jt+jR54gpqDhceA4Nj0YctPQwYnl8xa52/A26A== +ffjavascript@0.3.0, ffjavascript@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/ffjavascript/-/ffjavascript-0.3.0.tgz#442cd8fbb1ee4cbb1be9d26fd7b2951a1ea45d6a" + integrity sha512-l7sR5kmU3gRwDy8g0Z2tYBXy5ttmafRPFOqY7S6af5cq51JqJWt5eQ/lSR/rs2wQNbDYaYlQr5O+OSUf/oMLoQ== dependencies: wasmbuilder "0.0.16" wasmcurves "0.2.2" - web-worker "^1.2.0" + web-worker "1.2.0" -ffjavascript@0.2.63, ffjavascript@^0.2.38, ffjavascript@^0.2.45, ffjavascript@^0.2.48, ffjavascript@^0.2.57: +ffjavascript@^0.2.38, ffjavascript@^0.2.45, ffjavascript@^0.2.48, ffjavascript@^0.2.57: version "0.2.63" resolved "https://registry.yarnpkg.com/ffjavascript/-/ffjavascript-0.2.63.tgz#0c1216a1f123dc9181df69e144473704d2f115eb" integrity sha512-dBgdsfGks58b66JnUZeZpGxdMIDQ4QsD3VYlRJyFVrKQHb2kJy4R2gufx5oetrTxXPT+aEjg0dOvOLg1N0on4A== @@ -21158,10 +21117,10 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -21193,12 +21152,12 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-babel-config@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.0.0.tgz#a8216f825415a839d0f23f4d18338a1cc966f701" - integrity sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw== +find-babel-config@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.1.1.tgz#93703fc8e068db5e4c57592900c5715dd04b7e5b" + integrity sha512-5Ji+EAysHGe1OipH7GN4qDjok5Z1uw5KAwDCbicU/4wyTZY7CqOCzcWbG7J5ad9mazq67k89fXlbc1MuIfl9uA== dependencies: - json5 "^2.1.1" + json5 "^2.2.3" path-exists "^4.0.0" find-cache-dir@^2.0.0: @@ -21287,9 +21246,9 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== flatten@^1.0.2: version "1.0.3" @@ -21297,9 +21256,9 @@ flatten@^1.0.2: integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== flow-parser@0.*: - version "0.228.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.228.0.tgz#0b801507c8cf44257338596b49bd0904caea2026" - integrity sha512-xPWkzCO07AnS8X+fQFpWm+tJ+C7aeaiVzJ+rSepbkCXUvUJ6l6squEl63axoMcixyH4wLjmypOzq/+zTD0O93w== + version "0.236.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.236.0.tgz#8e8e6c59ff7e8d196c0ed215b3919320a1c6e332" + integrity sha512-0OEk9Gr+Yj7wjDW2KgaNYUypKau71jAfFyeLQF5iVtxqc6uJHag/MT7pmaEApf4qM7u86DkBcd4ualddYMfbLw== flush-write-stream@2.0.0: version "2.0.0" @@ -21321,10 +21280,10 @@ folder-walker@3.2.0: dependencies: from2 "^2.1.0" -follow-redirects@^1.0.0, follow-redirects@^1.15.2, follow-redirects@^1.15.4: - version "1.15.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== +follow-redirects@^1.0.0, follow-redirects@^1.15.2, follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== for-each@^0.3.3: version "0.3.3" @@ -21561,9 +21520,9 @@ fs-minipass@^2.0.0: minipass "^3.0.0" fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== + version "1.0.6" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" + integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== fs-readdir-recursive@^1.1.0: version "1.1.0" @@ -21580,7 +21539,7 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1, function-bind@^1.1.2: +function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== @@ -21635,9 +21594,9 @@ gauge@^3.0.0: wide-align "^1.1.2" gauge@^v5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" - integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== + version "5.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.2.tgz#7ab44c11181da9766333f10db8cd1e4b17fd6c46" + integrity sha512-pMaFftXPtiGIHCJHdcUUx9Rby/rFT/Kkt3fIIGCs+9PMDIljSyRiqraTlxNtBReJRDfUefpa263RQ3vnp5G/LQ== dependencies: aproba "^1.0.3 || ^2.0.0" color-support "^1.1.3" @@ -21648,6 +21607,13 @@ gauge@^v5.0.0: strip-ansi "^6.0.1" wide-align "^1.1.5" +generate-function@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + generic-names@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-4.0.0.tgz#0bd8a2fd23fe8ea16cbd0a279acd69c06933d9a3" @@ -21694,12 +21660,12 @@ get-func-name@^2.0.1, get-func-name@^2.0.2: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.3.tgz#9d2d284a238e62672f556361e7d4e1a4686ae50e" - integrity sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - es-errors "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -21769,25 +21735,19 @@ get-stream@^8.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-tsconfig@^4.5.0: - version "4.7.2" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" - integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - resolve-pkg-maps "^1.0.0" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" -get-tsconfig@^4.7.0: - version "4.7.3" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83" - integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg== +get-tsconfig@^4.5.0, get-tsconfig@^4.7.0: + version "4.7.5" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" + integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw== dependencies: resolve-pkg-maps "^1.0.0" @@ -21885,17 +21845,17 @@ ghauth@^5.0.0: read "^1.0.7" giget@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/giget/-/giget-1.2.1.tgz#4f42779aae57a5f664a1c4d50401b008e9810f4c" - integrity sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g== + version "1.2.3" + resolved "https://registry.yarnpkg.com/giget/-/giget-1.2.3.tgz#ef6845d1140e89adad595f7f3bb60aa31c672cb6" + integrity sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA== dependencies: - citty "^0.1.5" + citty "^0.1.6" consola "^3.2.3" - defu "^6.1.3" - node-fetch-native "^1.6.1" - nypm "^0.3.3" + defu "^6.1.4" + node-fetch-native "^1.6.3" + nypm "^0.3.8" ohash "^1.1.3" - pathe "^1.1.1" + pathe "^1.1.2" tar "^6.2.0" git-raw-commits@^2.0.11: @@ -21969,7 +21929,7 @@ glob2base@^0.0.12: dependencies: find-index "^0.1.1" -glob@10.3.10, glob@^10.0.0, glob@^10.3.10, glob@^10.3.7: +glob@10.3.10: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -21992,6 +21952,17 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^10.0.0, glob@^10.3.10, glob@^10.3.7: + version "10.4.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.1.tgz#0cfb01ab6a6b438177bfe6a58e2576f6efe909c2" + integrity sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + path-scurry "^1.11.1" + glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -22015,6 +21986,16 @@ glob@^8.0.0, glob@^8.0.1, glob@^8.0.3: minimatch "^5.0.1" once "^1.3.0" +glob@^9.3.3: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + global-cache-dir@^4.3.1: version "4.4.0" resolved "https://registry.yarnpkg.com/global-cache-dir/-/global-cache-dir-4.4.0.tgz#8921295d32abe0f7768e96acdf7f40a9874050b7" @@ -22063,11 +22044,12 @@ globals@^9.18.0: integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" globalyzer@0.1.0: version "0.1.0" @@ -22123,6 +22105,18 @@ globby@^13.0.0, globby@^13.1.1: merge2 "^1.4.1" slash "^4.0.0" +globby@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.1.tgz#a1b44841aa7f4c6d8af2bc39951109d77301959b" + integrity sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ== + dependencies: + "@sindresorhus/merge-streams" "^2.1.0" + fast-glob "^3.3.2" + ignore "^5.2.4" + path-type "^5.0.0" + slash "^5.1.0" + unicorn-magic "^0.1.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -22265,6 +22259,31 @@ graphql-import-node@^0.0.5: resolved "https://registry.yarnpkg.com/graphql-import-node/-/graphql-import-node-0.0.5.tgz#caf76a6cece10858b14f27cce935655398fc1bf0" integrity sha512-OXbou9fqh9/Lm7vwXT0XoRN9J5+WCYKnbiTalgFDvkQERITRmcfncZs6aVABedd5B85yQU5EULS4a5pnbpuI0Q== +graphql-jit@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/graphql-jit/-/graphql-jit-0.8.2.tgz#384676573bab3a7bad6ba785afa06b6310c5e843" + integrity sha512-P9KtM/UY4JTtHVRqRlZzFXPmDEtps1Bd27Mvj/naQIa5d0j83zPxAx4jewq1wueF3UEZu1JFZwX1XVBBkoo1Mg== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + fast-json-stringify "^1.21.0" + generate-function "^2.3.1" + json-schema "^0.4.0" + lodash.memoize "^4.1.2" + lodash.merge "4.6.2" + lodash.mergewith "4.6.2" + +graphql-jit@0.8.6: + version "0.8.6" + resolved "https://registry.yarnpkg.com/graphql-jit/-/graphql-jit-0.8.6.tgz#c8bf91842670cd3153e09f789884c2192d0e770c" + integrity sha512-oVJteh/uYDpIA/M4UHrI+DmzPnX1zTD0a7Je++JA8q8P68L/KbuepimDyrT5FhL4HAq3filUxaFvfsL6/A4msw== + dependencies: + "@graphql-typed-document-node/core" "^3.2.0" + fast-json-stringify "^5.8.0" + generate-function "^2.3.1" + lodash.memoize "^4.1.2" + lodash.merge "4.6.2" + lodash.mergewith "4.6.2" + graphql-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-6.1.0.tgz#f4eb2107967af3c7a5907eb3131c671eac89be4f" @@ -22286,9 +22305,9 @@ graphql-ws@5.12.1: integrity sha512-umt4f5NnMK46ChM2coO36PTFhHouBrK9stWWBczERguwYrGnPNxJ9dimU6IyOBfOkC6Izhkg4H8+F51W/8CYDg== graphql-ws@^5.12.1: - version "5.14.3" - resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.14.3.tgz#fb1fba011a0ae9c4e86d831cae2ec27955168b9a" - integrity sha512-F/i2xNIVbaEF2xWggID0X/UZQa2V8kqKDPO8hwmu53bVOcTL7uNkxnexeEgSCVxYBQUTUNEI8+e4LO1FOhKPKQ== + version "5.16.0" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.16.0.tgz#849efe02f384b4332109329be01d74c345842729" + integrity sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A== graphql-yoga@^3.9.1: version "3.9.1" @@ -22308,6 +22327,23 @@ graphql-yoga@^3.9.1: lru-cache "^7.14.1" tslib "^2.3.1" +graphql-yoga@^5.3.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/graphql-yoga/-/graphql-yoga-5.3.1.tgz#8d6385f97e4f1b1921f344653a6b57482cd7abdc" + integrity sha512-n918QV6TF7xTjb9ASnozgsr4ydMc08c+x4eRAWKxxWVwSnzdP2xeN2zw1ljIzRD0ccSCNoBajGDKwcZkJDitPA== + dependencies: + "@envelop/core" "^5.0.0" + "@graphql-tools/executor" "^1.2.5" + "@graphql-tools/schema" "^10.0.0" + "@graphql-tools/utils" "^10.1.0" + "@graphql-yoga/logger" "^2.0.0" + "@graphql-yoga/subscription" "^5.0.0" + "@whatwg-node/fetch" "^0.9.17" + "@whatwg-node/server" "^0.9.33" + dset "^3.1.1" + lru-cache "^10.0.0" + tslib "^2.5.2" + graphql@^16.6.0: version "16.8.1" resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" @@ -22332,18 +22368,19 @@ gzip-size@^6.0.0: dependencies: duplexer "^0.1.2" -h3@^1.10.1, h3@^1.7.1, h3@^1.8.2: - version "1.10.1" - resolved "https://registry.yarnpkg.com/h3/-/h3-1.10.1.tgz#221634ca9bdb216a6b359bd2915be466a179b8a1" - integrity sha512-UBAUp47hmm4BB5/njB4LrEa9gpuvZj4/Qf/ynSMzO6Ku2RXaouxEfiG2E2IFnv6fxbhAkzjasDxmo6DFdEeXRg== +h3@^1.10.2, h3@^1.11.1, h3@^1.7.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/h3/-/h3-1.11.1.tgz#e9414ae6f2a076a345ea07256b320edb29bab9f7" + integrity sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A== dependencies: cookie-es "^1.0.0" + crossws "^0.2.2" defu "^6.1.4" - destr "^2.0.2" + destr "^2.0.3" iron-webcrypto "^1.0.0" ohash "^1.1.3" radix3 "^1.1.0" - ufo "^1.3.2" + ufo "^1.4.0" uncrypto "^0.1.3" unenv "^1.9.0" @@ -22414,24 +22451,24 @@ has-own-prop@^2.0.0: resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af" integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -22505,6 +22542,14 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" +hash-base@~3.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + hash-it@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/hash-it/-/hash-it-6.0.0.tgz#188df5a8ca2f8e036690e35f2ef88bd9417ff334" @@ -22526,10 +22571,10 @@ hasha@5.2.2: is-stream "^2.0.0" type-fest "^0.8.0" -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" @@ -22560,9 +22605,9 @@ hast-util-parse-selector@^4.0.0: "@types/hast" "^3.0.0" hast-util-raw@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.0.2.tgz#39b4a4886bd9f0a5dd42e86d02c966c2c152884c" - integrity sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA== + version "9.0.3" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.0.3.tgz#87ad66bdd7b1ceb166452bdab7dfb3e9ba640419" + integrity sha512-ICWvVOF2fq4+7CMmtCPD5CM4QKjPbHpPotE6+8tDooV0ZuyJVUzHsrNX+O5NaRbieTf0F7FfeBOMAwi6Td0+yQ== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" @@ -22708,9 +22753,9 @@ hosted-git-info@^4.0.1: lru-cache "^6.0.0" hosted-git-info@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.1.tgz#9985fcb2700467fecf7f33a4d4874e30680b5322" - integrity sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA== + version "7.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== dependencies: lru-cache "^10.0.1" @@ -22756,9 +22801,9 @@ html-encoding-sniffer@^4.0.0: whatwg-encoding "^3.1.1" html-entities@^2.1.0, html-entities@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== html-escaper@^2.0.0, html-escaper@^2.0.2: version "2.0.2" @@ -22904,7 +22949,7 @@ http-proxy-agent@^6.0.0: agent-base "^7.1.0" debug "^4.3.4" -http-proxy-agent@^7.0.0: +http-proxy-agent@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== @@ -23011,7 +23056,7 @@ https-proxy-agent@^6.0.0: agent-base "^7.0.2" debug "4" -https-proxy-agent@^7.0.2: +https-proxy-agent@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== @@ -23039,22 +23084,15 @@ human-signals@^5.0.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - husky@^8.0.3: version "8.0.3" resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== hyphenate-style-name@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" - integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== + version "1.0.5" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.5.tgz#70b68605ee601b7142362239a0236159a8b2dc33" + integrity sha512-fedL7PRwmeVkgyhu9hLeTBaI6wcGk7JGJswdaRsa5aUbkXI1kr1xZwTPBtaYPpwf56878iDek6VbVnuWMebJmw== iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" @@ -23125,9 +23163,9 @@ immediate@~3.0.5: integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== immutable@^4.0.0: - version "4.3.5" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" - integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + version "4.3.6" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447" + integrity sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ== immutable@~3.7.6: version "3.7.6" @@ -23232,10 +23270,10 @@ ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inline-style-parser@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.2.tgz#d498b4e6de0373458fc610ff793f6b14ebf45633" - integrity sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ== +inline-style-parser@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.3.tgz#e35c5fb45f3a83ed7849fe487336eb7efa25971c" + integrity sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g== inline-style-prefixer@^7.0.0: version "7.0.0" @@ -23303,12 +23341,12 @@ inspect-with-kind@^1.0.5: dependencies: kind-of "^6.0.2" -internal-slot@^1.0.4, internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== +internal-slot@^1.0.4, internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.2" + es-errors "^1.3.0" hasown "^2.0.0" side-channel "^1.0.4" @@ -23335,9 +23373,9 @@ invariant@^2.2.2, invariant@^2.2.4: loose-envify "^1.0.0" ioredis@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" - integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== + version "5.4.1" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.4.1.tgz#1c56b70b759f01465913887375ed809134296f40" + integrity sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA== dependencies: "@ioredis/commands" "^1.1.1" cluster-key-slot "^1.1.0" @@ -23349,12 +23387,7 @@ ioredis@^5.3.2: redis-parser "^3.0.0" standard-as-callback "^2.1.0" -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -ip@^2.0.1: +ip@^2.0.0, ip@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== @@ -23365,9 +23398,9 @@ ipaddr.js@1.9.1: integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== ipx@^1.3.1: version "1.3.1" @@ -23388,9 +23421,9 @@ ipx@^1.3.1: xss "^1.0.14" iron-webcrypto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.0.0.tgz#e3b689c0c61b434a0a4cb82d0aeabbc8b672a867" - integrity sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz#aa60ff2aa10550630f4c0b11fd2442becdb35a6f" + integrity sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== is-absolute-url@^3.0.0: version "3.0.3" @@ -23522,7 +23555,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-ci@^3.0.0, is-ci@^3.0.1: +is-ci@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== @@ -23543,6 +23576,13 @@ is-data-descriptor@^1.0.1: dependencies: hasown "^2.0.0" +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -23713,10 +23753,10 @@ is-lower-case@^2.0.2: dependencies: tslib "^2.0.3" -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-map@^2.0.2, is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== is-module@^1.0.0: version "1.0.0" @@ -23731,10 +23771,10 @@ is-nan@^1.3.2: call-bind "^1.0.0" define-properties "^1.1.3" -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-npm@^5.0.0: version "5.0.0" @@ -23849,6 +23889,11 @@ is-promise@^4.0.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== +is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + is-reference@1.2.1, is-reference@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" @@ -23881,17 +23926,17 @@ is-relative@^1.0.0: dependencies: is-unc-path "^1.0.0" -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== +is-set@^2.0.2, is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-stream@3.0.0, is-stream@^3.0.0: version "3.0.0" @@ -23903,7 +23948,7 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== -is-stream@^2.0.0: +is-stream@^2.0.0, is-stream@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== @@ -23929,7 +23974,7 @@ is-text-path@^2.0.0: dependencies: text-extensions "^2.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: +is-typed-array@^1.1.13, is-typed-array@^1.1.3: version "1.1.13" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -23980,10 +24025,10 @@ is-url@^1.1.0, is-url@^1.2.4: resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2: version "1.0.2" @@ -23992,13 +24037,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" is-what@^3.14.1: version "3.14.1" @@ -24086,16 +24131,16 @@ isomorphic-ws@5.0.0, isomorphic-ws@^5.0.0: resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - isows@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== +isows@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.4.tgz#810cd0d90cc4995c26395d2aa4cfa4037ebdf061" + integrity sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -24118,13 +24163,13 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" + integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" istanbul-lib-coverage "^3.2.0" semver "^7.5.4" @@ -24147,9 +24192,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3, istanbul-reports@^3.1.4: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -24174,6 +24219,15 @@ jackspeak@^2.3.5: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +jackspeak@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.1.2.tgz#eada67ea949c6b71de50f1b09c92a961897b90ab" + integrity sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jaeger-client@^3.15.0: version "3.19.0" resolved "https://registry.yarnpkg.com/jaeger-client/-/jaeger-client-3.19.0.tgz#9b5bd818ebd24e818616ee0f5cffe1722a53ae6e" @@ -24186,33 +24240,15 @@ jaeger-client@^3.15.0: xorshift "^1.1.1" jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + version "10.9.1" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.1.tgz#8dc96b7fcc41cb19aa502af506da4e1d56f5e62b" + integrity sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w== dependencies: async "^3.2.3" chalk "^4.0.2" filelist "^1.0.4" minimatch "^3.1.2" -jayson@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.0.tgz#60dc946a85197317f2b1439d672a8b0a99cea2f9" - integrity sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A== - dependencies: - "@types/connect" "^3.4.33" - "@types/node" "^12.12.54" - "@types/ws" "^7.4.4" - 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" - json-stringify-safe "^5.0.1" - uuid "^8.3.2" - ws "^7.4.5" - jdenticon@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/jdenticon/-/jdenticon-3.2.0.tgz#b5b9ef413cb66f70c600d6e69a764c977f248a46" @@ -24637,9 +24673,9 @@ jiti@^1.17.1, jiti@^1.18.2, jiti@^1.19.1, jiti@^1.20.0, jiti@^1.21.0: integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== jose@^4.11.4: - version "4.15.4" - resolved "https://registry.yarnpkg.com/jose/-/jose-4.15.4.tgz#02a9a763803e3872cf55f29ecef0dfdcc218cc03" - integrity sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ== + version "4.15.5" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.15.5.tgz#6475d0f467ecd3c630a1b5dadd2735a7288df706" + integrity sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg== js-cleanup@^1.2.0: version "1.2.0" @@ -24701,9 +24737,9 @@ jsbn@~0.1.0: integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== jscodeshift@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.15.1.tgz#6c7a9572acdfa4f54098e958f71a05716a4e546b" - integrity sha512-hIJfxUy8Rt4HkJn/zZPU9ChKfKZM1342waJ1QC2e2YsPcWhM+3BJ4dcfQCzArTrk1jJeNLB341H+qOcEHRxJZg== + version "0.15.2" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.15.2.tgz#145563860360b4819a558c75c545f39683e5a0be" + integrity sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA== dependencies: "@babel/core" "^7.23.0" "@babel/parser" "^7.23.0" @@ -24791,30 +24827,30 @@ jsdom@^21.1.1: xml-name-validator "^4.0.0" jsdom@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.0.0.tgz#e2dc04e4c79da368481659818ee2b0cd7c39007c" - integrity sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A== + version "24.1.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.1.0.tgz#0cffdabd42c506788bfecd160e8ac22d4387f971" + integrity sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA== dependencies: cssstyle "^4.0.1" data-urls "^5.0.0" decimal.js "^10.4.3" form-data "^4.0.0" html-encoding-sniffer "^4.0.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.2" + http-proxy-agent "^7.0.2" + https-proxy-agent "^7.0.4" is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.7" + nwsapi "^2.2.10" parse5 "^7.1.2" - rrweb-cssom "^0.6.0" + rrweb-cssom "^0.7.0" saxes "^6.0.0" symbol-tree "^3.2.4" - tough-cookie "^4.1.3" + tough-cookie "^4.1.4" w3c-xmlserializer "^5.0.0" webidl-conversions "^7.0.0" whatwg-encoding "^3.1.1" whatwg-mimetype "^4.0.0" whatwg-url "^14.0.0" - ws "^8.16.0" + ws "^8.17.0" xml-name-validator "^5.0.0" jsesc@^2.5.1: @@ -24859,7 +24895,7 @@ json-pointer@0.6.2: dependencies: foreach "^2.0.4" -json-rpc-engine@6.1.0, json-rpc-engine@^6.1.0: +json-rpc-engine@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz#bf5ff7d029e1c1bf20cb6c0e9f348dcd8be5a393" integrity sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ== @@ -24898,7 +24934,7 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.4.0: +json-schema@0.4.0, json-schema@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== @@ -24938,7 +24974,7 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.1, json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: +json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -25090,7 +25126,7 @@ keccak@3.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -keccak@^3.0.0, keccak@^3.0.1: +keccak@^3.0.0, keccak@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== @@ -25174,9 +25210,9 @@ lambda-local@2.1.2: winston "^3.10.0" language-subtag-registry@^0.3.20, language-subtag-registry@~0.3.2: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== language-tags@=1.0.5: version "1.0.5" @@ -25321,12 +25357,12 @@ lie@3.1.1: immediate "~3.0.5" light-my-request@^5.6.1: - version "5.11.0" - resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-5.11.0.tgz#90e446c303b3a47b59df38406d5f5c2cf224f2d1" - integrity sha512-qkFCeloXCOMpmEdZ/MV91P8AT4fjwFXWaAFz3lUeStM8RcoM1ks4J/F8r1b3r6y/H4u3ACEJ1T+Gv5bopj7oDA== + version "5.13.0" + resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-5.13.0.tgz#b29905e55e8605b77fee2a946e17b219bca35113" + integrity sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ== dependencies: - cookie "^0.5.0" - process-warning "^2.0.0" + cookie "^0.6.0" + process-warning "^3.0.0" set-cookie-parser "^2.4.1" lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.1.0: @@ -25334,10 +25370,10 @@ lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.1.0: resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== -lilconfig@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" - integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== +lilconfig@^3.0.0, lilconfig@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" + integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== line-reader@^0.2.4: version "0.2.4" @@ -25354,27 +25390,27 @@ lines-and-columns@~2.0.3: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== -listhen@^1.2.2, listhen@^1.5.5: - version "1.6.0" - resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.6.0.tgz#df26c527c59b87557be4d0408d4a09626bd946c8" - integrity sha512-z0RcEXVX5oTpY1bO02SKoTU/kmZSrFSngNNzHRM6KICR17PTq7ANush6AE6ztGJwJD4RLpBrVHd9GnV51J7s3w== +listhen@^1.2.2, listhen@^1.5.5, listhen@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.7.2.tgz#66b81740692269d5d8cafdc475020f2fc51afbae" + integrity sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g== dependencies: - "@parcel/watcher" "^2.4.0" - "@parcel/watcher-wasm" "2.4.0" - citty "^0.1.5" + "@parcel/watcher" "^2.4.1" + "@parcel/watcher-wasm" "^2.4.1" + citty "^0.1.6" clipboardy "^4.0.0" consola "^3.2.3" - crossws "^0.1.0" + crossws "^0.2.0" defu "^6.1.4" get-port-please "^3.1.2" - h3 "^1.10.1" + h3 "^1.10.2" http-shutdown "^1.2.2" jiti "^1.21.0" - mlly "^1.5.0" + mlly "^1.6.1" node-forge "^1.3.1" pathe "^1.1.2" std-env "^3.7.0" - ufo "^1.3.2" + ufo "^1.4.0" untun "^0.1.3" uqr "^0.1.2" @@ -25516,7 +25552,7 @@ loader-utils@^3.2.0: resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== -localforage@1.10.0: +localforage@1.10.0, localforage@^1.8.1: version "1.10.0" resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg== @@ -25622,7 +25658,7 @@ lodash.merge@4.6.2, lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.mergewith@^4.6.2: +lodash.mergewith@4.6.2, lodash.mergewith@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== @@ -25662,7 +25698,7 @@ lodash.upperfirst@^4.3.1: resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== -lodash@4.17.21, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.0: +lodash@4.17.21, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -25835,10 +25871,10 @@ lowlight@^1.17.0: fault "^1.0.0" highlight.js "~10.7.0" -lru-cache@^10.0.0, lru-cache@^10.0.1, lru-cache@^10.0.2, "lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +lru-cache@^10.0.0, lru-cache@^10.0.1, lru-cache@^10.2.0: + version "10.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== lru-cache@^5.1.1: version "5.1.1" @@ -25924,9 +25960,9 @@ magic-string@^0.27.0: "@jridgewell/sourcemap-codec" "^1.4.13" magic-string@^0.30.3, magic-string@^0.30.5: - version "0.30.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505" - integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA== + version "0.30.10" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" @@ -26026,9 +26062,9 @@ markdown-table@^3.0.0: integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== markdown-to-jsx@^7.1.8: - version "7.4.1" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.4.1.tgz#1ed6a60f8f9cd944bec39d9923fbbc8d3d60dcb9" - integrity sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A== + version "7.4.7" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz#740ee7ec933865ef5cc683a0992797685a75e2ee" + integrity sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg== marked@^4.0.12: version "4.3.0" @@ -26112,9 +26148,9 @@ mdast-util-from-markdown@^1.0.0: uvu "^0.5.0" mdast-util-from-markdown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz#52f14815ec291ed061f2922fd14d6689c810cb88" - integrity sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz#32a6e8f512b416e1f51eb817fc64bd867ebcd9cc" + integrity sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA== dependencies: "@types/mdast" "^4.0.0" "@types/unist" "^3.0.0" @@ -26265,9 +26301,9 @@ mdast-util-mdx-expression@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-mdx-jsx@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.0.0.tgz#f73631fa5bb7a36712ff1e9cedec0cafed03401c" - integrity sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz#daae777c72f9c4a106592e3025aa50fb26068e1b" + integrity sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA== dependencies: "@types/estree-jsx" "^1.0.0" "@types/hast" "^3.0.0" @@ -26460,9 +26496,9 @@ merge-options@^3.0.4: is-plain-obj "^2.1.0" merge-refs@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/merge-refs/-/merge-refs-1.2.2.tgz#6142633398dd0d10a37626cae77ddeb1db26db0c" - integrity sha512-RwcT7GsQR3KbuLw1rRuodq4Nt547BKEBkliZ0qqsrpyNne9bGTFtsFIsIpx82huWhcl3kOlOlH4H0xkPk/DqVw== + version "1.3.0" + resolved "https://registry.yarnpkg.com/merge-refs/-/merge-refs-1.3.0.tgz#65d7f8c5058917b9d1fc204ae4b9a727614d0119" + integrity sha512-nqXPXbso+1dcKDpPCXvwZyJILz+vSLqGGOnDrYHQYE+B8n9JTCekVLC65AfCpR4ggVyA/45Y0iR9LDyS2iI+zA== merge-stream@^2.0.0: version "2.0.0" @@ -26522,9 +26558,9 @@ micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: uvu "^0.5.0" micromark-core-commonmark@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz#50740201f0ee78c12a675bf3e68ffebc0bf931a3" - integrity sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz#9a45510557d068605c6e9a80f282b2bb8581e43d" + integrity sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA== dependencies: decode-named-character-reference "^1.0.0" devlop "^1.0.0" @@ -26970,9 +27006,9 @@ micromark-util-subtokenize@^1.0.0: uvu "^0.5.0" micromark-util-subtokenize@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz#9f412442d77e0c5789ffdf42377fa8a2bcbdf581" - integrity sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz#76129c49ac65da6e479c09d0ec4b5f29ec6eace5" + integrity sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q== dependencies: devlop "^1.0.0" micromark-util-chunked "^2.0.0" @@ -27065,11 +27101,11 @@ micromatch@^3.1.10: to-regex "^3.0.2" micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" miller-rabin@^4.0.0: @@ -27145,9 +27181,9 @@ min-indent@^1.0.0: integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== mini-css-extract-plugin@^2.6.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.0.tgz#1aeae2a90a954b6426c9e8311eab36b450f553a0" - integrity sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg== + version "2.9.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz#c73a1327ccf466f69026ac22a8e8fd707b78a235" + integrity sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" @@ -27188,7 +27224,7 @@ minimatch@4.2.3: dependencies: brace-expansion "^1.1.7" -minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: +minimatch@9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -27216,6 +27252,20 @@ minimatch@^7.4.2: dependencies: brace-expansion "^2.0.1" +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3, minimatch@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -27245,15 +27295,20 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + minipass@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== minizlib@^1.3.3: version "1.3.3" @@ -27317,15 +27372,15 @@ mkdirp@^2.1.5: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== -mlly@^1.2.0, mlly@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" - integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== +mlly@^1.6.1, mlly@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.0.tgz#587383ae40dda23cadb11c3c3cc972b277724271" + integrity sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ== dependencies: acorn "^8.11.3" pathe "^1.1.2" - pkg-types "^1.0.3" - ufo "^1.3.2" + pkg-types "^1.1.0" + ufo "^1.5.3" mock-fs@^4.1.0: version "4.14.0" @@ -27437,7 +27492,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -27529,9 +27584,9 @@ mz@^2.7.0: thenify-all "^1.0.0" nan@^2.16.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== + version "2.19.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0" + integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw== nano-css@^5.6.1: version "5.6.1" @@ -27752,17 +27807,17 @@ netlify-headers-parser@7.1.2: path-exists "^5.0.0" toml "^3.0.0" -netlify-headers-parser@^7.1.2, netlify-headers-parser@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/netlify-headers-parser/-/netlify-headers-parser-7.1.3.tgz#64b3015c05a9b5dbd9853a02df397e5b33fb67fd" - integrity sha512-0iR1iWbknBLv6T7zzmMR2AtfO7G/0lMajRyAX3SXhc3U3MqpXsElXinWZteMWM7KeGb7PePQgEalEkk2T6kXSw== +netlify-headers-parser@^7.1.2, netlify-headers-parser@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/netlify-headers-parser/-/netlify-headers-parser-7.1.4.tgz#ec692e9278f2d68b9a7176ee186b069d37bc1be5" + integrity sha512-fTVQf8u65vS4YTP2Qt1K6Np01q3yecRKXf6VMONMlWbfl5n3M/on7pZlZISNAXHNOtnVt+6Kpwfl+RIeALC8Kg== dependencies: + "@iarna/toml" "^2.2.5" escape-string-regexp "^5.0.0" fast-safe-stringify "^2.0.7" is-plain-obj "^4.0.0" map-obj "^5.0.0" path-exists "^5.0.0" - toml "^3.0.0" netlify-redirect-parser@14.2.0: version "14.2.0" @@ -27775,16 +27830,16 @@ netlify-redirect-parser@14.2.0: path-exists "^5.0.0" toml "^3.0.0" -netlify-redirect-parser@^14.2.0, netlify-redirect-parser@^14.2.1: - version "14.2.1" - resolved "https://registry.yarnpkg.com/netlify-redirect-parser/-/netlify-redirect-parser-14.2.1.tgz#5061be09481088da249fffbd11d384d880c2f296" - integrity sha512-poQgLGh+YATMHatzf/1TaWcbKQIBhszebhJV7btc6Ysw4xmnUedaE8nCscfdDH2PygT6Y+IHZkyMU4gvTFffVA== +netlify-redirect-parser@^14.2.0, netlify-redirect-parser@^14.3.0: + version "14.3.0" + resolved "https://registry.yarnpkg.com/netlify-redirect-parser/-/netlify-redirect-parser-14.3.0.tgz#9cf14a742fe9c446e624498a75e8d6b40d621bcc" + integrity sha512-/Oqq+SrTXk8hZqjCBy0AkWf5qAhsgcsdxQA09uYFdSSNG5w9rhh17a7dp77o5Q5XoHCahm8u4Kig/lbXkl4j2g== dependencies: + "@iarna/toml" "^2.2.5" fast-safe-stringify "^2.1.1" filter-obj "^5.0.0" is-plain-obj "^4.0.0" path-exists "^5.0.0" - toml "^3.0.0" netlify-redirector@0.5.0: version "0.5.0" @@ -27804,12 +27859,12 @@ netlify@13.1.10: p-wait-for "^4.0.0" qs "^6.9.6" -netlify@^13.1.10, netlify@^13.1.14: - version "13.1.14" - resolved "https://registry.yarnpkg.com/netlify/-/netlify-13.1.14.tgz#fbba73e5d979b94c2b050037c9dbf16f10523801" - integrity sha512-7vSq6so7lPjr3HEpjbtLyde0F3IXOzD0ocJs3s2wnJR+nX+8pWOAVGe+KN6S98odsClJBJxCkWG2rLjTBzW9pw== +netlify@^13.1.10, netlify@^13.1.16: + version "13.1.16" + resolved "https://registry.yarnpkg.com/netlify/-/netlify-13.1.16.tgz#285ebac9197e596fa1f3bbeb91d0f74e9aeea3b3" + integrity sha512-DMqurowUwUk2pPcWlVKvj/gj9NHZJgrTlh/lCArCa82zuMEp++4/hYQAJ2R8ZYfRVZpwg11NT/kkq/vKuImlhA== dependencies: - "@netlify/open-api" "^2.28.0" + "@netlify/open-api" "^2.30.0" lodash-es "^4.17.21" micro-api-client "^3.3.0" node-fetch "^3.0.0" @@ -27818,9 +27873,9 @@ netlify@^13.1.10, netlify@^13.1.14: qs "^6.9.6" neverthrow@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/neverthrow/-/neverthrow-6.1.0.tgz#51a6e9ce2e06600045b3c1b37aecc536d267bf95" - integrity sha512-xNbNjp/6M5vUV+mststgneJN9eJeJCDSYSBTaf3vxgvcKooP+8L0ATFpM8DGfmH7UWKJeoa24Qi33tBP9Ya3zA== + version "6.2.1" + resolved "https://registry.yarnpkg.com/neverthrow/-/neverthrow-6.2.1.tgz#1c64e10d7ac4751d32cb87bffcde5467bbb4a760" + integrity sha512-amlnNvPXmiUOmNsDfUngNWPdZYOmCUGExQy/kuPCmLbhrXVXIYhY4bnE4D3dWl7OMhSEr9NndUrl4aKGFhFIQg== next-query-params@^4.3.0: version "4.3.1" @@ -27835,9 +27890,9 @@ next-secure-headers@^2.2.0: integrity sha512-C7OfZ9JdSJyYMz2ZBMI/WwNbt0qNjlFWX9afUp8nEUzbz6ez3JbeopdyxSZJZJAzVLIAfyk6n73rFpd4e22jRg== next-seo@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-6.4.0.tgz#05a75b8acae881f856eb690b1f66b5e8741aa16e" - integrity sha512-XQFxkOL2hw0YE+P100HbI3EAvcludlHPxuzMgaIjKb7kPK0CvjGvLFjd9hszZFEDc5oiQkGFA8+cuWcnip7eYA== + version "6.5.0" + resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-6.5.0.tgz#5ccfbcfaced9d296499aa88f074b9e82e252a9c8" + integrity sha512-MfzUeWTN/x/rsKp/1n0213eojO97lIl0unxqbeCY+6pAucViHDA8GSLRRcXpgjsSmBxfCFdfpu7LXbt4ANQoNQ== next-themes@^0.2.1: version "0.2.1" @@ -27850,27 +27905,27 @@ next-tick@^1.1.0: integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== next@^14.0.3: - version "14.1.0" - resolved "https://registry.yarnpkg.com/next/-/next-14.1.0.tgz#b31c0261ff9caa6b4a17c5af019ed77387174b69" - integrity sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q== + version "14.2.3" + resolved "https://registry.yarnpkg.com/next/-/next-14.2.3.tgz#f117dd5d5f20c307e7b8e4f9c1c97d961008925d" + integrity sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A== dependencies: - "@next/env" "14.1.0" - "@swc/helpers" "0.5.2" + "@next/env" "14.2.3" + "@swc/helpers" "0.5.5" busboy "1.6.0" caniuse-lite "^1.0.30001579" graceful-fs "^4.2.11" postcss "8.4.31" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-darwin-arm64" "14.1.0" - "@next/swc-darwin-x64" "14.1.0" - "@next/swc-linux-arm64-gnu" "14.1.0" - "@next/swc-linux-arm64-musl" "14.1.0" - "@next/swc-linux-x64-gnu" "14.1.0" - "@next/swc-linux-x64-musl" "14.1.0" - "@next/swc-win32-arm64-msvc" "14.1.0" - "@next/swc-win32-ia32-msvc" "14.1.0" - "@next/swc-win32-x64-msvc" "14.1.0" + "@next/swc-darwin-arm64" "14.2.3" + "@next/swc-darwin-x64" "14.2.3" + "@next/swc-linux-arm64-gnu" "14.2.3" + "@next/swc-linux-arm64-musl" "14.2.3" + "@next/swc-linux-x64-gnu" "14.2.3" + "@next/swc-linux-x64-musl" "14.2.3" + "@next/swc-win32-arm64-msvc" "14.2.3" + "@next/swc-win32-ia32-msvc" "14.2.3" + "@next/swc-win32-x64-msvc" "14.2.3" no-case@^3.0.4: version "3.0.4" @@ -27880,19 +27935,19 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -nock@^13.4.0: - version "13.5.1" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.1.tgz#4e40f9877ad0d43b7cdb474261c190f3715dd806" - integrity sha512-+s7b73fzj5KnxbKH4Oaqz07tQ8degcMilU4rrmnKvI//b0JMBU4wEXFQ8zqr+3+L4eWSfU3H/UoIVGUV0tue1Q== +nock@^13.5.0: + version "13.5.4" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" + integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" propagate "^2.0.0" node-abi@^3.3.0: - version "3.54.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.54.0.tgz#f6386f7548817acac6434c6cba02999c9aebcc69" - integrity sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA== + version "3.62.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.62.0.tgz#017958ed120f89a3a14a7253da810f5d724e3f36" + integrity sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g== dependencies: semver "^7.3.5" @@ -27933,10 +27988,10 @@ node-domexception@^1.0.0: resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -node-fetch-native@^1.2.0, node-fetch-native@^1.4.0, node-fetch-native@^1.4.1, node-fetch-native@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.1.tgz#f95c74917d3cebc794cdae0cd2a9c7594aad0cb4" - integrity sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw== +node-fetch-native@^1.2.0, node-fetch-native@^1.4.0, node-fetch-native@^1.6.1, node-fetch-native@^1.6.2, node-fetch-native@^1.6.3: + version "1.6.4" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.4.tgz#679fc8fd8111266d47d7e72c379f1bed9acff06e" + integrity sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ== node-fetch@2.6.12: version "2.6.12" @@ -27945,7 +28000,7 @@ node-fetch@2.6.12: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.0.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.6, node-fetch@^2.6.7, node-fetch@^2.7.0: +node-fetch@^2.0.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.6, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -27972,9 +28027,9 @@ node-gyp-build@4.3.0: integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== node-gyp-build@^4.2.0, node-gyp-build@^4.2.2, node-gyp-build@^4.3.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" - integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== + version "4.8.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" + integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== node-int64@^0.4.0: version "0.4.0" @@ -28103,9 +28158,9 @@ normalize-url@^7.0.3: integrity sha512-uhXOdZry0L6M2UIo9BTt7FdpBDiAGN/7oItedQwPKh8jh31ZlvC8U9Xl/EJ3aijDHaywXTW3QbZ6LuCocur1YA== normalize-url@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" - integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== notion-client@^6.15.6: version "6.16.0" @@ -28159,9 +28214,9 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: path-key "^3.0.0" npm-run-path@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" - integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== dependencies: path-key "^4.0.0" @@ -28209,23 +28264,23 @@ number-to-bn@1.7.0: strip-hex-prefix "1.0.0" numbro@^2.3.6: - version "2.4.0" - resolved "https://registry.yarnpkg.com/numbro/-/numbro-2.4.0.tgz#3cecae307ab2c2d9fd3e1c08249f4abd504bd577" - integrity sha512-t6rVkO1CcKvffvOJJu/zMo70VIcQSR6w3AmIhfHGvmk4vHbNe6zHgomB0aWFAPZWM9JBVWBM0efJv9DBiRoSTA== + version "2.5.0" + resolved "https://registry.yarnpkg.com/numbro/-/numbro-2.5.0.tgz#a16c6e65a692b96c1629a392be9a50984b194e73" + integrity sha512-xDcctDimhzko/e+y+Q2/8i3qNC9Svw1QgOkSkQoO0kIPI473tR9QRbo2KP88Ty9p8WbPy+3OpTaAIzehtuHq+A== dependencies: bignumber.js "^8 || ^9" nuqs@^1.15.2: - version "1.16.1" - resolved "https://registry.yarnpkg.com/nuqs/-/nuqs-1.16.1.tgz#8ad7887615105fb574a00f1676b8380682899681" - integrity sha512-R3muf8sXJTj/Lu56Cd+qBmzfZUxSiIvpoytf58/0+8xEtCBCENJn3a6aHokHCWop3q3c/DyVx7blDTX5Pu1hyA== + version "1.17.4" + resolved "https://registry.yarnpkg.com/nuqs/-/nuqs-1.17.4.tgz#c82fcf62da38939c1c47aeb9efc8f4521b11ad0f" + integrity sha512-wraphFfKI+Y/aWIGFsld/Ta7fTFEyeya1LkgEGNPDiMuY+Hwea/eVHBiq1GYlyMqTYSAoxRWvQyjCIo1Dy1u7g== dependencies: mitt "^3.0.1" -nwsapi@^2.2.2, nwsapi@^2.2.4, nwsapi@^2.2.7: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== +nwsapi@^2.2.10, nwsapi@^2.2.2, nwsapi@^2.2.4: + version "2.2.10" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.10.tgz#0b77a68e21a0b483db70b11fad055906e867cda8" + integrity sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ== nx@16.9.0: version "16.9.0" @@ -28280,12 +28335,12 @@ nx@16.9.0: "@nx/nx-win32-arm64-msvc" "16.9.0" "@nx/nx-win32-x64-msvc" "16.9.0" -nx@18.0.1: - version "18.0.1" - resolved "https://registry.yarnpkg.com/nx/-/nx-18.0.1.tgz#e813654740c03144f24cb816df0742db686a592d" - integrity sha512-AtcM7JmBC82O17WMxuu9JJxEKTcsMII1AMgxCeiCWcW22wHd3EhIn5Hg1iSFv9ftkSSd8YgHeqTciRbdTqbxpA== +nx@18.0.4: + version "18.0.4" + resolved "https://registry.yarnpkg.com/nx/-/nx-18.0.4.tgz#3a77de6b51869449d849dccab7db74b35ec32a6b" + integrity sha512-Njb1fGppOw/wM7nOA1hYlLduV2aL4PdXSv5QS5cVYicHT5tw5RnG/0z4j9e6QfFj2EydxVeDUtlGR98diZ3/Yw== dependencies: - "@nrwl/tao" "18.0.1" + "@nrwl/tao" "18.0.4" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "3.0.0-rc.46" "@zkochan/js-yaml" "0.0.6" @@ -28320,26 +28375,26 @@ nx@18.0.1: yargs "^17.6.2" yargs-parser "21.1.1" optionalDependencies: - "@nx/nx-darwin-arm64" "18.0.1" - "@nx/nx-darwin-x64" "18.0.1" - "@nx/nx-freebsd-x64" "18.0.1" - "@nx/nx-linux-arm-gnueabihf" "18.0.1" - "@nx/nx-linux-arm64-gnu" "18.0.1" - "@nx/nx-linux-arm64-musl" "18.0.1" - "@nx/nx-linux-x64-gnu" "18.0.1" - "@nx/nx-linux-x64-musl" "18.0.1" - "@nx/nx-win32-arm64-msvc" "18.0.1" - "@nx/nx-win32-x64-msvc" "18.0.1" + "@nx/nx-darwin-arm64" "18.0.4" + "@nx/nx-darwin-x64" "18.0.4" + "@nx/nx-freebsd-x64" "18.0.4" + "@nx/nx-linux-arm-gnueabihf" "18.0.4" + "@nx/nx-linux-arm64-gnu" "18.0.4" + "@nx/nx-linux-arm64-musl" "18.0.4" + "@nx/nx-linux-x64-gnu" "18.0.4" + "@nx/nx-linux-x64-musl" "18.0.4" + "@nx/nx-win32-arm64-msvc" "18.0.4" + "@nx/nx-win32-x64-msvc" "18.0.4" -nx@18.0.4: - version "18.0.4" - resolved "https://registry.yarnpkg.com/nx/-/nx-18.0.4.tgz#3a77de6b51869449d849dccab7db74b35ec32a6b" - integrity sha512-Njb1fGppOw/wM7nOA1hYlLduV2aL4PdXSv5QS5cVYicHT5tw5RnG/0z4j9e6QfFj2EydxVeDUtlGR98diZ3/Yw== +nx@19.1.0: + version "19.1.0" + resolved "https://registry.yarnpkg.com/nx/-/nx-19.1.0.tgz#2cdf6d5a8f6d286297c2ad5a8e4b40d07694d771" + integrity sha512-ia9XIL4QWli02WNZ3tLSpWvIYJVOWcikeELJwouZOwHKT7RA9i6vCQjKsIKWSFlUs47WDwiYiLSsMxR5KTqk8Q== dependencies: - "@nrwl/tao" "18.0.4" + "@nrwl/tao" "19.1.0" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "3.0.0-rc.46" - "@zkochan/js-yaml" "0.0.6" + "@zkochan/js-yaml" "0.0.7" axios "^1.6.0" chalk "^4.1.0" cli-cursor "3.1.0" @@ -28353,7 +28408,6 @@ nx@18.0.4: fs-extra "^11.1.0" ignore "^5.0.4" jest-diff "^29.4.1" - js-yaml "4.1.0" jsonc-parser "3.2.0" lines-and-columns "~2.0.3" minimatch "9.0.3" @@ -28371,26 +28425,27 @@ nx@18.0.4: yargs "^17.6.2" yargs-parser "21.1.1" optionalDependencies: - "@nx/nx-darwin-arm64" "18.0.4" - "@nx/nx-darwin-x64" "18.0.4" - "@nx/nx-freebsd-x64" "18.0.4" - "@nx/nx-linux-arm-gnueabihf" "18.0.4" - "@nx/nx-linux-arm64-gnu" "18.0.4" - "@nx/nx-linux-arm64-musl" "18.0.4" - "@nx/nx-linux-x64-gnu" "18.0.4" - "@nx/nx-linux-x64-musl" "18.0.4" - "@nx/nx-win32-arm64-msvc" "18.0.4" - "@nx/nx-win32-x64-msvc" "18.0.4" - -nypm@^0.3.3: - version "0.3.6" - resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.3.6.tgz#940b558e6e56c2ed5dc43adf6dcf2c16577a80ff" - integrity sha512-2CATJh3pd6CyNfU5VZM7qSwFu0ieyabkEdnogE30Obn1czrmOYiZ8DOZLe1yBdLKWoyD3Mcy2maUs+0MR3yVjQ== + "@nx/nx-darwin-arm64" "19.1.0" + "@nx/nx-darwin-x64" "19.1.0" + "@nx/nx-freebsd-x64" "19.1.0" + "@nx/nx-linux-arm-gnueabihf" "19.1.0" + "@nx/nx-linux-arm64-gnu" "19.1.0" + "@nx/nx-linux-arm64-musl" "19.1.0" + "@nx/nx-linux-x64-gnu" "19.1.0" + "@nx/nx-linux-x64-musl" "19.1.0" + "@nx/nx-win32-arm64-msvc" "19.1.0" + "@nx/nx-win32-x64-msvc" "19.1.0" + +nypm@^0.3.8: + version "0.3.8" + resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.3.8.tgz#a16b078b161be5885351e72cf0b97326973722bf" + integrity sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og== dependencies: - citty "^0.1.5" + citty "^0.1.6" + consola "^3.2.3" execa "^8.0.1" pathe "^1.1.2" - ufo "^1.3.2" + ufo "^1.4.0" oauth-sign@~0.9.0: version "0.9.0" @@ -28421,18 +28476,18 @@ object-inspect@1.10.3: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== -object-inspect@^1.13.1, object-inspect@^1.9.0: +object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" object-keys@^1.1.1: version "1.1.1" @@ -28446,7 +28501,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.4: +object.assign@^4.1.4, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -28457,41 +28512,41 @@ object.assign@^4.1.4: object-keys "^1.1.1" object.entries@^1.1.6, object.entries@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" object.fromentries@^2.0.6, object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.groupby@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" - integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - array.prototype.filter "^1.0.3" - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" + es-abstract "^1.23.2" -object.hasown@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== +object.hasown@^1.1.2, object.hasown@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.pick@^1.3.0: version "1.3.0" @@ -28501,13 +28556,13 @@ object.pick@^1.3.0: isobject "^3.0.1" object.values@^1.1.6, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" objectorarray@^1.0.5: version "1.0.5" @@ -28532,13 +28587,13 @@ obuf@^1.0.0, obuf@^1.1.2: integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== ofetch@^1.1.1, ofetch@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.3.3.tgz#588cb806a28e5c66c2c47dd8994f9059a036d8c0" - integrity sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg== + version "1.3.4" + resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.3.4.tgz#7ea65ced3c592ec2b9906975ae3fe1d26a56f635" + integrity sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw== dependencies: - destr "^2.0.1" - node-fetch-native "^1.4.0" - ufo "^1.3.0" + destr "^2.0.3" + node-fetch-native "^1.6.3" + ufo "^1.5.3" ohash@^1.1.3: version "1.1.3" @@ -28662,16 +28717,16 @@ optionator@^0.8.1: word-wrap "~1.2.3" optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" ora@5.3.0: version "5.3.0" @@ -29014,16 +29069,17 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== +parse-asn1@^5.0.0, parse-asn1@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.7.tgz#73cdaaa822125f9647165625eb45f8a051d2df06" + integrity sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg== dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" + asn1.js "^4.10.1" + browserify-aes "^1.2.0" + evp_bytestokey "^1.0.3" + hash-base "~3.0" + pbkdf2 "^3.1.2" + safe-buffer "^5.2.1" parse-entities@^2.0.0: version "2.0.0" @@ -29190,12 +29246,12 @@ path-root@^0.1.1: dependencies: path-root-regex "^0.1.0" -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.10.1, path-scurry@^1.11.1, path-scurry@^1.6.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-to-regexp@0.1.7: @@ -29218,7 +29274,7 @@ pathe@^0.3.0: resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.3.9.tgz#4baff768f37f03e3d9341502865fb93116f65191" integrity sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g== -pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: +pathe@^1.1.1, pathe@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== @@ -29228,7 +29284,7 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pbkdf2@^3.0.17, pbkdf2@^3.0.3: +pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -29273,10 +29329,10 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.0, picomatch@^2.3.1: version "2.3.1" @@ -29315,6 +29371,14 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== +pino-abstract-transport@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz#97f9f2631931e242da531b5c66d3079c12c9d1b5" + integrity sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q== + dependencies: + readable-stream "^4.0.0" + split2 "^4.0.0" + pino-abstract-transport@v0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0" @@ -29323,14 +29387,6 @@ pino-abstract-transport@v0.5.0: duplexify "^4.1.2" split2 "^4.0.0" -pino-abstract-transport@v1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz#083d98f966262164504afb989bccd05f665937a8" - integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== - dependencies: - readable-stream "^4.0.0" - split2 "^4.0.0" - pino-std-serializers@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" @@ -29359,21 +29415,21 @@ pino@7.11.0: thread-stream "^0.15.1" pino@^8.5.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.18.0.tgz#f2bfbb4e827ed2049ee1e88372268efdcd1505f6" - integrity sha512-Mz/gKiRyuXu4HnpHgi1YWdHQCoWMufapzooisvFn78zl4dZciAxS+YeRkUxXl1ee/SzU80YCz1zpECCh4oC6Aw== + version "8.21.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-8.21.0.tgz#e1207f3675a2722940d62da79a7a55a98409f00d" + integrity sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q== dependencies: atomic-sleep "^1.0.0" fast-redact "^3.1.1" on-exit-leak-free "^2.1.0" - pino-abstract-transport v1.1.0 + pino-abstract-transport "^1.2.0" pino-std-serializers "^6.0.0" process-warning "^3.0.0" quick-format-unescaped "^4.0.3" real-require "^0.2.0" safe-stable-stringify "^2.3.1" sonic-boom "^3.7.0" - thread-stream "^2.0.0" + thread-stream "^2.6.0" pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.6: version "4.0.6" @@ -29408,14 +29464,14 @@ pkg-dir@^7.0.0: dependencies: find-up "^6.3.0" -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== +pkg-types@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.1.tgz#07b626880749beb607b0c817af63aac1845a73f2" + integrity sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ== dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" + confbox "^0.1.7" + mlly "^1.7.0" + pathe "^1.1.2" pkg-up@^3.1.0: version "3.1.0" @@ -29455,6 +29511,11 @@ pontem-types-bundle@1.0.15: "@polkadot/types" "^6.0.5" typescript "^4.4.3" +pony-cause@^2.1.10: + version "2.1.11" + resolved "https://registry.yarnpkg.com/pony-cause/-/pony-cause-2.1.11.tgz#d69a20aaccdb3bdb8f74dd59e5c68d8e6772e4bd" + integrity sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg== + portfinder@^1.0.28: version "1.0.32" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" @@ -29469,12 +29530,17 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-attribute-case-insensitive@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz#e843091859323342e461878d201ee70278809e01" - integrity sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw== + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.3.tgz#d118023911a768dfccfc0b0147f5ff06d8485806" + integrity sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ== dependencies: - postcss-selector-parser "^6.0.10" + postcss-selector-parser "^6.0.13" postcss-calc@^8.2.3: version "8.2.4" @@ -29508,10 +29574,11 @@ postcss-color-functional-notation@^5.1.0: postcss-value-parser "^4.2.0" postcss-color-hex-alpha@^9.0.2: - version "9.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.3.tgz#b7f0d3829218608c0d219e25aa06b1216393c69e" - integrity sha512-7sEHU4tAS6htlxun8AB9LDrCXoljxaC34tFVRlYKcvO+18r5fvGiXgv5bQzN40+4gXLCyWSMRK5FK31244WcCA== + version "9.0.4" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.4.tgz#f455902fb222453b2eb9699dfa9fc17a9c056f1e" + integrity sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ== dependencies: + "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" postcss-color-rebeccapurple@^8.0.2: @@ -29531,14 +29598,14 @@ postcss-colormin@^5.3.1: colord "^2.9.1" postcss-value-parser "^4.2.0" -postcss-colormin@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.0.2.tgz#2af9ce753937b08e058dbc6879e4aedfab42806b" - integrity sha512-TXKOxs9LWcdYo5cgmcSHPkyrLAh86hX1ijmyy6J8SbOhyv6ua053M3ZAM/0j44UsnQNIWdl8gb5L7xX2htKeLw== +postcss-colormin@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d" + integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw== dependencies: - browserslist "^4.22.2" + browserslist "^4.23.0" caniuse-api "^3.0.0" - colord "^2.9.1" + colord "^2.9.3" postcss-value-parser "^4.2.0" postcss-convert-values@^5.1.3: @@ -29549,12 +29616,12 @@ postcss-convert-values@^5.1.3: browserslist "^4.21.4" postcss-value-parser "^4.2.0" -postcss-convert-values@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.0.2.tgz#c4a7509aeb1cc7ac3f6948fcbffc2bf8cac7c56a" - integrity sha512-aeBmaTnGQ+NUSVQT8aY0sKyAD/BaLJenEKZ03YK0JnDE1w1Rr8XShoxdal2V2H26xTJKr3v5haByOhJuyT4UYw== +postcss-convert-values@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz#3498387f8efedb817cbc63901d45bd1ceaa40f48" + integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w== dependencies: - browserslist "^4.22.2" + browserslist "^4.23.0" postcss-value-parser "^4.2.0" postcss-custom-media@^9.1.5: @@ -29568,23 +29635,24 @@ postcss-custom-media@^9.1.5: "@csstools/media-query-list-parser" "^2.1.1" postcss-custom-properties@^13.2.0: - version "13.3.4" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.4.tgz#0ad5be700b692e0288ce3b2b406eac964244f197" - integrity sha512-9YN0gg9sG3OH+Z9xBrp2PWRb+O4msw+5Sbp3ZgqrblrwKspXVQe5zr5sVqi43gJGwW/Rv1A483PRQUzQOEewvA== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.7" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" + version "13.3.10" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz#72a47708e6123f7757e419ad6f0bccb5f7a7ea6d" + integrity sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw== + dependencies: + "@csstools/cascade-layer-name-parser" "^1.0.11" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" postcss-custom-selectors@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz#6d28812998dcd48f61a6a538141fc16cf2c42123" - integrity sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw== + version "7.1.10" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz#caf0b4f2bccdfe9b106b000a56a1b50b8e48df92" + integrity sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg== dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.5" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" + "@csstools/cascade-layer-name-parser" "^1.0.11" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" postcss-selector-parser "^6.0.13" postcss-dir-pseudo-class@^7.0.2: @@ -29599,40 +29667,40 @@ postcss-discard-comments@^5.1.2: resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== -postcss-discard-comments@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.1.tgz#46176212bd9c3e5f48aa4b8b4868786726c41d36" - integrity sha512-f1KYNPtqYLUeZGCHQPKzzFtsHaRuECe6jLakf/RjSRqvF5XHLZnM2+fXLhb8Qh/HBFHs3M4cSLb1k3B899RYIg== +postcss-discard-comments@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c" + integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw== postcss-discard-duplicates@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== -postcss-discard-duplicates@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.1.tgz#112b1a95948e69b3484fdd43584dda6930977939" - integrity sha512-1hvUs76HLYR8zkScbwyJ8oJEugfPV+WchpnA+26fpJ7Smzs51CzGBHC32RS03psuX/2l0l0UKh2StzNxOrKCYg== +postcss-discard-duplicates@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz#d121e893c38dc58a67277f75bb58ba43fce4c3eb" + integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw== postcss-discard-empty@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== -postcss-discard-empty@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.1.tgz#b34cb45ec891246da4506b53e352390fdef126c4" - integrity sha512-yitcmKwmVWtNsrrRqGJ7/C0YRy53i0mjexBDQ9zYxDwTWVBgbU4+C9jIZLmQlTDT9zhml+u0OMFJh8+31krmOg== +postcss-discard-empty@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz#ee39c327219bb70473a066f772621f81435a79d9" + integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ== postcss-discard-overridden@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== -postcss-discard-overridden@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.1.tgz#c63c559237758d74bc505452393a64dda9b19ef4" - integrity sha512-qs0ehZMMZpSESbRkw1+inkf51kak6OOzNRaoLd/U7Fatp0aN2HQ1rxGOrJvYcRAN9VpX8kUF13R2ofn8OlvFVA== +postcss-discard-overridden@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz#4e9f9c62ecd2df46e8fdb44dc17e189776572e2d" + integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ== postcss-double-position-gradients@^4.0.4: version "4.0.4" @@ -29762,13 +29830,13 @@ postcss-merge-longhand@^5.1.7: postcss-value-parser "^4.2.0" stylehacks "^5.1.1" -postcss-merge-longhand@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.2.tgz#cd4e83014851da59545e9a906b245615550f4064" - integrity sha512-+yfVB7gEM8SrCo9w2lCApKIEzrTKl5yS1F4yGhV3kSim6JzbfLGJyhR1B6X+6vOT0U33Mgx7iv4X9MVWuaSAfw== +postcss-merge-longhand@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz#ba8a8d473617c34a36abbea8dda2b215750a065a" + integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w== dependencies: postcss-value-parser "^4.2.0" - stylehacks "^6.0.2" + stylehacks "^6.1.1" postcss-merge-rules@^5.1.4: version "5.1.4" @@ -29780,15 +29848,15 @@ postcss-merge-rules@^5.1.4: cssnano-utils "^3.1.0" postcss-selector-parser "^6.0.5" -postcss-merge-rules@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.0.3.tgz#08fcf714faaad75b1980ecd961b080ae2f8ddeb3" - integrity sha512-yfkDqSHGohy8sGYIJwBmIGDv4K4/WrJPX355XrxQb/CSsT4Kc/RxDi6akqn5s9bap85AWgv21ArcUWwWdGNSHA== +postcss-merge-rules@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz#7aa539dceddab56019469c0edd7d22b64c3dea9d" + integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ== dependencies: - browserslist "^4.22.2" + browserslist "^4.23.0" caniuse-api "^3.0.0" - cssnano-utils "^4.0.1" - postcss-selector-parser "^6.0.15" + cssnano-utils "^4.0.2" + postcss-selector-parser "^6.0.16" postcss-minify-font-values@^5.1.0: version "5.1.0" @@ -29797,10 +29865,10 @@ postcss-minify-font-values@^5.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-minify-font-values@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.0.1.tgz#788eb930168be90225f3937f0b70aa19d8b532b2" - integrity sha512-tIwmF1zUPoN6xOtA/2FgVk1ZKrLcCvE0dpZLtzyyte0j9zUeB8RTbCqrHZGjJlxOvNWKMYtunLrrl7HPOiR46w== +postcss-minify-font-values@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz#a0e574c02ee3f299be2846369211f3b957ea4c59" + integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg== dependencies: postcss-value-parser "^4.2.0" @@ -29813,13 +29881,13 @@ postcss-minify-gradients@^5.1.1: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-minify-gradients@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.1.tgz#4faf1880b483dc37016658aa186b42194ff9b5bc" - integrity sha512-M1RJWVjd6IOLPl1hYiOd5HQHgpp6cvJVLrieQYS9y07Yo8itAr6jaekzJphaJFR0tcg4kRewCk3kna9uHBxn/w== +postcss-minify-gradients@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz#ca3eb55a7bdb48a1e187a55c6377be918743dbd6" + integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q== dependencies: - colord "^2.9.1" - cssnano-utils "^4.0.1" + colord "^2.9.3" + cssnano-utils "^4.0.2" postcss-value-parser "^4.2.0" postcss-minify-params@^5.1.4: @@ -29831,13 +29899,13 @@ postcss-minify-params@^5.1.4: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-minify-params@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.0.2.tgz#bd64af642fa5610281b8a9461598bbb91f92ae05" - integrity sha512-zwQtbrPEBDj+ApELZ6QylLf2/c5zmASoOuA4DzolyVGdV38iR2I5QRMsZcHkcdkZzxpN8RS4cN7LPskOkTwTZw== +postcss-minify-params@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz#54551dec77b9a45a29c3cb5953bf7325a399ba08" + integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA== dependencies: - browserslist "^4.22.2" - cssnano-utils "^4.0.1" + browserslist "^4.23.0" + cssnano-utils "^4.0.2" postcss-value-parser "^4.2.0" postcss-minify-selectors@^5.2.1: @@ -29847,31 +29915,31 @@ postcss-minify-selectors@^5.2.1: dependencies: postcss-selector-parser "^6.0.5" -postcss-minify-selectors@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.2.tgz#62065b38d3453ddc6627ba50e4f4a2154b031aa0" - integrity sha512-0b+m+w7OAvZejPQdN2GjsXLv5o0jqYHX3aoV0e7RBKPCsB7TYG5KKWBFhGnB/iP3213Ts8c5H4wLPLMm7z28Sg== +postcss-minify-selectors@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz#197f7d72e6dd19eed47916d575d69dc38b396aff" + integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ== dependencies: - postcss-selector-parser "^6.0.15" + postcss-selector-parser "^6.0.16" -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== +postcss-modules-extract-imports@^3.0.0, postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== -postcss-modules-local-by-default@^4.0.0, postcss-modules-local-by-default@^4.0.3, postcss-modules-local-by-default@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz#7cbed92abd312b94aaea85b68226d3dec39a14e6" - integrity sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q== +postcss-modules-local-by-default@^4.0.0, postcss-modules-local-by-default@^4.0.3, postcss-modules-local-by-default@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f" + integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw== dependencies: icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^3.0.0, postcss-modules-scope@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz#32cfab55e84887c079a19bbb215e721d683ef134" - integrity sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA== +postcss-modules-scope@^3.0.0, postcss-modules-scope@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz#a43d28289a169ce2c15c00c4e64c0858e43457d5" + integrity sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ== dependencies: postcss-selector-parser "^6.0.4" @@ -29916,10 +29984,10 @@ postcss-normalize-charset@^5.1.0: resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== -postcss-normalize-charset@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.1.tgz#5f70e1eb8bbdbcfcbed060ef70f179e8fef57d0c" - integrity sha512-aW5LbMNRZ+oDV57PF9K+WI1Z8MPnF+A8qbajg/T8PP126YrGX1f9IQx21GI2OlGz7XFJi/fNi0GTbY948XJtXg== +postcss-normalize-charset@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1" + integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ== postcss-normalize-display-values@^5.1.0: version "5.1.0" @@ -29928,10 +29996,10 @@ postcss-normalize-display-values@^5.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-display-values@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.1.tgz#ff9aa30bbf1283294bfd9cc8b6fb81ff060a7f2d" - integrity sha512-mc3vxp2bEuCb4LgCcmG1y6lKJu1Co8T+rKHrcbShJwUmKJiEl761qb/QQCfFwlrvSeET3jksolCR/RZuMURudw== +postcss-normalize-display-values@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz#54f02764fed0b288d5363cbb140d6950dbbdd535" + integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg== dependencies: postcss-value-parser "^4.2.0" @@ -29942,10 +30010,10 @@ postcss-normalize-positions@^5.1.1: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-positions@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.1.tgz#41ffdc72994f024c6cd6e91dbfb40ab9abe6fe90" - integrity sha512-HRsq8u/0unKNvm0cvwxcOUEcakFXqZ41fv3FOdPn916XFUrympjr+03oaLkuZENz3HE9RrQE9yU0Xv43ThWjQg== +postcss-normalize-positions@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz#e982d284ec878b9b819796266f640852dbbb723a" + integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q== dependencies: postcss-value-parser "^4.2.0" @@ -29956,10 +30024,10 @@ postcss-normalize-repeat-style@^5.1.1: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.1.tgz#55dc54b6f80305b280a379899a6626e0a07b04a8" - integrity sha512-Gbb2nmCy6tTiA7Sh2MBs3fj9W8swonk6lw+dFFeQT68B0Pzwp1kvisJQkdV6rbbMSd9brMlS8I8ts52tAGWmGQ== +postcss-normalize-repeat-style@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz#f8006942fd0617c73f049dd8b6201c3a3040ecf3" + integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ== dependencies: postcss-value-parser "^4.2.0" @@ -29970,10 +30038,10 @@ postcss-normalize-string@^5.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-string@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.1.tgz#7605e0fb4ec7bf2709709991d13a949e4419db1d" - integrity sha512-5Fhx/+xzALJD9EI26Aq23hXwmv97Zfy2VFrt5PLT8lAhnBIZvmaT5pQk+NuJ/GWj/QWaKSKbnoKDGLbV6qnhXg== +postcss-normalize-string@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz#e3cc6ad5c95581acd1fc8774b309dd7c06e5e363" + integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ== dependencies: postcss-value-parser "^4.2.0" @@ -29984,10 +30052,10 @@ postcss-normalize-timing-functions@^5.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.1.tgz#ef937b7ca2fd62ed0b46645ea5728b842a3600db" - integrity sha512-4zcczzHqmCU7L5dqTB9rzeqPWRMc0K2HoR+Bfl+FSMbqGBUcP5LRfgcH4BdRtLuzVQK1/FHdFoGT3F7rkEnY+g== +postcss-normalize-timing-functions@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz#40cb8726cef999de984527cbd9d1db1f3e9062c0" + integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA== dependencies: postcss-value-parser "^4.2.0" @@ -29999,12 +30067,12 @@ postcss-normalize-unicode@^5.1.1: browserslist "^4.21.4" postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.2.tgz#361026744ff11baebaec771b60c2a5f36f274fd0" - integrity sha512-Ff2VdAYCTGyMUwpevTZPZ4w0+mPjbZzLLyoLh/RMpqUqeQKZ+xMm31hkxBavDcGKcxm6ACzGk0nBfZ8LZkStKA== +postcss-normalize-unicode@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz#aaf8bbd34c306e230777e80f7f12a4b7d27ce06e" + integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg== dependencies: - browserslist "^4.22.2" + browserslist "^4.23.0" postcss-value-parser "^4.2.0" postcss-normalize-url@^5.1.0: @@ -30015,10 +30083,10 @@ postcss-normalize-url@^5.1.0: normalize-url "^6.0.1" postcss-value-parser "^4.2.0" -postcss-normalize-url@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.1.tgz#eae58cb4f5f9a4fa5bbbf6d4222dff534ad46186" - integrity sha512-jEXL15tXSvbjm0yzUV7FBiEXwhIa9H88JOXDGQzmcWoB4mSjZIsmtto066s2iW9FYuIrIF4k04HA2BKAOpbsaQ== +postcss-normalize-url@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz#292792386be51a8de9a454cb7b5c58ae22db0f79" + integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ== dependencies: postcss-value-parser "^4.2.0" @@ -30029,10 +30097,10 @@ postcss-normalize-whitespace@^5.1.1: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-whitespace@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.1.tgz#b5933750b938814c028d3d2b2e5c0199e0037b53" - integrity sha512-76i3NpWf6bB8UHlVuLRxG4zW2YykF9CTEcq/9LGAiz2qBuX5cBStadkk0jSkg9a9TCIXbMQz7yzrygKoCW9JuA== +postcss-normalize-whitespace@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz#fbb009e6ebd312f8b2efb225c2fcc7cf32b400cd" + integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q== dependencies: postcss-value-parser "^4.2.0" @@ -30049,12 +30117,12 @@ postcss-ordered-values@^5.1.3: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-ordered-values@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.1.tgz#553e735d009065b362da93340e57f43d5f2d0fbc" - integrity sha512-XXbb1O/MW9HdEhnBxitZpPFbIvDgbo9NK4c/5bOfiKpnIGZDoL2xd7/e6jW5DYLsWxBbs+1nZEnVgnjnlFViaA== +postcss-ordered-values@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5" + integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q== dependencies: - cssnano-utils "^4.0.1" + cssnano-utils "^4.0.2" postcss-value-parser "^4.2.0" postcss-overflow-shorthand@^4.0.1: @@ -30153,12 +30221,12 @@ postcss-reduce-initial@^5.1.2: browserslist "^4.21.4" caniuse-api "^3.0.0" -postcss-reduce-initial@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.0.2.tgz#763d25902406c872264041df69f182eb15a5d9be" - integrity sha512-YGKalhNlCLcjcLvjU5nF8FyeCTkCO5UtvJEt0hrPZVCTtRLSOH4z00T1UntQPj4dUmIYZgMj8qK77JbSX95hSw== +postcss-reduce-initial@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz#4401297d8e35cb6e92c8e9586963e267105586ba" + integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw== dependencies: - browserslist "^4.22.2" + browserslist "^4.23.0" caniuse-api "^3.0.0" postcss-reduce-transforms@^5.1.0: @@ -30168,10 +30236,10 @@ postcss-reduce-transforms@^5.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-reduce-transforms@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.1.tgz#7bf59d7c6e7066e3b18ef17237d2344bd3da6d75" - integrity sha512-fUbV81OkUe75JM+VYO1gr/IoA2b/dRiH6HvMwhrIBSUrxq3jNZQZitSnugcTLDi1KkQh1eR/zi+iyxviUNBkcQ== +postcss-reduce-transforms@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz#6fa2c586bdc091a7373caeee4be75a0f3e12965d" + integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA== dependencies: postcss-value-parser "^4.2.0" @@ -30181,16 +30249,16 @@ postcss-replace-overflow-wrap@^4.0.0: integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== postcss-selector-not@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz#8142e90c8eb6c8c5faecb3e9d96d4353d02e94fb" - integrity sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ== + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.2.tgz#f9184c7770be5dcb4abd7efa3610a15fbd2f0b31" + integrity sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA== dependencies: - postcss-selector-parser "^6.0.10" + postcss-selector-parser "^6.0.13" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.15, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.15" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" - integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.16, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" + integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -30203,10 +30271,10 @@ postcss-svgo@^5.1.0: postcss-value-parser "^4.2.0" svgo "^2.7.0" -postcss-svgo@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.2.tgz#dbc9d03e7f346bc0d82443078602a951e0214836" - integrity sha512-IH5R9SjkTkh0kfFOQDImyy1+mTCb+E830+9SV1O+AaDcoHTvfsvt6WwJeo7KwcHbFnevZVCsXhDmjFiGVuwqFQ== +postcss-svgo@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa" + integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g== dependencies: postcss-value-parser "^4.2.0" svgo "^3.2.0" @@ -30218,12 +30286,12 @@ postcss-unique-selectors@^5.1.1: dependencies: postcss-selector-parser "^6.0.5" -postcss-unique-selectors@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.2.tgz#09a34a5a31a649d3e9bca5962af0616f39d071d2" - integrity sha512-8IZGQ94nechdG7Y9Sh9FlIY2b4uS8/k8kdKRX040XHsS3B6d1HrJAkXrBSsSu4SuARruSsUjW3nlSw8BHkaAYQ== +postcss-unique-selectors@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz#983ab308896b4bf3f2baaf2336e14e52c11a2088" + integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg== dependencies: - postcss-selector-parser "^6.0.15" + postcss-selector-parser "^6.0.16" postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" @@ -30266,24 +30334,24 @@ postcss@8.4.31: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.1.7, postcss@^8.2.14, postcss@^8.4.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.24, postcss@^8.4.33: - version "8.4.34" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.34.tgz#563276e86b4ff20dfa5eed0d394d4c53853b2051" - integrity sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q== +postcss@8.4.38, postcss@^8.1.7, postcss@^8.2.14, postcss@^8.4.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.24, postcss@^8.4.33: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== dependencies: nanoid "^3.3.7" picocolors "^1.0.0" - source-map-js "^1.0.2" + source-map-js "^1.2.0" -preact@^10.12.0, preact@^10.5.9: - version "10.19.3" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.19.3.tgz#7a7107ed2598a60676c943709ea3efb8aaafa899" - integrity sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ== +preact@^10.12.0, preact@^10.16.0: + version "10.22.0" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.22.0.tgz#a50f38006ae438d255e2631cbdaf7488e6dd4e16" + integrity sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw== prebuild-install@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + version "7.1.2" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== dependencies: detect-libc "^2.0.0" expand-template "^2.0.3" @@ -30373,16 +30441,16 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== +"prettier-fallback@npm:prettier@^3", prettier@^3.1.1: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + prettier@^2.8.0, prettier@^2.8.8: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -prettier@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== - pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" @@ -30536,19 +30604,19 @@ property-information@^5.0.0: xtend "^4.0.0" property-information@^6.0.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.4.1.tgz#de8b79a7415fd2107dfbe65758bb2cc9dfcf60ac" - integrity sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w== + version "6.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== -protobufjs@^7.1.2, protobufjs@^7.2.2, protobufjs@^7.2.3, protobufjs@^7.2.4: - version "7.2.6" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.6.tgz#4a0ccd79eb292717aacf07530a07e0ed20278215" - integrity sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw== +protobufjs@^7.1.2, protobufjs@^7.2.2, protobufjs@^7.2.3, protobufjs@^7.2.5: + version "7.3.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.0.tgz#a32ec0422c039798c41a0700306a6e305b9cb32c" + integrity sha512-YWD03n3shzV9ImZRX3ccbjqLxj7NokGN0V/ESiBV5xWqrommYHYiihuIyavq03pWSGqlyvYUFmfoMKd+1rPA/g== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -30685,9 +30753,9 @@ pupa@^3.1.0: escape-goat "^4.0.0" pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== pvtsutils@^1.3.2, pvtsutils@^1.3.5: version "1.3.5" @@ -30725,12 +30793,12 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -qs@^6.10.0, qs@^6.10.3, qs@^6.11.2, qs@^6.4.0, qs@^6.9.6: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== +qs@^6.10.0, qs@^6.11.2, qs@^6.4.0, qs@^6.9.6: + version "6.12.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.1.tgz#39422111ca7cbdb70425541cba20c7d7b216599a" + integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== dependencies: - side-channel "^1.0.4" + side-channel "^1.0.6" qs@~6.5.2: version "6.5.3" @@ -30820,20 +30888,20 @@ r1csfile@0.0.45: fastfile "0.0.20" ffjavascript "0.2.57" -r1csfile@0.0.47: - version "0.0.47" - resolved "https://registry.yarnpkg.com/r1csfile/-/r1csfile-0.0.47.tgz#ed95a0dc8e910e9c070253906f7a31bd8c5333c8" - integrity sha512-oI4mAwuh1WwuFg95eJDNDDL8hCaZkwnPuNZrQdLBWvDoRU7EG+L/MOHL7SwPW2Y+ZuYcTLpj3rBkgllBQZN/JA== +r1csfile@0.0.48: + version "0.0.48" + resolved "https://registry.yarnpkg.com/r1csfile/-/r1csfile-0.0.48.tgz#a317fc75407a9da92631666c75bdfc13f0a7835a" + integrity sha512-kHRkKUJNaor31l05f2+RFzvcH5XSa7OfEfd/l4hzjte6NL6fjRkSMfZ4BjySW9wmfdwPOtq3mXurzPvPGEf5Tw== dependencies: "@iden3/bigarray" "0.0.2" - "@iden3/binfileutils" "0.0.11" + "@iden3/binfileutils" "0.0.12" fastfile "0.0.20" - ffjavascript "0.2.60" + ffjavascript "0.3.0" radix3@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.0.tgz#9745df67a49c522e94a33d0a93cf743f104b6e0d" - integrity sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.2.tgz#fd27d2af3896c6bf4bcdfab6427c69c2afc69ec0" + integrity sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA== ramda@0.29.0: version "0.29.0" @@ -30906,9 +30974,9 @@ react-colorful@^5.1.2: integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw== react-complex-tree@^2.3.2: - version "2.3.4" - resolved "https://registry.yarnpkg.com/react-complex-tree/-/react-complex-tree-2.3.4.tgz#7692009fd12215b0c813d46f5bf4bfdce239c3cc" - integrity sha512-Ae0eWw52At8re6sG83uFQv5WwLfEYz3p5Dhtie41uh19xxXx6UmVH64HTF8qMUO0nJ+T/4egnaKAScb15NSQgA== + version "2.4.4" + resolved "https://registry.yarnpkg.com/react-complex-tree/-/react-complex-tree-2.4.4.tgz#7395f38e68a5c955d60f390191942bbf05da1839" + integrity sha512-Nltzn7oJMF9NnPxrfxRxVD/4u/ZkCVEnwQ4Em6hmZT+m/DUCorIoPsL3VV86zZXx0D2Rj6LX8dHWnYFrMmYYlw== react-copy-to-clipboard@^5.1.0: version "5.1.0" @@ -30940,12 +31008,12 @@ react-docgen@^5.0.0: strip-indent "^3.0.0" react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.23.2" react-dropzone@^14.2.3: version "14.2.3" @@ -30996,9 +31064,9 @@ react-intersection-observer@^6.1.0: invariant "^2.2.4" react-intersection-observer@^9.4.1: - version "9.7.0" - resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.7.0.tgz#da65834ace0852e04b73cb97f0c48bdaa5b13589" - integrity sha512-euleEjBVaMRwSOMNVcMX5WGn74GfZ9I78nx9SUb5a0eXd0IhegjJcUliSO9Jd+xiaZ5rgFvbGoVln66lpMyUUg== + version "9.10.2" + resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.10.2.tgz#d5b14f80c9a6bed525becc228db7dccac5d0ec1c" + integrity sha512-j2hGADK2hCbAlfaq6L3tVLb4iqngoN7B1fT16MwJ4J16YW/vWLcmAIinLsw0lgpZeMi4UDUWtHC9QDde0/P1yQ== react-is@18.1.0: version "18.1.0" @@ -31016,9 +31084,9 @@ react-is@^17.0.1: integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== react-lazy-images@^1.1.0: version "1.1.0" @@ -31028,7 +31096,7 @@ react-lazy-images@^1.1.0: react-intersection-observer "^6.1.0" unionize "^2.1.2" -react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: +react-lifecycles-compat@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -31127,9 +31195,9 @@ react-refresh@^0.11.0: integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== react-remove-scroll-bar@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9" - integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== + version "2.3.6" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz#3e585e9d163be84a010180b18721e851ac81a29c" + integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g== dependencies: react-style-singleton "^2.2.1" tslib "^2.0.0" @@ -31146,9 +31214,9 @@ react-remove-scroll@2.5.5: use-sidecar "^1.1.2" react-resizable-panels@^2.0.16: - version "2.0.16" - resolved "https://registry.yarnpkg.com/react-resizable-panels/-/react-resizable-panels-2.0.16.tgz#bb7c6ca56c6320a0a0b821a67c6aac5c88981517" - integrity sha512-UrnxmTZaTnbCl/xIOX38ig35RicqGfLuqt2x5fytpNlQvCRuxyXZwIBEhmF+pmrEGxfajyXFBoCplNxLvhF0CQ== + version "2.0.19" + resolved "https://registry.yarnpkg.com/react-resizable-panels/-/react-resizable-panels-2.0.19.tgz#df259898c682cb774af65c3bc38c1b29c855b99b" + integrity sha512-v3E41kfKSuCPIvJVb4nL4mIZjjKIn/gh6YqZF/gDfQDolv/8XnhJBek4EiV2gOr3hhc5A3kOGOayk3DhanpaQw== react-resize-detector@^7.1.2: version "7.1.2" @@ -31158,27 +31226,28 @@ react-resize-detector@^7.1.2: lodash "^4.17.21" react-router-dom@^6.16.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.22.0.tgz#177c8bd27146decbb991eafb5df159f7a9f70035" - integrity sha512-z2w+M4tH5wlcLmH3BMMOMdrtrJ9T3oJJNsAlBJbwk+8Syxd5WFJ7J5dxMEW0/GEXD1BBis4uXRrNIz3mORr0ag== + version "6.23.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.23.1.tgz#30cbf266669693e9492aa4fc0dde2541ab02322f" + integrity sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ== dependencies: - "@remix-run/router" "1.15.0" - react-router "6.22.0" + "@remix-run/router" "1.16.1" + react-router "6.23.1" -react-router@6.22.0, react-router@^6.16.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.22.0.tgz#a22b44851a79dafc6b944cb418db3e80622b9be1" - integrity sha512-q2yemJeg6gw/YixRlRnVx6IRJWZD6fonnfZhN1JIOhV2iJCPeRNSH3V1ISwHf+JWcESzLC3BOLD1T07tmO5dmg== +react-router@6.23.1, react-router@^6.16.0: + version "6.23.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.23.1.tgz#d08cbdbd9d6aedc13eea6e94bc6d9b29cb1c4be9" + integrity sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ== dependencies: - "@remix-run/router" "1.15.0" + "@remix-run/router" "1.16.1" -react-smooth@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-2.0.5.tgz#d153b7dffc7143d0c99e82db1532f8cf93f20ecd" - integrity sha512-BMP2Ad42tD60h0JW6BFaib+RJuV5dsXJK9Baxiv/HlNFjvRLqA9xrNKxVWnUIZPQfzUwGXIlU/dSYLU+54YGQA== +react-smooth@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-4.0.1.tgz#6200d8699bfe051ae40ba187988323b1449eab1a" + integrity sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w== dependencies: - fast-equals "^5.0.0" - react-transition-group "2.9.0" + fast-equals "^5.0.1" + prop-types "^15.8.1" + react-transition-group "^4.4.5" react-style-singleton@^2.2.1: version "2.2.1" @@ -31200,15 +31269,15 @@ react-syntax-highlighter@^15.5.0: prismjs "^1.27.0" refractor "^3.6.0" -react-transition-group@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: - dom-helpers "^3.4.0" + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" react-universal-interface@^0.6.2: version "0.6.2" @@ -31236,9 +31305,9 @@ react-use@^17.3.1: tslib "^2.1.0" react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" @@ -31249,7 +31318,7 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-pkg-up@9.1.0, read-pkg-up@^9.0.0: +read-pkg-up@9.1.0, read-pkg-up@^9.0.0, read-pkg-up@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-9.1.0.tgz#38ca48e0bc6c6b260464b14aad9bcd4e5b1fbdc3" integrity sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg== @@ -31294,7 +31363,7 @@ read@^1.0.7: dependencies: mute-stream "~0.0.4" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0, readable-stream@^3.6.2: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -31303,7 +31372,7 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stre string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@~2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.3.8, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -31372,21 +31441,10 @@ real-require@^0.2.0: resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== -recast@^0.23.1, recast@^0.23.3: - version "0.23.4" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.4.tgz#ca1bac7bfd3011ea5a28dfecb5df678559fb1ddf" - integrity sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw== - dependencies: - assert "^2.0.0" - ast-types "^0.16.1" - esprima "~4.0.0" - source-map "~0.6.1" - tslib "^2.0.1" - -recast@^0.23.5: - version "0.23.6" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.6.tgz#198fba74f66143a30acc81929302d214ce4e3bfa" - integrity sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ== +recast@^0.23.1, recast@^0.23.3, recast@^0.23.5: + version "0.23.7" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.7.tgz#1e08f164e10402b075c904a2b01022b3da039c72" + integrity sha512-MpQlLZVpqbbxYcqEjwpRWo88sGvjOYoXptySz710RuddNMHx+wPkoNX6YyLZJlXAh5VZr1qmPrTwcTuFMh0Lag== dependencies: ast-types "^0.16.1" esprima "~4.0.0" @@ -31402,15 +31460,15 @@ recharts-scale@^0.4.4: decimal.js-light "^2.4.1" recharts@^2.6.2: - version "2.11.0" - resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.11.0.tgz#af17248b6d2cb099cfd42ba93b307bf807adb456" - integrity sha512-5s+u1m5Hwxb2nh0LABkE3TS/lFqFHyWl7FnPbQhHobbQQia4ih1t3o3+ikPYr31Ns+kYe4FASIthKeKi/YYvMg== + version "2.12.7" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.12.7.tgz#c7f42f473a257ff88b43d88a92530930b5f9e773" + integrity sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ== dependencies: clsx "^2.0.0" eventemitter3 "^4.0.1" - lodash "^4.17.19" + lodash "^4.17.21" react-is "^16.10.2" - react-smooth "^2.0.5" + react-smooth "^4.0.0" recharts-scale "^0.4.4" tiny-invariant "^1.3.1" victory-vendor "^36.6.8" @@ -31450,15 +31508,15 @@ redis-parser@^3.0.0: redis-errors "^1.0.0" reflect.getprototypeof@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" - integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - get-intrinsic "^1.2.3" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -31518,14 +31576,15 @@ regexp-tree@^0.1.24: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" regexpp@^3.0.0: version "3.2.0" @@ -31579,10 +31638,10 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" -rehackt@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.0.3.tgz#1ea454620d4641db8342e2db44595cf0e7ac6aa0" - integrity sha512-aBRHudKhOWwsTvCbSoinzq+Lej/7R8e8UoPvLZo5HirZIIBLGAgdG7SL9QpdcBoQ7+3QYPi3lRLknAzXBlhZ7g== +rehackt@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.1.0.tgz#a7c5e289c87345f70da8728a7eb878e5d03c696b" + integrity sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw== rehype-raw@^7.0.0: version "7.0.0" @@ -31684,10 +31743,10 @@ remedial@^1.0.7: resolved "https://registry.yarnpkg.com/remedial/-/remedial-1.0.8.tgz#a5e4fd52a0e4956adbaf62da63a5a46a78c578a0" integrity sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg== -remove-accents@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" - integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== +remove-accents@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" + integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== remove-markdown@^0.5.0: version "0.5.0" @@ -31769,9 +31828,9 @@ require-from-string@^2.0.2: integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-in-the-middle@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.2.0.tgz#b539de8f00955444dc8aed95e17c69b0a4f10fcf" - integrity sha512-3TLx5TGyAY6AOqLBoXmHkNql0HIf2RGbuMgCDT2WO/uGVAPJs6h7Kl+bN6TIZGd9bWhWPwnDnTHGtW8Iu77sdw== + version "7.3.0" + resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.3.0.tgz#ce64a1083647dc07b3273b348357efac8a9945c9" + integrity sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw== dependencies: debug "^4.1.1" module-details-from-path "^1.0.3" @@ -31885,7 +31944,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.21.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.21.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4, resolve@^1.22.8: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -31894,7 +31953,7 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14. path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.1, resolve@^2.0.0-next.4: +resolve@^2.0.0-next.1, resolve@^2.0.0-next.4, resolve@^2.0.0-next.5: version "2.0.0-next.5" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== @@ -31978,7 +32037,7 @@ rfdc@^1.2.0, rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -31986,9 +32045,9 @@ rimraf@^3.0.0, rimraf@^3.0.2: glob "^7.1.3" rimraf@^5.0.0: - version "5.0.5" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" - integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== + version "5.0.7" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.7.tgz#27bddf202e7d89cb2e0381656380d1734a854a74" + integrity sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg== dependencies: glob "^10.3.7" @@ -32022,7 +32081,7 @@ rollup-plugin-cleanup@^3.2.1: js-cleanup "^1.2.0" rollup-pluginutils "^2.8.2" -rollup-plugin-copy@3.5.0, rollup-plugin-copy@^3.4.0: +rollup-plugin-copy@3.5.0, rollup-plugin-copy@^3.4.0, rollup-plugin-copy@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/rollup-plugin-copy/-/rollup-plugin-copy-3.5.0.tgz#7ffa2a7a8303e143876fa64fb5eed9022d304eeb" integrity sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA== @@ -32046,7 +32105,7 @@ rollup-plugin-peer-deps-external@^2.2.4: resolved "https://registry.yarnpkg.com/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.4.tgz#8a420bbfd6dccc30aeb68c9bf57011f2f109570d" integrity sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g== -rollup-plugin-postcss@4.0.2, rollup-plugin-postcss@^4.0.1: +rollup-plugin-postcss@4.0.2, rollup-plugin-postcss@^4.0.1, rollup-plugin-postcss@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz#15e9462f39475059b368ce0e49c800fa4b1f7050" integrity sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w== @@ -32076,6 +32135,17 @@ rollup-plugin-typescript2@0.34.1: semver "^7.3.7" tslib "^2.4.0" +rollup-plugin-typescript2@^0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz#309564eb70d710412f5901344ca92045e180ed53" + integrity sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw== + dependencies: + "@rollup/pluginutils" "^4.1.2" + find-cache-dir "^3.3.2" + fs-extra "^10.0.0" + semver "^7.5.4" + tslib "^2.6.2" + rollup-pluginutils@^2.8.2: version "2.8.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" @@ -32097,68 +32167,41 @@ rollup@^3.20.7: optionalDependencies: fsevents "~2.3.2" -rollup@^4.12.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.12.0.tgz#0b6d1e5f3d46bbcf244deec41a7421dc54cc45b5" - integrity sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q== - dependencies: - "@types/estree" "1.0.5" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.12.0" - "@rollup/rollup-android-arm64" "4.12.0" - "@rollup/rollup-darwin-arm64" "4.12.0" - "@rollup/rollup-darwin-x64" "4.12.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.12.0" - "@rollup/rollup-linux-arm64-gnu" "4.12.0" - "@rollup/rollup-linux-arm64-musl" "4.12.0" - "@rollup/rollup-linux-riscv64-gnu" "4.12.0" - "@rollup/rollup-linux-x64-gnu" "4.12.0" - "@rollup/rollup-linux-x64-musl" "4.12.0" - "@rollup/rollup-win32-arm64-msvc" "4.12.0" - "@rollup/rollup-win32-ia32-msvc" "4.12.0" - "@rollup/rollup-win32-x64-msvc" "4.12.0" - fsevents "~2.3.2" - -rollup@^4.9.6: - version "4.13.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.13.0.tgz#dd2ae144b4cdc2ea25420477f68d4937a721237a" - integrity sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg== +rollup@^4.12.0, rollup@^4.14.0, rollup@^4.9.6: + version "4.18.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.0.tgz#497f60f0c5308e4602cf41136339fbf87d5f5dda" + integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.13.0" - "@rollup/rollup-android-arm64" "4.13.0" - "@rollup/rollup-darwin-arm64" "4.13.0" - "@rollup/rollup-darwin-x64" "4.13.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.13.0" - "@rollup/rollup-linux-arm64-gnu" "4.13.0" - "@rollup/rollup-linux-arm64-musl" "4.13.0" - "@rollup/rollup-linux-riscv64-gnu" "4.13.0" - "@rollup/rollup-linux-x64-gnu" "4.13.0" - "@rollup/rollup-linux-x64-musl" "4.13.0" - "@rollup/rollup-win32-arm64-msvc" "4.13.0" - "@rollup/rollup-win32-ia32-msvc" "4.13.0" - "@rollup/rollup-win32-x64-msvc" "4.13.0" + "@rollup/rollup-android-arm-eabi" "4.18.0" + "@rollup/rollup-android-arm64" "4.18.0" + "@rollup/rollup-darwin-arm64" "4.18.0" + "@rollup/rollup-darwin-x64" "4.18.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.18.0" + "@rollup/rollup-linux-arm-musleabihf" "4.18.0" + "@rollup/rollup-linux-arm64-gnu" "4.18.0" + "@rollup/rollup-linux-arm64-musl" "4.18.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0" + "@rollup/rollup-linux-riscv64-gnu" "4.18.0" + "@rollup/rollup-linux-s390x-gnu" "4.18.0" + "@rollup/rollup-linux-x64-gnu" "4.18.0" + "@rollup/rollup-linux-x64-musl" "4.18.0" + "@rollup/rollup-win32-arm64-msvc" "4.18.0" + "@rollup/rollup-win32-ia32-msvc" "4.18.0" + "@rollup/rollup-win32-x64-msvc" "4.18.0" fsevents "~2.3.2" -rpc-websockets@^7.5.1: - version "7.9.0" - resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.9.0.tgz#a3938e16d6f134a3999fdfac422a503731bf8973" - integrity sha512-DwKewQz1IUA5wfLvgM8wDpPRcr+nWSxuFxx5CbrI2z/MyyZ4nXLM86TvIA+cI1ZAdqC8JIBR1mZR55dzaLU+Hw== - dependencies: - "@babel/runtime" "^7.17.2" - eventemitter3 "^4.0.7" - uuid "^8.3.2" - ws "^8.5.0" - optionalDependencies: - bufferutil "^4.0.1" - utf-8-validate "^5.0.2" - rrweb-cssom@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== +rrweb-cssom@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.7.0.tgz#51cc1e7f4c20dd81218545b5092939bc6fd81bcd" + integrity sha512-KlSv0pm9kgQSRxXEMgtivPJ4h826YHsuob8pSHcfSZsSXGtvpEAie8S0AnXuObEJ7nhikOb4ahwxDm0H2yW17g== + rtl-css-js@^1.16.1: version "1.16.1" resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.16.1.tgz#4b48b4354b0ff917a30488d95100fbf7219a3e80" @@ -32185,7 +32228,7 @@ rxjs@7.8.1, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.0, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.6.2, rxjs@^6.6.3: +rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.6.2: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -32199,13 +32242,13 @@ sade@^1.7.3: dependencies: mri "^1.1.0" -safe-array-concat@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" - integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" has-symbols "^1.0.3" isarray "^2.0.5" @@ -32234,13 +32277,13 @@ safe-json-stringify@^1.2.0: resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== -safe-regex-test@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.2.tgz#3ba32bdb3ea35f940ee87e5087c60ee786c3f6c5" - integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" safe-regex2@^2.0.0: @@ -32290,18 +32333,18 @@ sass-lookup@^3.0.0: commander "^2.16.0" sass@^1.42.1, sass@^1.52.3: - version "1.70.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.70.0.tgz#761197419d97b5358cb25f9dd38c176a8a270a75" - integrity sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ== + version "1.77.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.2.tgz#18d4ed2eefc260cdc8099c5439ec1303fd5863aa" + integrity sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" sax@^1.2.4: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" - integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + version "1.4.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.0.tgz#829d8c11eb6a8728d3b86cdeea4fc3893342b5e7" + integrity sha512-G3nn4N8SRaR9NsCqEUHfTlfTM/Fgza1yfb8JP2CEmzYuHtHWza5Uf+g7nuUQq96prwu0GiGyPgDw752+j4fzQQ== sax@~1.2.4: version "1.2.4" @@ -32315,10 +32358,15 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== +scale-ts@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/scale-ts/-/scale-ts-1.6.0.tgz#e9641093c5a9e50f964ddb1607139034e3e932e9" + integrity sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q== + +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" @@ -32442,13 +32490,18 @@ semver@7.5.4: dependencies: lru-cache "^6.0.0" -semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: +semver@7.6.0: version "7.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" +semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" @@ -32549,25 +32602,27 @@ set-cookie-parser@^2.4.1: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== -set-function-length@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" - integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.2" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.1" + has-property-descriptors "^1.0.2" -set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" set-harmonic-interval@^1.0.1: version "1.0.1" @@ -32664,14 +32719,15 @@ shimmer@^1.2.1: resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" @@ -32752,6 +32808,11 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +slash@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" @@ -32783,10 +32844,10 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -smoldot@2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-2.0.7.tgz#407efd6bbb82a074612db4d056d631d8d615f442" - integrity sha512-VAOBqEen6vises36/zgrmAT1GWk2qE3X8AGnO7lmQFdskbKx8EovnwS22rtPAG+Y1Rk23/S22kDJUdPANyPkBA== +smoldot@2.0.22: + version "2.0.22" + resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-2.0.22.tgz#1e924d2011a31c57416e79a2b97a460f462a31c7" + integrity sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g== dependencies: ws "^8.8.1" @@ -32845,20 +32906,20 @@ snarkjs@^0.6.10: r1csfile "0.0.45" snarkjs@^0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/snarkjs/-/snarkjs-0.7.3.tgz#7f703d05b810235255f2d0a70d8a9b8b3ea916e5" - integrity sha512-cDLpWqdqEJSCQNc+cXYX1XTKdUZBtYEisuOsgmXf/HUsN5WmGN+FO7HfCS+cMQT1Nzbm1a9gAEpKH6KRtDtS1Q== + version "0.7.4" + resolved "https://registry.yarnpkg.com/snarkjs/-/snarkjs-0.7.4.tgz#b9ad5813f055ab84d33f1831a6f1f34a71b6cd46" + integrity sha512-x4cOCR4YXSyBlLtfnUUwfbZrw8wFd/Y0lk83eexJzKwZB8ELdpH+10ts8YtDsm2/a3WK7c7p514bbE8NpqxW8w== dependencies: - "@iden3/binfileutils" "0.0.11" + "@iden3/binfileutils" "0.0.12" bfj "^7.0.2" blake2b-wasm "^2.4.0" - circom_runtime "0.1.24" + circom_runtime "0.1.25" ejs "^3.1.6" fastfile "0.0.20" - ffjavascript "0.2.63" + ffjavascript "0.3.0" js-sha3 "^0.8.0" logplease "^1.2.15" - r1csfile "0.0.47" + r1csfile "0.0.48" sockjs@^0.3.24: version "0.3.24" @@ -32877,9 +32938,9 @@ sonic-boom@^2.2.1: atomic-sleep "^1.0.0" sonic-boom@^3.7.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.8.0.tgz#e442c5c23165df897d77c3c14ef3ca40dec66a66" - integrity sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA== + version "3.8.1" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.8.1.tgz#d5ba8c4e26d6176c9a1d14d549d9ff579a163422" + integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== dependencies: atomic-sleep "^1.0.0" @@ -32904,10 +32965,10 @@ sort-keys@^4.0.0: dependencies: is-plain-obj "^2.0.0" -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== source-map-loader@^3.0.0: version "3.0.2" @@ -33002,9 +33063,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" - integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -33015,9 +33076,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + version "3.0.18" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" + integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== spdy-transport@^3.0.0: version "3.0.0" @@ -33206,9 +33267,9 @@ stop-iteration-iterator@^1.0.0: internal-slot "^1.0.4" store2@^2.14.2: - version "2.14.2" - resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.2.tgz#56138d200f9fe5f582ad63bc2704dbc0e4a45068" - integrity sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w== + version "2.14.3" + resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.3.tgz#24077d7ba110711864e4f691d2af941ec533deb5" + integrity sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg== store@^2.0.12: version "2.0.12" @@ -33216,19 +33277,19 @@ store@^2.0.12: integrity sha512-eO9xlzDpXLiMr9W1nQ3Nfp9EzZieIQc10zPPMP5jsVV7bLOziSFFBP0XoDXACEIFtdI+rIz0NwWVA/QVJ8zJtw== storybook-addon-react-router-v6@^2.0.4: - version "2.0.10" - resolved "https://registry.yarnpkg.com/storybook-addon-react-router-v6/-/storybook-addon-react-router-v6-2.0.10.tgz#479bfa374a33d2cbbaf1d6a9ebddd6d35cdec812" - integrity sha512-HnrjbujAW1oGCdgvv7W6QKskETNXvt0U5qR2pKD8GXHlqkV9wmWa6HW3J0ks0aiBJBsRrPdEViatrhnRD5RZZw== + version "2.0.15" + resolved "https://registry.yarnpkg.com/storybook-addon-react-router-v6/-/storybook-addon-react-router-v6-2.0.15.tgz#01f890ce92f0af8de070fc3a25a9dfaf2bf13752" + integrity sha512-4vOYIQwehlQLyXaCT9K0Iu0po2Z+pANGsqkfm/BQuAEjE9MoN7vrsrQLHINhKbmQVtNMmuS/oBR3GGNbqQ1gew== dependencies: compare-versions "^6.0.0" react-inspector "6.0.2" storybook@^8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.0.6.tgz#8b2616030f94a9708c0771ed532a5cef09a421c2" - integrity sha512-QcQl8Sj77scGl0s9pw+cSPFmXK9DPogEkOceG12B2PqdS23oGkaBt24292Y3W5TTMVNyHtRTRB/FqPwK3FOdmA== + version "8.1.4" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.1.4.tgz#92286949cfe61e934568c5d4300d73cb76280505" + integrity sha512-HPrpoRGmxNfseGeWu06AQbEifI+uZq4yC1c89BFRJ8/llkJwCCCreLGHULZqw4YHylGkUXxhg0Hv36wJGCqxCw== dependencies: - "@storybook/cli" "8.0.6" + "@storybook/cli" "8.1.4" stream-browserify@^3.0.0: version "3.0.0" @@ -33248,7 +33309,7 @@ stream-http@^3.2.0: readable-stream "^3.6.0" xtend "^4.0.2" -stream-shift@^1.0.0: +stream-shift@^1.0.0, stream-shift@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== @@ -33265,13 +33326,15 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -streamx@^2.15.0: - version "2.15.7" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.7.tgz#a12fe09faa3fda2483e8044c406b72286994a138" - integrity sha512-NPEKS5+yjyo597eafGbKW5ujh7Sm6lDLHZQd/lRSz6S0VarpADBJItqfB4PnwpS+472oob1GX5cCY9vzfJpHUA== +streamx@^2.15.0, streamx@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614" + integrity sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ== dependencies: fast-fifo "^1.1.0" queue-tick "^1.0.1" + optionalDependencies: + bare-events "^2.2.0" strict-uri-encode@^1.0.0: version "1.1.0" @@ -33301,6 +33364,11 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +string-similarity@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.4.tgz#42d01ab0b34660ea8a018da8f56a3309bb8b2a5b" + integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ== + string-template@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" @@ -33341,47 +33409,51 @@ string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== +string.prototype.matchall@^4.0.10, string.prototype.matchall@^4.0.8: + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" @@ -33398,9 +33470,9 @@ string_decoder@~1.1.1: safe-buffer "~5.1.0" stringify-entities@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.3.tgz#cfabd7039d22ad30f3cc435b0ca2c1574fc88ef8" - integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g== + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== dependencies: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" @@ -33546,26 +33618,26 @@ style-loader@^3.3.0, style-loader@^3.3.1, style-loader@^3.3.2: integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== style-to-object@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.5.tgz#5e918349bc3a39eee3a804497d97fcbbf2f0d7c0" - integrity sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.6.tgz#0c28aed8be1813d166c60d962719b2907c26547b" + integrity sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA== dependencies: - inline-style-parser "0.2.2" + inline-style-parser "0.2.3" styled-components@^6.1.1: - version "6.1.8" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.1.8.tgz#c109d36aeea52d8f049e12de2f3be39a6fc86201" - integrity sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw== + version "6.1.11" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.1.11.tgz#01948e5195bf1d39e57e0a85b41958c80e40cfb8" + integrity sha512-Ui0jXPzbp1phYij90h12ksljKGqF8ncGx+pjrNPsSPhbUUjWT2tD1FwGo2LF6USCnbrsIhNngDfodhxbegfEOA== dependencies: - "@emotion/is-prop-valid" "1.2.1" - "@emotion/unitless" "0.8.0" - "@types/stylis" "4.2.0" + "@emotion/is-prop-valid" "1.2.2" + "@emotion/unitless" "0.8.1" + "@types/stylis" "4.2.5" css-to-react-native "3.2.0" - csstype "3.1.2" - postcss "8.4.31" + csstype "3.1.3" + postcss "8.4.38" shallowequal "1.1.0" - stylis "4.3.1" - tslib "2.5.0" + stylis "4.3.2" + tslib "2.6.2" styled-jsx@5.1.1: version "5.1.1" @@ -33582,18 +33654,18 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -stylehacks@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.0.2.tgz#5bf2654561752547d4548765f35c9a49659b3742" - integrity sha512-00zvJGnCu64EpMjX8b5iCZ3us2Ptyw8+toEkb92VdmkEaRaSGBNKAoK6aWZckhXxmQP8zWiTaFaiMGIU8Ve8sg== +stylehacks@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6" + integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg== dependencies: - browserslist "^4.22.2" - postcss-selector-parser "^6.0.15" + browserslist "^4.23.0" + postcss-selector-parser "^6.0.16" -stylis@4.3.1, stylis@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.1.tgz#ed8a9ebf9f76fe1e12d462f5cc3c4c980b23a7eb" - integrity sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ== +stylis@4.3.2, stylis@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.2.tgz#8f76b70777dd53eb669c6f58c997bf0a9972e444" + integrity sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg== stylus-loader@^7.1.0: version "7.1.3" @@ -33635,15 +33707,10 @@ sucrase@^3.32.0: pirates "^4.0.1" ts-interface-checker "^0.1.9" -superstruct@^0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" - integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== - superstruct@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-1.0.3.tgz#de626a5b49c6641ff4d37da3c7598e7a87697046" - integrity sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-1.0.4.tgz#0adb99a7578bd2f1c526220da6571b2d485d91ca" + integrity sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ== supports-color@^2.0.0: version "2.0.0" @@ -33716,9 +33783,9 @@ svgo@^2.7.0: stable "^0.1.8" svgo@^3.0.2, svgo@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.2.0.tgz#7a5dff2938d8c6096e00295c2390e8e652fa805d" - integrity sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ== + version "3.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== dependencies: "@trysound/sax" "0.2.0" commander "^7.2.0" @@ -33760,9 +33827,9 @@ swc-loader@^0.2.3: "@swc/counter" "^0.1.3" swiper@^11.0.5: - version "11.0.7" - resolved "https://registry.yarnpkg.com/swiper/-/swiper-11.0.7.tgz#fe51bb64546c2c21a1ec6914e7764af953443ded" - integrity sha512-cDfglW1B6uSmB6eB6pNmzDTNLmZtu5bWWa1vak0RU7fOI9qHjMzl7gVBvYSl34b0RU2N11HxxETJqQ5LeqI1cA== + version "11.1.3" + resolved "https://registry.yarnpkg.com/swiper/-/swiper-11.1.3.tgz#ff5cbeea349d207a2423c4106b1905cb12804a19" + integrity sha512-80MSxonyTxrGcaWj9YgvvhD8OG0B9/9IVZP33vhIEvyWvmKjnQDBieO+29wKvMx285sAtvZyrWBdkxaw6+D3aw== swr@^2.2.4: version "2.2.5" @@ -33809,20 +33876,22 @@ tabtab@3.0.2: mkdirp "^0.5.1" untildify "^3.0.3" -tailwind-merge@^1.6.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-1.14.0.tgz#e677f55d864edc6794562c63f5001f45093cdb8b" - integrity sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ== +tailwind-merge@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.3.0.tgz#27d2134fd00a1f77eca22bcaafdd67055917d286" + integrity sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA== + dependencies: + "@babel/runtime" "^7.24.1" tailwind-scrollbar@^3.0.4: - version "3.0.5" - resolved "https://registry.yarnpkg.com/tailwind-scrollbar/-/tailwind-scrollbar-3.0.5.tgz#c904118f4f1a572edef93da2d436e1db8b93dd87" - integrity sha512-0ZwxTivevqq9BY9fRP9zDjHl7Tu+J5giBGbln+0O1R/7nHtBUKnjQcA1aTIhK7Oyjp6Uc/Dj6/dn8Dq58k5Uww== + version "3.1.0" + resolved "https://registry.yarnpkg.com/tailwind-scrollbar/-/tailwind-scrollbar-3.1.0.tgz#ff7596407b6da5209261d8ff03860ab9206a59e3" + integrity sha512-pmrtDIZeHyu2idTejfV59SbaJyvp1VRjYxAjZBH0jnyrPRo6HL1kD5Glz8VPagasqr6oAx6M05+Tuw429Z8jxg== tailwindcss-radix@^2.5.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/tailwindcss-radix/-/tailwindcss-radix-2.8.0.tgz#bac081a3a497cdc30d70f8e7425b795ffde0020a" - integrity sha512-1k1UfoIYgVyBl13FKwwoKavjnJ5VEaUClCTAsgz3VLquN4ay/lyaMPzkbqD71sACDs2fRGImytAUlMb4TzOt1A== + version "2.9.0" + resolved "https://registry.yarnpkg.com/tailwindcss-radix/-/tailwindcss-radix-2.9.0.tgz#5c820e5ec88f9b80be0f8087eb5e719ed521368b" + integrity sha512-N49SnciSeRgLC+VK+Fu5VULNJIvJUvN7tUKF1kEHPXrS76WAlwrSVthCbJ9NUw0Cj/ptxs73pdVEdosomAN5Lg== tailwindcss@3.3.2: version "3.3.2" @@ -33869,13 +33938,15 @@ tar-fs@^2.0.0, tar-fs@^2.1.1: tar-stream "^2.1.4" tar-fs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf" - integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== + version "3.0.6" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" + integrity sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w== dependencies: - mkdirp-classic "^0.5.2" pump "^3.0.0" tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^2.1.1" + bare-path "^2.1.0" tar-stream@^2.1.4, tar-stream@~2.2.0: version "2.2.0" @@ -33911,9 +33982,9 @@ tar@^4.0.2: yallist "^3.1.1" tar@^6.1.11, tar@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -33982,9 +34053,9 @@ terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.3, terser-webpack-plugi terser "^5.26.0" terser@^5.10.0, terser@^5.15.1, terser@^5.26.0: - version "5.27.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.27.0.tgz#70108689d9ab25fef61c4e93e808e9fd092bf20c" - integrity sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A== + version "5.31.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1" + integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -34000,11 +34071,6 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-encoding-utf-8@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" - integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== - text-extensions@^2.0.0: version "2.4.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" @@ -34051,10 +34117,10 @@ thread-stream@^0.15.1: dependencies: real-require "^0.1.0" -thread-stream@^2.0.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.1.tgz#6d588b14f0546e59d3f306614f044bc01ce43351" - integrity sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg== +thread-stream@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.7.0.tgz#d8a8e1b3fd538a6cca8ce69dbe5d3d097b601e11" + integrity sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw== dependencies: real-require "^0.2.0" @@ -34136,20 +34202,15 @@ tiny-glob@^0.2.9: globalyzer "0.1.0" globrex "^0.1.2" -tiny-invariant@^1.0.0, tiny-invariant@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== - -tiny-invariant@^1.3.3: +tiny-invariant@^1.0.0, tiny-invariant@^1.3.1, tiny-invariant@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== -tiny-lru@^11.0.1: - version "11.2.5" - resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-11.2.5.tgz#b138b99022aa26c567fa51a8dbf9e3e2959b2b30" - integrity sha512-JpqM0K33lG6iQGKiigcwuURAKZlq6rHXfrgeL4/I8/REoyJTGU+tEMszvT/oTRVHG2OiylhGDjqPp1jWMlr3bw== +tiny-lru@^11.0.0, tiny-lru@^11.0.1: + version "11.2.6" + resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-11.2.6.tgz#86a4fd0ad615eac1639adf92010e8b944e209fdb" + integrity sha512-0PU3c9PjMnltZaFo2sGYv/nnJsMjG0Cxx8X6FXHPPGjFyoo1SJDxvUXW1207rdiSxYizf31roo+GrkIByQeZoA== tiny-lru@^8.0.2: version "8.0.2" @@ -34190,11 +34251,9 @@ tmp@^0.0.33: os-tmpdir "~1.0.2" tmp@^0.2.0, tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== tmpl@1.0.5: version "1.0.5" @@ -34254,9 +34313,9 @@ to-regex@^3.0.1, to-regex@^3.0.2: safe-regex "^1.1.0" tocbot@^4.20.1: - version "4.25.0" - resolved "https://registry.yarnpkg.com/tocbot/-/tocbot-4.25.0.tgz#bc38aea5ec8f076779bb39636f431b044129a237" - integrity sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA== + version "4.28.2" + resolved "https://registry.yarnpkg.com/tocbot/-/tocbot-4.28.2.tgz#5a51b34cefd39f6b556b936b380a838a0a8c49ea" + integrity sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ== toggle-selection@^1.0.6: version "1.0.6" @@ -34291,10 +34350,10 @@ totalist@^3.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== -tough-cookie@^4.1.2, tough-cookie@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== +tough-cookie@^4.1.2, tough-cookie@^4.1.3, tough-cookie@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -34379,10 +34438,10 @@ ts-algebra@^1.2.2: resolved "https://registry.yarnpkg.com/ts-algebra/-/ts-algebra-1.2.2.tgz#b75d301c28cd4126cd344760a47b43e48e2872e0" integrity sha512-kloPhf1hq3JbCPOTYoOWDKxebWjNb2o/LKnNfkWhxVVisFFmMJPPdJeGoGmM+iRLyoXAR61e08Pb+vUXINg8aA== -ts-api-utils@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.0.tgz#48c31073e7ae7868d27ffabef993a2de8c2b006f" - integrity sha512-d+3WxW4r8WQy2cZWpNRPPGExX8ffOLGcIhheUANKbL5Sqjbhkneki76fRAWeXkaslV2etTb4tSJBSxOsH5+CJw== +ts-api-utils@^1.0.1, ts-api-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== ts-dedent@^2.0.0, ts-dedent@^2.2.0: version "2.2.0" @@ -34395,9 +34454,9 @@ ts-easing@^0.2.0: integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ== ts-graphviz@^1.5.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/ts-graphviz/-/ts-graphviz-1.8.1.tgz#5d95e58120be8b571847331516327d4840cc44f7" - integrity sha512-54/fe5iu0Jb6X0pmDmzsA2UHLfyHjUEUwfHtZcEOR0fZ6Myf+dFoO6eNsyL8CBDMJ9u7WWEewduVaiaXlvjSVw== + version "1.8.2" + resolved "https://registry.yarnpkg.com/ts-graphviz/-/ts-graphviz-1.8.2.tgz#6c4768d05f8a36e37abe34855ffe89a4c4bd96cc" + integrity sha512-5YhbFoHmjxa7pgQLkB07MtGnGJ/yhvjmc9uhsnDBEICME6gkPf83SBwLDQqGDoCa3XzUMWLk1AU2Wn1u1naDtA== ts-interface-checker@^0.1.9: version "0.1.13" @@ -34512,12 +34571,7 @@ tslib@1.14.1, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6.2, tslib@~2.6.0: +tslib@2.6.2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.5.2, tslib@^2.6.1, tslib@^2.6.2, tslib@~2.6.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -34567,9 +34621,9 @@ tweetnacl@^1.0.3: integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== twitter-api-v2@^1.15.1: - version "1.16.0" - resolved "https://registry.yarnpkg.com/twitter-api-v2/-/twitter-api-v2-1.16.0.tgz#4aff58c402168a4582d1dc5a58ecfe3144ac620c" - integrity sha512-e7wzWqx5oQZ9IUc2xt8JiJ84ioVGlmjmca1h0NwCKx2AFfKXDePmQa42gcBDe0qau9YaHsIpzO9z5SX1fmb+IQ== + version "1.17.0" + resolved "https://registry.yarnpkg.com/twitter-api-v2/-/twitter-api-v2-1.17.0.tgz#36a79b74ad4f0d764ca84eb853291fc1c2504cc9" + integrity sha512-znu5Lvu+2KGmjWfOgwtnzNBq8CtaCft5+1+MootxOOEQ2vhmgHa3eAo0tFAJ7M8M0eXDKldY0DNcndn8gGdAIw== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -34643,54 +34697,54 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - type@^2.7.2: version "2.7.2" resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typed-assert@^1.0.8: version "1.0.9" @@ -34709,20 +34763,20 @@ typeforce@^1.18.0: resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== -typescript@5.1.6, typescript@^3.9.10, typescript@^3.9.7, typescript@^4.0.0, typescript@^4.4.3, typescript@^4.7.4, typescript@^4.9.5, typescript@^5.0.0, typescript@^5.0.4, typescript@^5.1.6, typescript@^5.3.3, typescript@~5.1.3, typescript@~5.3.2: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@5.1.6, typescript@^3.9.10, typescript@^3.9.7, typescript@^4.0.0, typescript@^4.4.3, typescript@^4.7.4, typescript@^4.9.5, typescript@^5.0.0, typescript@^5.0.4, typescript@^5.1.6, typescript@^5.3.3, typescript@^5.4.4, typescript@~5.1.3, typescript@~5.4.2: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== ua-parser-js@^1.0.35: version "1.0.37" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== -ufo@^1.0.0, ufo@^1.2.0, ufo@^1.3.0, ufo@^1.3.1, ufo@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.2.tgz#c7d719d0628a1c80c006d2240e0d169f6e3c0496" - integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== +ufo@^1.0.0, ufo@^1.2.0, ufo@^1.3.1, ufo@^1.4.0, ufo@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" + integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== uglify-js@^3.1.4: version "3.17.4" @@ -34802,9 +34856,9 @@ undici-types@~5.26.4: integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== undici@^5.25.4: - version "5.28.3" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" - integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== dependencies: "@fastify/busboy" "^2.0.0" @@ -34847,6 +34901,11 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + unified@^10.0.0: version "10.1.2" resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" @@ -35054,12 +35113,12 @@ unpipe@1.0.0, unpipe@~1.0.0: integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unplugin@^1.3.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.6.0.tgz#0bd7c344182c73e685c864f4f7161531f024b942" - integrity sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ== + version "1.10.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.10.1.tgz#8ceda065dc71bc67d923dea0920f05c67f2cd68c" + integrity sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg== dependencies: - acorn "^8.11.2" - chokidar "^3.5.3" + acorn "^8.11.3" + chokidar "^3.6.0" webpack-sources "^3.2.3" webpack-virtual-modules "^0.6.1" @@ -35089,21 +35148,20 @@ unstorage@1.9.0: ufo "^1.2.0" unstorage@^1.9.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.10.1.tgz#bf8cc00a406e40a6293e893da9807057d95875b0" - integrity sha512-rWQvLRfZNBpF+x8D3/gda5nUCQL2PgXy2jNG4U7/Rc9BGEv9+CAJd0YyGCROUBKs9v49Hg8huw3aih5Bf5TAVw== + version "1.10.2" + resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.10.2.tgz#fb7590ada8b30e83be9318f85100158b02a76dae" + integrity sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ== dependencies: anymatch "^3.1.3" - chokidar "^3.5.3" - destr "^2.0.2" - h3 "^1.8.2" - ioredis "^5.3.2" - listhen "^1.5.5" - lru-cache "^10.0.2" + chokidar "^3.6.0" + destr "^2.0.3" + h3 "^1.11.1" + listhen "^1.7.2" + lru-cache "^10.2.0" mri "^1.2.0" - node-fetch-native "^1.4.1" + node-fetch-native "^1.6.2" ofetch "^1.3.3" - ufo "^1.3.1" + ufo "^1.4.0" untildify@^3.0.3: version "3.0.3" @@ -35125,12 +35183,12 @@ untun@^0.1.3: pathe "^1.1.1" update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + version "1.0.16" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" + integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" update-notifier@6.0.2: version "6.0.2" @@ -35191,7 +35249,7 @@ uqr@^0.1.2: resolved "https://registry.yarnpkg.com/uqr/-/uqr-0.1.2.tgz#5c6cd5dcff9581f9bb35b982cb89e2c483a41d7d" integrity sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA== -uri-js@^4.2.2: +uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== @@ -35250,17 +35308,22 @@ urlpattern-polyfill@8.0.2, urlpattern-polyfill@^8.0.0: resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz#99f096e35eff8bf4b5a2aa7d58a1523d6ebc7ce5" integrity sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ== +urlpattern-polyfill@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz#f0a03a97bfb03cdf33553e5e79a2aadd22cac8ec" + integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== + use-callback-ref@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.1.tgz#9be64c3902cbd72b07fe55e56408ae3a26036fd0" - integrity sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693" + integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== dependencies: tslib "^2.0.0" use-local-storage-state@^19.1.0: - version "19.1.0" - resolved "https://registry.yarnpkg.com/use-local-storage-state/-/use-local-storage-state-19.1.0.tgz#9424981fd95dd37d253aad982f0a959ef5542fe2" - integrity sha512-3Ea6uRtRaSwpZYD9maZPKoEEGRuHmVA7zGrV/Uh9s5NTj9K1x/MB4IOQoywjUesQyhXmJq6bqjC5cAqlsXoOTw== + version "19.2.0" + resolved "https://registry.yarnpkg.com/use-local-storage-state/-/use-local-storage-state-19.2.0.tgz#eac2f18c8f4762931d3b6661097be0b2c00f65de" + integrity sha512-z5+n406vi3FzPJW6+lzuL/LJr4VLhXsUq1TWWeHQABL37bnJ159dSUmO7XuwqvACX93ZA9P2vkB8GMDgq1rr7A== use-query-params@^2.2.1: version "2.2.1" @@ -35284,11 +35347,16 @@ use-sidecar@^1.1.2: detect-node-es "^1.1.0" tslib "^2.0.0" -use-sync-external-store@1.2.0, use-sync-external-store@^1.2.0: +use-sync-external-store@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +use-sync-external-store@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" + integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -35359,7 +35427,7 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^9.0.0: +uuid@^9.0.0, uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== @@ -35409,11 +35477,9 @@ validate-npm-package-name@^4.0.0: builtins "^5.0.0" validate-npm-package-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" + version "5.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" + integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== valtio@1.11.2: version "1.11.2" @@ -35491,9 +35557,9 @@ vfile@^6.0.0: vfile-message "^4.0.0" victory-vendor@^36.6.8: - version "36.9.0" - resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-36.9.0.tgz#edc35c52be5500364c7c0a5ee136850822f18306" - integrity sha512-n1A0J1xgwHb5nh56M0d8XlQabMCeTktvEqqr5WNAHspWEsVVGGaaaRg0TcQUtyC1akX0Cox1lMZdIv0Jl7o0ew== + version "36.9.2" + resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-36.9.2.tgz#668b02a448fa4ea0f788dbf4228b7e64669ff801" + integrity sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ== dependencies: "@types/d3-array" "^3.0.3" "@types/d3-ease" "^3.0.0" @@ -35525,9 +35591,9 @@ viem@^1.0.0, viem@^1.6.0: ws "8.13.0" viem@^2.9.21: - version "2.9.21" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.21.tgz#a7dd3d4c827088e5336e5a6b35ec0283d2938595" - integrity sha512-8GtxPjPGpiN5cmr19zSX9mb1LX/eON3MPxxAd3QmyUFn69Rp566zlREOqE7zM35y5yX59fXwnz6O3X7e9+C9zg== + version "2.12.5" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.12.5.tgz#b30888367c193ca3ab1bc2864a9723ac3f10ba87" + integrity sha512-OHS+356v/ykkQMWEhefDRa5aC3iM3wEzdBlPoAhkCilsXRTAyy0YofYZ9hZG8SyM+0Ltl01j5EyJHqo0o62Czg== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" @@ -35535,7 +35601,7 @@ viem@^2.9.21: "@scure/bip32" "1.3.2" "@scure/bip39" "1.2.1" abitype "1.0.0" - isows "1.0.3" + isows "1.0.4" ws "8.13.0" w3c-xmlserializer@^4.0.0: @@ -35612,9 +35678,9 @@ wasmcurves@0.2.2: wasmbuilder "0.0.16" watchpack@^2.2.0, watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -35639,9 +35705,9 @@ web-namespaces@^2.0.0: integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== web-streams-polyfill@^3.0.3, web-streams-polyfill@^3.2.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz#32e26522e05128203a7de59519be3c648004343b" - integrity sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ== + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== web-worker@1.2.0: version "1.2.0" @@ -35883,10 +35949,10 @@ web3@^1.6.0: web3-shh "1.10.4" web3-utils "1.10.4" -webcrypto-core@^1.7.8: - version "1.7.8" - resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.8.tgz#056918036e846c72cfebbb04052e283f57f1114a" - integrity sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg== +webcrypto-core@^1.7.9: + version "1.7.9" + resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.9.tgz#a585f0032dbc88d202cff4f266cbef02ba48bd7a" + integrity sha512-FE+a4PPkOmBbgNDIyRmcHhgXn+2ClRl3JzJdDu/P4+B8y81LqKe6RAsI9b3lAOHe1T1BMkSjsRHTYRikImZnVA== dependencies: "@peculiar/asn1-schema" "^2.3.8" "@peculiar/json-schema" "^1.1.12" @@ -35905,9 +35971,9 @@ webidl-conversions@^7.0.0: integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== webpack-bundle-analyzer@^4.8.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz#84b7473b630a7b8c21c741f81d8fe4593208b454" - integrity sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ== + version "4.10.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd" + integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw== dependencies: "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" @@ -35917,7 +35983,6 @@ webpack-bundle-analyzer@^4.8.0: escape-string-regexp "^4.0.0" gzip-size "^6.0.0" html-escaper "^2.0.2" - is-plain-object "^5.0.0" opener "^1.5.2" picocolors "^1.0.0" sirv "^2.0.3" @@ -35942,18 +36007,7 @@ webpack-cli@5.1.4, webpack-cli@^5.0.1, webpack-cli@^5.1.4: rechoir "^0.8.0" webpack-merge "^5.7.3" -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-middleware@^5.3.4: +webpack-dev-middleware@^5.3.1, webpack-dev-middleware@^5.3.4: version "5.3.4" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== @@ -35965,9 +36019,9 @@ webpack-dev-middleware@^5.3.4: schema-utils "^4.0.0" webpack-dev-middleware@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz#6bbc257ec83ae15522de7a62f995630efde7cc3d" - integrity sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ== + version "6.1.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-6.1.3.tgz#79f4103f8c898564c9e96c3a9c2422de50f249bc" + integrity sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw== dependencies: colorette "^2.0.10" memfs "^3.4.12" @@ -36011,43 +36065,7 @@ webpack-dev-server@4.15.0: webpack-dev-middleware "^5.3.1" ws "^8.13.0" -webpack-dev-server@^4.13.3, webpack-dev-server@^4.9.3: - version "4.15.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" - integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.5" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" - -webpack-dev-server@^4.15.1: +webpack-dev-server@^4.13.3, webpack-dev-server@^4.15.1, webpack-dev-server@^4.9.3: version "4.15.2" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173" integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== @@ -36178,13 +36196,13 @@ websocket-extensions@>=0.1.1: integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== websocket@^1.0.32, websocket@^1.0.34: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + version "1.0.35" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.35.tgz#374197207d7d4cc4c36cbf8a1bb886ee52a07885" + integrity sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q== dependencies: bufferutil "^4.0.1" debug "^2.2.0" - es5-ext "^0.10.50" + es5-ext "^0.10.63" typedarray-to-buffer "^3.1.5" utf-8-validate "^5.0.2" yaeti "^0.0.6" @@ -36280,30 +36298,30 @@ which-builtin-type@^1.1.3: which-typed-array "^1.1.9" which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" which-module@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2, which-typed-array@^1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" - integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2, which-typed-array@^1.1.9: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.1" + has-tostringtag "^1.0.2" which@^2.0.1: version "2.0.2" @@ -36352,7 +36370,7 @@ windows-release@^5.0.1: dependencies: execa "^5.1.1" -winston-transport@^4.5.0: +winston-transport@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== @@ -36362,9 +36380,9 @@ winston-transport@^4.5.0: triple-beam "^1.3.0" winston@^3.10.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.11.0.tgz#2d50b0a695a2758bb1c95279f0a88e858163ed91" - integrity sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g== + version "3.13.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.13.0.tgz#e76c0d722f78e04838158c61adc1287201de7ce3" + integrity sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ== dependencies: "@colors/colors" "^1.6.0" "@dabh/diagnostics" "^2.0.2" @@ -36376,9 +36394,9 @@ winston@^3.10.0: safe-stable-stringify "^2.3.1" stack-trace "0.0.x" triple-beam "^1.3.0" - winston-transport "^4.5.0" + winston-transport "^4.7.0" -word-wrap@~1.2.3: +word-wrap@^1.2.5, word-wrap@~1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== @@ -36494,15 +36512,15 @@ ws@^3.0.0: safe-buffer "~5.1.0" ultron "~1.1.0" -ws@^7.3.1, ws@^7.4.5, ws@^7.5.1: +ws@^7.3.1, ws@^7.5.1: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.11.0, ws@^8.12.0, ws@^8.13.0, ws@^8.15.1, ws@^8.16.0, ws@^8.2.3, ws@^8.5.0, ws@^8.8.1: - version "8.16.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== +ws@^8.11.0, ws@^8.12.0, ws@^8.13.0, ws@^8.15.1, ws@^8.17.0, ws@^8.2.3, ws@^8.8.1: + version "8.17.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" + integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== xdg-basedir@^4.0.0: version "4.0.0" @@ -36565,9 +36583,9 @@ xorshift@^1.1.1: integrity sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g== xss@^1.0.14: - version "1.0.14" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694" - integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw== + version "1.0.15" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.15.tgz#96a0e13886f0661063028b410ed1b18670f4e59a" + integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== dependencies: commander "^2.20.3" cssfilter "0.0.10" @@ -36613,9 +36631,9 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.1.3, yaml@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" - integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== + version "2.4.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.2.tgz#7a2b30f2243a5fc299e1f14ca58d475ed4bc5362" + integrity sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA== yargs-parser@21.1.1, yargs-parser@^21.0.1, yargs-parser@^21.1.1: version "21.1.1" @@ -36714,32 +36732,34 @@ zen-observable@0.8.15: integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== zip-stream@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-5.0.1.tgz#cf3293bba121cad98be2ec7f05991d81d9f18134" - integrity sha512-UfZ0oa0C8LI58wJ+moL46BDIMgCQbnsb+2PoiJYtonhBsMh2bq1eRBVkvjfVsqbEHd9/EgKPUuL9saSSsec8OA== + version "5.0.2" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-5.0.2.tgz#77b1dce7af291482d368a9203c9029f4eb52e12e" + integrity sha512-LfOdrUvPB8ZoXtvOBz6DlNClfvi//b5d56mSWyJi7XbH/HfhOHfUhOqxhT/rUiR7yiktlunqRo+jY6y/cWC/5g== dependencies: archiver-utils "^4.0.1" compress-commons "^5.0.1" readable-stream "^3.6.0" +zip-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-6.0.1.tgz#e141b930ed60ccaf5d7fa9c8260e0d1748a2bbfb" + integrity sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA== + dependencies: + archiver-utils "^5.0.0" + compress-commons "^6.0.2" + readable-stream "^4.0.0" + zod-to-json-schema@^3.20.5: - version "3.22.4" - resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.22.4.tgz#f8cc691f6043e9084375e85fb1f76ebafe253d70" - integrity sha512-2Ed5dJ+n/O3cU383xSY28cuVi0BCQhF8nYqWU5paEpl7fVdqdAmiLdqLyfblbNdfOFwFfi/mqU4O1pwc60iBhQ== + version "3.23.0" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.23.0.tgz#4fc60e88d3c709eedbfaae3f92f8a7bf786469f2" + integrity sha512-az0uJ243PxsRIa2x1WmNE/pnuA05gUq/JB8Lwe1EDCCL/Fz9MgjYQ0fPlyc2Tcv6aF2ZA7WM5TWaRZVEFaAIag== zod@^3.21.4, zod@^3.22.4: - version "3.22.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" - integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== - -zustand@^4.3.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.0.tgz#141354af56f91de378aa6c4b930032ab338f3ef0" - integrity sha512-zlVFqS5TQ21nwijjhJlx4f9iGrXSL0o/+Dpy4txAP22miJ8Ti6c1Ol1RLNN98BMib83lmDH/2KmLwaNXpjrO1A== - dependencies: - use-sync-external-store "1.2.0" + version "3.23.8" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" + integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== -zustand@^4.5.2: +zustand@^4.3.1, zustand@^4.5.2: version "4.5.2" resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.2.tgz#fddbe7cac1e71d45413b3682cdb47b48034c3848" integrity sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==