diff --git a/.env.example b/.env.example index d51187f7..7f872a35 100644 --- a/.env.example +++ b/.env.example @@ -6,23 +6,9 @@ REACT_APP_GA4_MEASUREMENT_ID= REACT_APP_SENTRY_DSN= REACT_APP_WC_PROJECT_ID= REACT_APP_GATEWAY_DATA_BRANCH= +REACT_APP_THE_GRAPH_API_KEY= ##################### ##### WebWallet ##### ##################### # to disable the walletConnect set below flat to 1. -# REACT_APP_DISABLE_WALLETCONNECT=1 - -###################### -#### Cypress Test #### -###################### - -#Debuging port for cypress as 3000 will be busy to run the application. -CYPRESS_REMOTE_DEBUGGING_PORT=9222 -#Starting network for wallet. -NETWORK_NAME=sepolia -#Secret phrase to connect to metamask account. -SECRET_WORDS= -#Transaction hash for account to validate history page. -CYPRESS_TEST_TX_HASH= -# To enable the video output of cypres test -CYPRESS_ENABLE_VIDEO= \ No newline at end of file +# REACT_APP_DISABLE_WALLETCONNECT=1 \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 08239ae9..5f9a592c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -5,7 +5,7 @@ module.exports = { es6: true, }, ignorePatterns: ['dist', 'coverage', 'packages/contracts/hardhat'], - extends: ['plugin:prettier/recommended', 'plugin:storybook/recommended'], + extends: ['plugin:prettier/recommended'], parser: '@typescript-eslint/parser', parserOptions: { es6: true, diff --git a/.github/label-requires-reviews.yml b/.github/label-requires-reviews.yml deleted file mode 100644 index 0563bdfd..00000000 --- a/.github/label-requires-reviews.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- - - label: 2-reviewers - reviews: 2 diff --git a/.github/labeler.yml b/.github/labeler.yml deleted file mode 100644 index 30775b51..00000000 --- a/.github/labeler.yml +++ /dev/null @@ -1,28 +0,0 @@ ---- -2-reviewers: - - '.github/**/*' - - './*' - -M-ci: - - any: ['.github/**/*'] - -M-l2geth: - - any: ['l2geth/**/*'] - -M-integration: - - any: ['integration-tests/**/*'] - -M-batch-submitter: - - any: ['packages/batch-submitter/**/*'] - -M-contracts: - - any: ['packages/contracts/**/*'] - -M-core-utils: - - any: ['packages/core-utils/**/*'] - -M-dtl: - - any: ['packages/data-transport-layer/**/*'] - -M-ops: - - any: ['ops/**/*'] diff --git a/.github/pull.yml b/.github/pull.yml deleted file mode 100644 index 47a9cbcc..00000000 --- a/.github/pull.yml +++ /dev/null @@ -1,5 +0,0 @@ -version: "1" -rules: - - base: develop - upstream: ethereum-optimism:experimental - mergeMethod: hardreset diff --git a/.github/workflows/end2end-test.yml b/.github/workflows/end2end-test.yml index 1bf2fb50..993ec964 100644 --- a/.github/workflows/end2end-test.yml +++ b/.github/workflows/end2end-test.yml @@ -1,65 +1,75 @@ -name: End2End test (non-headless) -permissions: read-all +name: Integration Test -on: +on: + push: + branches: ['main', 'master'] pull_request: + workflow_dispatch: jobs: - End-to-End-Test: - name: Integration Test + e2e-test: + name: Playwright Test runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 - - name: Setup Node + uses: actions/checkout@v4 + - name: Setup Node 16 uses: actions/setup-node@v4 with: node-version: 16.17.0 cache: 'yarn' - - name: Setup Cache Node Modules, Cypress - id: cache-node-modules - uses: actions/cache@v3 - with: - path: | - node_modules - /home/runner/.cache/Cypress - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - # Install NPM dependencies, cache them correctly - # and run all Cypress tests - - name: Install dependencies - run: yarn - - uses: actions/cache/save@v3 - if: ${{steps.cache-node-modules.outputs.cache-hit != 'true'}} - with: - path: node_modules - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - - name: Install linux deps + - name: Install linux deps (xvfb / fluxbox) run: | sudo apt-get install --no-install-recommends -y \ fluxbox \ xvfb - - name: Run E2E Test (non-headless) + - name: Install yarn dependencies + run: yarn + - name: Build Gateway Project working-directory: ./ run: | - Xvfb :0 -screen 0 1024x768x24 -listen tcp -ac & - fluxbox & yarn test:integration + yarn && yarn build:prod env: REACT_APP_POLL_INTERVAL: 15000 + REACT_APP_GAS_POLL_INTERVAL: 30000 SKIP_PREFLIGHT_CHECK: true - REACT_APP_WALLET_VERSION: 0.9.1 - REACT_APP_ENV: prod - REACT_APP_STATUS: normal - CYPRESS_REMOTE_DEBUGGING_PORT: 9222 - NETWORK_NAME: 'goerli' + REACT_APP_WALLET_VERSION: 0.14.9 + REACT_APP_ENV: local + REACT_APP_ENABLE_ANCHORAGE: true + REACT_APP_WC_PROJECT_ID: ${{secrets.WC_PROJECT_ID}} + REACT_APP_GA4_MEASUREMENT_ID: ${{secrets.GA4_MEASUREMENT_ID}} + REACT_APP_SENTRY_DSN: ${{secrets.SENTRY_DSN}} + - name: Setup Node 18 + uses: actions/setup-node@v4 + with: + node-version: 18 + - name: Install PNPM deps e2e-tests + working-directory: ./e2e-tests + run: | + npm install -g pnpm && pnpm install --frozen-lockfile && npx playwright install + - name: Install Playwright Browsers + run: npx playwright install --with-deps chromium + - name: Run e2e test (headful) + working-directory: ./e2e-tests + run: | + Xvfb :0 -screen 0 1920x1080x24 -listen tcp -ac & + fluxbox & + pnpm start:server & + pnpm test + env: + PASSWORD: ${{secrets.PASSWORD}} + NETWORK: 'sepolia' SECRET_WORDS: ${{secrets.SECRET_WORDS}} + METAMASK_VERSION: 10.25.0 DISPLAY: :0.0 - CYPRESS_ENABLE_VIDEO: true - name: Upload Archive e2e artifacts uses: actions/upload-artifact@v4 - if: always() + if: ${{ !cancelled() }} with: - name: e2e-archive + name: e2e-reports + retention-days: 3 path: | - ./cypress/videos/ - ./cypress/screenshots/ + ./e2e-tests/videos/ + ./e2e-tests/playwright-report/ + ./e2e-tests/test-results/ continue-on-error: true diff --git a/.github/workflows/label-requires-reviews.yml b/.github/workflows/label-requires-reviews.yml deleted file mode 100644 index e416ec10..00000000 --- a/.github/workflows/label-requires-reviews.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: Label Reviews -on: - pull_request_review: - -jobs: - require-reviewers: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v4 - with: - ref: main - - # - name: Require-reviewers - # uses: travelperk/label-requires-reviews-action@v0.1 - # env: - # GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN}} \ No newline at end of file diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml deleted file mode 100644 index f689dfbc..00000000 --- a/.github/workflows/labeler.yml +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: "Pull Request Labeler" -on: - - pull_request_target - -jobs: - pr-labeler: - runs-on: ubuntu-latest - steps: - - uses: actions/labeler@main - with: - repo-token: "${{ secrets.GITHUB_TOKEN }}" - configuration-path: .github/labeler.yml diff --git a/.lintstagedrc.json b/.lintstagedrc.json index 4801c20f..02d64dca 100644 --- a/.lintstagedrc.json +++ b/.lintstagedrc.json @@ -3,7 +3,7 @@ "yarn format:fix", "yarn lint:fix" ], - "!(__tests__|*stories|*test|styles).{ts,tsx}": [ + "!(__tests__|*test|styles).{ts,tsx}": [ "yarn test --passWithNoTests" ] } \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index 2a4e4ab8..975215f4 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -16.17.0 +16.17.0 \ No newline at end of file diff --git a/.storybook/decorators.tsx b/.storybook/decorators.tsx deleted file mode 100644 index ddfc4c0a..00000000 --- a/.storybook/decorators.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react' -import { ThemeProvider } from 'styled-components' -import { Decorator } from '@storybook/react' -import light from '../src/themes/light' -const withTheme: Decorator = (StoryFn) => ( - - - -) - -export const decorators = [withTheme] diff --git a/.storybook/main.ts b/.storybook/main.ts deleted file mode 100644 index ba845b79..00000000 --- a/.storybook/main.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { StorybookConfig } from '@storybook/react-webpack5' -import path from 'path' - -const storybookConfig: StorybookConfig = { - features: { - storyStoreV7: true, - }, - staticDirs: ['../src/assets'], - stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'], - addons: [ - '@storybook/addon-links', - '@storybook/addon-essentials', - '@storybook/addon-interactions', - '@storybook/addon-toolbars', - '@storybook/addon-actions', - '@storybook/addon-styling', - { - name: 'storybook-addon-sass-postcss', - options: { - rule: { - test: /\.(scss|sass)$/i, - }, - }, - }, - ], - webpackFinal: async (config) => { - if (!config.resolve) { - config.resolve = {} - } - config.resolve.fallback = { - process: require.resolve('process/browser'), - stream: require.resolve('stream-browserify'), - fs: require.resolve('browserify-fs'), - path: require.resolve('path-browserify'), - assert: require.resolve('assert'), - http: require.resolve('http-browserify'), - https: require.resolve('https-browserify'), - os: require.resolve('os-browserify'), - zlib: require.resolve('browserify-zlib'), - buffer: require.resolve('buffer'), - } - - config.resolve.modules = [ - ...(config.resolve.modules || []), - path.resolve(__dirname, '../src'), - ] - - return config - }, - framework: { - name: '@storybook/react-webpack5', - options: {}, - }, - docs: { - autodocs: true, - }, -} - -export default storybookConfig diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx deleted file mode 100644 index 9223e2af..00000000 --- a/.storybook/preview.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import React from 'react' -import styled, { css, ThemeProvider } from 'styled-components' -import { Decorator } from '@storybook/react' -import { Preview } from '@storybook/react' -import light from '../src/themes/light' -import dark from '../src/themes/dark' -import { GlobalStyle } from '../src/themes/globalStyle' - -import '../src/index.scss' - -import { Buffer } from 'buffer' - -//@ts-ignore -if (!window.Buffer) { - //@ts-ignore - window.Buffer = window.Buffer || Buffer -} - -const ThemeBlock = styled.div<{ left?: boolean; fill?: boolean }>( - ({ left, fill, theme }) => - css` - position: absolute; - top: 0; - left: ${left || fill ? 0 : '50vw'}; - border-right: ${left ? '1px solid #202020' : 'none'}; - right: ${left ? '50vw' : 0}; - width: ${fill ? '100vw' : '50vw'}; - height: 100vh; - bottom: 0; - overflow: auto; - padding: 1rem; - box-sizing: border-box; - background: ${theme.background}; - ` -) - -const preview: Preview = { - parameters: { - actions: { argTypesRegex: '^on[A-Z].*' }, - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/, - }, - }, - }, -} - -export default preview - -export const withTheme: Decorator = (StoryFn, context) => { - const theme = context.parameters.theme || context.globals.theme - const storyTheme = theme === 'light' ? light : dark - - switch (theme) { - // FIXME: Not working correctly only dark theme is getting applied at both places. - case 'side-by-side': { - return ( - <> - - - - - - - - - - - - - - ) - } - default: { - return ( - - - - - - - ) - } - } -} - -export const globalTypes = { - theme: { - name: 'Theme', - description: 'Theme for the components', - defaultValue: 'light', - toolbar: { - icon: 'circlehollow', - items: [ - { value: 'light', icon: 'circlehollow', title: 'Light Theme' }, - { value: 'dark', icon: 'circle', title: 'Dark Theme' }, - { value: 'side-by-side', icon: 'sidebar', title: 'Both Themes' }, - ], - showName: true, - }, - }, -} - -export const decorators = [withTheme] diff --git a/badges/badge-branches.svg b/badges/badge-branches.svg new file mode 100644 index 00000000..615fd91f --- /dev/null +++ b/badges/badge-branches.svg @@ -0,0 +1 @@ +Coverage:branches: 37.81%Coverage:branches37.81% \ No newline at end of file diff --git a/badges/badge-functions.svg b/badges/badge-functions.svg new file mode 100644 index 00000000..26fc0969 --- /dev/null +++ b/badges/badge-functions.svg @@ -0,0 +1 @@ +Coverage:functions: 44.62%Coverage:functions44.62% \ No newline at end of file diff --git a/badges/badge-lines.svg b/badges/badge-lines.svg new file mode 100644 index 00000000..da2c9d68 --- /dev/null +++ b/badges/badge-lines.svg @@ -0,0 +1 @@ +Coverage:lines: 50.07%Coverage:lines50.07% \ No newline at end of file diff --git a/badges/badge-statements.svg b/badges/badge-statements.svg new file mode 100644 index 00000000..9b047b81 --- /dev/null +++ b/badges/badge-statements.svg @@ -0,0 +1 @@ +Coverage:statements: 49.71%Coverage:statements49.71% \ No newline at end of file diff --git a/cypress.config.ts b/cypress.config.ts deleted file mode 100644 index 126efef9..00000000 --- a/cypress.config.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { defineConfig } from 'cypress' -import synpressPlugins from '@synthetixio/synpress/plugins' -import * as dotenv from 'dotenv' -dotenv.config() - -export default defineConfig({ - userAgent: 'synpress', - chromeWebSecurity: true, - defaultCommandTimeout: 60000, - pageLoadTimeout: 60000, - requestTimeout: 60000, - video: !!process.env.CYPRESS_ENABLE_VIDEO || false, - e2e: { - testIsolation: false, - setupNodeEvents: (on, config) => { - synpressPlugins(on, config) - }, - baseUrl: 'http://localhost:3000', - supportFile: 'cypress/support/e2e.ts', - specPattern: [ - `cypress/e2e/specs/*.spec.cy.ts`, - 'cypress/e2e/specs/flow/connect.spec.cy.ts', - 'cypress/e2e/specs/flow/tokenPicker.spec.cy.ts', - 'cypress/e2e/specs/flow/feeSwitching.spec.cy.ts', - 'cypress/e2e/specs/flow/bridging.spec.cy.ts', - ], - }, - includeShadowDom: true, -}) diff --git a/cypress/.gitignore b/cypress/.gitignore deleted file mode 100644 index f99aa0a8..00000000 --- a/cypress/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -videos -videos-ci -screenshots \ No newline at end of file diff --git a/cypress/e2e/helpers/base/base.ts b/cypress/e2e/helpers/base/base.ts deleted file mode 100644 index 0c69abb8..00000000 --- a/cypress/e2e/helpers/base/base.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Binance, BinanceTestnet } from './constants' -import { MetamaskNetwork } from './types' - -export default class Base { - addSupportedNetwork() { - // Mainnet - this.addNetwork(Binance) - // Testnet - this.addNetwork(BinanceTestnet) - } - - visit() { - cy.visit('/') - } - connectMetamask() { - cy.acceptMetamaskAccess() - } - changeMetamaskNetwork(networkName: string) { - cy.changeMetamaskNetwork(networkName) - } - - allowNetworkToBeSwitchedTo() { - cy.allowMetamaskToSwitchNetwork() - } - confirmTransactionOnMetamask() { - cy.confirmMetamaskTransaction() - } - - addNetwork(network: MetamaskNetwork) { - // @ts-ignore - cy.addMetamaskNetwork(network) - } - - allowNetworkToBeAdded() { - cy.allowMetamaskToAddNetwork() - } - - allowNetworkToBeAddedAndSwitchedTo() { - cy.allowMetamaskToAddAndSwitchNetwork() - } - - allowMetamaskToSpendToken(amount?: string) { - cy.confirmMetamaskPermissionToSpend(amount) - } - allowMetamskToAddToken() { - cy.confirmMetamaskAddToken() - } - - readLocalStorage() { - return cy.getAllLocalStorage() - } - - getBody() { - return cy.get('body') - } - - getModal() { - return cy.get('div[aria-labelledby="transition-modal-title"]') - } - - clearAllCookies() { - cy.clearAllCookies() - } -} diff --git a/cypress/e2e/helpers/base/constants.ts b/cypress/e2e/helpers/base/constants.ts deleted file mode 100644 index 7717b83b..00000000 --- a/cypress/e2e/helpers/base/constants.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { MetamaskNetwork, NetworkTestInfo } from './types' - -export const Binance: MetamaskNetwork = { - networkName: 'BNB Smart Chain Mainnet', - rpcUrl: 'https://bsc-dataseed1.binance.org/', - chainId: '56', - symbol: 'BNB', - blockExplorer: 'https://bscscan.com', - isTestnet: false, -} - -export const BinanceTestnet: MetamaskNetwork = { - networkName: 'BNB Smart Chain Testnet', - rpcUrl: 'https://data-seed-prebsc-1-s1.binance.org:8545', - chainId: '97', - symbol: 'BNB', - blockExplorer: 'https://testnet.bscscan.com', - isTestnet: true, -} - -export const EthereumInfo: NetworkTestInfo = { - networkName: 'Ethereum', - networkAbbreviation: 'ETHEREUM', - isTestnet: false, -} - -export const BinanceInfo: NetworkTestInfo = { - networkName: 'BNB Smart Chain Mainnet', - networkAbbreviation: 'BNB', - isTestnet: false, -} - -export const BobaEthInfo: NetworkTestInfo = { - networkName: 'Boba ETH', - networkAbbreviation: 'ETHEREUM', - isTestnet: false, -} - -export const BobaBNBInfo: NetworkTestInfo = { - networkName: 'Boba BNB', - networkAbbreviation: 'BNB', - isTestnet: false, -} - -export const EthereumSepoliaInfo: NetworkTestInfo = { - networkName: 'Ethereum (Sepolia)', - networkAbbreviation: 'ETHEREUM', - isTestnet: true, -} - -export const BinanceTestnetInfo: NetworkTestInfo = { - networkName: 'BNB Testnet', - networkAbbreviation: 'BNB', - isTestnet: true, -} - -export const BobaSepoliaInfo: NetworkTestInfo = { - networkName: 'Boba (Sepolia)', - networkAbbreviation: 'ETHEREUM', - isTestnet: true, -} - -export const BobaBNBTestnetInfo: NetworkTestInfo = { - networkName: 'Boba BNB Testnet', - networkAbbreviation: 'BNB', - isTestnet: true, -} - -export const OptimismSepoliaInfo: NetworkTestInfo = { - networkName: 'Optimism (Sepolia)', - networkAbbreviation: 'OPTIMISM', - isTestnet: true, -} -export const ArbitrumSepoliaInfo: NetworkTestInfo = { - networkName: 'Arbitrum (Sepolia)', - networkAbbreviation: 'ARBITRUM', - isTestnet: true, -} - -export const MainnetL1Networks: NetworkTestInfo[] = [EthereumInfo, BinanceInfo] - -export const MainnetL2Networks: NetworkTestInfo[] = [BobaEthInfo, BobaBNBInfo] - -export const TestnetL1Networks: NetworkTestInfo[] = [ - EthereumSepoliaInfo, - BinanceTestnetInfo, -] - -export const TestnetL2Networks: NetworkTestInfo[] = [ - BobaSepoliaInfo, - BobaBNBTestnetInfo, -] - -export const TestnetLightBridgeNetworks: NetworkTestInfo[] = [ - BobaSepoliaInfo, - BobaBNBTestnetInfo, - OptimismSepoliaInfo, - ArbitrumSepoliaInfo, -] diff --git a/cypress/e2e/helpers/base/page.footer.ts b/cypress/e2e/helpers/base/page.footer.ts deleted file mode 100644 index 989074e3..00000000 --- a/cypress/e2e/helpers/base/page.footer.ts +++ /dev/null @@ -1,24 +0,0 @@ -import Base from './base' - -export default class PageFooter { - getSocialMediaLinks() { - return cy.get('#socialLinks').find('a') - } - - getFooterLinks() { - return cy.get('#footerLinks').find('a') - } - - getCompanyInfo() { - return cy.get('#socialLinks').contains('©2023 Enya Labs') - } - - getVersionInfo() { - // @ts-ignore - return cy.get('#socialLinks').contains(/^v\w+/) - } - - gasDetailsInfo() { - return cy.get('#gasDetails').find('div') - } -} diff --git a/cypress/e2e/helpers/base/page.header.ts b/cypress/e2e/helpers/base/page.header.ts deleted file mode 100644 index 0bb4f636..00000000 --- a/cypress/e2e/helpers/base/page.header.ts +++ /dev/null @@ -1,47 +0,0 @@ -import Base from './base' - -export default class PageHeader extends Base { - getNavigationLinks() { - return cy.get('#header').find('a') - } - - getNetworkSwitcher() { - return cy - .get('div[data-testid="dropdown-network-selector"]') - .should('exist') - } - - getLightThemeSwitcher() { - return cy.get('div[title="light-icon"]').should('exist') - } - - getDarkThemeSwitcher() { - return cy.get('div[title="dark-icon"]').should('exist') - } - - switchNetwork(networkName: string) { - this.getNetworkSwitcher().click() - this.getNetworkSwitcher().contains(networkName).should('exist').click() - } - - getFeeSwitcher() { - return cy.get('div[data-testid="feeSwitcher"]') - } - - switchFees(oldFeeSymbol: string, newFeeSymbol: string) { - this.getFeeSwitcher().contains(oldFeeSymbol).should('exist').click() - this.getFeeSwitcher().contains(newFeeSymbol).should('exist').click() - this.confirmTransactionOnMetamask() - this.getFeeSwitcher() - .contains(newFeeSymbol, { timeout: 90000 }) - .should('exist') - } - - disconnectWallet() { - cy.get('#header') - .contains(/^0x[a-fA-F0-9]{4}...[a-fA-F0-9]{4}$/g) - .should('exist') - .click() - cy.get('#header').contains('Disconnect').should('exist').click() - } -} diff --git a/cypress/e2e/helpers/base/page.ts b/cypress/e2e/helpers/base/page.ts deleted file mode 100644 index c20f800c..00000000 --- a/cypress/e2e/helpers/base/page.ts +++ /dev/null @@ -1,379 +0,0 @@ -/// -import Base from './base' -import PageHeader from './page.header' -import PageFooter from './page.footer' -import { ReduxStore } from './store' -import { pageTitleWhiteList } from '../../../../src/components/layout/PageTitle/constants' -import { NetworkTestInfo } from './types' - -export default class Page extends Base { - header: PageHeader - footer: PageFooter - store: ReduxStore - walletConnectButtonText: string - id: string - title: string - onTestnet: boolean - constructor() { - super() - this.store = new ReduxStore() - this.header = new PageHeader() - this.footer = new PageFooter() - this.id = 'header' - this.walletConnectButtonText = 'Connect Wallet' - this.title = 'Bridge' - this.onTestnet = false - } - - visit() { - cy.visit(`/${this.id}`) - } - - isReady() { - this.store.verifyReduxStoreSetup('baseEnabled', true) - } - - withinPage() { - return cy.get(`#${this.id}`) - } - - getTitle() { - return cy.get(`#title`) - } - - connectWallet() { - this.withinPage() - .contains('button', this.walletConnectButtonText) - .should('exist') - .click() - } - - requestMetamaskConnect() { - this.connectWallet() - this.getModal().contains('MetaMask').should('exist').click() - } - - requestWCConnect() { - this.connectWallet() - this.getModal().contains('WalletConnect').should('exist').click() - } - - checkWCQROpen() { - cy.wait(1000) - - cy.get('body').find('wcm-modal').should('exist') - } - - setNetworkTo(network: 'BNB' | 'ETH', type = 'Mainnet') { - const bnbConfig = { - network: 'BNB', - name: { - l1: 'Binance Smart Chain', - l2: 'Boba BNB', - }, - networkIcon: 'bnb', - chainIds: { L1: '56', L2: '56288' }, - networkType: type, - } - - const ethConfig = { - network: 'ETHEREUM', - name: { - l1: 'Mainnet', - l2: 'Boba L2', - }, - networkIcon: 'ethereum', - chainIds: { L1: '1', L2: '288' }, - networkType: type, - } - - let payload = ethConfig - if (network === 'BNB') { - payload = bnbConfig - } - - cy.window().its('store').invoke('dispatch', { - type: 'NETWORK/SET', - payload, - }) - } - - verifyAccountConnected() { - this.store.verifyReduxStoreSetup('accountEnabled', true) - this.store - .getReduxStore() - .its('setup') - .its('walletAddress') - .should('not.be.empty') - } - - checkNaviagtionListBinanace() { - this.header - .getNavigationLinks() - .should('not.be.empty') - .and(($p) => { - // should have found 3 elements for Binanace - expect($p).to.have.length(3) - - // // use jquery's map to grab all of their classes - // // jquery's map returns a new jquery object - const links = $p.map((i, el) => { - return Cypress.$(el).attr('href') - }) - // call classes.get() to make this a plain array - expect(links.get()).to.deep.eq(['/bridge', '/bridge', '/history']) - - // get labels and verify - const labels = $p.map((i, el) => { - return Cypress.$(el).text() - }) - - expect(labels.get()).to.deep.eq(['', 'Bridge', 'History']) - }) - } - - validateApplicationBanner() { - cy.get('[data-testid="banner-item"]') - .should('not.be.empty') - .should('be.visible') - .and(($p) => { - expect($p).to.have.length(2) - }) - } - - checkNavigationListEthereum() { - this.header - .getNavigationLinks() - .should('not.be.empty') - .and(($p) => { - // should have found 5 elements for Ethereum - expect($p).to.have.length(5) - - // // use jquery's map to grab all of their classes - // // jquery's map returns a new jquery object - const links = $p.map((i, el) => { - return Cypress.$(el).attr('href') - }) - // call classes.get() to make this a plain array - expect(links.get()).to.deep.eq([ - '/bridge', - '/bridge', - '/history', - '/stake', - '/dao', - ]) - - // get labels and verify - const labels = $p.map((i, el) => { - return Cypress.$(el).text() - }) - - expect(labels.get()).to.deep.eq([ - '', - 'Bridge', - 'History', - 'Stake', - 'Dao', - ]) - }) - } - checkNetworkSwitcherMainnet() { - this.header.getNetworkSwitcher().click() - - this.header.getNetworkSwitcher().contains('Ethereum').should('exist') - - this.header - .getNetworkSwitcher() - .contains('Binance Smart Chain') - .should('exist') - - this.header.getNetworkSwitcher().click() - } - checkNetworkSwitcherTestnet() { - this.header - .getNetworkSwitcher() - .click() - .should('have.text', 'Ethereum (Sepolia)') - .should('have.text', 'BNB Testnet') - } - - // check theme switching functionality - checkThemeSwitcher() { - this.header.getLightThemeSwitcher().click() - this.store.verifyReduxUiState('theme', 'light') - this.header.getDarkThemeSwitcher().click() - this.store.verifyReduxUiState('theme', 'dark') - } - - handleNetworkSwitchModals(networkAbbreviation: string, isTestnet: boolean) { - this.getModal() - .find( - `button[label="Switch to ${networkAbbreviation} ${ - isTestnet ? 'Testnet' : '' - } network"]`, - { timeout: 90000 } - ) - .should('exist') - .click() - - this.store.verifyReduxStoreSetup('accountEnabled', false) - this.store.verifyReduxStoreSetup('baseEnabled', false) - this.store.verifyReduxStoreSetup('baseEnabled', true) - - this.getModal() - .find( - `button[label="Connect to the ${networkAbbreviation} ${ - isTestnet ? 'Testnet' : 'Mainnet' - } network"]`, - { timeout: 90000 } - ) - .should('exist') - .click() - } - - checkNetworkSwitchSuccessful(networkAbbreviation: string) { - this.store.verifyReduxStoreNetwork('activeNetwork', networkAbbreviation) - - this.store.verifyReduxStoreSetup('accountEnabled', true) - this.store.verifyReduxStoreSetup('baseEnabled', true) - } - - disconnectWallet() { - this.header.disconnectWallet() - } - - //******FOOTER HELPERS******// - checkFooterLinks() { - this.footer - .getFooterLinks() - .should('not.be.empty') - .and(($p) => { - // should have found 4 elements - expect($p).to.have.length(5) - // make sure the first contains some text content - expect($p.first()).to.contain('FAQs') - // // use jquery's map to grab all of their classes - // // jquery's map returns a new jquery object - const links = $p.map((i, el) => { - return Cypress.$(el).attr('href') - }) - // call classes.get() to make this a plain array - expect(links.get()).to.deep.eq([ - 'https://docs.boba.network/faq', - 'https://docs.boba.network/developer', - '/bobascope', - 'https://boba.network', - 'https://boba.network/terms-of-use/', - ]) - // get labels and verify - const labels = $p.map((i, el) => { - return Cypress.$(el).text() - }) - expect(labels.get()).to.deep.eq([ - 'FAQs', - 'Dev Tools', - 'Bobascope', - 'Boba Network Website', - 'Terms of Use', - ]) - }) - } - - checkSocialMediaLinks() { - this.footer - .getSocialMediaLinks() - .should('not.be.empty') - .and(($p) => { - // should have found 4 elements - expect($p).to.have.length(4) - - // // use jquery's map to grab all of their classes - // // jquery's map returns a new jquery object - const links = $p.map((i, el) => { - return Cypress.$(el).attr('href') - }) - // call classes.get() to make this a plain array - expect(links.get()).to.deep.eq([ - 'https://docs.boba.network', - 'https://boba.eco/twitter', - 'https://boba.eco/discord', - 'https://boba.eco/telegram', - ]) - - // get labels and verify - const labels = $p.map((i, el) => { - return Cypress.$(el).attr('aria-label') - }) - - expect(labels.get()).to.deep.eq([ - 'bobadocs', - 'twitter', - 'discord', - 'telegram', - ]) - }) - } - - checkCopyrightAndVersion() { - this.footer.getCompanyInfo().should('be.visible') - this.footer.getVersionInfo().should('be.visible') - } - checkTitle() { - if (this.id === 'bridge') { - this.withinPage().contains(this.title).should('exist') - } else { - this.getTitle().contains(this.title).should('exist') - } - } - checkDescription() { - const webPage = pageTitleWhiteList.find( - (whiteListedPage) => whiteListedPage.path === '/' + this.id.toLowerCase() - ) - const slogan = webPage ? webPage.slug : '' - if (!slogan) { - return assert(false) - } - this.getTitle().contains(slogan) - } - - checkGasWatcherListingInETH() { - this.footer - .gasDetailsInfo() - .should('not.be.empty') - .and(($p) => { - expect($p).to.have.length(6) - }) - } - - checkGasWatcherListingInBNB() { - this.footer - .gasDetailsInfo() - .should('not.be.empty') - .and(($p) => { - expect($p).to.have.length(5) - }) - } - - allowNetworkSwitch(newNetwork: boolean) { - if (newNetwork) { - this.allowNetworkToBeAddedAndSwitchedTo() - } else { - this.allowNetworkToBeSwitchedTo() - } - } - - switchNetwork(network: NetworkTestInfo, newNetwork: boolean = false) { - this.header.getNetworkSwitcher().click() - this.header - .getNetworkSwitcher() - .contains(network.networkName) - .should('exist') - .click() - this.handleNetworkSwitchModals( - network.networkAbbreviation, - network.isTestnet - ) - this.allowNetworkSwitch(newNetwork) - this.checkNetworkSwitchSuccessful(network.networkAbbreviation) - } -} diff --git a/cypress/e2e/helpers/base/store.ts b/cypress/e2e/helpers/base/store.ts deleted file mode 100644 index 0b6f61f0..00000000 --- a/cypress/e2e/helpers/base/store.ts +++ /dev/null @@ -1,62 +0,0 @@ -export class ReduxStore { - getReduxStore() { - return cy.window().its('store').invoke('getState') - } - - verifyReduxStoreSetup(attribute: string, expectedValue: boolean | string) { - this.getReduxStore() - .its('setup') - .its(attribute) - .should(`equal`, expectedValue) - } - - verifyReduxStoreNetwork(attribute: string, expectedValue: boolean | string) { - this.getReduxStore() - .its('network') - .its(attribute) - .should('equal', expectedValue) - } - - verifyReduxStoreBalance(attribute: string, expectedValue: Number) { - this.getReduxStore() - .its('balance') - .its(attribute) - .should('equal', expectedValue) - } - - verifyReduxUiState(attribute: string, expectedValue: boolean | string) { - this.getReduxStore() - .its('ui') - .its(attribute) - .should('exist') - .should('equal', expectedValue) - } - - verifyReduxStateNotEmpty(type, name) { - this.getReduxStore().its(type).its(name).should('not.be.empty') - } - - verifyReduxStoreBridge(attribute: string, expectedValue: boolean | string) { - this.getReduxStore() - .its('bridge') - .its(attribute) - .should('exist') - .should('equal', expectedValue) - } - - allowBaseEnabledToUpdate(accountConnected: boolean) { - if (!accountConnected) { - this.verifyReduxStoreSetup('baseEnabled', false) - this.verifyReduxStoreSetup('baseEnabled', true) - } - } - verifyTokenSelected(tokenSymbol: string) { - this.getReduxStore() - .its('bridge') - .its('tokens') - .its(0) - .should('exist') - .its('symbol') - .should('equal', tokenSymbol) - } -} diff --git a/cypress/e2e/helpers/base/types.ts b/cypress/e2e/helpers/base/types.ts deleted file mode 100644 index 2e2ebff9..00000000 --- a/cypress/e2e/helpers/base/types.ts +++ /dev/null @@ -1,20 +0,0 @@ -export type MetamaskNetwork = { - networkName: string - rpcUrl: string - chainId: string - symbol: string - blockExplorer: string - isTestnet: boolean -} - -export type NetworkTestInfo = { - networkName: string - networkAbbreviation: string - isTestnet: boolean -} - -export enum BridgeType { - Classic = 'Classic', - Fast = 'Fast', - Light = 'Light', -} diff --git a/cypress/e2e/helpers/bridge.ts b/cypress/e2e/helpers/bridge.ts deleted file mode 100644 index aac579d1..00000000 --- a/cypress/e2e/helpers/bridge.ts +++ /dev/null @@ -1,295 +0,0 @@ -/// -import Page from './base/page' -import { Layer } from '../../../src/util/constant' -import { BridgeType, NetworkTestInfo } from './base/types' -import { EthereumSepoliaInfo, EthereumInfo } from './base/constants' - -export default class Bridge extends Page { - type: string - constructor() { - super() - this.id = 'bridge' - this.walletConnectButtonText = 'Connect Wallet' - this.title = 'Bridge' - this.type = BridgeType.Classic - } - - switchToTestnet( - networkAbbreviation: string = EthereumSepoliaInfo.networkAbbreviation, - newNetwork: boolean = false - ) { - this.switchNetworkType(networkAbbreviation, true, newNetwork) - } - - switchToMainnet( - networkAbbreviation: string = EthereumInfo.networkAbbreviation, - newNetwork: boolean = false - ) { - this.switchNetworkType(networkAbbreviation, false, newNetwork) - } - - openSettings() { - this.withinPage() - .find('[data-testid="setting-btn"]') - .should('exist') - .click() - } - - toggleShowTestnets() { - this.getModal() - .find('[data-testid="switch-label"]') - .should('have.length', 2) - .first() - .click() - } - - toggleAddDestinationAddress() { - this.getModal() - .find('[data-testid="switch-label"]') - .should('have.length', 2) - .eq(1) - .click() - } - closeModal(dataTestId: String) { - this.getModal() - .find(`[data-testid="close-modal-${dataTestId}"]`) - .should('exist') - .click() - } - openTokenPicker() { - this.withinPage().contains('Select').should('exist').click() - } - verifyTokenInTokenList(tokenSymbol: string) { - this.getModal().contains(tokenSymbol).should('exist') - } - addTokenWithTokenPicker(tokenSymbol: string) { - this.getModal() - .contains(tokenSymbol) - .siblings() - .filter('[data-testid="add-token"]') - .should('exist') - .click() - this.allowMetamskToAddToken() - } - - switchNetworkType( - networkAbbreviation: string, - isTestnet: boolean, - newNetwork: boolean - ) { - if (this.onTestnet === isTestnet) { - return - } - this.openSettings() - this.toggleShowTestnets() - - this.store.verifyReduxStoreNetwork( - 'activeNetworkType', - isTestnet ? 'Testnet' : 'Mainnet' - ) - - this.handleNetworkSwitchModals(networkAbbreviation, isTestnet) - this.allowNetworkSwitch(newNetwork) - this.checkNetworkSwitchSuccessful(networkAbbreviation) - - this.store.verifyReduxStoreSetup('accountEnabled', true) - this.store.verifyReduxStoreSetup('baseEnabled', true) - this.onTestnet = isTestnet - } - - switchBridgeDirection(newOriginLayer: Layer, newNetwork: boolean = false) { - this.withinPage().find('#switchBridgeDirection').should('exist').click() - if (newNetwork) { - this.allowNetworkToBeAddedAndSwitchedTo() - } else { - this.allowNetworkToBeSwitchedTo() - } - this.store.verifyReduxStoreSetup('netLayer', newOriginLayer) - } - - selectToken(tokenSymbol: string) { - this.openTokenPicker() - - cy.get('div[title="tokenList"]') - .contains(tokenSymbol) - .should('exist') - .click() - - // ensure store has correct values - this.store.verifyTokenSelected(tokenSymbol) - - // ensure img has loaded before typing in amount - this.withinPage() - .get('#tokenSelectorInput') - .find('img[alt="ETH logo"]') - .should('be.visible') - .and('have.prop', 'naturalWidth') - .should('be.greaterThan', 0) - } - - bridgeToken( - tokenSymbol: string, - amount: string, - destinationLayer: Layer, - destinationAddress: string = '' - ) { - if (destinationAddress && destinationLayer === Layer.L2) { - this.openSettings() - this.toggleAddDestinationAddress() - this.closeModal('settings-modal') - this.withinPage() - .find('input[placeholder="Enter destination address"]') - .should('exist') - .focus() - .type(destinationAddress) - } - this.selectToken(tokenSymbol) - - if (destinationLayer === Layer.L1) { - this.store.verifyReduxStateNotEmpty('setup', 'bobaFeePriceRatio') - this.store.verifyReduxStoreSetup('netLayer', Layer.L2) - this.store.verifyReduxStateNotEmpty('balance', 'exitFee') - this.store.verifyReduxStoreBalance('classicExitCost', 0) - } - - this.withinPage() - .find(`input[placeholder="Amount to bridge to ${destinationLayer}"]`) - .should('exist') - .focus() - .type(`${amount}`) - - this.store - .getReduxStore() - .its('bridge') - .its('amountToBridge') - .then(parseFloat) - .should('equal', parseFloat(amount)) - - cy.get('button').contains('Bridge').should('exist').click() - cy.contains(`${amount} ${tokenSymbol}`, { timeout: 60000 }).should('exist') - cy.get('button').contains('Confirm').should('exist').click() - if (destinationLayer === Layer.L1) { - this.allowMetamaskToSpendToken('10') - } - - this.confirmTransactionOnMetamask() - - if (destinationLayer === Layer.L2) { - this.getModal().contains('Estimated time to complete :').should('exist') - this.closeModal('bridge-in-progress') - } else { - this.getModal() - .contains('Your funds will arrive in 7 days at your wallet on') - .should('exist') - this.closeModal('transactionSuccess-modal') - } - } - - checkThirdPartyTabInETH() { - cy.get('[data-testid="third-party-btn"]').should('be.visible').click() - - cy.contains('Third party bridges').should('be.visible') - - const bridgelist = cy.get('a[data-testid="bridge-item"]') - bridgelist.should('not.be.empty').and((bridgeItems) => { - // should have 8 elements. - expect(bridgeItems).to.have.length(2) - - const links = bridgeItems.map((i, el) => { - return Cypress.$(el).attr('href') - }) - - expect(links.get()).to.deep.eq([ - 'https://boba.banxa.com/', - 'https://app.symbiosis.finance/swap?chainIn=Ethereum&chainOut=Boba%20Ethereum&tokenIn=ETH&tokenOut=ETH', - ]) - - const labels = bridgeItems.map((i, el) => { - return Cypress.$(el).text() - }) - - expect(labels.get()).to.deep.eq(['Banxa', 'Symbiosis']) - }) - } - - checkThirdPartyTabInBNB() { - cy.get('[data-testid="third-party-btn"]').should('be.visible').click() - cy.contains('Third party bridges').should('be.visible') - cy.contains('No bridges available').should('be.visible') - } - - openNetworkModal(networkName: string) { - this.withinPage().contains(networkName).should('exist').click() - } - selectNetworkFromModal(networkName: string) { - this.getModal().contains(networkName).should('exist').click() - } - - switchNetworkWithModals( - fromNetwork: NetworkTestInfo, - toNetwork: NetworkTestInfo, - accountConnected: boolean, - newNetwork: boolean - ) { - this.openNetworkModal(fromNetwork.networkName) - this.selectNetworkFromModal(toNetwork.networkName) - if (accountConnected) { - if (this.type === BridgeType.Classic) { - this.handleNetworkSwitchModals( - toNetwork.networkAbbreviation, - toNetwork.isTestnet - ) - } - this.allowNetworkSwitch(newNetwork) - this.checkNetworkSwitchSuccessful(toNetwork.networkAbbreviation) - } else { - this.store.allowBaseEnabledToUpdate(accountConnected) - } - } - - clickThroughNetworksInModals( - l1Networks: NetworkTestInfo[], - l2Networks: NetworkTestInfo[], - accountConnected: boolean - ) { - for (let i = 0; i < 2; i++) { - this.withinPage().contains(l2Networks[i].networkName).should('exist') - const nextNetwork = l1Networks[(i + 1) % 2] - this.switchNetworkWithModals( - l1Networks[i], - nextNetwork, - accountConnected, - nextNetwork.networkName !== l1Networks[0].networkName - ) - this.switchBridgeDirection(Layer.L2, true) - this.switchBridgeDirection(Layer.L1) - } - } - - switchBridgeType( - bridgeType: BridgeType, - currentNetwork: NetworkTestInfo = EthereumSepoliaInfo - ) { - this.withinPage().contains(bridgeType).should('exist').click() - this.store.verifyReduxStoreBridge('bridgeType', bridgeType.toUpperCase()) - if ( - this.type === BridgeType.Light && - currentNetwork !== EthereumSepoliaInfo - ) { - this.getModal() - .find( - `button[label="Switch to ${currentNetwork.networkAbbreviation} ${ - currentNetwork.isTestnet ? 'Testnet' : '' - } network"]`, - { timeout: 90000 } - ) - .should('exist') - .click() - - this.store.verifyReduxStoreSetup('accountEnabled', false) - this.store.verifyReduxStoreSetup('baseEnabled', false) - this.store.verifyReduxStoreSetup('baseEnabled', true) - } - this.type = bridgeType - } -} diff --git a/cypress/e2e/helpers/dao.ts b/cypress/e2e/helpers/dao.ts deleted file mode 100644 index db2fa806..00000000 --- a/cypress/e2e/helpers/dao.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Page from './base/page' - -export default class Dao extends Page { - constructor() { - super() - this.id = 'DAO' - this.walletConnectButtonText = 'Connect Wallet' - this.title = 'DAO' - } -} diff --git a/cypress/e2e/helpers/history.ts b/cypress/e2e/helpers/history.ts deleted file mode 100644 index a1dcecd0..00000000 --- a/cypress/e2e/helpers/history.ts +++ /dev/null @@ -1,303 +0,0 @@ -/// -import Page from './base/page' -import dayjs from 'dayjs' -import { - formatDate, - isSameOrAfterDate, - isSameOrBeforeDate, -} from '../../../src/util/dates' -import { Layer } from '../../../src/util/constant' -import { - TRANSACTION_FILTER_STATUS, - CHAIN_NAME, -} from '../../../src/containers/history/types' -// import truncate from 'truncate-middle' - -export default class History extends Page { - fromDate: Date - toDate: Date - networkLayerFrom: Layer - fromNetwork: string - toNetwork: string - constructor() { - super() - this.toDate = new Date() - this.fromDate = new Date( - this.toDate.getFullYear(), - this.toDate.getMonth() - 6, - this.toDate.getDate() - ) - this.id = 'history' - this.walletConnectButtonText = 'Connect Wallet' - this.networkLayerFrom = Layer.L1 - this.fromNetwork = 'All Networks' - this.toNetwork = 'All Networks' - this.title = 'History' - } - getSearchInput() { - return this.withinPage() - .get('input[placeholder="Search Here"]') - .should('exist') - } - getFromDatePicker() { - const dateString = formatDate(this.fromDate.getTime() / 1000, 'MM/DD/YYYY') - return this.withinPage().get('div').contains(dateString).should('exist') - } - getToDatePicker() { - const dateString = formatDate(this.toDate.getTime() / 1000, 'MM/DD/YYYY') - return this.withinPage().get('div').contains(dateString).should('exist') - } - getNetworkDropdowns() { - return this.withinPage().find('#networkDropdowns') - } - - getFromNetworkDropdown() { - return this.getNetworkDropdowns().children().filter('div').first() - } - getToNetworkDropdown() { - return this.getNetworkDropdowns().children().filter('div').last() - } - - async changeFromNetwork(networkName: string) { - this.getFromNetworkDropdown() - .contains(this.fromNetwork) - .should('exist') - .click() - this.getFromNetworkDropdown().contains(networkName).should('exist').click() - this.fromNetwork = networkName - } - - changeToNetwork(networkName: string) { - this.getToNetworkDropdown().contains(this.toNetwork).should('exist').click() - this.getToNetworkDropdown().contains(networkName).should('exist').click() - this.toNetwork = networkName - } - verifyFilteredTransactionsByColumn(column: string, content: string) { - this.getTransactionsColumn(column).then((transactionTableColumn) => { - for (const transactionInfo of transactionTableColumn) { - cy.wrap(transactionInfo).contains(content).should('exist') - } - }) - } - - checkNetworkDropdowns() { - this.getNetworkDropdowns() - .find(':contains("All Networks")') - .not(':has(*)') // checks that elements are leafs in the HTML tree - .should('not.be.empty') - .and((networkDropdowns) => { - const labels = networkDropdowns.map((i, networkDropdown) => { - return Cypress.$(networkDropdown).text() - }) - expect(labels.get()).to.deep.eq(['All Networks', 'All Networks']) - }) - - // ensure that network dropdowns are in the correct order by default - this.getFromNetworkDropdown() - .invoke('attr', 'id') - .should('equal', 'L1Networks') - this.getToNetworkDropdown() - .invoke('attr', 'id') - .should('equal', 'L2Networks') - - // properly filters transactions by chosen 'from' network - this.changeFromNetwork(CHAIN_NAME.Sepolia) - this.verifyFilteredTransactionsByColumn( - 'transactionOriginDetails', - CHAIN_NAME.Sepolia - ) - - this.changeFromNetwork('All Networks') - - // properly filters transactions by chosen 'to' network - this.changeToNetwork(CHAIN_NAME.Boba_Sepolia) - this.verifyFilteredTransactionsByColumn( - 'transactionDestinationDetails', - CHAIN_NAME.Boba_Sepolia - ) - - // test network switch - this.switchNetworkDropdowns() - this.verifyFilteredTransactionsByColumn( - 'transactionOriginDetails', - CHAIN_NAME.Boba_Sepolia - ) - - this.switchNetworkDropdowns() - this.changeToNetwork('All Networks') - } - - switchNetworkDropdowns() { - this.getNetworksSwitchIcon().click() - const networkHolder = this.fromNetwork - this.fromNetwork = this.toNetwork - this.toNetwork = networkHolder - } - - getNetworksSwitchIcon() { - return this.withinPage() - .find('#switchNetworkDirection') - .should('exist') - .find('svg') - .should('exist') - } - - getStatusFilter() { - return this.withinPage().find('#statusFilter').should('exist') - } - getTransactions() { - return this.withinPage().get('#transactionList').children() - } - - waitForTransactionsToLoad() { - cy.window() - .its('store') - .invoke('getState') - .its('transaction', { timeout: 90000 }) - .should('not.be.empty') - } - - checkSearchInput() { - const hash = Cypress.env('target_hash') - this.getSearchInput().focus().type(hash) - // this.getTransactions().contains(truncate(hash, 4, 4, '...')).should('exist') - this.getTransactions().should('have.length', 1) - this.getSearchInput().clear() - } - - changeDatePicker(from: boolean, targetDate: Date, shouldBeDisabled = false) { - const originalDate = from ? this.fromDate : this.toDate - const datePicker = from ? this.getFromDatePicker() : this.getToDatePicker() - - datePicker.click() - const monthDelta = targetDate.getMonth() - originalDate.getMonth() - if (monthDelta > 0) { - for (let i = 0; i < monthDelta; i++) { - this.withinPage().find('button[aria-label="Go to next month"]').click() - } - } - if (monthDelta < 0) { - for (let i = 0; i < monthDelta * -1; i++) { - this.withinPage() - .find('button[aria-label="Go to previous month"]') - .click() - } - } - - if (shouldBeDisabled) { - this.withinPage() - .find('button[name=day]') - .contains(targetDate.getDate()) - .invoke('attr', 'disabled') - .should('exist') - } else { - this.withinPage() - .find('button[name=day]') - .contains(targetDate.getDate()) - .should('have.length', 1) - .click() - if (from) { - this.fromDate = targetDate - } else { - this.toDate = targetDate - } - } - datePicker.click() - } - - verifyTransactionsByDate(fromDate: Date, toDate: Date) { - this.getTransactionsColumn('transactionDate').then(($date) => { - const transactionDates = $date.map((i, element) => - Cypress.$(element).text() - ) - for (const transactionDateStr of transactionDates.get()) { - const transactionTimestamp = dayjs(new Date(transactionDateStr)).unix() - expect(isSameOrAfterDate(transactionTimestamp, dayjs(fromDate))).to.be - .true - expect(isSameOrBeforeDate(transactionTimestamp, dayjs(toDate))).to.be - .true - } - }) - } - - checkDatePickers() { - const orignalFromDate = this.fromDate - const orignalToDate = this.toDate - this.changeDatePicker(true, new Date('30 Jun 2023 12:00 AM')) - this.changeDatePicker(false, new Date('30 Aug 2023 12:00 AM')) - - // ensure transactions occured within the date specified in the date pickers - this.verifyTransactionsByDate(this.fromDate, this.toDate) - - // dates after 'to date' should be disabled in 'from' date picker - this.changeDatePicker(true, new Date('31 Aug 2023 12:00 AM'), true) - - // dates before 'from date' should be disabled in 'to' date picker - this.changeDatePicker(false, new Date('29 Jun 2023 12:00 AM'), true) - - this.changeDatePicker(true, orignalFromDate) - this.changeDatePicker(false, orignalToDate) - } - - changeStatusFilter(status: TRANSACTION_FILTER_STATUS) { - this.getStatusFilter().find('svg').should('exist').click() - this.getStatusFilter().contains(status).should('exist').click() - } - - // gets given column of transactions in the transaction table such as, origin chain, date, status, etc - getTransactionsColumn(columnName: string) { - return this.withinPage() - .find('#transactionList', { timeout: 90 * 1000 }) - .should('exist') - .find(`div[aria-label=${columnName}]`) - .should('exist') - } - - checkStatusFilter() { - this.changeStatusFilter(TRANSACTION_FILTER_STATUS.Completed) - this.verifyFilteredTransactionsByColumn( - 'transactionStatus', - TRANSACTION_FILTER_STATUS.Completed - ) - - this.changeStatusFilter(TRANSACTION_FILTER_STATUS.Pending) - this.verifyFilteredTransactionsByColumn( - 'transactionStatus', - TRANSACTION_FILTER_STATUS.Pending - ) - - this.changeStatusFilter(TRANSACTION_FILTER_STATUS.Canceled) - this.changeStatusFilter(TRANSACTION_FILTER_STATUS.All) - } - - checkConjunctionOfFilters() { - const orignalFromDate = this.fromDate - - // use date pickers to filter by date - this.changeDatePicker(true, new Date('30 Jun 2023 12:00 AM')) - - // use status filter to filter by status - this.changeStatusFilter(TRANSACTION_FILTER_STATUS.Completed) - - // use network dropdowns to filter by network - this.changeFromNetwork(CHAIN_NAME.Sepolia) - - // verify transactions - this.verifyTransactionsByDate(this.fromDate, this.toDate) - - this.verifyFilteredTransactionsByColumn( - 'transactionStatus', - TRANSACTION_FILTER_STATUS.Completed - ) - - this.verifyFilteredTransactionsByColumn( - 'transactionOriginDetails', - CHAIN_NAME.Sepolia - ) - - this.changeDatePicker(true, orignalFromDate) - - this.changeStatusFilter(TRANSACTION_FILTER_STATUS.All) - this.changeFromNetwork('All Networks') - } -} diff --git a/cypress/e2e/helpers/stake.ts b/cypress/e2e/helpers/stake.ts deleted file mode 100644 index 500bb9c8..00000000 --- a/cypress/e2e/helpers/stake.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Page from './base/page' - -export default class Stake extends Page { - constructor() { - super() - this.id = 'stake' - this.walletConnectButtonText = 'Connect Wallet' - this.title = 'Stake' - } -} diff --git a/cypress/e2e/specs/bridge.spec.cy.ts b/cypress/e2e/specs/bridge.spec.cy.ts deleted file mode 100644 index cd3e4a04..00000000 --- a/cypress/e2e/specs/bridge.spec.cy.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { LAYER } from '../../../src/util/constant' -import Bridge from '../helpers/bridge' -const bridge = new Bridge() - -describe('Testing Entire Site', () => { - describe('Bridge', () => { - describe('Before wallet is connected', () => { - before(() => { - bridge.visit() - bridge.store.verifyReduxStoreSetup('baseEnabled', true) - }) - - describe('Bridge Layout', () => { - it('Should have the correct title', () => { - bridge.checkTitle() - }) - }) - - describe('3rd party bridges', () => { - it('Should have third party bridge tab with correct details', () => { - bridge.setNetworkTo('ETH') - bridge.checkThirdPartyTabInETH() - }) - it('Should have third party bridge tab with correct details in case of BNB', () => { - bridge.setNetworkTo('BNB') - bridge.checkThirdPartyTabInBNB() - }) - }) - }) - }) -}) diff --git a/cypress/e2e/specs/dao.spec.cy.ts b/cypress/e2e/specs/dao.spec.cy.ts deleted file mode 100644 index df8c56ee..00000000 --- a/cypress/e2e/specs/dao.spec.cy.ts +++ /dev/null @@ -1,19 +0,0 @@ -import Dao from '../helpers/dao' -const dao = new Dao() - -describe('Testing Entire Site', () => { - describe('Dao', () => { - describe('Before wallet is connected', () => { - before(() => { - dao.visit() - dao.store.verifyReduxStoreSetup('baseEnabled', true) - }) - describe('Dao Layout', () => { - it('Should have the correct title', () => { - dao.checkTitle() - dao.checkDescription() - }) - }) - }) - }) -}) diff --git a/cypress/e2e/specs/flow/bridging.spec.cy.ts b/cypress/e2e/specs/flow/bridging.spec.cy.ts deleted file mode 100644 index 75a63aa8..00000000 --- a/cypress/e2e/specs/flow/bridging.spec.cy.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Layer } from '../../../../src/util/constant' -import Bridge from '../../helpers/bridge' - -const bridge = new Bridge() - -describe('Testing General Bridging flow on Sepolia', () => { - before(() => { - bridge.visit() - bridge.isReady() - }) - after(() => { - bridge.switchToMainnet() - }) - it('Should connect to metamask', () => { - bridge.requestMetamaskConnect() - bridge.verifyAccountConnected() - }) - it('Should switch to testnet', () => { - bridge.switchToTestnet() - }) - it('Should bridge to L2', () => { - bridge.bridgeToken('ETH', '0.0001', Layer.L2) - }) - it('Should bridge to L2 to a different address', () => { - bridge.bridgeToken( - 'ETH', - '0.0001', - Layer.L2, - '0x2f6a5C6c4344ABC47048b19cC9a20322aA56069A' - ) - }) - it('Should switch to L2', () => { - bridge.switchBridgeDirection(Layer.L2) - }) - it('Should bridge back to L1', () => { - bridge.bridgeToken('ETH', '0.0001', Layer.L1) - }) - it('Should switch to L1', () => { - bridge.switchBridgeDirection(Layer.L1) - }) -}) diff --git a/cypress/e2e/specs/flow/connect.spec.cy.ts b/cypress/e2e/specs/flow/connect.spec.cy.ts deleted file mode 100644 index c42ea18e..00000000 --- a/cypress/e2e/specs/flow/connect.spec.cy.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { Layer } from '../../../../src/util/constant' -import { - ArbitrumSepoliaInfo, - BobaSepoliaInfo, - MainnetL1Networks, - MainnetL2Networks, - OptimismSepoliaInfo, - TestnetL1Networks, - TestnetL2Networks, -} from '../../helpers/base/constants' -import { BridgeType } from '../../helpers/base/types' -import Bridge from '../../helpers/bridge' - -const bridge = new Bridge() - -describe('Connect flow', () => { - before(() => { - bridge.visit() - bridge.isReady() - }) - - describe('Metamask', () => { - before(() => { - bridge.changeMetamaskNetwork('ethereum') - }) - - it('Should Connect to L1', () => { - bridge.requestMetamaskConnect() - bridge.connectMetamask() - bridge.verifyAccountConnected() - }) - - it('Should switch through Mainnet networks using Network Picker Modal', () => { - bridge.clickThroughNetworksInModals( - MainnetL1Networks, - MainnetL2Networks, - true - ) - }) - - it('Switch to testnet', () => { - bridge.switchToTestnet() - }) - - it('Should switch through Testnet networks using Network Modal', () => { - bridge.clickThroughNetworksInModals( - TestnetL1Networks, - TestnetL2Networks, - true - ) - }) - - it('Should be able to switch to the light bridge', () => { - bridge.switchBridgeType(BridgeType.Light) - bridge.switchBridgeDirection(Layer.L2, false) - }) - - it('Should switch to Optimism', () => { - bridge.switchNetworkWithModals( - BobaSepoliaInfo, - OptimismSepoliaInfo, - true, - true - ) - }) - - it('Should switch to Arbitrum', () => { - bridge.switchNetworkWithModals( - OptimismSepoliaInfo, - ArbitrumSepoliaInfo, - true, - true - ) - }) - - it('Should switch back to classic bridge', () => { - bridge.switchNetworkWithModals( - ArbitrumSepoliaInfo, - BobaSepoliaInfo, - true, - false - ) - bridge.switchBridgeDirection(Layer.L1) - bridge.switchBridgeType(BridgeType.Classic) - }) - - it('Should switch to Mainnet', () => { - bridge.switchToMainnet() - }) - - it('Should disconnect wallet', () => { - bridge.disconnectWallet() - }) - }) - - describe('WalletConnect', () => { - it('Should open connect wallet QR dialog', () => { - bridge.requestWCConnect() - bridge.checkWCQROpen() - }) - }) -}) diff --git a/cypress/e2e/specs/flow/feeSwitching.spec.cy.ts b/cypress/e2e/specs/flow/feeSwitching.spec.cy.ts deleted file mode 100644 index 87e40abb..00000000 --- a/cypress/e2e/specs/flow/feeSwitching.spec.cy.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Layer } from '../../../../src/util/constant' -import Bridge from '../../helpers/bridge' - -const bridge = new Bridge() - -describe('Fee Switching', () => { - before(() => { - bridge.visit() - bridge.isReady() - bridge.requestMetamaskConnect() - bridge.verifyAccountConnected() - }) - it('Fee switcher should not exist when connected to Ethereum', () => { - bridge.header.getFeeSwitcher().should('not.exist') - }) - it('Fee switcher should exist when connected to Boba Network', () => { - // switch to Boba Network - bridge.switchBridgeDirection(Layer.L2) - bridge.header.getFeeSwitcher().contains('ETH').should('exist') - }) - it('Should switch to testnet to use fee switcher', () => { - bridge.switchBridgeDirection(Layer.L1) - bridge.switchToTestnet() - bridge.switchBridgeDirection(Layer.L2) - }) - it('Use Fee Switcher to switch fee to BOBA', () => { - bridge.selectToken('BOBA') - bridge.header.switchFees('ETH', 'BOBA') - }) - it('Use Fee Switcher to switch fee to ETH', () => { - bridge.header.switchFees('BOBA', 'ETH') - bridge.switchBridgeDirection(Layer.L1) - }) - - after(() => { - bridge.switchBridgeDirection(Layer.L1) - bridge.switchToMainnet() - bridge.disconnectWallet() - }) -}) diff --git a/cypress/e2e/specs/flow/tokenPicker.spec.cy.ts b/cypress/e2e/specs/flow/tokenPicker.spec.cy.ts deleted file mode 100644 index 781a857e..00000000 --- a/cypress/e2e/specs/flow/tokenPicker.spec.cy.ts +++ /dev/null @@ -1,26 +0,0 @@ -import Bridge from '../../helpers/bridge' - -const bridge = new Bridge() - -describe('Token Picker', () => { - before(() => { - bridge.visit() - bridge.isReady() - bridge.requestMetamaskConnect() - bridge.verifyAccountConnected() - }) - it('Should switch to testnet', () => { - bridge.switchToTestnet() - }) - it('Should have BOBA token and ETH token in token list', () => { - bridge.openTokenPicker() - bridge.verifyTokenInTokenList('ETH') - bridge.verifyTokenInTokenList('BOBA') - }) - it('Should select Boba token', () => { - bridge.selectToken('BOBA') - }) - after(() => { - bridge.switchToMainnet() - }) -}) diff --git a/cypress/e2e/specs/history.spec.cy.ts b/cypress/e2e/specs/history.spec.cy.ts deleted file mode 100644 index 59294034..00000000 --- a/cypress/e2e/specs/history.spec.cy.ts +++ /dev/null @@ -1,19 +0,0 @@ -import History from '../helpers/history' -const history = new History() - -describe('Testing Entire Site', () => { - describe('History', () => { - describe('Before wallet is connected', () => { - before(() => { - history.visit() - history.store.verifyReduxStoreSetup('baseEnabled', true) - }) - describe('History Layout', () => { - it('Should have the correct title', () => { - history.checkTitle() - history.checkDescription() - }) - }) - }) - }) -}) diff --git a/cypress/e2e/specs/layout.spec.cy.ts b/cypress/e2e/specs/layout.spec.cy.ts deleted file mode 100644 index feef8762..00000000 --- a/cypress/e2e/specs/layout.spec.cy.ts +++ /dev/null @@ -1,44 +0,0 @@ -import Page from '../helpers/base/page' -const page = new Page() - -describe('Page Layout', () => { - before(() => { - // added supported network only when actual check is done on connections - // page.addSupportedNetwork() - page.visit() - }) - - describe('Header', () => { - it('Navigation links should be correct and functional', () => { - page.checkNavigationListEthereum() - page.setNetworkTo('BNB') - page.checkNaviagtionListBinanace() - }) - - it('Theme switcher should work', () => { - page.checkThemeSwitcher() - }) - }) - - describe('Application Banner', () => { - it('Should see the earn & relayer deprecation banner and remove on close.', () => { - page.validateApplicationBanner() - }) - }) - - describe('Footer', () => { - it('Navigation links', () => { - page.checkFooterLinks() - }) - it('Social links', () => { - page.checkSocialMediaLinks() - }) - it('Gas details should be visible', () => { - page.setNetworkTo('ETH') - page.checkGasWatcherListingInETH() - }) - it('Copyright & Version', () => { - page.checkCopyrightAndVersion() - }) - }) -}) diff --git a/cypress/e2e/specs/stake.spec.cy.ts b/cypress/e2e/specs/stake.spec.cy.ts deleted file mode 100644 index a837ba16..00000000 --- a/cypress/e2e/specs/stake.spec.cy.ts +++ /dev/null @@ -1,19 +0,0 @@ -import Stake from '../helpers/stake' -const stake = new Stake() - -describe('Testing Entire Site', () => { - describe('Stake', () => { - describe('Before wallet is connected', () => { - before(() => { - stake.visit() - stake.store.verifyReduxStoreSetup('baseEnabled', true) - }) - describe('Stake Layout', () => { - it('Should have the correct title', () => { - stake.checkTitle() - stake.checkDescription() - }) - }) - }) - }) -}) diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json deleted file mode 100644 index 02e42543..00000000 --- a/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts deleted file mode 100644 index da6704ff..00000000 --- a/cypress/support/commands.ts +++ /dev/null @@ -1,37 +0,0 @@ -/// -// *********************************************** -// This example commands.ts shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add('login', (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This will overwrite an existing command -- -// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) -// -// declare global { -// namespace Cypress { -// interface Chainable { -// login(email: string, password: string): Chainable -// drag(subject: string, options?: Partial): Chainable -// dismiss(subject: string, options?: Partial): Chainable -// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable -// } -// } -// } diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts deleted file mode 100644 index 9de9194d..00000000 --- a/cypress/support/e2e.ts +++ /dev/null @@ -1,20 +0,0 @@ -// *********************************************************** -// This example support/e2e.ts is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands' -import '@synthetixio/synpress/support' -// Alternatively you can use CommonJS syntax: -// require('./commands') diff --git a/cypress/tsconfig.json b/cypress/tsconfig.json deleted file mode 100644 index 00bd5d96..00000000 --- a/cypress/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "types": ["@synthetixio/synpress/support"] - } -} diff --git a/e2e-tests/.env.example b/e2e-tests/.env.example new file mode 100644 index 00000000..e089ff63 --- /dev/null +++ b/e2e-tests/.env.example @@ -0,0 +1,4 @@ +SECRET_WORDS= +PASSWORD= +METAMASK_VERSION= +NETWORK= \ No newline at end of file diff --git a/e2e-tests/.gitignore b/e2e-tests/.gitignore new file mode 100644 index 00000000..a7d5c5b5 --- /dev/null +++ b/e2e-tests/.gitignore @@ -0,0 +1,8 @@ +node_modules +test-results +jsonReports +playwright-report +playwright/.cache +metamask-* +yarn-error.log +videos \ No newline at end of file diff --git a/e2e-tests/.npmrc b/e2e-tests/.npmrc new file mode 100644 index 00000000..06f27986 --- /dev/null +++ b/e2e-tests/.npmrc @@ -0,0 +1,4 @@ +public-hoist-pattern[]=@types* +public-hoist-pattern[]=cypress* +public-hoist-pattern[]=@testing-library/cypress +public-hoist-pattern[]=@synthetixio/synpress diff --git a/e2e-tests/.nvmrc b/e2e-tests/.nvmrc new file mode 100644 index 00000000..3c032078 --- /dev/null +++ b/e2e-tests/.nvmrc @@ -0,0 +1 @@ +18 diff --git a/e2e-tests/README.md b/e2e-tests/README.md new file mode 100644 index 00000000..82e63db3 --- /dev/null +++ b/e2e-tests/README.md @@ -0,0 +1,47 @@ +# Integration Test : Boba Gateway! + +Integration test are only running against the chromium browser! + +# Prerequesitis. + +`nvm v 18+` + +## How to run + +- `nvm use` +- `pnpm install` +- `pnpm install:chromium` +- `pnpm start:server` +- `pnpm test` or `pnpm test:headless` + + +## Generating Tests. + playwright has ability to generate tests out of the box using codegen. + +```ssh +pnpm codegen +``` + +## To run the test + playwright has ability to generate tests out of the box using codegen. + +```ssh +pnpm test +``` + +## To run the test in UI mode. + playwright has ability to generate tests out of the box using codegen. + +```ssh +pnpm test:ui +``` + +## To run the test in headless mode + playwright has ability to generate tests out of the box using codegen. + +```ssh +pnpm test:headless +``` + +Reference for chains to be listed. +[chains list](https://github.com/wevm/viem/blob/main/src/chains/index.ts) diff --git a/e2e-tests/fixture/synpress.ts b/e2e-tests/fixture/synpress.ts new file mode 100644 index 00000000..41ce4aaa --- /dev/null +++ b/e2e-tests/fixture/synpress.ts @@ -0,0 +1,62 @@ +import { test as base, chromium, type BrowserContext } from '@playwright/test' +import { initialSetup } from '@synthetixio/synpress/commands/metamask' +import { setExpectInstance } from '@synthetixio/synpress/commands/playwright' +import { resetState } from '@synthetixio/synpress/commands/synpress' +import { prepareMetamask } from '@synthetixio/synpress/helpers' +import dotenv from 'dotenv' + +dotenv.config() + +export const test = base.extend<{ + context: BrowserContext +}>({ + context: async ({}, use) => { + // required for synpress as it shares same expect instance as playwright + await setExpectInstance(expect) + + // download metamask + const metamaskPath = await prepareMetamask( + process.env.METAMASK_VERSION || '10.25.0' + ) + + // prepare browser args + const browserArgs = [ + `--disable-extensions-except=${metamaskPath}`, + `--load-extension=${metamaskPath}`, + '--remote-debugging-port=9222', + ] + + if (process.env.CI) { + browserArgs.push('--disable-gpu') + } + + if (process.env.HEADLESS_MODE) { + browserArgs.push('--headless=new') + } + + // launch browser + const context = await chromium.launchPersistentContext('', { + headless: false, + args: browserArgs, + }) + + // wait for metamask + await context.pages()[0].waitForTimeout(3000) + + // setup metamask + await initialSetup(chromium, { + secretWordsOrPrivateKey: process.env.SECRET_WORDS, + network: process.env.NETWORK, + password: process.env.PASSWORD, + enableAdvancedSettings: true, + }) + + await use(context) + + await context.close() + + await resetState() + }, +}) + +export const expect = test.expect diff --git a/e2e-tests/lib/gatewayAction.ts b/e2e-tests/lib/gatewayAction.ts new file mode 100644 index 00000000..7fd98247 --- /dev/null +++ b/e2e-tests/lib/gatewayAction.ts @@ -0,0 +1,126 @@ +import { Page } from '@playwright/test' +import { BasePage } from '../pages/basePage' +import { BridgePage } from '../pages/bridgePage' + +export class GatewayAction { + basePage: BasePage + bridgePage: BridgePage + + constructor(public page: Page) { + this.basePage = new BasePage(page) + this.bridgePage = new BridgePage(page) + } + + async classicBridge({ + amountToBridge, + tokenSymbol, + estimatedTime = '', + }: { + amountToBridge: string + tokenSymbol: string + estimatedTime?: string + }) { + await this.bridgePage.openTokenPickerAndSelect(tokenSymbol) + await this.bridgePage.bridgeButtonToBeDisable() + await this.bridgePage.fillBridgingAmount(amountToBridge) + await this.bridgePage.bridgeButtonToBeEnable() + await this.bridgePage.validateBridgingFee({ + amount: amountToBridge, + token: tokenSymbol, + estimatedTime, + }) + await this.bridgePage.clickToBridge() + await this.bridgePage.validateAndConfirmBridging({ + amount: amountToBridge, + token: tokenSymbol, + estimatedTime, + }) + } + + async doDepositClassicBridge({ + amountToBridge, + approveAllowance = false, + }: { + amountToBridge: string + approveAllowance?: boolean + }) { + if (approveAllowance) { + await this.bridgePage.approveAndConfirmMetaMaskSuccess(amountToBridge) + } else { + await this.bridgePage.confirmMetaMaskModalToBridge(amountToBridge) + } + await this.bridgePage.wait(1000) + await this.bridgePage.validateBridgeSuccess() + await this.bridgePage.toHistoryPage() + } + + async doWithdrawClassicBridge() { + await this.bridgePage.reviewAndWithdraw() + } + + async doWithdrawClassicBridgeBnb(amount) { + await this.bridgePage.reviewAproveAndWithdraw(amount) + } + + async lightBridge({ + amountToBridge, + tokenSymbol, + successWaitTime = 1000, + approveAllowance = false, + receivableAmt, + }: { + amountToBridge: string + tokenSymbol: string + receivableAmt?: string + successWaitTime?: number + approveAllowance?: boolean + }) { + await this.bridgePage.switchToLightBridge() + await this.bridgePage.openTokenPickerAndSelect(tokenSymbol) + await this.bridgePage.bridgeButtonToBeDisable() + await this.bridgePage.fillBridgingAmount(amountToBridge) + await this.bridgePage.bridgeButtonToBeEnable() + await this.bridgePage.validateBridgingFee({ + amount: receivableAmt ? Number(receivableAmt).toFixed(4) : amountToBridge, + token: tokenSymbol, + estimatedTime: '~1min.', + }) + await this.bridgePage.clickToBridge() + await this.bridgePage.validateAndConfirmBridging({ + amount: amountToBridge, + token: tokenSymbol, + estimatedTime: '~1min.', + }) + if (approveAllowance) { + await this.bridgePage.approveAndConfirmMetaMaskSuccess(amountToBridge) + } else { + await this.bridgePage.confirmMetaMaskModalToBridge(amountToBridge) + } + await this.bridgePage.wait(successWaitTime) // have to wait for success modal + await this.bridgePage.validateBridgeSuccess() + await this.bridgePage.toHistoryPage() + } + + async connectToTestnet() { + await this.basePage.openAndValidateSettingsModal() + await this.basePage.switchToTestnet() + await this.basePage.connectToMetamask() + await this.basePage.wait(1000) + } + + async connect() { + await this.basePage.connectToMetamask(true) + } + + async switchToL2AndReset() { + await this.basePage.clickToSwitchNetwork() + await this.basePage.disconnectMetamask() + await this.basePage.connectToMetamask(true) + } + + async addAndConnectBNBTestnet() { + await this.connectToTestnet() + await this.basePage.clickAndSwitchToBnb() + await this.basePage.wait(1000) + } +} diff --git a/e2e-tests/package.json b/e2e-tests/package.json new file mode 100644 index 00000000..cc7c0d3d --- /dev/null +++ b/e2e-tests/package.json @@ -0,0 +1,25 @@ +{ + "name": "@gateway/e2e-tests", + "version": "0.0.1", + "author": "Sahil Kashetwar ", + "license": "MIT", + "devDependencies": { + "@playwright/test": "^1.37.0", + "@synthetixio/synpress": "3.7.2-beta.3", + "serve": "^14.2.0" + }, + "scripts": { + "clean": "rm -rf ./videos ./test-results ./playwright-report", + "clean:test": "pnpm clean && pnpm test", + "install:chromium": "playwright install chromium", + "test": "playwright test --project=chromium", + "test:ui": "playwright test --project=chromium --ui", + "test:headless": "HEADLESS_MODE=true playwright test --project=chromium", + "report":"npx playwright show-report", + "start:server": "serve ../build -p 3000", + "codegen": "npx playwright codegen" + }, + "dependencies": { + "dotenv": "^16.4.5" + } +} diff --git a/e2e-tests/pages/basePage.ts b/e2e-tests/pages/basePage.ts new file mode 100644 index 00000000..67b2a3a0 --- /dev/null +++ b/e2e-tests/pages/basePage.ts @@ -0,0 +1,128 @@ +import { expect, Page } from '@playwright/test' +import * as metamask from '@synthetixio/synpress/commands/metamask' + +export class BasePage { + constructor(public page: Page) {} + + // wait - accept time in milliseconds. + async wait(millisec: number) { + this.page.waitForTimeout(millisec || 500) + } + + // navigation + // settings + async openAndValidateSettingsModal() { + await this.page.getByTestId('setting-btn').click() + + await expect( + this.page.getByRole('heading', { name: 'Settings' }) + ).toBeVisible() + + await expect(this.page.getByText('Show Testnets')).toBeVisible() + + await expect(this.page.getByText('Add Destination Address')).toBeVisible() + } + + async switchToTestnet() { + const inputElement = this.page + .locator('label[data-testid="switch-label"] input[type="checkbox"]') + .first() + + const isChecked = await inputElement.isChecked() + + expect(isChecked).toBe(false) + + await inputElement.dispatchEvent('click') + + await this.page.waitForTimeout(500) + + const updatedIsChecked = await inputElement.isChecked() + + expect(updatedIsChecked).toBe(true) + + this.closeSettingModal() + } + + async switchToMainnet() { + const inputElement = this.page + .locator('label[data-testid="switch-label"] input[type="checkbox"]') + .first() + + const isChecked = await inputElement.isChecked() + + expect(isChecked).toBe(true) + + await inputElement.dispatchEvent('click') + + await this.page.waitForTimeout(500) + + const updatedIsChecked = await inputElement.isChecked() + + expect(updatedIsChecked).toBe(false) + + this.closeSettingModal() + } + + async closeSettingModal() { + await this.page.getByTestId('close-modal-settings-modal').click() + } + + // connect + // first time connect to meta mask. + async connectToMetamask(firstConnect = false) { + await this.page.getByTestId('connect-btn').click() + + await this.page.getByTestId('metamask-link').click() + + if (firstConnect) { + return + } + + await metamask.acceptAccess() + + // NOTE: need to get the spec running on locall. + if (!process.env.CI) { + await this.page.getByTestId('connect-btn').click() + } + + await this.page.waitForTimeout(2000) + + await expect(this.page.getByTestId('label-address')).toContainText('7428') + + await expect(this.page.getByTestId('connect-btn')).not.toBeVisible() + } + + async clickToSwitchNetwork() { + await this.page.getByTestId('switchNetwork').click() + + await metamask.allowToAddAndSwitchNetwork() + } + + async clickAndSwitchToBnb() { + await this.page.getByTestId('from-network-picker').click() + await expect( + this.page.getByRole('heading', { level: 2, name: 'Select Network' }) + ).toBeVisible() + + await expect(this.page.getByText('Network Names')).toBeVisible() + + await this.page.getByTestId('selector-bnb').click() + + await this.page.waitForTimeout(1000) + + await this.page.getByTestId('switch-network-btn').click() + + await this.page.waitForTimeout(2000) + + await this.page.getByText('Connect to the Bnb Testnet network').click() + + await metamask.allowToAddAndSwitchNetwork() + } + + // disconnect + async disconnectMetamask() { + await this.page.getByTestId('label-address').click() + await this.page.getByText('Disconnect').click() + await this.wait(2000) + } +} diff --git a/e2e-tests/pages/bridgePage.ts b/e2e-tests/pages/bridgePage.ts new file mode 100644 index 00000000..6c4feb3d --- /dev/null +++ b/e2e-tests/pages/bridgePage.ts @@ -0,0 +1,189 @@ +import { expect, Page } from '@playwright/test' +import * as metamask from '@synthetixio/synpress/commands/metamask' +import { BasePage } from './basePage' + +export class BridgePage extends BasePage { + constructor(public page: Page) { + super(page) + } + + async openTokenPickerAndSelect(tokenSymbol: string) { + await this.page.locator('#tokenSelectorInput').click() + await expect(this.page.getByText('Select Token')).toBeVisible() + await this.page.waitForTimeout(4000) + await this.page + .locator('div[title="tokenList"]') + .getByTestId(`token-${tokenSymbol}`) + .click() + } + + async switchToLightBridge() { + await this.page.getByTestId('light-btn').click() + } + + async bridgeButtonToBeDisable() { + const bridgeBtn = this.page.getByTestId('bridge-btn') + await expect(bridgeBtn).toBeDisabled() + } + + async bridgeButtonToBeEnable() { + const bridgeBtn = this.page.getByTestId('bridge-btn') + await expect(bridgeBtn).toBeEnabled() + } + + async validateBridgingFee({ + amount, + token, + estimatedTime, + }: { + amount: string + token: string + estimatedTime: string + }) { + await expect(this.page.getByTestId('amountToRecieve')).toHaveText( + `${parseFloat(Number(amount).toFixed(4))} ${token}` + ) + + const estTime = await this.page + .locator(':text("Estimated time") + p') + .textContent() + + expect(estTime).toBe(estimatedTime) + + const estRecievable = await this.page + .locator(':text("You will receive") + p') + .textContent() + + // TODO: update value with fee calculation. + expect(estRecievable).toBe( + `${parseFloat(Number(amount).toFixed(4))} ${token}` + ) + } + + async clickToBridge() { + await this.page.getByTestId('bridge-btn').click() + } + + async fillBridgingAmount(amount: string) { + await this.page.locator('input#bridgeAmount').fill(amount) + } + + async validateAndConfirmBridging({ + amount, + token, + estimatedTime, + }: { + token: string + amount: string + estimatedTime: string + }) { + await expect( + this.page.getByRole('heading', { name: 'Bridge Confirmation' }) + ).toBeVisible() + + const amountToBridge = await this.page + .locator(':text("Amount to bridge") + p') + .textContent() + + expect(amountToBridge).toContain(`${amount} ${token}`) + + const time = await this.page + .locator('[data-testid="bridge-confirmation"] :text("Time") + p') + .textContent() + + expect(time).toBe(estimatedTime) + + await this.page.getByRole('button', { name: 'Confirm' }).click() + } + + async confirmMetaMaskModalToBridge(amount: string) { + await expect( + this.page.getByRole('heading', { name: 'Bridging...' }) + ).toBeVisible() + + await metamask.confirmPermissionToSpend(amount, true) + + await expect(this.page.getByTestId('transactionSuccess-modal')).toBeVisible( + { timeout: 60000 } + ) + } + + async approveAndConfirmMetaMaskSuccess(amount: string) { + await expect( + this.page.getByRole('heading', { name: 'Bridging...' }) + ).toBeVisible() + + await metamask.confirmPermissionToSpend(amount, true) + + this.page.waitForTimeout(6000) // wait for 3 secs. + + await metamask.confirmTransaction({ shouldWaitForPopupClosure: true }) + + await expect(this.page.getByTestId('transactionSuccess-modal')).toBeVisible( + { timeout: 60000 } + ) + } + + async validateBridgeSuccess() { + await expect(this.page.getByTestId('success')).toHaveText('Successful') + } + + async toHistoryPage() { + await this.page.getByRole('button', { name: 'Go to history' }).click() + + await this.page.waitForTimeout(1000) + + await expect(this.page.getByRole('heading', { level: 1 })).toHaveText( + 'History' + ) + } + + async reviewAndWithdraw() { + await expect( + this.page.getByRole('heading', { name: 'Withdrawal' }) + ).toBeVisible() + await expect( + this.page.getByRole('button', { name: 'Initiate Withdrawal' }) + ).toBeEnabled() + await this.page.getByRole('button', { name: 'Initiate Withdrawal' }).click() + await metamask.confirmTransaction() + await this.wait(2000) + await this.page.getByRole('button', { name: 'Close' }).click() + } + + async reviewAproveAndWithdraw(amount) { + await expect( + this.page.getByRole('heading', { name: 'Withdrawal' }) + ).toBeVisible() + await expect( + this.page.getByRole('button', { name: 'Initiate Withdrawal' }) + ).toBeEnabled() + await this.page.getByRole('button', { name: 'Initiate Withdrawal' }).click() + await metamask.confirmPermissionToSpend(amount) + await this.wait(2000) + await this.page.getByRole('button', { name: 'Close' }).click() + } + + async switchNetworkProovWithdrawal() { + const switchBtn = this.page.getByRole('button', { name: 'Switch Network' }) + + await expect(switchBtn).toBeEnabled() + + await switchBtn.click() + + await expect(switchBtn).toBeDisabled() + + await metamask.allowToAddAndSwitchNetwork() + + // close prove withdrawal modal. + await this.page.getByRole('button', { name: 'Close' }).click() + } + + async confirmErrorAlert({ error }: { error: string }) { + expect(await this.page.isVisible('#bridge [type="error"]')).toBeTruthy() + const text = await this.page + .locator('#bridge [type="error"] p') + .textContent() + expect(text).toEqual(error) + } +} diff --git a/e2e-tests/playwright.config.ts b/e2e-tests/playwright.config.ts new file mode 100644 index 00000000..872f8f37 --- /dev/null +++ b/e2e-tests/playwright.config.ts @@ -0,0 +1,49 @@ +import { defineConfig } from '@playwright/test' +export default defineConfig({ + testDir: './tests', + timeout: 30 * 1000, + expect: { + timeout: 5000, + }, + fullyParallel: true, + retries: process.env.CI ? 1 : 0, + workers: 1, + forbidOnly: !!process.env.CI, + reporter: [['list'], ['dot'], ['html']], + use: { + headless: !!process.env.CI, + actionTimeout: 0, + baseURL: 'http://localhost:3000', + screenshot: 'only-on-failure', + video: 'on-first-retry', + trace: 'on-first-retry', + contextOptions: { + recordVideo: { + dir: 'videos/', + size: { width: 640, height: 480 }, + }, + }, + }, + // start local web server before tests + webServer: [ + { + command: 'pnpm start:server', + url: 'http://localhost:3000', + timeout: 5000, + reuseExistingServer: true, + }, + ], + projects: [ + { + name: 'chromium', + use: { + viewport: null, + // ...devices['Desktop Chrome'], + // It is important to define the `viewport` property after destructuring `devices`, + // since devices also define the `viewport` for that device. + // viewport: { width: 1280, height: 850 }, + }, + }, + ], + outputDir: 'test-results', +}) diff --git a/e2e-tests/pnpm-lock.yaml b/e2e-tests/pnpm-lock.yaml new file mode 100644 index 00000000..42303a46 --- /dev/null +++ b/e2e-tests/pnpm-lock.yaml @@ -0,0 +1,8568 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + devDependencies: + '@playwright/test': + specifier: ^1.37.0 + version: 1.37.0 + '@synthetixio/synpress': + specifier: 3.7.2-beta.3 + version: 3.7.2-beta.3(@babel/core@7.22.9)(@babel/preset-env@7.22.9(@babel/core@7.22.9))(babel-loader@9.1.3(@babel/core@7.22.9)(webpack@5.88.2))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(webpack@5.88.2) + serve: + specifier: ^14.2.0 + version: 14.2.0 + +packages: + + '@adraffy/ens-normalize@1.9.0': + resolution: {integrity: sha512-iowxq3U30sghZotgl4s/oJRci6WPBfNO5YYgk2cIOMCHr3LeGPcsZjCEr+33Q4N+oV3OABDAtA+pyvWjbvBifQ==} + + '@adraffy/ens-normalize@1.9.2': + resolution: {integrity: sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==} + + '@ampproject/remapping@2.2.1': + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.22.5': + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.22.9': + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.22.9': + resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.22.9': + resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.22.5': + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.5': + resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.22.9': + resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-class-features-plugin@7.22.9': + resolution: {integrity: sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.22.9': + resolution: {integrity: sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.4.2': + resolution: {integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-environment-visitor@7.22.5': + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.22.5': + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.22.5': + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.22.5': + resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.22.5': + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.22.9': + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.22.5': + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.22.5': + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.22.9': + resolution: {integrity: sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.22.9': + resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.22.5': + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.22.6': + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.22.5': + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.22.5': + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.22.5': + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.22.9': + resolution: {integrity: sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.22.6': + resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.22.5': + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.22.7': + resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5': + resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5': + resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-unicode-property-regex@7.18.6': + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-dynamic-import@7.8.3': + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-export-namespace-from@7.8.3': + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.22.5': + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.22.5': + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.22.5': + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.22.7': + resolution: {integrity: sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.22.5': + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.22.5': + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.22.5': + resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.22.5': + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.22.5': + resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.22.6': + resolution: {integrity: sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.22.5': + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.22.5': + resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.22.5': + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.22.5': + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dynamic-import@7.22.5': + resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.22.5': + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.22.5': + resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.22.5': + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.22.5': + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.22.5': + resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.22.5': + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.22.5': + resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.22.5': + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.22.5': + resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.22.5': + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.22.5': + resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.22.5': + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5': + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.22.5': + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.22.5': + resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.22.5': + resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.22.5': + resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.22.5': + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.22.5': + resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.22.6': + resolution: {integrity: sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.22.5': + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.22.5': + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.22.5': + resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.22.5': + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.22.5': + resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-reserved-words@7.22.5': + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.22.5': + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.22.5': + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.22.5': + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.22.5': + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.22.5': + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.22.5': + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.22.5': + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.22.5': + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.22.5': + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.22.9': + resolution: {integrity: sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6': + resolution: {integrity: sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/regjsgen@0.8.0': + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + + '@babel/runtime-corejs3@7.22.6': + resolution: {integrity: sha512-M+37LLIRBTEVjktoJjbw4KVhupF0U/3PYUCbBwgAd9k17hoKhRu1n935QiG7Tuxv0LJOMrb2vuKEeYUlv0iyiw==} + engines: {node: '>=6.9.0'} + + '@babel/runtime@7.22.6': + resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.22.5': + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.22.8': + resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.22.5': + resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + engines: {node: '>=6.9.0'} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@cypress/code-coverage@3.11.0': + resolution: {integrity: sha512-ihSO1s03gmLRE224oIjrbdG1ey63vw/UY+VSqQ5m/TKkAvyz6GIiniq6juk3AV/+0vQC1Eb4UWFu8ndtji4M1g==} + peerDependencies: + cypress: '*' + + '@cypress/request@2.88.12': + resolution: {integrity: sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==} + engines: {node: '>= 6'} + + '@cypress/webpack-dev-server@3.5.2': + resolution: {integrity: sha512-g2nkWgTWFWqYCfG/3K1C2W8p1WyvcdYNG9eqsmRhkifroJDsm5q5aBI9lA9dHhL8qoRARaPzEaeef3PqBTjNUg==} + + '@cypress/webpack-preprocessor@5.17.1': + resolution: {integrity: sha512-FE/e8ikPc8z4EVopJCaior3RGy0jd2q9Xcp5NtiwNG4XnLfEnUFTZlAGwXe75sEh4fNMPrBJW1KIz77PX5vGAw==} + peerDependencies: + '@babel/core': ^7.0.1 + '@babel/preset-env': ^7.0.0 + babel-loader: ^8.0.2 || ^9 + webpack: ^4 || ^5 + + '@cypress/xvfb@1.2.4': + resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} + + '@drptbl/gremlins.js@2.2.1': + resolution: {integrity: sha512-VWsdOZTsu8ABNVplFQUniHSLsCAQIJh+HDTUP6CllxXBe2pgFQKQ6RGxAS/QRTUcPprQCGpB3zH+gqNnvRRTmQ==} + + '@foundry-rs/easy-foundryup@0.1.3': + resolution: {integrity: sha512-Funb4hrSBeikKCmccFT/d3Ud5o92tlIZHTJeMCVk5b54/+CHZHr4g7MmtvO5xrGhxrOebQ0L+ojIj+VixgW7ug==} + + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/types@26.6.2': + resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} + engines: {node: '>= 10.14.2'} + + '@jridgewell/gen-mapping@0.3.3': + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.0': + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.1.2': + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.5': + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + + '@jridgewell/sourcemap-codec@1.4.14': + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.18': + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + + '@leichtgewicht/ip-codec@2.0.4': + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + + '@noble/curves@1.0.0': + resolution: {integrity: sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==} + + '@noble/curves@1.1.0': + resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} + + '@noble/hashes@1.1.2': + resolution: {integrity: sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==} + + '@noble/hashes@1.3.0': + resolution: {integrity: sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==} + + '@noble/hashes@1.3.1': + resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} + engines: {node: '>= 16'} + + '@noble/secp256k1@1.7.1': + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@playwright/test@1.37.0': + resolution: {integrity: sha512-181WBLk4SRUyH1Q96VZl7BP6HcK0b7lbdeKisn3N/vnjitk+9HbdlFz/L5fey05vxaAhldIDnzo8KUoy8S3mmQ==} + engines: {node: '>=16'} + hasBin: true + + '@scure/base@1.1.1': + resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} + + '@scure/bip32@1.3.0': + resolution: {integrity: sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==} + + '@scure/bip39@1.2.0': + resolution: {integrity: sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==} + + '@sideway/address@4.1.4': + resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + + '@sindresorhus/is@0.7.0': + resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==} + engines: {node: '>=4'} + + '@synthetixio/synpress@3.7.2-beta.3': + resolution: {integrity: sha512-18eb//6cKpGF0hgaZkfFnjh9pcacONhZN0nQ+RuCrnL4hnWkjaYE1sbW97hSd4r1obUau20r7BOhserlZq7eBg==} + engines: {node: '>=14'} + hasBin: true + + '@testing-library/cypress@9.0.0': + resolution: {integrity: sha512-c1XiCGeHGGTWn0LAU12sFUfoX3qfId5gcSE2yHode+vsyHDWraxDPALjVnHd4/Fa3j4KBcc5k++Ccy6A9qnkMA==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + cypress: ^12.0.0 + + '@testing-library/dom@7.31.2': + resolution: {integrity: sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==} + engines: {node: '>=10'} + + '@testing-library/dom@8.20.1': + resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} + engines: {node: '>=12'} + + '@testing-library/dom@9.3.1': + resolution: {integrity: sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w==} + engines: {node: '>=14'} + + '@testing-library/react@14.0.0': + resolution: {integrity: sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==} + engines: {node: '>=14'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + + '@types/aria-query@4.2.2': + resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==} + + '@types/aria-query@5.0.1': + resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==} + + '@types/body-parser@1.19.2': + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + + '@types/bonjour@3.5.10': + resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} + + '@types/connect-history-api-fallback@1.5.0': + resolution: {integrity: sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==} + + '@types/connect@3.4.35': + resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + + '@types/eslint-scope@3.7.4': + resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + + '@types/eslint@8.44.2': + resolution: {integrity: sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==} + + '@types/estree@1.0.1': + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + + '@types/express-serve-static-core@4.17.35': + resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} + + '@types/express@4.17.17': + resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} + + '@types/html-minifier-terser@5.1.2': + resolution: {integrity: sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==} + + '@types/html-minifier-terser@6.1.0': + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + + '@types/http-errors@2.0.1': + resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} + + '@types/http-proxy@1.17.11': + resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==} + + '@types/istanbul-lib-coverage@2.0.4': + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + + '@types/istanbul-lib-report@3.0.0': + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + + '@types/istanbul-reports@3.0.1': + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + + '@types/json-schema@7.0.12': + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/mime@1.3.2': + resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} + + '@types/mime@3.0.1': + resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + + '@types/node@16.18.39': + resolution: {integrity: sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==} + + '@types/node@18.15.13': + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/prop-types@15.7.5': + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + + '@types/qs@6.9.7': + resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + + '@types/range-parser@1.2.4': + resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + + '@types/react-dom@18.2.7': + resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} + + '@types/react@18.2.18': + resolution: {integrity: sha512-da4NTSeBv/P34xoZPhtcLkmZuJ+oYaCxHmyHzwaDQo9RQPBeXV+06gEk2FpqEcsX9XrnNLvRpVh6bdavDSjtiQ==} + + '@types/responselike@1.0.0': + resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + + '@types/scheduler@0.16.3': + resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + + '@types/send@0.17.1': + resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} + + '@types/serve-index@1.9.1': + resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} + + '@types/serve-static@1.15.2': + resolution: {integrity: sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==} + + '@types/sinonjs__fake-timers@8.1.1': + resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} + + '@types/sizzle@2.3.3': + resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} + + '@types/sockjs@0.3.33': + resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} + + '@types/source-list-map@0.1.2': + resolution: {integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==} + + '@types/tapable@1.0.8': + resolution: {integrity: sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==} + + '@types/testing-library__cypress@5.0.9': + resolution: {integrity: sha512-WTiIZhZKWDnV+Tgo42pxff8YfHdmaNFQz/bFoTlmfw2vbXcstCcb39VRaRi5yFHj/lb7t3K47btKYEbR1fci+Q==} + + '@types/uglify-js@3.17.1': + resolution: {integrity: sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==} + + '@types/webpack-sources@3.2.0': + resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} + + '@types/webpack@4.41.33': + resolution: {integrity: sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==} + + '@types/ws@8.5.5': + resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} + + '@types/yargs-parser@21.0.0': + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + + '@types/yargs@15.0.15': + resolution: {integrity: sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==} + + '@types/yauzl@2.10.0': + resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} + + '@viem/anvil@0.0.6': + resolution: {integrity: sha512-OjKR/+FVwzuygXYFqP8MBal1SXG8bT2gbZwqqB0XuLw81LNBBvmE/Repm6+5kkBh4IUj0PhYdrqOsnayS14Gtg==} + + '@wagmi/chains@1.6.0': + resolution: {integrity: sha512-5FRlVxse5P4ZaHG3GTvxwVANSmYJas1eQrTBHhjxVtqXoorm0aLmCHbhmN8Xo1yu09PaWKlleEvfE98yH4AgIw==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + + '@webassemblyjs/ast@1.11.6': + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + + '@webassemblyjs/helper-buffer@1.11.6': + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + + '@webassemblyjs/helper-wasm-section@1.11.6': + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + + '@webassemblyjs/wasm-edit@1.11.6': + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + + '@webassemblyjs/wasm-gen@1.11.6': + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + + '@webassemblyjs/wasm-opt@1.11.6': + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + + '@webassemblyjs/wasm-parser@1.11.6': + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + + '@webassemblyjs/wast-printer@1.11.6': + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + '@zeit/schemas@2.29.0': + resolution: {integrity: sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==} + + abitype@0.9.3: + resolution: {integrity: sha512-dz4qCQLurx97FQhnb/EIYTk/ldQ+oafEDUqC0VVIeQS1Q48/YWt/9YNfMmp9SLFqN41ktxny3c8aYxHjmFIB/w==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-import-assertions@1.9.0: + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + + acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + + aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.11.0: + resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + app-root-path@3.1.0: + resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==} + engines: {node: '>= 6.0.0'} + + append-transform@2.0.0: + resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} + engines: {node: '>=8'} + + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + archive-type@4.0.0: + resolution: {integrity: sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==} + engines: {node: '>=4'} + + archy@1.0.0: + resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@4.2.2: + resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} + engines: {node: '>=6.0'} + + aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + + array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-flatten@2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + + array-union@1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + + array.prototype.reduce@1.0.5: + resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + engines: {node: '>= 0.4'} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + + async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws4@1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + + axios@0.27.2: + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + + axios@1.2.2: + resolution: {integrity: sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==} + + axios@1.4.0: + resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==} + + babel-loader@9.1.3: + resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@babel/core': ^7.12.0 + webpack: '>=5' + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-polyfill-corejs2@0.4.5: + resolution: {integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.8.3: + resolution: {integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.5.2: + resolution: {integrity: sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-react-generate-property@1.1.2: + resolution: {integrity: sha512-Wm1OfCfv7juukTZEZHNSYIMxeQEcIhnQQeGlFbML1BesMGZValuCCnEaayg6KyAlT9Y07I5Tz6XmH9YirUfkFQ==} + + babel-plugin-react-remove-properties@0.3.0: + resolution: {integrity: sha512-vbxegtXGyVcUkCvayLzftU95vuvpYFV85pRpeMpohMHeEY46Qe0VNWfkVVcCbaZ12CXHzDFOj0esumATcW83ng==} + + babel-plugin-transform-react-qa-classes@1.6.0: + resolution: {integrity: sha512-r7G9s+j6CiatnTMP+32fbPrfrSSPWJ3LBoESNlCdXWb8oAO2Ubcrgk0TSbpHVMoDpBiyn+zfm2rxdxwdTt3FpQ==} + + babel-plugin-transform-react-styled-components-qa@2.1.0: + resolution: {integrity: sha512-Db3YCZPuel9JYM8uZ3UAen3Yio5ZPTVbJuLqekxRdZ7fUF185iIHnp275Gb5qu6wDyUH+/L9erYieaigq5qvow==} + + babel-runtime@6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + + babel-types@6.26.0: + resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + bl@1.2.3: + resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} + + blob-util@2.0.2: + resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} + + bluebird@3.7.1: + resolution: {integrity: sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bonjour-service@1.1.1: + resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@7.0.0: + resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} + engines: {node: '>=14.16'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + + buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bytes32@0.0.3: + resolution: {integrity: sha512-uQM5zGcelcBEk0R7vkIRVN7GnrDd2S5EeWrxv7dSFLPVoI5FwYiSYOOLaFwnsav0oSr3hZQ6mFq6QNi8Vt6n8w==} + hasBin: true + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cacheable-request@2.1.4: + resolution: {integrity: sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==} + + cachedir@2.4.0: + resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} + engines: {node: '>=6'} + + caching-transform@4.0.0: + resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} + engines: {node: '>=8'} + + call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + + caniuse-lite@1.0.30001519: + resolution: {integrity: sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + chalk-template@0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.0.1: + resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chance@1.1.11: + resolution: {integrity: sha512-kqTg3WWywappJPqtgrdvbA380VoXO2eu9VCV895JgbyHsaErXdyHK9LOZ911OvAk6L0obK7kDk9CGs8+oBawVA==} + + check-more-types@2.24.0: + resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} + engines: {node: '>= 0.8.0'} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + + ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} + + clean-css@4.2.4: + resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} + engines: {node: '>= 4.0'} + + clean-css@5.3.2: + resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} + engines: {node: '>= 10.0'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-table3@0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + clipboardy@3.0.0: + resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone-response@1.0.2: + resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + + commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + + core-js-compat@3.32.0: + resolution: {integrity: sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==} + + core-js-pure@3.32.0: + resolution: {integrity: sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g==} + + core-js@2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + + core-js@3.32.0: + resolution: {integrity: sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww==} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + + cypress-wait-until@2.0.1: + resolution: {integrity: sha512-+IyVnYNiaX1+C+V/LazrJWAi/CqiwfNoRSrFviECQEyolW1gDRy765PZosL2alSSGK8V10Y7BGfOQyZUDgmnjQ==} + + cypress@12.17.4: + resolution: {integrity: sha512-gAN8Pmns9MA5eCDFSDJXWKUpaL3IDd89N9TtIupjYnzLSmlpVr+ZR+vb4U/qaMp+lB6tBvAmt7504c3Z4RU5KQ==} + engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + hasBin: true + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + + dayjs@1.11.9: + resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + + decompress-tar@4.1.1: + resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==} + engines: {node: '>=4'} + + decompress-tarbz2@4.1.1: + resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==} + engines: {node: '>=4'} + + decompress-targz@4.1.1: + resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==} + engines: {node: '>=4'} + + decompress-unzip@4.0.1: + resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==} + engines: {node: '>=4'} + + decompress@4.2.1: + resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} + engines: {node: '>=4'} + + deep-equal@2.2.2: + resolution: {integrity: sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + + default-require-extensions@3.0.1: + resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} + engines: {node: '>=8'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-properties@1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dns-equal@1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + + dns-packet@5.6.0: + resolution: {integrity: sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==} + engines: {node: '>=6'} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv-parse-variables@2.0.0: + resolution: {integrity: sha512-/Tezlx6xpDqR6zKg1V4vLCeQtHWiELhWoBz5A/E0+A1lXN9iIkNbbfc4THSymS0LQUo8F1PMiIwVG8ai/HrnSA==} + engines: {node: '>= 8.3.0'} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + download@8.0.0: + resolution: {integrity: sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==} + engines: {node: '>=10'} + + duplexer3@0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.4.485: + resolution: {integrity: sha512-1ndQ5IBNEnFirPwvyud69GHL+31FkE09gH/CJ6m3KCbkx3i0EVOrjwz4UNxRmN9H8OVHbC6vMRZGN1yCvjSs9w==} + + email-addresses@3.1.0: + resolution: {integrity: sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + engines: {node: '>= 0.4'} + + es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + + es-module-lexer@1.3.0: + resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} + + es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + ethers@6.7.1: + resolution: {integrity: sha512-qX5kxIFMfg1i+epfgb0xF4WM7IqapIIu50pOJ17aebkxxa4BacW5jFrQRmCJpDEg2ZK2oNtR5QjrQ1WDBF29dA==} + engines: {node: '>=14.0.0'} + + etherscan-api@10.3.0: + resolution: {integrity: sha512-XH+E7J2c6Wq750stvFuIIMdiLv5v65nTRftQojXuQXNfEsQaZOOgeY11WHdrGh6yh90ekDJQldgf033tIS1rCw==} + + eventemitter2@6.4.7: + resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + executable@4.1.1: + resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} + engines: {node: '>=4'} + + express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + + ext-list@2.2.2: + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} + + ext-name@5.0.0: + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-url-parser@1.1.3: + resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} + + fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-type@11.1.0: + resolution: {integrity: sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==} + engines: {node: '>=6'} + + file-type@3.9.0: + resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==} + engines: {node: '>=0.10.0'} + + file-type@4.4.0: + resolution: {integrity: sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==} + engines: {node: '>=4'} + + file-type@5.2.0: + resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==} + engines: {node: '>=4'} + + file-type@6.2.0: + resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==} + engines: {node: '>=4'} + + filename-reserved-regex@2.0.0: + resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} + engines: {node: '>=4'} + + filenamify@3.0.0: + resolution: {integrity: sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==} + engines: {node: '>=6'} + + filenamify@4.3.0: + resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} + engines: {node: '>=8'} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + find-cache-dir@4.0.0: + resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} + engines: {node: '>=14.16'} + + find-config@1.0.0: + resolution: {integrity: sha512-Z+suHH+7LSE40WfUeZPIxSxypCWvrzdVc60xAjUShZeT5eMWM0/FQUduq3HjluyfAHWvC/aOBkT1pTZktyF/jg==} + engines: {node: '>= 0.12'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + follow-redirects@1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + from2@2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + + fromentries@1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-monkey@1.0.4: + resolution: {integrity: sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + function.prototype.name@1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-port@6.1.2: + resolution: {integrity: sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + get-port@7.0.0: + resolution: {integrity: sha512-mDHFgApoQd+azgMdwylJrv2DX47ywGq1i5VFJE7fZ0dttNq3iQMfsU4IvEgBHojA3KqEudyu7Vq+oN8kNaNkWw==} + engines: {node: '>=16'} + + get-stream@2.3.1: + resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} + engines: {node: '>=0.10.0'} + + get-stream@3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} + + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + + getos@3.2.1: + resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + + gh-pages@4.0.0: + resolution: {integrity: sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==} + engines: {node: '>=10'} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + + globby@11.0.4: + resolution: {integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==} + engines: {node: '>=10'} + + globby@6.1.0: + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} + engines: {node: '>=0.10.0'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + got@8.3.2: + resolution: {integrity: sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==} + engines: {node: '>=4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + + has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + has-symbol-support-x@1.4.2: + resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-to-string-tag-x@1.4.1: + resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==} + + has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + + has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + + hasha@5.2.2: + resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} + engines: {node: '>=8'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + + html-entities@2.4.0: + resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-minifier-terser@5.1.1: + resolution: {integrity: sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==} + engines: {node: '>=6'} + hasBin: true + + html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + + html-webpack-plugin@4.5.2: + resolution: {integrity: sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==} + engines: {node: '>=6.9'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + + html-webpack-plugin@5.5.3: + resolution: {integrity: sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==} + engines: {node: '>=10.13.0'} + peerDependencies: + webpack: ^5.20.0 + + htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + + http-cache-semantics@3.8.1: + resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==} + + http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + + http-proxy-middleware@2.0.6: + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http-signature@1.3.6: + resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==} + engines: {node: '>=0.10'} + + human-signals@1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + + internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + + into-stream@3.1.0: + resolution: {integrity: sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==} + engines: {node: '>=4'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + ipaddr.js@2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} + engines: {node: '>= 10'} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + + is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-installed-globally@0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} + + is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + + is-natural-number@4.0.1: + resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} + + is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-object@1.0.2: + resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-port-reachable@4.0.0: + resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-retry-allowed@1.2.0: + resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} + engines: {node: '>=0.10.0'} + + is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + + is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-string-and-not-blank@0.0.2: + resolution: {integrity: sha512-FyPGAbNVyZpTeDCTXnzuwbu9/WpNXbCfbHXLpCRpN4GANhS00eEIP5Ef+k5HYSNIzIhdN9zRDoBj6unscECvtQ==} + engines: {node: '>=6.4.0'} + + is-string-blank@1.0.1: + resolution: {integrity: sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + istanbul-lib-coverage@3.0.0: + resolution: {integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==} + engines: {node: '>=8'} + + istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + + istanbul-lib-hook@3.0.0: + resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} + engines: {node: '>=8'} + + istanbul-lib-instrument@4.0.3: + resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-processinfo@2.0.3: + resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + + isurl@1.0.0: + resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==} + engines: {node: '>= 4'} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + joi@17.9.2: + resolution: {integrity: sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.0: + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsprim@2.0.2: + resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} + engines: {'0': node >=0.6.0} + + keyv@3.0.0: + resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + launch-editor@2.6.0: + resolution: {integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==} + + lazy-ass@1.6.0: + resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} + engines: {node: '> 0.8'} + + listr2@3.14.0: + resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} + engines: {node: '>=10.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + loader-utils@1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + + local-pkg@0.4.1: + resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==} + engines: {node: '>=14'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.flattendeep@4.4.0: + resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lowercase-keys@1.0.0: + resolution: {integrity: sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==} + engines: {node: '>=0.10.0'} + + lowercase-keys@1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + make-dir@1.3.0: + resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} + engines: {node: '>=4'} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.6.12: + resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-preload@0.2.1: + resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} + engines: {node: '>=8'} + + node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@2.0.1: + resolution: {integrity: sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==} + engines: {node: '>=4'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nyc@15.1.0: + resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} + engines: {node: '>=8.9'} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + + object-is@1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + + object.getownpropertydescriptors@2.1.6: + resolution: {integrity: sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==} + engines: {node: '>= 0.8'} + + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + os-homedir@1.0.2: + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} + engines: {node: '>=0.10.0'} + + ospath@1.2.2: + resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} + + p-cancelable@0.4.1: + resolution: {integrity: sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==} + engines: {node: '>=4'} + + p-event@2.3.1: + resolution: {integrity: sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==} + engines: {node: '>=6'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-is-promise@1.1.0: + resolution: {integrity: sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + p-timeout@2.0.1: + resolution: {integrity: sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==} + engines: {node: '>=4'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-hash@4.0.0: + resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} + engines: {node: '>=8'} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + pascalcase@1.0.0: + resolution: {integrity: sha512-BSExi0rRnCHReJys6NocaK+cfTXNinAegfWBvr0JD3hiaEG7Nuc7r0CIdOJunXrs8gU/sbHQ9dxVAtiVQisjmg==} + engines: {node: '>=8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + path-to-regexp@2.2.1: + resolution: {integrity: sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + + pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-dir@7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} + + playwright-core@1.37.0: + resolution: {integrity: sha512-1c46jhTH/myQw6sesrcuHVtLoSNfJv8Pfy9t3rs6subY7kARv0HRw5PpyfPYPpPtQvBOmgbE6K+qgYUpj81LAA==} + engines: {node: '>=16'} + hasBin: true + + prepend-http@2.0.0: + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} + engines: {node: '>=4'} + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-error@2.1.2: + resolution: {integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==} + + pretty-error@4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} + + pretty-format@26.6.2: + resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} + engines: {node: '>= 10'} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-on-spawn@1.0.0: + resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} + engines: {node: '>=8'} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@1.0.0: + resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + + punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + + qs@6.10.4: + resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==} + engines: {node: '>=0.6'} + + qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + + query-string@5.1.1: + resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} + engines: {node: '>=0.10.0'} + + querystring@0.2.1: + resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-dom@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerate-unicode-properties@10.1.0: + resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + regenerator-transform@0.15.1: + resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + + regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + engines: {node: '>= 0.4'} + + regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + + registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + + registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} + + regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + + relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + + release-zalgo@1.0.0: + resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} + engines: {node: '>=4'} + + renderkid@2.0.7: + resolution: {integrity: sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==} + + renderkid@3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} + + request-progress@3.0.0: + resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.22.4: + resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + hasBin: true + + responselike@1.0.2: + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} + + seek-bzip@1.0.6: + resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} + hasBin: true + + select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + + selfsigned@2.1.1: + resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} + engines: {node: '>=10'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + + serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + + serve-handler@6.1.5: + resolution: {integrity: sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==} + + serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + + serve@14.2.0: + resolution: {integrity: sha512-+HOw/XK1bW8tw5iBilBz/mJLWRzM8XM6MPxL4J/dKzdxq1vfdEWSwhaR7/yS8EJp5wzvP92p1qirysJvnEtjXg==} + engines: {node: '>= 14'} + hasBin: true + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + + sort-keys-length@1.0.1: + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} + engines: {node: '>=0.10.0'} + + sort-keys@1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} + + sort-keys@2.0.0: + resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==} + engines: {node: '>=4'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + spawn-wrap@2.0.0: + resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} + engines: {node: '>=8'} + + spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + + spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + + speed-measure-webpack-plugin@1.4.2: + resolution: {integrity: sha512-AtVzD0bnIy2/B0fWqJpJgmhcrfWFhBlduzSo0uwplr/QvB33ZNZj2NEth3NONgdnZJqicK0W0mSxnLSbsVCDbw==} + engines: {node: '>=6.0.0'} + peerDependencies: + webpack: ^1 || ^2 || ^3 || ^4 || ^5 + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sshpk@1.17.0: + resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + + strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.trim@1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + + string.prototype.trimstart@1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-dirs@2.1.0: + resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-outer@1.0.1: + resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} + engines: {node: '>=0.10.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tapable@1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar-stream@1.6.2: + resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} + engines: {node: '>= 0.8.0'} + + terser-webpack-plugin@5.3.9: + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@4.8.1: + resolution: {integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==} + engines: {node: '>=6.0.0'} + hasBin: true + + terser@5.19.2: + resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + throttleit@1.0.0: + resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + + timed-out@4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} + engines: {node: '>=0.10.0'} + + tmp@0.2.1: + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} + + to-buffer@1.1.1: + resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + + to-fast-properties@1.0.3: + resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==} + engines: {node: '>=0.10.0'} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trim-repeated@1.0.0: + resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} + engines: {node: '>=0.10.0'} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + tslib@2.6.1: + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + + underscore@1.13.6: + resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + update-browserslist-db@1.0.11: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-parse-lax@3.0.0: + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} + engines: {node: '>=4'} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + url-to-options@1.0.1: + resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==} + engines: {node: '>= 4'} + + user-home@2.0.0: + resolution: {integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==} + engines: {node: '>=0.10.0'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util.promisify@1.0.0: + resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==} + + utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + viem@1.6.0: + resolution: {integrity: sha512-ae9Twkd0q2Qlj4yYpWjb4DzYAhKY0ibEpRH8FJaTywZXNpTjFidSdBaT0CVn1BaH7O7cnX4/O47zvDUMGJD1AA==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + + wait-on@7.0.1: + resolution: {integrity: sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==} + engines: {node: '>=12.0.0'} + hasBin: true + + watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + + wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webpack-dev-middleware@5.3.3: + resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + + webpack-dev-server@4.15.1: + resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + + webpack-merge@5.9.0: + resolution: {integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==} + engines: {node: '>=10.0.0'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.88.2: + resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + + websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + + wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + + ws@8.12.0: + resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + +snapshots: + + '@adraffy/ens-normalize@1.9.0': {} + + '@adraffy/ens-normalize@1.9.2': {} + + '@ampproject/remapping@2.2.1': + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + + '@babel/code-frame@7.22.5': + dependencies: + '@babel/highlight': 7.22.5 + + '@babel/compat-data@7.22.9': {} + + '@babel/core@7.22.9': + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helpers': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.22.9': + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.22.5': + dependencies: + '@babel/types': 7.22.5 + + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.5': + dependencies: + '@babel/types': 7.22.5 + + '@babel/helper-compilation-targets@7.22.9(@babel/core@7.22.9)': + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.10 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.22.9(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + + '@babel/helper-create-regexp-features-plugin@7.22.9(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-environment-visitor@7.22.5': {} + + '@babel/helper-function-name@7.22.5': + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + + '@babel/helper-hoist-variables@7.22.5': + dependencies: + '@babel/types': 7.22.5 + + '@babel/helper-member-expression-to-functions@7.22.5': + dependencies: + '@babel/types': 7.22.5 + + '@babel/helper-module-imports@7.22.5': + dependencies: + '@babel/types': 7.22.5 + + '@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + + '@babel/helper-optimise-call-expression@7.22.5': + dependencies: + '@babel/types': 7.22.5 + + '@babel/helper-plugin-utils@7.22.5': {} + + '@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.22.9 + + '@babel/helper-replace-supers@7.22.9(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + + '@babel/helper-simple-access@7.22.5': + dependencies: + '@babel/types': 7.22.5 + + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + dependencies: + '@babel/types': 7.22.5 + + '@babel/helper-split-export-declaration@7.22.6': + dependencies: + '@babel/types': 7.22.5 + + '@babel/helper-string-parser@7.22.5': {} + + '@babel/helper-validator-identifier@7.22.5': {} + + '@babel/helper-validator-option@7.22.5': {} + + '@babel/helper-wrap-function@7.22.9': + dependencies: + '@babel/helper-function-name': 7.22.5 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + + '@babel/helpers@7.22.6': + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + + '@babel/highlight@7.22.5': + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + + '@babel/parser@7.22.7': + dependencies: + '@babel/types': 7.22.5 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.22.6(@babel/core@7.22.9) + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + + '@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-async-generator-functions@7.22.7(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) + + '@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.9) + + '@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.9) + + '@babel/plugin-transform-classes@7.22.6(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + + '@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 + + '@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) + + '@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) + + '@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) + + '@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) + + '@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + + '@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + + '@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) + + '@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) + + '@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) + + '@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) + + '@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) + + '@babel/plugin-transform-optional-chaining@7.22.6(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) + + '@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) + + '@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.1 + + '@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + + '@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/preset-env@7.22.9(@babel/core@7.22.9)': + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.9) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-async-generator-functions': 7.22.7(@babel/core@7.22.9) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-classes': 7.22.6(@babel/core@7.22.9) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-optional-chaining': 7.22.6(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.9) + '@babel/preset-modules': 0.1.6(@babel/core@7.22.9) + '@babel/types': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.9) + babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.9) + babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.9) + core-js-compat: 3.32.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6(@babel/core@7.22.9)': + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.9) + '@babel/types': 7.22.5 + esutils: 2.0.3 + + '@babel/regjsgen@0.8.0': {} + + '@babel/runtime-corejs3@7.22.6': + dependencies: + core-js-pure: 3.32.0 + regenerator-runtime: 0.13.11 + + '@babel/runtime@7.22.6': + dependencies: + regenerator-runtime: 0.13.11 + + '@babel/template@7.22.5': + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + + '@babel/traverse@7.22.8': + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.22.5': + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + + '@colors/colors@1.5.0': + optional: true + + '@cypress/code-coverage@3.11.0(@babel/core@7.22.9)(@babel/preset-env@7.22.9(@babel/core@7.22.9))(babel-loader@9.1.3(@babel/core@7.22.9)(webpack@5.88.2))(cypress@12.17.4)(webpack@5.88.2)': + dependencies: + '@cypress/webpack-preprocessor': 5.17.1(@babel/core@7.22.9)(@babel/preset-env@7.22.9(@babel/core@7.22.9))(babel-loader@9.1.3(@babel/core@7.22.9)(webpack@5.88.2))(webpack@5.88.2) + chalk: 4.1.2 + cypress: 12.17.4 + dayjs: 1.11.9 + debug: 4.3.4(supports-color@8.1.1) + execa: 4.1.0 + globby: 11.0.4 + istanbul-lib-coverage: 3.0.0 + js-yaml: 4.1.0 + nyc: 15.1.0 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - babel-loader + - supports-color + - webpack + + '@cypress/request@2.88.12': + dependencies: + aws-sign2: 0.7.0 + aws4: 1.12.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + http-signature: 1.3.6 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + performance-now: 2.1.0 + qs: 6.10.4 + safe-buffer: 5.2.1 + tough-cookie: 4.1.3 + tunnel-agent: 0.6.0 + uuid: 8.3.2 + + '@cypress/webpack-dev-server@3.5.2(debug@4.3.4)(webpack@5.88.2)': + dependencies: + find-up: 6.3.0 + fs-extra: 9.1.0 + html-webpack-plugin-4: html-webpack-plugin@4.5.2(webpack@5.88.2) + html-webpack-plugin-5: html-webpack-plugin@5.5.3(webpack@5.88.2) + local-pkg: 0.4.1 + semver: 7.5.4 + speed-measure-webpack-plugin: 1.4.2(webpack@5.88.2) + tslib: 2.6.1 + webpack-dev-server: 4.15.1(debug@4.3.4)(webpack@5.88.2) + webpack-merge: 5.9.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + - webpack + - webpack-cli + + '@cypress/webpack-preprocessor@5.17.1(@babel/core@7.22.9)(@babel/preset-env@7.22.9(@babel/core@7.22.9))(babel-loader@9.1.3(@babel/core@7.22.9)(webpack@5.88.2))(webpack@5.88.2)': + dependencies: + '@babel/core': 7.22.9 + '@babel/preset-env': 7.22.9(@babel/core@7.22.9) + babel-loader: 9.1.3(@babel/core@7.22.9)(webpack@5.88.2) + bluebird: 3.7.1 + debug: 4.3.4(supports-color@8.1.1) + lodash: 4.17.21 + webpack: 5.88.2 + transitivePeerDependencies: + - supports-color + + '@cypress/xvfb@1.2.4(supports-color@8.1.1)': + dependencies: + debug: 3.2.7(supports-color@8.1.1) + lodash.once: 4.1.1 + transitivePeerDependencies: + - supports-color + + '@drptbl/gremlins.js@2.2.1': + dependencies: + chance: 1.1.11 + core-js: 3.32.0 + + '@foundry-rs/easy-foundryup@0.1.3': + dependencies: + command-exists: 1.2.9 + ts-interface-checker: 0.1.13 + + '@hapi/hoek@9.3.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/types@26.6.2': + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 20.12.12 + '@types/yargs': 15.0.15 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.3': + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 + + '@jridgewell/resolve-uri@3.1.0': {} + + '@jridgewell/set-array@1.1.2': {} + + '@jridgewell/source-map@0.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + + '@jridgewell/sourcemap-codec@1.4.14': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.18': + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + + '@leichtgewicht/ip-codec@2.0.4': {} + + '@noble/curves@1.0.0': + dependencies: + '@noble/hashes': 1.3.0 + + '@noble/curves@1.1.0': + dependencies: + '@noble/hashes': 1.3.1 + + '@noble/hashes@1.1.2': {} + + '@noble/hashes@1.3.0': {} + + '@noble/hashes@1.3.1': {} + + '@noble/secp256k1@1.7.1': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + '@playwright/test@1.37.0': + dependencies: + '@types/node': 20.12.12 + playwright-core: 1.37.0 + optionalDependencies: + fsevents: 2.3.2 + + '@scure/base@1.1.1': {} + + '@scure/bip32@1.3.0': + dependencies: + '@noble/curves': 1.0.0 + '@noble/hashes': 1.3.1 + '@scure/base': 1.1.1 + + '@scure/bip39@1.2.0': + dependencies: + '@noble/hashes': 1.3.1 + '@scure/base': 1.1.1 + + '@sideway/address@4.1.4': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + + '@sindresorhus/is@0.7.0': {} + + '@synthetixio/synpress@3.7.2-beta.3(@babel/core@7.22.9)(@babel/preset-env@7.22.9(@babel/core@7.22.9))(babel-loader@9.1.3(@babel/core@7.22.9)(webpack@5.88.2))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(webpack@5.88.2)': + dependencies: + '@cypress/code-coverage': 3.11.0(@babel/core@7.22.9)(@babel/preset-env@7.22.9(@babel/core@7.22.9))(babel-loader@9.1.3(@babel/core@7.22.9)(webpack@5.88.2))(cypress@12.17.4)(webpack@5.88.2) + '@cypress/webpack-dev-server': 3.5.2(debug@4.3.4)(webpack@5.88.2) + '@drptbl/gremlins.js': 2.2.1 + '@foundry-rs/easy-foundryup': 0.1.3 + '@playwright/test': 1.37.0 + '@testing-library/cypress': 9.0.0(cypress@12.17.4) + '@testing-library/react': 14.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/testing-library__cypress': 5.0.9 + '@viem/anvil': 0.0.6(debug@4.3.4) + app-root-path: 3.1.0 + axios: 1.4.0(debug@4.3.4) + babel-plugin-istanbul: 6.1.1 + babel-plugin-react-generate-property: 1.1.2 + babel-plugin-react-remove-properties: 0.3.0 + babel-plugin-transform-react-qa-classes: 1.6.0 + babel-plugin-transform-react-styled-components-qa: 2.1.0 + bytes32: 0.0.3 + commander: 11.0.0 + cypress: 12.17.4 + cypress-wait-until: 2.0.1 + debug: 4.3.4(supports-color@8.1.1) + dotenv: 16.4.5 + dotenv-parse-variables: 2.0.0 + download: 8.0.0 + ethers: 6.7.1 + etherscan-api: 10.3.0(debug@4.3.4) + find-config: 1.0.0 + get-port: 7.0.0 + node-fetch: 2.6.12 + underscore: 1.13.6 + viem: 1.6.0 + wait-on: 7.0.1(debug@4.3.4) + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - babel-loader + - bufferutil + - encoding + - react + - react-dom + - supports-color + - typescript + - utf-8-validate + - webpack + - webpack-cli + - zod + + '@testing-library/cypress@9.0.0(cypress@12.17.4)': + dependencies: + '@babel/runtime': 7.22.6 + '@testing-library/dom': 8.20.1 + cypress: 12.17.4 + + '@testing-library/dom@7.31.2': + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/runtime': 7.22.6 + '@types/aria-query': 4.2.2 + aria-query: 4.2.2 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 26.6.2 + + '@testing-library/dom@8.20.1': + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/runtime': 7.22.6 + '@types/aria-query': 5.0.1 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/dom@9.3.1': + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/runtime': 7.22.6 + '@types/aria-query': 5.0.1 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/react@14.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.22.6 + '@testing-library/dom': 9.3.1 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@types/aria-query@4.2.2': {} + + '@types/aria-query@5.0.1': {} + + '@types/body-parser@1.19.2': + dependencies: + '@types/connect': 3.4.35 + '@types/node': 20.12.12 + + '@types/bonjour@3.5.10': + dependencies: + '@types/node': 20.12.12 + + '@types/connect-history-api-fallback@1.5.0': + dependencies: + '@types/express-serve-static-core': 4.17.35 + '@types/node': 20.12.12 + + '@types/connect@3.4.35': + dependencies: + '@types/node': 20.12.12 + + '@types/eslint-scope@3.7.4': + dependencies: + '@types/eslint': 8.44.2 + '@types/estree': 1.0.1 + + '@types/eslint@8.44.2': + dependencies: + '@types/estree': 1.0.1 + '@types/json-schema': 7.0.12 + + '@types/estree@1.0.1': {} + + '@types/express-serve-static-core@4.17.35': + dependencies: + '@types/node': 20.12.12 + '@types/qs': 6.9.7 + '@types/range-parser': 1.2.4 + '@types/send': 0.17.1 + + '@types/express@4.17.17': + dependencies: + '@types/body-parser': 1.19.2 + '@types/express-serve-static-core': 4.17.35 + '@types/qs': 6.9.7 + '@types/serve-static': 1.15.2 + + '@types/html-minifier-terser@5.1.2': {} + + '@types/html-minifier-terser@6.1.0': {} + + '@types/http-errors@2.0.1': {} + + '@types/http-proxy@1.17.11': + dependencies: + '@types/node': 20.12.12 + + '@types/istanbul-lib-coverage@2.0.4': {} + + '@types/istanbul-lib-report@3.0.0': + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + + '@types/istanbul-reports@3.0.1': + dependencies: + '@types/istanbul-lib-report': 3.0.0 + + '@types/json-schema@7.0.12': {} + + '@types/keyv@3.1.4': + dependencies: + '@types/node': 20.12.12 + + '@types/mime@1.3.2': {} + + '@types/mime@3.0.1': {} + + '@types/node@16.18.39': {} + + '@types/node@18.15.13': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/prop-types@15.7.5': {} + + '@types/qs@6.9.7': {} + + '@types/range-parser@1.2.4': {} + + '@types/react-dom@18.2.7': + dependencies: + '@types/react': 18.2.18 + + '@types/react@18.2.18': + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.3 + csstype: 3.1.2 + + '@types/responselike@1.0.0': + dependencies: + '@types/node': 20.12.12 + + '@types/retry@0.12.0': {} + + '@types/scheduler@0.16.3': {} + + '@types/send@0.17.1': + dependencies: + '@types/mime': 1.3.2 + '@types/node': 20.12.12 + + '@types/serve-index@1.9.1': + dependencies: + '@types/express': 4.17.17 + + '@types/serve-static@1.15.2': + dependencies: + '@types/http-errors': 2.0.1 + '@types/mime': 3.0.1 + '@types/node': 20.12.12 + + '@types/sinonjs__fake-timers@8.1.1': {} + + '@types/sizzle@2.3.3': {} + + '@types/sockjs@0.3.33': + dependencies: + '@types/node': 20.12.12 + + '@types/source-list-map@0.1.2': {} + + '@types/tapable@1.0.8': {} + + '@types/testing-library__cypress@5.0.9': + dependencies: + '@testing-library/dom': 7.31.2 + cypress: 12.17.4 + + '@types/uglify-js@3.17.1': + dependencies: + source-map: 0.6.1 + + '@types/webpack-sources@3.2.0': + dependencies: + '@types/node': 20.12.12 + '@types/source-list-map': 0.1.2 + source-map: 0.7.4 + + '@types/webpack@4.41.33': + dependencies: + '@types/node': 20.12.12 + '@types/tapable': 1.0.8 + '@types/uglify-js': 3.17.1 + '@types/webpack-sources': 3.2.0 + anymatch: 3.1.3 + source-map: 0.6.1 + + '@types/ws@8.5.5': + dependencies: + '@types/node': 20.12.12 + + '@types/yargs-parser@21.0.0': {} + + '@types/yargs@15.0.15': + dependencies: + '@types/yargs-parser': 21.0.0 + + '@types/yauzl@2.10.0': + dependencies: + '@types/node': 20.12.12 + optional: true + + '@viem/anvil@0.0.6(debug@4.3.4)': + dependencies: + execa: 7.2.0 + get-port: 6.1.2 + http-proxy: 1.18.1(debug@4.3.4) + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + + '@wagmi/chains@1.6.0': {} + + '@webassemblyjs/ast@1.11.6': + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} + + '@webassemblyjs/helper-api-error@1.11.6': {} + + '@webassemblyjs/helper-buffer@1.11.6': {} + + '@webassemblyjs/helper-numbers@1.11.6': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} + + '@webassemblyjs/helper-wasm-section@1.11.6': + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + + '@webassemblyjs/ieee754@1.11.6': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.11.6': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.11.6': {} + + '@webassemblyjs/wasm-edit@1.11.6': + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@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/wasm-gen@1.11.6': + dependencies: + '@webassemblyjs/ast': 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/wasm-opt@1.11.6': + 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/wasm-parser@1.11.6': + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@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': + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + '@zeit/schemas@2.29.0': {} + + abitype@0.9.3: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-import-assertions@1.9.0(acorn@8.10.0): + dependencies: + acorn: 8.10.0 + + acorn@8.10.0: {} + + aes-js@4.0.0-beta.5: {} + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv-formats@2.1.1(ajv@8.12.0): + optionalDependencies: + ajv: 8.12.0 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv-keywords@5.1.0(ajv@8.12.0): + dependencies: + ajv: 8.12.0 + fast-deep-equal: 3.1.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.11.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-html-community@0.0.8: {} + + ansi-regex@2.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + app-root-path@3.1.0: {} + + append-transform@2.0.0: + dependencies: + default-require-extensions: 3.0.1 + + arch@2.2.0: {} + + archive-type@4.0.0: + dependencies: + file-type: 4.4.0 + + archy@1.0.0: {} + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-query@4.2.2: + dependencies: + '@babel/runtime': 7.22.6 + '@babel/runtime-corejs3': 7.22.6 + + aria-query@5.1.3: + dependencies: + deep-equal: 2.2.2 + + array-buffer-byte-length@1.0.0: + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + + array-flatten@1.1.1: {} + + array-flatten@2.1.2: {} + + array-union@1.0.2: + dependencies: + array-uniq: 1.0.3 + + array-union@2.1.0: {} + + array-uniq@1.0.3: {} + + array.prototype.reduce@1.0.5: + 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 + + arraybuffer.prototype.slice@1.0.1: + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + + assert-plus@1.0.0: {} + + astral-regex@2.0.0: {} + + async@2.6.4: + dependencies: + lodash: 4.17.21 + + async@3.2.4: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + available-typed-arrays@1.0.5: {} + + aws-sign2@0.7.0: {} + + aws4@1.12.0: {} + + axios@0.27.2(debug@4.3.4): + dependencies: + follow-redirects: 1.15.2(debug@4.3.4) + form-data: 4.0.0 + transitivePeerDependencies: + - debug + + axios@1.2.2(debug@4.3.4): + dependencies: + follow-redirects: 1.15.2(debug@4.3.4) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axios@1.4.0(debug@4.3.4): + dependencies: + follow-redirects: 1.15.2(debug@4.3.4) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + babel-loader@9.1.3(@babel/core@7.22.9)(webpack@5.88.2): + dependencies: + '@babel/core': 7.22.9 + find-cache-dir: 4.0.0 + schema-utils: 4.2.0 + webpack: 5.88.2 + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.22.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.22.9): + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.9) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.22.9): + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.9) + core-js-compat: 3.32.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.22.9): + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.9) + transitivePeerDependencies: + - supports-color + + babel-plugin-react-generate-property@1.1.2: {} + + babel-plugin-react-remove-properties@0.3.0: {} + + babel-plugin-transform-react-qa-classes@1.6.0: + dependencies: + babel-types: 6.26.0 + lodash.camelcase: 4.3.0 + lodash.isstring: 4.0.1 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + pascalcase: 1.0.0 + + babel-plugin-transform-react-styled-components-qa@2.1.0: + dependencies: + lodash.camelcase: 4.3.0 + lodash.isstring: 4.0.1 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.upperfirst: 4.3.1 + + babel-runtime@6.26.0: + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.11.1 + + babel-types@6.26.0: + dependencies: + babel-runtime: 6.26.0 + esutils: 2.0.3 + lodash: 4.17.21 + to-fast-properties: 1.0.3 + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + batch@0.6.1: {} + + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + + big.js@5.2.2: {} + + binary-extensions@2.2.0: {} + + bl@1.2.3: + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + + blob-util@2.0.2: {} + + bluebird@3.7.1: {} + + bluebird@3.7.2: {} + + body-parser@1.20.1: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + bonjour-service@1.1.1: + dependencies: + array-flatten: 2.1.2 + dns-equal: 1.0.0 + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + + boolbase@1.0.0: {} + + boxen@7.0.0: + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.0.1 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + + browserslist@4.21.10: + dependencies: + caniuse-lite: 1.0.30001519 + electron-to-chromium: 1.4.485 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.10) + + buffer-alloc-unsafe@1.1.0: {} + + buffer-alloc@1.2.0: + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + + buffer-crc32@0.2.13: {} + + buffer-fill@1.0.0: {} + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bytes32@0.0.3: {} + + bytes@3.0.0: {} + + bytes@3.1.2: {} + + cacheable-request@2.1.4: + dependencies: + clone-response: 1.0.2 + get-stream: 3.0.0 + http-cache-semantics: 3.8.1 + keyv: 3.0.0 + lowercase-keys: 1.0.0 + normalize-url: 2.0.1 + responselike: 1.0.2 + + cachedir@2.4.0: {} + + caching-transform@4.0.0: + dependencies: + hasha: 5.2.2 + make-dir: 3.1.0 + package-hash: 4.0.0 + write-file-atomic: 3.0.3 + + call-bind@1.0.2: + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.1 + + camelcase@5.3.1: {} + + camelcase@7.0.1: {} + + caniuse-lite@1.0.30001519: {} + + caseless@0.12.0: {} + + chalk-template@0.4.0: + dependencies: + chalk: 4.1.2 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.0.1: {} + + chance@1.1.11: {} + + check-more-types@2.24.0: {} + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + + chrome-trace-event@1.0.3: {} + + ci-info@3.8.0: {} + + clean-css@4.2.4: + dependencies: + source-map: 0.6.1 + + clean-css@5.3.2: + dependencies: + source-map: 0.6.1 + + clean-stack@2.2.0: {} + + cli-boxes@3.0.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-table3@0.6.3: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + cli-truncate@2.1.0: + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + + clipboardy@3.0.0: + dependencies: + arch: 2.2.0 + execa: 5.1.1 + is-wsl: 2.2.0 + + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + + clone-response@1.0.2: + dependencies: + mimic-response: 1.0.1 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + command-exists@1.2.9: {} + + commander@11.0.0: {} + + commander@2.20.3: {} + + commander@4.1.1: {} + + commander@6.2.1: {} + + commander@8.3.0: {} + + common-path-prefix@3.0.0: {} + + common-tags@1.8.2: {} + + commondir@1.0.1: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.52.0 + + compression@1.7.4: + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + concat-map@0.0.1: {} + + connect-history-api-fallback@2.0.0: {} + + content-disposition@0.5.2: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@1.9.0: {} + + cookie-signature@1.0.6: {} + + cookie@0.5.0: {} + + core-js-compat@3.32.0: + dependencies: + browserslist: 4.21.10 + + core-js-pure@3.32.0: {} + + core-js@2.6.12: {} + + core-js@3.32.0: {} + + core-util-is@1.0.2: {} + + core-util-is@1.0.3: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-what@6.1.0: {} + + csstype@3.1.2: {} + + cypress-wait-until@2.0.1: {} + + cypress@12.17.4: + dependencies: + '@cypress/request': 2.88.12 + '@cypress/xvfb': 1.2.4(supports-color@8.1.1) + '@types/node': 16.18.39 + '@types/sinonjs__fake-timers': 8.1.1 + '@types/sizzle': 2.3.3 + arch: 2.2.0 + blob-util: 2.0.2 + bluebird: 3.7.2 + buffer: 5.7.1 + cachedir: 2.4.0 + chalk: 4.1.2 + check-more-types: 2.24.0 + cli-cursor: 3.1.0 + cli-table3: 0.6.3 + commander: 6.2.1 + common-tags: 1.8.2 + dayjs: 1.11.9 + debug: 4.3.4(supports-color@8.1.1) + enquirer: 2.4.1 + eventemitter2: 6.4.7 + execa: 4.1.0 + executable: 4.1.1 + extract-zip: 2.0.1(supports-color@8.1.1) + figures: 3.2.0 + fs-extra: 9.1.0 + getos: 3.2.1 + is-ci: 3.0.1 + is-installed-globally: 0.4.0 + lazy-ass: 1.6.0 + listr2: 3.14.0(enquirer@2.4.1) + lodash: 4.17.21 + log-symbols: 4.1.0 + minimist: 1.2.8 + ospath: 1.2.2 + pretty-bytes: 5.6.0 + process: 0.11.10 + proxy-from-env: 1.0.0 + request-progress: 3.0.0 + semver: 7.5.4 + supports-color: 8.1.1 + tmp: 0.2.1 + untildify: 4.0.0 + yauzl: 2.10.0 + + dashdash@1.14.1: + dependencies: + assert-plus: 1.0.0 + + dayjs@1.11.9: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.4(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@1.2.0: {} + + decode-uri-component@0.2.2: {} + + decompress-response@3.3.0: + dependencies: + mimic-response: 1.0.1 + + decompress-tar@4.1.1: + dependencies: + file-type: 5.2.0 + is-stream: 1.1.0 + tar-stream: 1.6.2 + + decompress-tarbz2@4.1.1: + dependencies: + decompress-tar: 4.1.1 + file-type: 6.2.0 + is-stream: 1.1.0 + seek-bzip: 1.0.6 + unbzip2-stream: 1.4.3 + + decompress-targz@4.1.1: + dependencies: + decompress-tar: 4.1.1 + file-type: 5.2.0 + is-stream: 1.1.0 + + decompress-unzip@4.0.1: + dependencies: + file-type: 3.9.0 + get-stream: 2.3.1 + pify: 2.3.0 + yauzl: 2.10.0 + + decompress@4.2.1: + dependencies: + decompress-tar: 4.1.1 + decompress-tarbz2: 4.1.1 + decompress-targz: 4.1.1 + decompress-unzip: 4.0.1 + graceful-fs: 4.2.11 + make-dir: 1.3.0 + pify: 2.3.0 + strip-dirs: 2.1.0 + + deep-equal@2.2.2: + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.1 + is-arguments: 1.1.1 + is-array-buffer: 3.0.2 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + side-channel: 1.0.4 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.11 + + deep-extend@0.6.0: {} + + default-gateway@6.0.3: + dependencies: + execa: 5.1.1 + + default-require-extensions@3.0.1: + dependencies: + strip-bom: 4.0.0 + + define-lazy-prop@2.0.0: {} + + define-properties@1.2.0: + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + + delayed-stream@1.0.0: {} + + depd@1.1.2: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-node@2.1.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dns-equal@1.0.0: {} + + dns-packet@5.6.0: + dependencies: + '@leichtgewicht/ip-codec': 2.0.4 + + dom-accessibility-api@0.5.16: {} + + dom-converter@0.2.0: + dependencies: + utila: 0.4.0 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + domelementtype@2.3.0: {} + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.1 + + dotenv-parse-variables@2.0.0: + dependencies: + debug: 4.3.4(supports-color@8.1.1) + is-string-and-not-blank: 0.0.2 + transitivePeerDependencies: + - supports-color + + dotenv@16.4.5: {} + + download@8.0.0: + dependencies: + archive-type: 4.0.0 + content-disposition: 0.5.4 + decompress: 4.2.1 + ext-name: 5.0.0 + file-type: 11.1.0 + filenamify: 3.0.0 + get-stream: 4.1.0 + got: 8.3.2 + make-dir: 2.1.0 + p-event: 2.3.1 + pify: 4.0.1 + + duplexer3@0.1.5: {} + + eastasianwidth@0.2.0: {} + + ecc-jsbn@0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + + ee-first@1.1.1: {} + + electron-to-chromium@1.4.485: {} + + email-addresses@3.1.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + emojis-list@3.0.0: {} + + encodeurl@1.0.2: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + enhanced-resolve@5.15.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + entities@2.2.0: {} + + es-abstract@1.22.1: + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + safe-array-concat: 1.0.0 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + 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 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.11 + + es-array-method-boxes-properly@1.0.0: {} + + es-get-iterator@1.1.3: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.2 + is-set: 2.0.2 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + + es-module-lexer@1.3.0: {} + + es-set-tostringtag@2.0.1: + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + has-tostringtag: 1.0.0 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + es6-error@4.1.1: {} + + escalade@3.1.1: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + esprima@4.0.1: {} + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + ethers@6.7.1: + dependencies: + '@adraffy/ens-normalize': 1.9.2 + '@noble/hashes': 1.1.2 + '@noble/secp256k1': 1.7.1 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + etherscan-api@10.3.0(debug@4.3.4): + dependencies: + axios: 1.2.2(debug@4.3.4) + gh-pages: 4.0.0 + querystring: 0.2.1 + transitivePeerDependencies: + - debug + + eventemitter2@6.4.7: {} + + eventemitter3@4.0.7: {} + + events@3.3.0: {} + + execa@4.1.0: + dependencies: + cross-spawn: 7.0.3 + get-stream: 5.2.0 + human-signals: 1.1.1 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@7.2.0: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + + executable@4.1.1: + dependencies: + pify: 2.3.0 + + express@4.18.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.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 + transitivePeerDependencies: + - supports-color + + ext-list@2.2.2: + dependencies: + mime-db: 1.52.0 + + ext-name@5.0.0: + dependencies: + ext-list: 2.2.2 + sort-keys-length: 1.0.1 + + extend@3.0.2: {} + + extract-zip@2.0.1(supports-color@8.1.1): + dependencies: + debug: 4.3.4(supports-color@8.1.1) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.0 + transitivePeerDependencies: + - supports-color + + extsprintf@1.3.0: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + fast-json-stable-stringify@2.1.0: {} + + fast-url-parser@1.1.3: + dependencies: + punycode: 1.4.1 + + fastq@1.15.0: + dependencies: + reusify: 1.0.4 + + faye-websocket@0.11.4: + dependencies: + websocket-driver: 0.7.4 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-type@11.1.0: {} + + file-type@3.9.0: {} + + file-type@4.4.0: {} + + file-type@5.2.0: {} + + file-type@6.2.0: {} + + filename-reserved-regex@2.0.0: {} + + filenamify@3.0.0: + dependencies: + filename-reserved-regex: 2.0.0 + strip-outer: 1.0.1 + trim-repeated: 1.0.0 + + filenamify@4.3.0: + dependencies: + filename-reserved-regex: 2.0.0 + strip-outer: 1.0.1 + trim-repeated: 1.0.0 + + fill-range@7.0.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.2.0: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + + find-cache-dir@4.0.0: + dependencies: + common-path-prefix: 3.0.0 + pkg-dir: 7.0.0 + + find-config@1.0.0: + dependencies: + user-home: 2.0.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@6.3.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + + follow-redirects@1.15.2(debug@4.3.4): + optionalDependencies: + debug: 4.3.4(supports-color@8.1.1) + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + foreground-child@2.0.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 3.0.7 + + forever-agent@0.6.1: {} + + form-data@2.3.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + from2@2.3.0: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + + fromentries@1.3.2: {} + + fs-constants@1.0.0: {} + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + + fs-monkey@1.0.4: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.2: + optional: true + + function-bind@1.1.1: {} + + function.prototype.name@1.1.5: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.2.1: + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + + get-package-type@0.1.0: {} + + get-port@6.1.2: {} + + get-port@7.0.0: {} + + get-stream@2.3.1: + dependencies: + object-assign: 4.1.1 + pinkie-promise: 2.0.1 + + get-stream@3.0.0: {} + + get-stream@4.1.0: + dependencies: + pump: 3.0.0 + + get-stream@5.2.0: + dependencies: + pump: 3.0.0 + + get-stream@6.0.1: {} + + get-symbol-description@1.0.0: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + + getos@3.2.1: + dependencies: + async: 3.2.4 + + getpass@0.1.7: + dependencies: + assert-plus: 1.0.0 + + gh-pages@4.0.0: + dependencies: + async: 2.6.4 + commander: 2.20.3 + email-addresses: 3.1.0 + filenamify: 4.3.0 + find-cache-dir: 3.3.2 + fs-extra: 8.1.0 + globby: 6.1.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-dirs@3.0.1: + dependencies: + ini: 2.0.0 + + globals@11.12.0: {} + + globalthis@1.0.3: + dependencies: + define-properties: 1.2.0 + + globby@11.0.4: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + + globby@6.1.0: + dependencies: + array-union: 1.0.2 + glob: 7.2.3 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.1 + + got@8.3.2: + dependencies: + '@sindresorhus/is': 0.7.0 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.0 + cacheable-request: 2.1.4 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 3.0.0 + into-stream: 3.1.0 + is-retry-allowed: 1.2.0 + isurl: 1.0.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 0.4.1 + p-timeout: 2.0.1 + pify: 3.0.0 + safe-buffer: 5.2.1 + timed-out: 4.0.1 + url-parse-lax: 3.0.0 + url-to-options: 1.0.1 + + graceful-fs@4.2.11: {} + + handle-thing@2.0.1: {} + + has-bigints@1.0.2: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.0: + dependencies: + get-intrinsic: 1.2.1 + + has-proto@1.0.1: {} + + has-symbol-support-x@1.4.2: {} + + has-symbols@1.0.3: {} + + has-to-string-tag-x@1.4.1: + dependencies: + has-symbol-support-x: 1.4.2 + + has-tostringtag@1.0.0: + dependencies: + has-symbols: 1.0.3 + + has@1.0.3: + dependencies: + function-bind: 1.1.1 + + hasha@5.2.2: + dependencies: + is-stream: 2.0.1 + type-fest: 0.8.1 + + he@1.2.0: {} + + hpack.js@2.1.6: + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.8 + wbuf: 1.7.3 + + html-entities@2.4.0: {} + + html-escaper@2.0.2: {} + + html-minifier-terser@5.1.1: + dependencies: + camel-case: 4.1.2 + clean-css: 4.2.4 + commander: 4.1.1 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 4.8.1 + + html-minifier-terser@6.1.0: + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.2 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.19.2 + + html-webpack-plugin@4.5.2(webpack@5.88.2): + dependencies: + '@types/html-minifier-terser': 5.1.2 + '@types/tapable': 1.0.8 + '@types/webpack': 4.41.33 + html-minifier-terser: 5.1.1 + loader-utils: 1.4.2 + lodash: 4.17.21 + pretty-error: 2.1.2 + tapable: 1.1.3 + util.promisify: 1.0.0 + webpack: 5.88.2 + + html-webpack-plugin@5.5.3(webpack@5.88.2): + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + webpack: 5.88.2 + + htmlparser2@6.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + + http-cache-semantics@3.8.1: {} + + http-deceiver@1.2.7: {} + + http-errors@1.6.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-parser-js@0.5.8: {} + + http-proxy-middleware@2.0.6(@types/express@4.17.17)(debug@4.3.4): + dependencies: + '@types/http-proxy': 1.17.11 + http-proxy: 1.18.1(debug@4.3.4) + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.5 + optionalDependencies: + '@types/express': 4.17.17 + transitivePeerDependencies: + - debug + + http-proxy@1.18.1(debug@4.3.4): + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.2(debug@4.3.4) + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + http-signature@1.3.6: + dependencies: + assert-plus: 1.0.0 + jsprim: 2.0.2 + sshpk: 1.17.0 + + human-signals@1.1.1: {} + + human-signals@2.1.0: {} + + human-signals@4.3.1: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.2.4: {} + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.3: {} + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@2.0.0: {} + + internal-slot@1.0.5: + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + side-channel: 1.0.4 + + into-stream@3.1.0: + dependencies: + from2: 2.3.0 + p-is-promise: 1.1.0 + + ipaddr.js@1.9.1: {} + + ipaddr.js@2.1.0: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + + is-array-buffer@3.0.2: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.2.0 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + + is-callable@1.2.7: {} + + is-ci@3.0.1: + dependencies: + ci-info: 3.8.0 + + is-core-module@2.13.0: + dependencies: + has: 1.0.3 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.0 + + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-installed-globally@0.4.0: + dependencies: + global-dirs: 3.0.1 + is-path-inside: 3.0.3 + + is-map@2.0.2: {} + + is-natural-number@4.0.1: {} + + is-negative-zero@2.0.2: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.0 + + is-number@7.0.0: {} + + is-object@1.0.2: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@1.1.0: {} + + is-plain-obj@3.0.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-port-reachable@4.0.0: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + + is-retry-allowed@1.2.0: {} + + is-set@2.0.2: {} + + is-shared-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.2 + + is-stream@1.1.0: {} + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-string-and-not-blank@0.0.2: + dependencies: + is-string-blank: 1.0.1 + + is-string-blank@1.0.1: {} + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.0 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.12: + dependencies: + which-typed-array: 1.1.11 + + is-typedarray@1.0.0: {} + + is-unicode-supported@0.1.0: {} + + is-weakmap@2.0.1: {} + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.2 + + is-weakset@2.0.2: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + + is-windows@1.0.2: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isarray@1.0.0: {} + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isobject@3.0.1: {} + + isomorphic-ws@5.0.0(ws@8.12.0): + dependencies: + ws: 8.12.0 + + isstream@0.1.2: {} + + istanbul-lib-coverage@3.0.0: {} + + istanbul-lib-coverage@3.2.0: {} + + istanbul-lib-hook@3.0.0: + dependencies: + append-transform: 2.0.0 + + istanbul-lib-instrument@4.0.3: + dependencies: + '@babel/core': 7.22.9 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.22.9 + '@babel/parser': 7.22.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-processinfo@2.0.3: + dependencies: + archy: 1.0.0 + cross-spawn: 7.0.3 + istanbul-lib-coverage: 3.2.0 + p-map: 3.0.0 + rimraf: 3.0.2 + uuid: 8.3.2 + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.0 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.3.4(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.6: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + isurl@1.0.0: + dependencies: + has-to-string-tag-x: 1.4.1 + is-object: 1.0.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 20.12.12 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + joi@17.9.2: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.4 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbn@0.1.1: {} + + jsesc@0.5.0: {} + + jsesc@2.5.2: {} + + json-buffer@3.0.0: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-schema@0.4.0: {} + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.11 + + jsprim@2.0.2: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + + keyv@3.0.0: + dependencies: + json-buffer: 3.0.0 + + kind-of@6.0.3: {} + + launch-editor@2.6.0: + dependencies: + picocolors: 1.0.0 + shell-quote: 1.8.1 + + lazy-ass@1.6.0: {} + + listr2@3.14.0(enquirer@2.4.1): + dependencies: + cli-truncate: 2.1.0 + colorette: 2.0.20 + log-update: 4.0.0 + p-map: 4.0.0 + rfdc: 1.3.0 + rxjs: 7.8.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + optionalDependencies: + enquirer: 2.4.1 + + loader-runner@4.3.0: {} + + loader-utils@1.4.2: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.2 + + local-pkg@0.4.1: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.debounce@4.0.8: {} + + lodash.flattendeep@4.4.0: {} + + lodash.isstring@4.0.1: {} + + lodash.kebabcase@4.1.1: {} + + lodash.once@4.1.1: {} + + lodash.snakecase@4.1.1: {} + + lodash.upperfirst@4.3.1: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-update@4.0.0: + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lower-case@2.0.2: + dependencies: + tslib: 2.6.1 + + lowercase-keys@1.0.0: {} + + lowercase-keys@1.0.1: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lz-string@1.5.0: {} + + make-dir@1.3.0: + dependencies: + pify: 3.0.0 + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + + make-dir@4.0.0: + dependencies: + semver: 7.5.4 + + media-typer@0.3.0: {} + + memfs@3.5.3: + dependencies: + fs-monkey: 1.0.4 + + merge-descriptors@1.0.1: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.5: + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + mime-db@1.33.0: {} + + mime-db@1.52.0: {} + + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-response@1.0.1: {} + + minimalistic-assert@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + ms@2.0.0: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + multicast-dns@7.2.5: + dependencies: + dns-packet: 5.6.0 + thunky: 1.1.0 + + negotiator@0.6.3: {} + + neo-async@2.6.2: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.1 + + node-fetch@2.6.12: + dependencies: + whatwg-url: 5.0.0 + + node-forge@1.3.1: {} + + node-preload@0.2.1: + dependencies: + process-on-spawn: 1.0.0 + + node-releases@2.0.13: {} + + normalize-path@3.0.0: {} + + normalize-url@2.0.1: + dependencies: + prepend-http: 2.0.0 + query-string: 5.1.1 + sort-keys: 2.0.0 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.1.0: + dependencies: + path-key: 4.0.0 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nyc@15.1.0: + dependencies: + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + caching-transform: 4.0.0 + convert-source-map: 1.9.0 + decamelize: 1.2.0 + find-cache-dir: 3.3.2 + find-up: 4.1.0 + foreground-child: 2.0.0 + get-package-type: 0.1.0 + glob: 7.2.3 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-hook: 3.0.0 + istanbul-lib-instrument: 4.0.3 + istanbul-lib-processinfo: 2.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + make-dir: 3.1.0 + node-preload: 0.2.1 + p-map: 3.0.0 + process-on-spawn: 1.0.0 + resolve-from: 5.0.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + spawn-wrap: 2.0.0 + test-exclude: 6.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - supports-color + + object-assign@4.1.1: {} + + object-inspect@1.12.3: {} + + object-is@1.1.5: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + + object-keys@1.1.1: {} + + object.assign@4.1.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + object.getownpropertydescriptors@2.1.6: + dependencies: + array.prototype.reduce: 1.0.5 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + safe-array-concat: 1.0.0 + + obuf@1.1.2: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + on-headers@1.0.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + os-homedir@1.0.2: {} + + ospath@1.2.2: {} + + p-cancelable@0.4.1: {} + + p-event@2.3.1: + dependencies: + p-timeout: 2.0.1 + + p-finally@1.0.0: {} + + p-is-promise@1.1.0: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.0.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + p-map@3.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + + p-timeout@2.0.1: + dependencies: + p-finally: 1.0.0 + + p-try@2.2.0: {} + + package-hash@4.0.0: + dependencies: + graceful-fs: 4.2.11 + hasha: 5.2.2 + lodash.flattendeep: 4.4.0 + release-zalgo: 1.0.0 + + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.1 + + parseurl@1.3.3: {} + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.6.1 + + pascalcase@1.0.0: {} + + path-exists@4.0.0: {} + + path-exists@5.0.0: {} + + path-is-absolute@1.0.1: {} + + path-is-inside@1.0.2: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-to-regexp@0.1.7: {} + + path-to-regexp@2.2.1: {} + + path-type@4.0.0: {} + + pend@1.2.0: {} + + performance-now@2.1.0: {} + + picocolors@1.0.0: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pify@3.0.0: {} + + pify@4.0.1: {} + + pinkie-promise@2.0.1: + dependencies: + pinkie: 2.0.4 + + pinkie@2.0.4: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pkg-dir@7.0.0: + dependencies: + find-up: 6.3.0 + + playwright-core@1.37.0: {} + + prepend-http@2.0.0: {} + + pretty-bytes@5.6.0: {} + + pretty-error@2.1.2: + dependencies: + lodash: 4.17.21 + renderkid: 2.0.7 + + pretty-error@4.0.0: + dependencies: + lodash: 4.17.21 + renderkid: 3.0.0 + + pretty-format@26.6.2: + dependencies: + '@jest/types': 26.6.2 + ansi-regex: 5.0.1 + ansi-styles: 4.3.0 + react-is: 17.0.2 + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + process-nextick-args@2.0.1: {} + + process-on-spawn@1.0.0: + dependencies: + fromentries: 1.3.2 + + process@0.11.10: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-from-env@1.0.0: {} + + proxy-from-env@1.1.0: {} + + psl@1.9.0: {} + + pump@3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@1.4.1: {} + + punycode@2.3.0: {} + + qs@6.10.4: + dependencies: + side-channel: 1.0.4 + + qs@6.11.0: + dependencies: + side-channel: 1.0.4 + + query-string@5.1.1: + dependencies: + decode-uri-component: 0.2.2 + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + + querystring@0.2.1: {} + + querystringify@2.2.0: {} + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + range-parser@1.2.0: {} + + range-parser@1.2.1: {} + + raw-body@2.5.1: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-dom@18.2.0(react@18.2.0): + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + + react-is@17.0.2: {} + + react@18.2.0: + dependencies: + loose-envify: 1.4.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerate-unicode-properties@10.1.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.11.1: {} + + regenerator-runtime@0.13.11: {} + + regenerator-transform@0.15.1: + dependencies: + '@babel/runtime': 7.22.6 + + regexp.prototype.flags@1.5.0: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + + regexpu-core@5.3.2: + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.0 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + + registry-auth-token@3.3.2: + dependencies: + rc: 1.2.8 + safe-buffer: 5.2.1 + + registry-url@3.1.0: + dependencies: + rc: 1.2.8 + + regjsparser@0.9.1: + dependencies: + jsesc: 0.5.0 + + relateurl@0.2.7: {} + + release-zalgo@1.0.0: + dependencies: + es6-error: 4.1.1 + + renderkid@2.0.7: + dependencies: + css-select: 4.3.0 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.17.21 + strip-ansi: 3.0.1 + + renderkid@3.0.0: + dependencies: + css-select: 4.3.0 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.17.21 + strip-ansi: 6.0.1 + + request-progress@3.0.0: + dependencies: + throttleit: 1.0.0 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + require-main-filename@2.0.0: {} + + requires-port@1.0.0: {} + + resolve-from@5.0.0: {} + + resolve@1.22.4: + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@1.0.2: + dependencies: + lowercase-keys: 1.0.1 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retry@0.13.1: {} + + reusify@1.0.4: {} + + rfdc@1.3.0: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.6.1 + + safe-array-concat@1.0.0: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-regex-test@1.0.0: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-regex: 1.1.4 + + safer-buffer@2.1.2: {} + + scheduler@0.23.0: + dependencies: + loose-envify: 1.4.0 + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.12 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + schema-utils@4.2.0: + dependencies: + '@types/json-schema': 7.0.12 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.12.0) + + seek-bzip@1.0.6: + dependencies: + commander: 2.20.3 + + select-hose@2.0.0: {} + + selfsigned@2.1.1: + dependencies: + node-forge: 1.3.1 + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + send@0.18.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serialize-javascript@6.0.1: + dependencies: + randombytes: 2.1.0 + + serve-handler@6.1.5: + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + fast-url-parser: 1.1.3 + mime-types: 2.1.18 + minimatch: 3.1.2 + path-is-inside: 1.0.2 + path-to-regexp: 2.2.1 + range-parser: 1.2.0 + + serve-index@1.9.1: + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + + serve-static@1.15.0: + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + + serve@14.2.0: + dependencies: + '@zeit/schemas': 2.29.0 + ajv: 8.11.0 + arg: 5.0.2 + boxen: 7.0.0 + chalk: 5.0.1 + chalk-template: 0.4.0 + clipboardy: 3.0.0 + compression: 1.7.4 + is-port-reachable: 4.0.0 + serve-handler: 6.1.5 + update-check: 1.5.4 + transitivePeerDependencies: + - supports-color + + set-blocking@2.0.0: {} + + setprototypeof@1.1.0: {} + + setprototypeof@1.2.0: {} + + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.8.1: {} + + side-channel@1.0.4: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + + signal-exit@3.0.7: {} + + slash@3.0.0: {} + + slice-ansi@3.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + sockjs@0.3.24: + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + + sort-keys-length@1.0.1: + dependencies: + sort-keys: 1.1.2 + + sort-keys@1.1.2: + dependencies: + is-plain-obj: 1.1.0 + + sort-keys@2.0.0: + dependencies: + is-plain-obj: 1.1.0 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + spawn-wrap@2.0.0: + dependencies: + foreground-child: 2.0.0 + is-windows: 1.0.2 + make-dir: 3.1.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + which: 2.0.2 + + spdy-transport@3.0.0: + dependencies: + debug: 4.3.4(supports-color@8.1.1) + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.2 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + + spdy@4.0.2: + dependencies: + debug: 4.3.4(supports-color@8.1.1) + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + + speed-measure-webpack-plugin@1.4.2(webpack@5.88.2): + dependencies: + chalk: 4.1.2 + webpack: 5.88.2 + + sprintf-js@1.0.3: {} + + sshpk@1.17.0: + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + + statuses@1.5.0: {} + + statuses@2.0.1: {} + + stop-iteration-iterator@1.0.0: + dependencies: + internal-slot: 1.0.5 + + strict-uri-encode@1.1.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string.prototype.trim@1.2.7: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + + string.prototype.trimend@1.0.6: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + + string.prototype.trimstart@1.0.6: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-bom@4.0.0: {} + + strip-dirs@2.1.0: + dependencies: + is-natural-number: 4.0.1 + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-json-comments@2.0.1: {} + + strip-outer@1.0.1: + dependencies: + escape-string-regexp: 1.0.5 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tapable@1.1.3: {} + + tapable@2.2.1: {} + + tar-stream@1.6.2: + dependencies: + bl: 1.2.3 + buffer-alloc: 1.2.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + readable-stream: 2.3.8 + to-buffer: 1.1.1 + xtend: 4.0.2 + + terser-webpack-plugin@5.3.9(webpack@5.88.2): + dependencies: + '@jridgewell/trace-mapping': 0.3.18 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.19.2 + webpack: 5.88.2 + + terser@4.8.1: + dependencies: + acorn: 8.10.0 + commander: 2.20.3 + source-map: 0.6.1 + source-map-support: 0.5.21 + + terser@5.19.2: + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + throttleit@1.0.0: {} + + through@2.3.8: {} + + thunky@1.1.0: {} + + timed-out@4.0.1: {} + + tmp@0.2.1: + dependencies: + rimraf: 3.0.2 + + to-buffer@1.1.1: {} + + to-fast-properties@1.0.3: {} + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tough-cookie@4.1.3: + dependencies: + psl: 1.9.0 + punycode: 2.3.0 + universalify: 0.2.0 + url-parse: 1.5.10 + + tr46@0.0.3: {} + + trim-repeated@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + ts-interface-checker@0.1.13: {} + + tslib@2.4.0: {} + + tslib@2.6.1: {} + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + + tweetnacl@0.14.5: {} + + type-fest@0.21.3: {} + + type-fest@0.8.1: {} + + type-fest@2.19.0: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typed-array-buffer@1.0.0: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + + typed-array-byte-length@1.0.0: + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + + typed-array-byte-offset@1.0.0: + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + + typed-array-length@1.0.4: + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.12 + + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + + underscore@1.13.6: {} + + undici-types@5.26.5: {} + + unicode-canonical-property-names-ecmascript@2.0.0: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.1.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + universalify@0.1.2: {} + + universalify@0.2.0: {} + + universalify@2.0.0: {} + + unpipe@1.0.0: {} + + untildify@4.0.0: {} + + update-browserslist-db@1.0.11(browserslist@4.21.10): + dependencies: + browserslist: 4.21.10 + escalade: 3.1.1 + picocolors: 1.0.0 + + update-check@1.5.4: + dependencies: + registry-auth-token: 3.3.2 + registry-url: 3.1.0 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.0 + + url-parse-lax@3.0.0: + dependencies: + prepend-http: 2.0.0 + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + url-to-options@1.0.1: {} + + user-home@2.0.0: + dependencies: + os-homedir: 1.0.2 + + util-deprecate@1.0.2: {} + + util.promisify@1.0.0: + dependencies: + define-properties: 1.2.0 + object.getownpropertydescriptors: 2.1.6 + + utila@0.4.0: {} + + utils-merge@1.0.1: {} + + uuid@8.3.2: {} + + vary@1.1.2: {} + + verror@1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + + viem@1.6.0: + dependencies: + '@adraffy/ens-normalize': 1.9.0 + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.0 + '@scure/bip32': 1.3.0 + '@scure/bip39': 1.2.0 + '@types/ws': 8.5.5 + '@wagmi/chains': 1.6.0 + abitype: 0.9.3 + isomorphic-ws: 5.0.0(ws@8.12.0) + ws: 8.12.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + wait-on@7.0.1(debug@4.3.4): + dependencies: + axios: 0.27.2(debug@4.3.4) + joi: 17.9.2 + lodash: 4.17.21 + minimist: 1.2.8 + rxjs: 7.8.1 + transitivePeerDependencies: + - debug + + watchpack@2.4.0: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + wbuf@1.7.3: + dependencies: + minimalistic-assert: 1.0.1 + + webidl-conversions@3.0.1: {} + + webpack-dev-middleware@5.3.3(webpack@5.88.2): + dependencies: + colorette: 2.0.20 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.2.0 + webpack: 5.88.2 + + webpack-dev-server@4.15.1(debug@4.3.4)(webpack@5.88.2): + dependencies: + '@types/bonjour': 3.5.10 + '@types/connect-history-api-fallback': 1.5.0 + '@types/express': 4.17.17 + '@types/serve-index': 1.9.1 + '@types/serve-static': 1.15.2 + '@types/sockjs': 0.3.33 + '@types/ws': 8.5.5 + ansi-html-community: 0.0.8 + bonjour-service: 1.1.1 + chokidar: 3.5.3 + colorette: 2.0.20 + compression: 1.7.4 + connect-history-api-fallback: 2.0.0 + default-gateway: 6.0.3 + express: 4.18.2 + graceful-fs: 4.2.11 + html-entities: 2.4.0 + http-proxy-middleware: 2.0.6(@types/express@4.17.17)(debug@4.3.4) + ipaddr.js: 2.1.0 + launch-editor: 2.6.0 + open: 8.4.2 + p-retry: 4.6.2 + rimraf: 3.0.2 + schema-utils: 4.2.0 + selfsigned: 2.1.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack-dev-middleware: 5.3.3(webpack@5.88.2) + ws: 8.13.0 + optionalDependencies: + webpack: 5.88.2 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + webpack-merge@5.9.0: + dependencies: + clone-deep: 4.0.1 + wildcard: 2.0.1 + + webpack-sources@3.2.3: {} + + webpack@5.88.2: + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 1.0.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + browserslist: 4.21.10 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9(webpack@5.88.2) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + websocket-driver@0.7.4: + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + + websocket-extensions@0.1.4: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-collection@1.0.1: + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + + which-module@2.0.1: {} + + which-typed-array@1.1.11: + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@4.0.1: + dependencies: + string-width: 5.1.2 + + wildcard@2.0.1: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + + ws@8.12.0: {} + + ws@8.13.0: {} + + ws@8.5.0: {} + + xtend@4.0.2: {} + + y18n@4.0.3: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yocto-queue@1.0.0: {} diff --git a/e2e-tests/tests/00_eth.bridge.spec.ts b/e2e-tests/tests/00_eth.bridge.spec.ts new file mode 100644 index 00000000..01ab8b13 --- /dev/null +++ b/e2e-tests/tests/00_eth.bridge.spec.ts @@ -0,0 +1,101 @@ +import { test } from '../fixture/synpress' +import { GatewayAction } from '../lib/gatewayAction' + +let amountToBridge: string = '0.0001' + +const TEST_TIMEOUT = 120000 + +test.beforeEach(async ({ page }) => { + await page.goto('/') +}) + +test.describe('ETH', () => { + let gatewayAction + + test.beforeEach(async ({ page }) => { + gatewayAction = new GatewayAction(page) + await gatewayAction.connectToTestnet() + test.setTimeout(TEST_TIMEOUT) + }) + + test('should deposit ETH token with classic bridge', async () => { + await gatewayAction.classicBridge({ + amountToBridge, + tokenSymbol: 'ETH', + estimatedTime: '13 ~ 14mins.', + }) + await gatewayAction.doDepositClassicBridge({ + amountToBridge, + }) + }) + + test.fixme('should deposit BOBA token with classic bridge', async () => { + await gatewayAction.classicBridge({ + amountToBridge, + tokenSymbol: 'BOBA', + estimatedTime: '13 ~ 14mins.', + }) + await gatewayAction.doDepositClassicBridge({ + amountToBridge, + approveAllowance: true, + }) + }) + + test('should withdraw ETH token with classic bridge', async () => { + await gatewayAction.switchToL2AndReset() + await gatewayAction.classicBridge({ + amountToBridge, + estimatedTime: '7 days', + tokenSymbol: 'ETH', + }) + await gatewayAction.doWithdrawClassicBridge() + }) + + test('should withdraw BOBA token with classic bridge', async () => { + await gatewayAction.switchToL2AndReset() + await gatewayAction.classicBridge({ + amountToBridge, + estimatedTime: '7 days', + tokenSymbol: 'BOBA', + }) + await gatewayAction.doWithdrawClassicBridge() + }) + + test('should deposit ETH token with light bridge', async () => { + await gatewayAction.lightBridge({ + amountToBridge: '0.01', + tokenSymbol: 'ETH', + }) + }) + + test.fixme('should deposit BOBA token with light bridge', async () => { + await gatewayAction.lightBridge({ + amountToBridge: '20.021', + tokenSymbol: 'BOBA', + approveAllowance: true, + }) + }) + + test('should withdraw ETH token with light bridge', async () => { + amountToBridge = '0.01' + await gatewayAction.switchToL2AndReset() + const receivableAmt = Number(amountToBridge) * ((100 - 1) / 100) + await gatewayAction.lightBridge({ + amountToBridge, + receivableAmt, + tokenSymbol: 'ETH', + }) + }) + + test('should withdraw BOBA token with light bridge', async () => { + amountToBridge = '20.0211' + await gatewayAction.switchToL2AndReset() + const receivableAmt = Number(amountToBridge) * ((100 - 1) / 100) + await gatewayAction.lightBridge({ + amountToBridge, + receivableAmt, + tokenSymbol: 'BOBA', + approveAllowance: true, + }) + }) +}) diff --git a/e2e-tests/tests/01_bnb.bridge.spec.ts b/e2e-tests/tests/01_bnb.bridge.spec.ts new file mode 100644 index 00000000..b05181ad --- /dev/null +++ b/e2e-tests/tests/01_bnb.bridge.spec.ts @@ -0,0 +1,107 @@ +import { test } from '../fixture/synpress' +import { GatewayAction } from '../lib/gatewayAction' + +let amountToBridge: string = '0.0001' + +const TEST_TIMEOUT = 120000 + +test.beforeEach(async ({ page }) => { + await page.goto('/') +}) + +test.describe('BNB', () => { + let gatewayAction + + test.beforeEach(async ({ page }) => { + gatewayAction = new GatewayAction(page) + await gatewayAction.addAndConnectBNBTestnet() + test.setTimeout(TEST_TIMEOUT) + }) + + test('should deposit tBNB token with classic bridge', async () => { + await gatewayAction.classicBridge({ + amountToBridge, + tokenSymbol: 'tBNB', + estimatedTime: '13 ~ 14mins.', + }) + await gatewayAction.doDepositClassicBridge({ + amountToBridge, + }) + }) + + // fix conflicting MM popup raise or update to new synpress 4 -beta. + test.fixme('should deposit BOBA token with classic bridge', async () => { + await gatewayAction.classicBridge({ + amountToBridge, + tokenSymbol: 'BOBA', + estimatedTime: '13 ~ 14mins.', + }) + await gatewayAction.doDepositClassicBridge({ + amountToBridge, + approveAllowance: true, + }) + }) + + test('should withdraw tBNB token with classic bridge', async () => { + await gatewayAction.switchToL2AndReset() + await gatewayAction.connect() + await gatewayAction.classicBridge({ + amountToBridge, + estimatedTime: '7 days', + tokenSymbol: 'tBNB', + }) + await gatewayAction.doWithdrawClassicBridgeBnb(amountToBridge) + }) + + test('should withdraw BOBA token with classic bridge', async () => { + await gatewayAction.switchToL2AndReset() + await gatewayAction.connect() + await gatewayAction.classicBridge({ + amountToBridge, + estimatedTime: '7 days', + tokenSymbol: 'BOBA', + }) + await gatewayAction.doWithdrawClassicBridge() + }) + + // as of now no supported tokens for teleportation on BNB + test.fixme('should deposit tBNB token with light bridge', async () => { + await gatewayAction.lightBridge({ + amountToBridge: '0.01', + tokenSymbol: 'tBNB', + }) + }) + // as of now no supported tokens for teleportation on BNB + test.fixme('should deposit BOBA token with light bridge', async () => { + await gatewayAction.lightBridge({ + amountToBridge: '20.021', + tokenSymbol: 'BOBA', + approveAllowance: true, + }) + }) + + // as of now no supported tokens for teleportation on BNB + test.fixme('should withdraw tBNB token with light bridge', async () => { + amountToBridge = '0.01' + await gatewayAction.switchToL2AndReset() + const receivableAmt = Number(amountToBridge) * ((100 - 1) / 100) + await gatewayAction.lightBridge({ + amountToBridge, + receivableAmt, + tokenSymbol: 'tBNB', + }) + }) + + // as of now no supported tokens for teleportation on BNB + test.fixme('should withdraw BOBA token with light bridge', async () => { + amountToBridge = '20.0211' + await gatewayAction.switchToL2AndReset() + const receivableAmt = Number(amountToBridge) * ((100 - 1) / 100) + await gatewayAction.lightBridge({ + amountToBridge, + receivableAmt, + tokenSymbol: 'BOBA', + approveAllowance: true, + }) + }) +}) diff --git a/package.json b/package.json index fd8d060a..151981d6 100644 --- a/package.json +++ b/package.json @@ -1,30 +1,24 @@ { "name": "@bobanetwork/gateway", - "version": "0.14.9", + "version": "0.15.0", "private": true, "scripts": { - "audit-check": "audit-ci --moderate", "build:prod": "GENERATE_SOURCEMAP=false REACT_APP_ENV=prod react-app-rewired build", - "build-storybook": "storybook build", "clean": "rimraf ./node_modules ./coverage ./build", - "cypress:open": "cypress open", - "cypress:run": "env-cmd --silent cypress run --browser chrome --headed", - "cypress:record": "yarn cypress:run --record", "format:check": "prettier --config .prettierrc.json --check \"./src/**/*.{ts,tsx}\"", "format:fix": "prettier --config .prettierrc.json --write \"./src/**/*.{ts,tsx}\"", "lint:check": "eslint . --ext ts,tsx", "lint:fix": "yarn lint:check --fix", "postinstall": "patch-package", "pre-commit": "lint-staged", + "listDead": "ts-prune", "prebuild": "./bin/release.sh", "prepare": "husky install", "start": "GENERATE_SOURCEMAP=false react-app-rewired start", "test": "TZ=utc react-scripts test --watchAll=false", - "test:coverage": "yarn test --coverage", + "test:coverage": "yarn test --coverage && jest-coverage-badges output \"./badges\" ", "test:u": "yarn test -u", - "test:w": "yarn test --watchAll=true", - "test:integration": "start-server-and-test 'yarn start' http-get://localhost:3000 'yarn cypress:run'", - "storybook": "storybook dev -p 6006" + "test:w": "yarn test --watchAll=true" }, "browserslist": [ ">0.2%", @@ -32,17 +26,14 @@ "not op_mini all" ], "dependencies": { - "@apollo/client": "^3.5.10", "@babel/plugin-proposal-private-property-in-object": "^7.21.11", - "@bobanetwork/graphql-utils": "^1.1.11", + "@bobanetwork/graphql-utils": "^1.1.16", "@bobanetwork/light-bridge-chains": "^1.1.0", - "@bobanetwork/register": "^0.0.25", + "@bobanetwork/register": "^0.0.26", "@bobanetwork/sdk": "1.0.7", "@cfx-kit/wallet-avatar": "^0.0.5", "@emotion/styled": "^11.11.0", - "@eth-optimism/core-utils": "0.13.1", "@ethersproject/providers": "^5.7.2", - "@ethersproject/units": "^5.5.0", "@mui/base": "5.0.0-alpha.72", "@mui/icons-material": "^5.15.4", "@mui/material": "^5.12.2", @@ -53,7 +44,7 @@ "@walletconnect/ethereum-provider": "^2.10.5", "@walletconnect/modal": "^2.6.2", "assert": "^2.0.0", - "axios": "^0.21.1", + "axios": "^1.7.3", "bignumber.js": "^9.0.1", "bn.js": "^5.1.3", "browserify-fs": "^1.0.0", @@ -63,11 +54,10 @@ "dotenv": "^8.2.0", "eslint-config-react-app": "^7.0.0", "ethers": "5.7.2", - "graphql": "^16.3.0", + "graphql": "^16.8.1", "http-browserify": "^1.7.0", "https-browserify": "^1.0.0", "human-standard-token-abi": "^2.0.0", - "lodash.flatten": "^4.4.0", "lodash.intersection": "^4.4.0", "lodash.isequal": "^4.5.0", "lodash.keyby": "^4.6.0", @@ -77,7 +67,6 @@ "os-browserify": "^0.3.0", "patch-package": "^6.2.2", "path-browserify": "^1.0.1", - "postcss-normalize": "^10.0.1", "process": "^0.11.10", "react": "^17.0.2", "react-day-picker": "^8.10.0", @@ -90,90 +79,74 @@ "react-svg": "^16.1.15", "redux-persist": "^6.0.0", "redux-thunk": "^2.4.2", - "sass": "^1.69.5", - "serve": "^11.3.2", + "sass": "^1.77.2", "stream-browserify": "^3.0.0", "styled-components": "^5.3.10", "truncate-middle": "^1.0.6", "ts-md5": "^1.2.11", - "typescript": "^5.3.3", "webpack-bundle-analyzer": "^4.10.1" }, "devDependencies": { "@babel/preset-env": "^7.23.9", "@babel/preset-react": "^7.23.3", "@babel/preset-typescript": "^7.24.1", - "@sentry/types": "^7.100.1", - "@storybook/addon-essentials": "^7.0.15", - "@storybook/addon-interactions": "^7.0.15", - "@storybook/addon-links": "^7.5.2", - "@storybook/addon-styling": "^1.0.8", - "@storybook/addon-toolbars": "^7.0.17", - "@storybook/api": "^7.0.17", - "@storybook/blocks": "^7.5.3", - "@storybook/react": "^7.5.3", - "@storybook/react-webpack5": "^7.5.1", - "@storybook/testing-library": "^0.2.2", - "@synthetixio/synpress": "^3.7.2-beta.10", - "@testing-library/cypress": "^10.0.1", - "@testing-library/jest-dom": "^6.1.4", + "@sentry/types": "^8.13.0", + "@testing-library/jest-dom": "^6.4.6", "@testing-library/react": "^12.1.2", "@testing-library/react-hooks": "^8.0.1", "@types/jest": "^29.5.1", - "@types/lodash.flatten": "^4.4.9", "@types/lodash.intersection": "^4.4.9", "@types/lodash.isequal": "^4.5.6", "@types/lodash.keyby": "^4.6.9", "@types/lodash.orderby": "^4.6.7", "@types/redux-mock-store": "^1.0.6", "@types/styled-components": "^5.1.26", - "@types/testing-library__jest-dom": "^6.0.0", "@types/truncate-middle": "^1.0.4", "@typescript-eslint/eslint-plugin": "^5.10.2", "@typescript-eslint/parser": "^5.10.2", - "audit-ci": "^6.6.1", - "cypress": "13.7.0", - "env-cmd": "^10.1.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-cypress": "^2.14.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jsdoc": "^46.9.1", "eslint-plugin-prefer-arrow": "^1.2.3", "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-react": "^7.24.0", - "eslint-plugin-storybook": "^0.6.12", + "eslint-plugin-react": "^7.34.4", "eslint-plugin-testing-library": "^6.2.0", "eslint-plugin-unicorn": "^50.0.1", "husky": "^8.0.3", + "jest-coverage-badges": "^1.1.2", "jest-styled-components": "^7.1.1", "lint-staged": "^14.0.1", "prettier": "^3.0.3", - "prop-types": "^15.8.1", "react-app-rewired": "^2.2.1", "redux-mock-store": "^1.5.4", - "start-server-and-test": "2.0.3", - "storybook": "^7.5.1", - "storybook-addon-sass-postcss": "^0.1.3" + "ts-prune": "^0.10.3", + "typescript": "^5.1.6" }, "jest": { "moduleNameMapper": { - "@walletconnect/ethereum-provider": "/__mocks__/@walletconnect/ethereum-provider.ts" + "@walletconnect/ethereum-provider": "/__mocks__/@walletconnect/ethereum-provider.ts", + "^axios$": "axios/dist/node/axios.cjs" }, + "transformIgnorePatterns": ["/node_modules/(?!@bobanetwork/graphql-utils).+\\.js$"], "collectCoverageFrom": [ "src/components/**/*.tsx", "src/containers/**/*.tsx", "src/layout/**/*.tsx", "src/util/**/*.ts", "src/services/**/*.ts", + "src/containers/Home/index.tsx", "!src/actions/**/*.ts", "!src/api/**/*.ts", "!src/selectors/**/*.ts", "!src/reducers/**/*.ts", "!src/store/**/*.tsx", - "!src/containers/Home/index.tsx", - "!src/**/*.stories.{ts,tsx}", "!src/**/types.{ts,tsx}", "!src/**/style.{ts,tsx}" + ], + "coverageReporters": [ + "json-summary", + "text", + "lcov" ] }, "resolutions": { diff --git a/readme.md b/readme.md index 375d19e8..424e8097 100644 --- a/readme.md +++ b/readme.md @@ -14,6 +14,13 @@
+# Coverage report + +Line Coverage +Branch Coverage +Function Coverage +Function Coverage + # Contributing Follow these instructions to set up your local development environment. @@ -68,9 +75,8 @@ Copy `.env.example` file and name by excluding `.example` and populate the varia | REACT_APP_SENTRY_DSN | Yes | N/A | Sentry DSN url to catch the error on frontend | | REACT_APP_GAS_POLL_INTERVAL | Yes | 30000 | Poll interval to fetch the gas price status | | REACT_APP_WC_PROJECT_ID= | Yes | N/A | Wallet Connect project ID | -| CYPRESS_REMOTE_DEBUGGING_PORT | Yes | 9222 | Debugging port for Cypress | | NETWORK_NAME | Yes | sepolia | Starting network for wallet | -| SECRET_WORDS | Yes | N/A | Secret phrase for wallet to be used by Cypress e2e test. Please note that this wallet should have at least .1 Sepolia ETH and 40 Boba Testnet Token on the sepolia and Boba sepolia Networks. | +| REACT_APP_THE_GRAPH_API_KEY | Yes | N/A | API key for graph application to fetch the data from subgraph. | ### To start local dev-server @@ -78,12 +84,6 @@ Copy `.env.example` file and name by excluding `.example` and populate the varia $ yarn start ``` -### To start the storybook server for previwing demo page - -```bash -$ yarn start -``` - ### To fix formating ```bash @@ -140,21 +140,16 @@ $ open ./coverage/index.html ## Integration Tests -To run the integration test against the gateway execute the command below - -```bash -$ yarn test:integration -``` +[Follow Integration Docs](./e2e-tests/README.md) ## Directory Structure ``` ┌── .github/workflows # Settings for GitHub Actions -├── .storybook # Storybook settings ├── .vscode # VSCode settings for ESLint auto-fix function -├── demo # Storybook static file ├── build # Bundled JS and TS declaration file for deployed npm package ├── public # Public file which +├── e2e-tests # Integration tests. ├── src # All source code │ ├── src/actions # Redux Actions. │ ├── src/api # React axios instance of api @@ -169,7 +164,6 @@ $ yarn test:integration │ ├── src/selectors # Redux selectors │ ├── src/services # React services │ ├── src/store # Redux Store -│ ├── src/stories # React Stories │ ├── src/themes # Application theme │ ├── src/types # Custom typings for js modules if corresponding types are not found │ ├── src/util # Util files diff --git a/src/actions/balanceAction.ts b/src/actions/balanceAction.ts index c305b066..458b240d 100644 --- a/src/actions/balanceAction.ts +++ b/src/actions/balanceAction.ts @@ -20,64 +20,11 @@ import networkService from 'services/networkService' import { createAction } from './createAction' -export const fetchL1LPBalance = (address: string) => - createAction('FETCH/L1LP/BALANCE', () => networkService.L1LPBalance(address)) - -export const fetchL2LPBalance = (address: string) => - createAction('FETCH/L2LP/BALANCE', () => networkService.L2LPBalance(address)) - -export const fetchL1LPPending = (address: string) => - createAction('FETCH/L1LP/PENDING', () => networkService.L1LPPending(address)) - -export const fetchL2LPPending = (address: string) => - createAction('FETCH/L2LP/PENDING', () => networkService.L2LPPending(address)) - -export const fetchL1LPLiquidity = (address: string) => - createAction('FETCH/L1LP/LIQUIDITY', () => - networkService.L1LPLiquidity(address) - ) - -export const fetchL2LPLiquidity = (address: string) => - createAction('FETCH/L2LP/LIQUIDITY', () => - networkService.L2LPLiquidity(address) - ) - -export const fetchL1TotalFeeRate = () => - createAction('FETCH/L1TOTALFEERATE', () => { - return networkService.getL1TotalFeeRate() - }) -export const fetchL2TotalFeeRate = () => - createAction('FETCH/L2TOTALFEERATE', () => { - return networkService.getL2TotalFeeRate() - }) - -export const fetchL1FeeRateN = (tokenAddress: string) => - createAction('FETCH/L1FEERATE', () => { - return networkService.getL1UserRewardFeeRate(tokenAddress) - }) -export const fetchL2FeeRateN = (tokenAddress: string) => - createAction('FETCH/L2FEERATE', () => { - return networkService.getL2UserRewardFeeRate(tokenAddress) - }) - -export const fetchFastExitCost = (address: string) => - createAction('FETCH/FASTEXIT/COST', () => - networkService.getFastExitCost(address) - ) - export const fetchClassicExitCost = (address: string) => createAction('FETCH/CLASSICEXIT/COST', () => networkService.getExitCost(address) ) -export const fetchFastDepositCost = (address: string) => - createAction('FETCH/FASTDEPOSIT/COST', () => - networkService.getFastDepositCost(address) - ) - -export const fetchL1FeeBalance = () => - createAction('FETCH/L1FEE/BALANCE', () => networkService.getL1FeeBalance()) - export const fetchL2BalanceETH = () => createAction('FETCH/L2ETH/BALANCE', () => networkService.getL2BalanceETH()) diff --git a/src/actions/bridgeAction.ts b/src/actions/bridgeAction.ts index 3863f52c..0c8433ec 100644 --- a/src/actions/bridgeAction.ts +++ b/src/actions/bridgeAction.ts @@ -15,6 +15,8 @@ limitations under the License. */ import store from 'store' import { BigNumberish } from 'ethers' +import { createAction } from './createAction' +import { bridgeService } from 'services' export interface IBridgeAltert { meta: string @@ -93,3 +95,44 @@ export const setReenterWithdrawalConfig = (payload: any) => (dispatch) => export const setFetchDepositTxBlock = (payload?) => { store.dispatch({ type: 'BRIDGE/DEPOSIT_TX/BLOCK', payload }) } + +// bridging Actions + +export const depositNativeAnchorage = (payload) => + createAction('DEPOSIT_ANCHORAGE/CREATE', () => { + return bridgeService.anchorageDepositNative(payload) + }) + +export const depositErc20Anchorage = (payload) => + createAction('DEPOSIT/CREATE', () => + bridgeService.anchorageDepositERC20(payload) + ) + +export const depositErc20AnchorageOptimism = (payload) => + createAction('DEPOSIT/CREATE', () => + bridgeService.anchorageDepositERC20Optimism(payload) + ) + +export const withdrawNativeTokenAnchorage = (payload) => + createAction('WITHDRAW_NATIVE_ANCHORAGE/CREATE', () => { + return bridgeService.anchorageWithdrawNativeToken(payload) + }) + +export const withdrawErc20TokenAnchorage = (payload) => + createAction('WITHDRAW_ERC20_ANCHORAGE/CREATE', () => { + return bridgeService.anchorageWithdrawErc20Token(payload) + }) + +export const handleProveWithdrawal = (payload) => + createAction('PROVE_WITHDRAWAL/CREATE', () => { + return bridgeService.prooveTransactionWithdrawal(payload) + }) +export const handleProveWithdrawalWithFraudProof = (payload) => + createAction('PROVE_WITHDRAWAL/CREATE', () => { + return bridgeService.proveTransactionWithdrawalWithFraudProof(payload) + }) + +export const claimWithdrawal = (payload) => + createAction('CLAIM_WITHDRAWAL/CREATE', () => { + return bridgeService.finalizeTransactionWithdrawal(payload) + }) diff --git a/src/actions/createAction.ts b/src/actions/createAction.ts index 9b1ef6a5..af430bd4 100644 --- a/src/actions/createAction.ts +++ b/src/actions/createAction.ts @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ import * as Sentry from '@sentry/react' +import { ERROR_CODE } from 'util/constant' export const createAction = (key: string, asyncAction: () => any): any => @@ -66,8 +67,8 @@ export const createAction = errorMessage = 'Transaction rejected by user!' } } else { - errorMessage = response.reason - Sentry.captureMessage(response.reason || '') + errorMessage = response.message + Sentry.captureMessage(response.message || '') } if (response.reason?.includes('could not detect network')) { @@ -93,6 +94,13 @@ export const createAction = dispatch({ type: `UI/ERROR/UPDATE`, payload: errorMessage }) dispatch({ type: `${key}/ERROR` }) return false + } else if ( + response.hasOwnProperty('message') && + response.message.includes(ERROR_CODE) + ) { + dispatch({ type: `UI/ERROR/UPDATE`, payload: response.message }) + dispatch({ type: `${key}/ERROR` }) + return false } dispatch({ type: `${key}/SUCCESS`, payload: response }) diff --git a/src/actions/daoAction.ts b/src/actions/daoAction.ts index 8d124137..29b2271e 100644 --- a/src/actions/daoAction.ts +++ b/src/actions/daoAction.ts @@ -17,51 +17,48 @@ along with this program. If not, see . */ -import networkService from 'services/networkService' import { createAction } from './createAction' +import daoService from 'services/dao/dao.service' + export const fetchDaoBalance = () => - createAction('BALANCE/DAO/GET', () => networkService.getDaoBalance()) + createAction('BALANCE/DAO/GET', () => daoService.loadBobaBalance()) export const fetchDaoVotes = () => - createAction('VOTES/DAO/GET', () => networkService.getDaoVotes()) + createAction('VOTES/DAO/GET', () => daoService.loadBobaVotes()) export const fetchDaoBalanceX = () => - createAction('BALANCEX/DAO/GET', () => networkService.getDaoBalanceX()) + createAction('BALANCEX/DAO/GET', () => daoService.loadXBobaBalance()) export const fetchDaoVotesX = () => - createAction('VOTESX/DAO/GET', () => networkService.getDaoVotesX()) + createAction('VOTESX/DAO/GET', () => daoService.loadXBobaVotes()) export const delegateVotes = ({ recipient }) => createAction('DELEGATE/VOTES/CREATE', () => - networkService.delegateVotes({ recipient }) + daoService.delegateBobaVotes({ recipient }) ) export const delegateVotesX = ({ recipient }) => createAction('DELEGATEX/VOTES/CREATE', () => - networkService.delegateVotesX({ recipient }) + daoService.delegateXBobaVotes({ recipient }) ) export const getProposalThreshold = () => createAction('PROPOSALTHRESHOLD/GET', () => - networkService.getProposalThreshold() + daoService.loadProposalThreshold() ) export const fetchDaoProposals = () => - createAction('PROPOSALS/GET', () => networkService.fetchProposals()) + createAction('PROPOSALS/GET', () => daoService.loadProposals()) export const createDaoProposal = (payload) => - createAction('PROPOSAL/CREATE', () => networkService.createProposal(payload)) + createAction('PROPOSAL/CREATE', () => daoService.createProposal(payload)) export const queueProposal = (proposalID) => - createAction('PROPOSAL/QUEUE', () => networkService.queueProposal(proposalID)) + createAction('PROPOSAL/QUEUE', () => daoService.queueProposal(proposalID)) export const executeProposal = (proposalID) => - createAction('PROPOSAL/EXECUTE', () => - networkService.executeProposal(proposalID) - ) + createAction('PROPOSAL/EXECUTE', () => daoService.executeProposal(proposalID)) export const castProposalVote = (payload) => - createAction('PROPOSAL/CAST/VOTE', () => - networkService.castProposalVote(payload) - ) + createAction('PROPOSAL/CAST/VOTE', () => daoService.castVote(payload)) diff --git a/src/actions/devToolsAction.ts b/src/actions/devToolsAction.ts deleted file mode 100644 index 5ac55510..00000000 --- a/src/actions/devToolsAction.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - Varna - A Privacy-Preserving Marketplace - Varna uses Fully Homomorphic Encryption to make markets fair. - Copyright (C) 2021 Enya Inc. Palo Alto, CA - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -import networkService from 'services/networkService' -import { createAction } from './createAction' -import { Contract } from 'ethers' - -export const submitTxBuilder = ( - contract: Contract, - methodIndex: number, - methodName: string, - inputs: any -) => - createAction('TX_BUILDER', () => - networkService.submitTxBuilder(contract, methodIndex, methodName, inputs) - ) - -export const resetTxBuilder = () => (dispatch) => - dispatch({ type: 'TX_BUILDER/REST' }) diff --git a/src/actions/earnAction.ts b/src/actions/earnAction.ts index 39bf9296..da19e648 100644 --- a/src/actions/earnAction.ts +++ b/src/actions/earnAction.ts @@ -17,15 +17,25 @@ along with this program. If not, see . */ -import networkService from 'services/networkService' -import { createAction } from './createAction' import { BigNumberish } from 'ethers' +import earnService from 'services/earn/earn.service' import { LiquidityPoolLayer } from 'types/earn.types' +import { createAction } from './createAction' const getEarnInfoBegin = () => ({ type: 'GET_EARNINFO', }) +export const updateWithdrawToken = (withdrawToken: any) => ({ + type: 'UPDATE_WITHDRAW_TOKEN', + payload: withdrawToken, +}) + +export const updateWithdrawPayload = (withdrawToken: any) => ({ + type: 'UPDATE_WITHDRAW_PAYLOAD', + payload: withdrawToken, +}) + const getEarnInfoSuccess = ( L1PoolInfo, L1UserInfo, @@ -39,34 +49,24 @@ const getEarnInfoSuccess = ( export const getEarnInfo = () => async (dispatch) => { dispatch(getEarnInfoBegin()) const [L1LPInfo, L2LPInfo] = await Promise.all([ - networkService.getL1LPInfo(), - networkService.getL2LPInfo(), + earnService.loadL1LpInfo(), + earnService.loadL2LpInfo(), ]) dispatch( getEarnInfoSuccess( - L1LPInfo.poolInfo, - L1LPInfo.userInfo, - L2LPInfo.poolInfo, - L2LPInfo.userInfo + (L1LPInfo as any).poolInfo, + (L1LPInfo as any).userInfo, + (L2LPInfo as any).poolInfo, + (L2LPInfo as any).userInfo ) ) } -export const updateWithdrawToken = (withdrawToken: any) => ({ - type: 'UPDATE_WITHDRAW_TOKEN', - payload: withdrawToken, -}) - -export const updateWithdrawPayload = (withdrawToken: any) => ({ - type: 'UPDATE_WITHDRAW_PAYLOAD', - payload: withdrawToken, -}) - export const fetchL1LPBalance = (currency: string) => - createAction('FETCH/L1LPBALANCE', () => networkService.L1LPBalance(currency)) + createAction('FETCH/L1LPBALANCE', () => earnService.loadL1LpBalance(currency)) export const fetchL2LPBalance = (currency: string) => - createAction('FETCH/L2LPBALANCE', () => networkService.L2LPBalance(currency)) + createAction('FETCH/L2LPBALANCE', () => earnService.loadL2LpBalance(currency)) export const getReward = ( currencyAddress: string, @@ -74,18 +74,22 @@ export const getReward = ( L1orL2Pool: LiquidityPoolLayer ) => createAction('EARN/HARVEST', () => - networkService.getReward(currencyAddress, value_Wei_String, L1orL2Pool) + earnService.loadReward({ + currencyAddress, + value_Wei_String, + L1orL2Pool, + }) ) export const withdrawLiquidity = ( - currencyAddress: string, + currency: string, value_Wei_String: string, L1orL2Pool: LiquidityPoolLayer ) => createAction('EARN/WITHDRAW', () => - networkService.withdrawLiquidity( - currencyAddress, + earnService.withdrawLiquidity({ + currency, + L1orL2Pool, value_Wei_String, - L1orL2Pool - ) + }) ) diff --git a/src/actions/fixedAction.ts b/src/actions/fixedAction.ts index 09694f53..d016f322 100644 --- a/src/actions/fixedAction.ts +++ b/src/actions/fixedAction.ts @@ -17,19 +17,22 @@ along with this program. If not, see . */ -import networkService from 'services/networkService' +import fixedSavingService from 'services/fixedsaving/fixedSaving.service' import { createAction } from './createAction' export const addFS_Savings = (weiString: string) => - createAction('ADD/FS_SAVINGS', () => networkService.addFS_Savings(weiString)) + createAction('ADD/FS_SAVINGS', () => fixedSavingService.addSavings(weiString)) export const withdrawFS_Savings = (stakeID: number) => createAction('WITHDRAW/FS_SAVINGS', () => - networkService.withdrawFS_Savings(stakeID) + fixedSavingService.withdrawSavings(stakeID) ) -export const getFS_Saves = () => - createAction('GET/FS_SAVES', () => networkService.getFS_Saves()) +export const fetchSavings = () => + createAction('GET/FS_SAVES', () => fixedSavingService.loadSavings()) -export const getFS_Info = () => - createAction('GET/FS_INFO', () => networkService.getFS_Info()) +export const fetchStakeInfo = () => + createAction('GET/FS_INFO', () => fixedSavingService.loadAccountSaveInfo()) + +export const fetchBobaTokenDetail = () => + createAction('BOBA_BALANCE/GET', () => fixedSavingService.loadBobaBalance()) diff --git a/src/actions/networkAction.ts b/src/actions/networkAction.ts index 227e31f5..5dfca4f0 100644 --- a/src/actions/networkAction.ts +++ b/src/actions/networkAction.ts @@ -13,10 +13,11 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ +import { BigNumberish } from 'ethers' import networkService from 'services/networkService' +import { lightBridgeService } from 'services/teleportation/teleportation.service' import transactionService from 'services/transaction.service' import { createAction } from './createAction' -import { BigNumberish } from 'ethers' export const fetchBalances = () => createAction('BALANCE/GET', () => networkService.getBalances()) @@ -27,74 +28,60 @@ export const addTokenList = () => export const fetchTransactions = () => createAction('TRANSACTION/GETALL', () => transactionService.getTransactions()) -export const fetchSevens = () => - createAction('SEVENS/GETALL', () => transactionService.getSevens()) - -export const fetchFastExits = () => - createAction('FASTEXITS/GETALL', () => transactionService.getFastExits()) - export const exitBOBA = (token: string, value: BigNumberish) => createAction('EXIT/CREATE', () => networkService.exitBOBA(token, value)) -//SWAP RELATED -export const depositL1LP = (currency: string, value: BigNumberish) => - createAction('DEPOSIT/CREATE', () => - networkService.depositL1LP(currency, value) - ) - -export const isTeleportationOfAssetSupported = ( +export const isLightBridgeTokenSupported = ( layer: string, - asset: string, + tokenAdress: string, destChainId: string ) => createAction('DEPOSIT/TELEPORTATION/TOKEN_SUPPORTED', () => - networkService.isTeleportationOfAssetSupported(layer, asset, destChainId) + lightBridgeService.isTokenSupported({ + layer, + tokenAdress, + destChainId, + }) ) export const getDisburserBalance = ( sourceChainId: string, destChainId: string, - asset: string + tokenAddress: string ) => createAction('DEPOSIT/TELEPORTATION/DISBURSER_BALANCE', () => - networkService.getDisburserBalance(sourceChainId, destChainId, asset) + lightBridgeService.getDisburserBalance({ + sourceChainId, + destChainId, + tokenAddress, + }) ) export const depositWithLightBridge = ( layer: string, - currency: string, - value: BigNumberish, - destChainId: BigNumberish + tokenAddress: string, + value: any, + destChainId: any ) => createAction('DEPOSIT/CREATE', () => - networkService.depositWithTeleporter(layer, currency, value, destChainId) + lightBridgeService.deposit({ + layer, + tokenAddress, + value, + destChainId, + }) ) -//SWAP RELATED - Depositing into the L2LP triggers the swap-exit -export const depositL2LP = (token: string, value: BigNumberish) => - createAction('EXIT/CREATE', () => networkService.depositL2LP(token, value)) - //CLASSIC DEPOSIT ETH export const depositETHL2 = (payload) => createAction('DEPOSIT/CREATE', () => { return networkService.depositETHL2(payload) }) -//CLASSIC DEPOSIT ETH -export const depositETHAnchorageL2 = (payload) => - createAction('DEPOSIT/CREATE', () => { - return networkService.depositETHAnchorage(payload) - }) - //DEPOSIT ERC20 export const depositErc20 = (payload) => createAction('DEPOSIT/CREATE', () => networkService.depositErc20(payload)) -export const depositErc20Anchorage = (payload) => - createAction('DEPOSIT/CREATE', () => - networkService.depositERC20Anchorage(payload) - ) - export const approveERC20 = ( value: BigNumberish, currency: string, @@ -110,12 +97,6 @@ export const approveERC20 = ( ) ) -export const fetchLookUpPrice = (params) => - createAction('PRICE/GET', () => networkService.fetchLookUpPrice(params)) - -export const clearLookupPrice = () => (dispatch) => - dispatch({ type: 'LOOKUP/PRICE/CLEAR' }) - export const getAllAddresses = () => createAction('GET/ALL/ADDRESS', () => networkService.getAllAddresses()) @@ -135,3 +116,6 @@ export const setActiveNetwork = () => (dispatch) => export const setActiveNetworkType = (payload) => (dispatch) => dispatch({ type: 'NETWORK/SET_TYPE/ACTIVE', payload }) + +export const resetTransaction = () => (dispatch) => + dispatch({ type: 'TRANSACTION/RESET' }) diff --git a/src/actions/setupAction.ts b/src/actions/setupAction.ts index 100cd347..27fb4de0 100644 --- a/src/actions/setupAction.ts +++ b/src/actions/setupAction.ts @@ -16,6 +16,7 @@ limitations under the License. */ import networkService from 'services/networkService' import { createAction } from './createAction' import store from 'store' +import oracleService from 'services/oracle/oracle.service' export const setEnableAccount = (enabled) => (dispatch) => dispatch({ type: 'SETUP/ACCOUNT/SET', payload: enabled }) @@ -33,9 +34,7 @@ export const setWalletAddress = (account) => (dispatch) => dispatch({ type: 'SETUP/WALLETADDRESS/SET', payload: account }) export const doSwitchFeeToken = (targetFee) => - createAction('SETUP/SWITCHFEE', () => - networkService.switchFeeToken(targetFee) - ) + createAction('SETUP/SWITCHFEE', () => oracleService.switchFeeToken(targetFee)) export const doSwapToken = () => createAction('SETUP/GETETH', () => networkService.swapToken()) diff --git a/src/actions/tokenAction.ts b/src/actions/tokenAction.ts index 1b0f9243..68c08e95 100644 --- a/src/actions/tokenAction.ts +++ b/src/actions/tokenAction.ts @@ -136,7 +136,7 @@ export const addToken = async (tokenContractAddressL1: string) => { networkService.L2Provider! ) } else { - Object.keys(tA).forEach((token, i) => { + Object.keys(tA).forEach((token) => { //let's see if we know about this Token if (_tokenContractAddressL1 === tA[token].L1.toLowerCase()) { _tokenContractAddressL2 = tA[token]?.L2?.toLowerCase() @@ -170,7 +170,7 @@ export const addToken = async (tokenContractAddressL1: string) => { tokenContract.symbol(), tokenContract.decimals(), tokenContract.name(), - ]).catch((e) => [null, null, null]) + ]).catch(() => [null, null, null]) } const decimals = _decimals diff --git a/src/app.env.d.ts b/src/app.env.d.ts index c7dacbd7..217b9009 100644 --- a/src/app.env.d.ts +++ b/src/app.env.d.ts @@ -5,5 +5,6 @@ import { ExternalProvider } from '@ethersproject/providers' declare global { interface Window { ethereum?: ExternalProvider | MetaMaskInpageProvider + gatewallet?: ExternalProvider | MetaMaskInpageProvider } } diff --git a/src/assets/images/gateio-wallet.png b/src/assets/images/gateio-wallet.png new file mode 100644 index 00000000..1eb56c29 Binary files /dev/null and b/src/assets/images/gateio-wallet.png differ diff --git a/src/assets/images/mtt.svg b/src/assets/images/mtt.svg deleted file mode 100644 index 0f28576a..00000000 --- a/src/assets/images/mtt.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/components/ApplicationBanner/__snapshots__/index.test.tsx.snap b/src/components/ApplicationBanner/__snapshots__/index.test.tsx.snap index abcaa7b1..052f0c24 100644 --- a/src/components/ApplicationBanner/__snapshots__/index.test.tsx.snap +++ b/src/components/ApplicationBanner/__snapshots__/index.test.tsx.snap @@ -3,17 +3,17 @@ exports[`ApplicationBanner should match snapshot when alerts are enable 1`] = `

Message update 1 @@ -25,14 +25,14 @@ exports[`ApplicationBanner should match snapshot when alerts are enable 1`] = `

message two goes here

@@ -30,5 +30,3 @@ exports[`BridgeToAddress should match Snapshot in case of L1 & Classic Bridge 1
`; - -exports[`BridgeToAddress should match Snapshot in case of L2 & Fast Bridge 1`] = ``; diff --git a/src/containers/Bridging/BridgeInput/BridgeToAddress/index.test.tsx b/src/containers/Bridging/BridgeInput/BridgeToAddress/index.test.tsx index b5d2abc1..9974f152 100644 --- a/src/containers/Bridging/BridgeInput/BridgeToAddress/index.test.tsx +++ b/src/containers/Bridging/BridgeInput/BridgeToAddress/index.test.tsx @@ -85,23 +85,4 @@ describe('BridgeToAddress', () => { expect(navigator.clipboard.readText).toHaveBeenCalled() expect(newActions).toEqual([]) }) - - test('should match Snapshot in case of L2 & Fast Bridge ', () => { - store = mockStore({ - ...mockedInitialState, - setup: { - ...mockedInitialState.bridge, - accountEnabled: true, - netLayer: 'L2', - }, - bridge: { - ...mockedInitialState.bridge, - bridgeToAddressState: true, - }, - }) - const { asFragment } = renderBridgeToAddress({ - store, - }) - expect(asFragment()).toMatchSnapshot() - }) }) diff --git a/src/containers/Bridging/BridgeInput/EmergencySwap/index.tsx b/src/containers/Bridging/BridgeInput/EmergencySwap/index.tsx index fa93b094..6b8b17ed 100644 --- a/src/containers/Bridging/BridgeInput/EmergencySwap/index.tsx +++ b/src/containers/Bridging/BridgeInput/EmergencySwap/index.tsx @@ -15,9 +15,7 @@ import { logAmount } from 'util/amountConvert' import { LAYER } from 'util/constant' import { SwapAction, SwapAlert, SwapContainer } from './styles' -interface Props {} - -const EmergencySwap: FC = (props) => { +const EmergencySwap: FC = () => { const accountEnabled = useSelector(selectAccountEnabled()) const l2Balances = useSelector(selectlayer2Balance, isEqual) const layer = useSelector(selectLayer()) diff --git a/src/containers/Bridging/BridgeInput/Fee/index.tsx b/src/containers/Bridging/BridgeInput/Fee/index.tsx index 6fb516cc..ede43d4c 100644 --- a/src/containers/Bridging/BridgeInput/Fee/index.tsx +++ b/src/containers/Bridging/BridgeInput/Fee/index.tsx @@ -7,8 +7,6 @@ import { selectBridgeType, selectClassicExitCost, selectExitFee, - selectFastDepositCost, - selectFastExitCost, selectLayer, } from 'selectors' import { useSelector } from 'react-redux' @@ -23,10 +21,8 @@ const Fee = () => { const bridgeType = useSelector(selectBridgeType()) const layer = useSelector(selectLayer()) const theme: any = useTheme() - const depositFee = useSelector(selectFastDepositCost) const classicExitCost = useSelector(selectClassicExitCost) - const fastExitCost = useSelector(selectFastExitCost) const feeUseBoba = useSelector(selectBobaFeeChoice()) const feePriceRatio = useSelector(selectBobaPriceRatio()) const exitFee = useSelector(selectExitFee) @@ -44,12 +40,6 @@ const Fee = () => { } else { return '7 days' } - } else if (bridgeType === BRIDGE_TYPE.FAST) { - if (layer === LAYER.L1) { - return '1 ~ 5min.' - } else { - return '15min ~ 3hrs.' - } } else { // Teleportation, instant return '~1min.' @@ -58,17 +48,10 @@ const Fee = () => { useEffect(() => { if (layer === LAYER.L1) { - if (bridgeType === BRIDGE_TYPE.FAST) { - setGasFee(`${Number(depositFee)?.toFixed(4)}ETH`) - } else { - setGasFee(`0 ETH`) - } + setGasFee(`0 ETH`) } else { //TODO: add check for safecost to avoid issues. debug why gas estimation wrong - let cost = classicExitCost || 0 - if (bridgeType === BRIDGE_TYPE.FAST) { - cost = fastExitCost || 0 - } + const cost = classicExitCost || 0 const safeCost = Number(cost) * 1.04 // 1.04 == safety margin on cost if (feeUseBoba) { @@ -79,16 +62,7 @@ const Fee = () => { ) } } - }, [ - layer, - bridgeType, - depositFee, - classicExitCost, - fastExitCost, - feeUseBoba, - feePriceRatio, - ]) - + }, [layer, bridgeType, classicExitCost, feeUseBoba, feePriceRatio]) return ( diff --git a/src/containers/Bridging/BridgeInput/TokenInput/index.tsx b/src/containers/Bridging/BridgeInput/TokenInput/index.tsx index 75a49ebc..4899785c 100644 --- a/src/containers/Bridging/BridgeInput/TokenInput/index.tsx +++ b/src/containers/Bridging/BridgeInput/TokenInput/index.tsx @@ -7,7 +7,6 @@ import { selectBridgeType, selectClassicExitCost, selectExitFee, - selectFastExitCost, selectLayer, selectTokenToBridge, } from 'selectors' @@ -20,15 +19,12 @@ import { BRIDGE_TYPE } from 'containers/Bridging/BridgeTypeSelector' import networkService from 'services/networkService' import { useNetworkInfo } from 'hooks/useNetworkInfo' -interface Props {} - -const TokenInput = (props: Props) => { +const TokenInput = () => { const dispatch = useDispatch() const layer = useSelector(selectLayer()) const token = useSelector(selectTokenToBridge()) const bridgeType = useSelector(selectBridgeType()) const classicExitCost = useSelector(selectClassicExitCost) - const fastExitCost = useSelector(selectFastExitCost) const feeUseBoba = useSelector(selectBobaFeeChoice()) const feePriceRatio = useSelector(selectBobaPriceRatio()) const exitFee = useSelector(selectExitFee) @@ -62,10 +58,7 @@ const TokenInput = (props: Props) => { bridgeType !== BRIDGE_TYPE.LIGHT && !!isActiveNetworkBnb ) { - let cost = classicExitCost || 0 - if (bridgeType === BRIDGE_TYPE.FAST) { - cost = fastExitCost || 0 - } + const cost = classicExitCost || 0 const safeCost = Number(cost) * 1.04 // 1.04 == safety margin on cost if (token.symbol === networkService.L1NativeTokenSymbol) { diff --git a/src/containers/Bridging/BridgeInput/index.tsx b/src/containers/Bridging/BridgeInput/index.tsx index 97f82298..b53d626b 100644 --- a/src/containers/Bridging/BridgeInput/index.tsx +++ b/src/containers/Bridging/BridgeInput/index.tsx @@ -1,13 +1,17 @@ -import React, { FC, useEffect } from 'react' -import { useDispatch, useSelector } from 'react-redux' import { openModal } from 'actions/uiAction' +import React, { FC } from 'react' +import { useDispatch, useSelector } from 'react-redux' import { selectAccountEnabled, selectTokenToBridge } from 'selectors' import useBridgeSetup from 'hooks/useBridgeSetup/' import { getCoinImage } from 'util/coinImage' +import bobaLogo from 'assets/images/Boba_Logo_White_Circle.png' import useAmountToReceive from 'hooks/useAmountToReceive' +import { useNetworkInfo } from 'hooks/useNetworkInfo' +import { SectionLabel } from '../chain/styles' import BridgeToAddress from './BridgeToAddress' +import EmergencySwap from './EmergencySwap' import Fee from './Fee' import TokenInput from './TokenInput' import { @@ -22,14 +26,8 @@ import { TokenSelectorInput, TokenSymbol, } from './styles' -import { SectionLabel } from '../chain/styles' -import bobaLogo from 'assets/images/Boba_Logo_White_Circle.png' -import EmergencySwap from './EmergencySwap' -import { useNetworkInfo } from 'hooks/useNetworkInfo' - -type Props = {} -const BridgeInput: FC = (props) => { +const BridgeInput: FC = () => { const dispatch = useDispatch() const isAccountEnabled = useSelector(selectAccountEnabled()) const token = useSelector(selectTokenToBridge()) @@ -79,7 +77,9 @@ const BridgeInput: FC = (props) => { {token && ( Receive - {receivableAmount} + + {receivableAmount} + )} diff --git a/src/containers/Bridging/BridgeInput/styles.ts b/src/containers/Bridging/BridgeInput/styles.ts index 084b2247..0c92d17c 100644 --- a/src/containers/Bridging/BridgeInput/styles.ts +++ b/src/containers/Bridging/BridgeInput/styles.ts @@ -49,7 +49,6 @@ export const ReceiveContainer = styled.div` flex-direction: column; gap: 8px; ` -export const DestinationAddressContainer = styled.div`` export const BridgeInfoContainer = styled.div` width: 100%; diff --git a/src/containers/Bridging/BridgeTypeSelector/index.test.tsx b/src/containers/Bridging/BridgeTypeSelector/index.test.tsx index 86c7147e..8ff5b9b9 100644 --- a/src/containers/Bridging/BridgeTypeSelector/index.test.tsx +++ b/src/containers/Bridging/BridgeTypeSelector/index.test.tsx @@ -1,12 +1,12 @@ -import React from 'react' import { fireEvent, render, screen } from '@testing-library/react' -import configureStore from 'redux-mock-store' +import React from 'react' import { Provider } from 'react-redux' -import { Network, NetworkType } from 'util/network/network.util' -import CustomThemeProvider from 'themes' -import BridgeTypeSelector, { BRIDGE_TYPE } from '.' +import configureStore from 'redux-mock-store' import thunk from 'redux-thunk' +import CustomThemeProvider from 'themes' +import { Network, NetworkType } from 'util/network/network.util' import { mockedInitialState } from 'util/tests' +import BridgeTypeSelector from '.' const mockStore = configureStore([thunk]) diff --git a/src/containers/Bridging/BridgeTypeSelector/index.tsx b/src/containers/Bridging/BridgeTypeSelector/index.tsx index aaadbbd4..9318a1cd 100644 --- a/src/containers/Bridging/BridgeTypeSelector/index.tsx +++ b/src/containers/Bridging/BridgeTypeSelector/index.tsx @@ -14,10 +14,10 @@ import { networkLimitedAvailability, } from 'util/network/network.util' import { BridgeTabItem, BridgeTabs } from './style' +import { useNetworkInfo } from 'hooks/useNetworkInfo' export enum BRIDGE_TYPE { CLASSIC = 'CLASSIC', - FAST = 'FAST', LIGHT = 'LIGHT', THIRD_PARTY = 'THIRD_PARTY', } @@ -29,6 +29,7 @@ const BridgeTypeSelector = () => { const network = useSelector(selectNetwork()) const isOnLimitedNetwork = networkLimitedAvailability(networkType, network) const activeNetworkType = useSelector(selectActiveNetworkType()) + const { isActiveNetworkBnb } = useNetworkInfo() const isMainnet = useSelector(selectActiveNetworkType()) === NetworkType.MAINNET @@ -78,7 +79,7 @@ const BridgeTypeSelector = () => { Light - {isMainnet ? ( + {isMainnet && !isActiveNetworkBnb ? ( -
-

- Third party bridges -

-
-

- No bridges available -

-
-
-
-`; +exports[`3rd Party Bridges should match snapshot when network is BNB Mainnet 1`] = ``; exports[`3rd Party Bridges should match snapshot when network is ETH Mainnet 1`] = `

Third party bridges

Banxa logo

Banxa

diff --git a/src/containers/Bridging/ThirdPartyBridges/index.tsx b/src/containers/Bridging/ThirdPartyBridges/index.tsx index 7805a0ce..00e4621c 100644 --- a/src/containers/Bridging/ThirdPartyBridges/index.tsx +++ b/src/containers/Bridging/ThirdPartyBridges/index.tsx @@ -15,15 +15,16 @@ import { ThirdPartyBridgesContainer, } from './styles' import { IThirdPartyBridge } from './types' +import { useNetworkInfo } from 'hooks/useNetworkInfo' const ThirdPartyBridges: FC = () => { const networkType = useSelector(selectActiveNetworkType()) const network = useSelector(selectActiveNetwork()) const { loading, bridges } = useThirdPartyBridges() - + const { isActiveNetworkBnb } = useNetworkInfo() const theme: any = useTheme() - if (networkType !== NetworkType.MAINNET) { + if (networkType !== NetworkType.MAINNET || isActiveNetworkBnb) { return <> } diff --git a/src/containers/Bridging/__snapshots__/index.test.tsx.snap b/src/containers/Bridging/__snapshots__/index.test.tsx.snap index 5e0c730f..122371f0 100644 --- a/src/containers/Bridging/__snapshots__/index.test.tsx.snap +++ b/src/containers/Bridging/__snapshots__/index.test.tsx.snap @@ -3,24 +3,24 @@ exports[`Bridging Component should match snapshot on when bridge type is CLASSIC 1`] = `

Bridge

Classic
Light
Third Party

From

ethereum

To

boba

- - {contractMethos.length > 0 && ( - - Methods - {contractMethos.map((method, methodIndex) => { - const functionName = method.key - const stateMutability = method.value.stateMutability - const inputs = method.value.inputs - const inputStyle = {borderWidth: 0, borderRadius: 0, padding: '5px 0px', backgroundColor: 'transparent'} - const TxResult = TxBuilderResult[methodIndex] || {} - return ( - - - {`${functionName} ${stateMutability}`} - {inputs.length > 0 && inputs.map((input, inputIndex) => { - return ( - updateContractInput(methodIndex, inputIndex, i.target.value)} - fullWidth - sx={{fontSize: '50px'}} - newStyle - key={inputIndex} - style={inputStyle} - /> - ) - })} - {stateMutability === 'payable' && ( - updateContractInput(methodIndex, inputs.length, i.target.value)} - fullWidth - sx={{fontSize: '50px'}} - newStyle - style={inputStyle} - /> - )} - {(typeof TxResult.err !== 'undefined' || typeof TxResult.result !== 'undefined' || typeof TxResult.result !== 'undefined') && ( - - {TxResult.err && {TxResult.err}} - {TxResult.result && {TxResult.result}} - {TxResult.transactionHash && - - Succeeded! - - - } - - )} - - - - - - ) - })} - - )} - - - ) -} - -export default TxBuilder; diff --git a/src/containers/devtools/TxBuilder.styles.js b/src/containers/devtools/TxBuilder.styles.js deleted file mode 100644 index 090e003b..00000000 --- a/src/containers/devtools/TxBuilder.styles.js +++ /dev/null @@ -1,52 +0,0 @@ -import { Box } from '@mui/material'; -import { styled } from '@mui/material/styles'; - -export const TxBuilderWrapper = styled(Box)(({ theme }) => ({ - background: theme.palette.background.secondary, - backdropFilter: 'blur(100px)', - borderRadius: theme.palette.primary.borderRadius, - border: theme.palette.primary.border, - flex: 1, - minHeight: 'fit-content', - padding: '20px', - width: '100%', -})) - -export const Wrapper = styled(Box)(({ theme }) => ({ - display: 'flex', - flexDirection: 'column', - marginTop: 20, - marginBottom: 20, - width: '100%', -})) - -export const ButtonWrapper = styled(Box)(({ theme }) => ({ - display: 'flex', - justifyContent: 'flex-end', -})) - -export const MethodsWrapper = styled(Box)(({ theme }) => ({ - display: 'flex', - flexDirection: 'column', - marginBottom: 20, - width: '100%', -})) - -export const InputWrapper = styled(Box)(({ theme }) => ({ - marginTop: 20, - marginBottom: 20, - padding: 20, - borderRadius: theme.palette.primary.borderRadius, - border: theme.palette.primary.border, - backgroundColor: theme.palette.background.input, -})) - -export const TxResultWrapper = styled(Box)(({ theme }) => ({ - marginTop: 20, - marginBottom: 10, -})) - -export const TxSuccessWrapper = styled(Box)(({ theme }) => ({ - display: 'flex', - alignItems: 'center', -})) diff --git a/src/containers/earn/Earn.test.tsx b/src/containers/earn/Earn.test.tsx index 74874da3..deedf9b5 100644 --- a/src/containers/earn/Earn.test.tsx +++ b/src/containers/earn/Earn.test.tsx @@ -36,6 +36,7 @@ const renderEarnComponent = ({ store }: any) => { describe('Earn ', () => { let store beforeEach(() => { + jest.spyOn(console, 'log').mockImplementation(() => {}) // @ts-ignore networkService.getL1LPInfo.mockImplementation(() => Promise.resolve({ poolInfo: {}, userInfo: {} }) diff --git a/src/containers/earn/Earn.tsx b/src/containers/earn/Earn.tsx index 5dbd6215..327ab678 100644 --- a/src/containers/earn/Earn.tsx +++ b/src/containers/earn/Earn.tsx @@ -58,6 +58,7 @@ import { import { LiquidityPoolLayer } from 'types/earn.types' import { BridgeTooltip } from './tooltips' +import { useNetworkInfo } from 'hooks/useNetworkInfo' const Earn = () => { const dispatch = useDispatch() @@ -65,8 +66,8 @@ const Earn = () => { const layer = useSelector(selectLayer()) const baseEnabled = useSelector(selectBaseEnabled()) const accountEnabled = useSelector(selectAccountEnabled()) - const networkName = useSelector(selectActiveNetworkName()) const activeNetworkName = useSelector(selectActiveNetworkName()) + const { isActiveNetworkSepolia } = useNetworkInfo() const [showMyStakeOnly, setShowMyStakeOnly] = useState(false) const [lpChoice, setLpChoice] = useState( @@ -89,6 +90,10 @@ const Earn = () => { }, [layer, activeNetworkName]) useEffect(() => { + if (isActiveNetworkSepolia) { + // TODO: revert and update for bnb + return + } if (baseEnabled) { dispatch(getEarnInfo()) dispatch(getAllAddresses()) @@ -97,7 +102,21 @@ const Earn = () => { if (accountEnabled) { dispatch(fetchBalances()) } - }, [dispatch, baseEnabled, accountEnabled, activeNetworkName]) + }, [ + dispatch, + baseEnabled, + accountEnabled, + activeNetworkName, + isActiveNetworkSepolia, + ]) + + if (isActiveNetworkSepolia) { + return ( + +
Earn not supported please switch to mainnet!
+
+ ) + } return ( @@ -138,7 +157,7 @@ const Earn = () => { } sx={{ fontWeight: '500;' }} > - Connect to {networkName[layer === 'L1' ? 'l2' : 'l1']} + Connect to {activeNetworkName[layer === 'L1' ? 'l2' : 'l1']} )} diff --git a/src/containers/earn/__snapshots__/Earn.test.tsx.snap b/src/containers/earn/__snapshots__/Earn.test.tsx.snap index 1fd9f2e4..f29c06ab 100644 --- a/src/containers/earn/__snapshots__/Earn.test.tsx.snap +++ b/src/containers/earn/__snapshots__/Earn.test.tsx.snap @@ -3,13 +3,13 @@ exports[`Earn should match snapshot & trigger action when accountEnabled with layer L2 1`] = `

Bridging fees are proportionally distributed to stakers. The bridges are not farms. Your earnings only increase when someone uses the bridge you have staked into.

@@ -28,44 +28,44 @@ exports[`Earn should match snapshot & trigger action when accountEnabled with l

ethereum Pools

boba Pools

My Stakes Only

@@ -88,24 +88,24 @@ exports[`Earn should match snapshot & trigger action when accountEnabled with l

Token

Available Balance

@@ -123,11 +123,11 @@ exports[`Earn should match snapshot & trigger action when accountEnabled with l

Total Staked

@@ -145,11 +145,11 @@ exports[`Earn should match snapshot & trigger action when accountEnabled with l

APR

@@ -167,38 +167,38 @@ exports[`Earn should match snapshot & trigger action when accountEnabled with l

Your Stake

Earned

Actions

Bridging fees are proportionally distributed to stakers. The bridges are not farms. Your earnings only increase when someone uses the bridge you have staked into.

@@ -252,10 +252,10 @@ exports[`Earn should match snapshot on switching between tabs on L1 1`] = `

You are on L1. To transact on L2, SWITCH LAYER to L2

@@ -294,44 +294,44 @@ exports[`Earn should match snapshot on switching between tabs on L1 1`] = `

ethereum Pools

boba Pools

My Stakes Only

@@ -354,24 +354,24 @@ exports[`Earn should match snapshot on switching between tabs on L1 1`] = `

Token

Available Balance

@@ -389,11 +389,11 @@ exports[`Earn should match snapshot on switching between tabs on L1 1`] = `

Total Staked

@@ -411,11 +411,11 @@ exports[`Earn should match snapshot on switching between tabs on L1 1`] = `

APR

@@ -433,38 +433,38 @@ exports[`Earn should match snapshot on switching between tabs on L1 1`] = `

Your Stake

Earned

Actions

Bridging fees are proportionally distributed to stakers. The bridges are not farms. Your earnings only increase when someone uses the bridge you have staked into.

@@ -518,10 +518,10 @@ exports[`Earn should match snapshot on switching between tabs on L2 1`] = `

You are on L2. To transact on L1, SWITCH LAYER to L1

@@ -560,44 +560,44 @@ exports[`Earn should match snapshot on switching between tabs on L2 1`] = `

ethereum Pools

boba Pools

My Stakes Only

@@ -620,24 +620,24 @@ exports[`Earn should match snapshot on switching between tabs on L2 1`] = `

Token

Available Balance

@@ -655,11 +655,11 @@ exports[`Earn should match snapshot on switching between tabs on L2 1`] = `

Total Staked

@@ -677,11 +677,11 @@ exports[`Earn should match snapshot on switching between tabs on L2 1`] = `

APR

@@ -699,38 +699,38 @@ exports[`Earn should match snapshot on switching between tabs on L2 1`] = `

Your Stake

Earned

Actions

Bridging fees are proportionally distributed to stakers. The bridges are not farms. Your earnings only increase when someone uses the bridge you have staked into.

@@ -784,10 +784,10 @@ exports[`Earn should match snapshot when account is not enabled & layer is L1 1

Connect to Wallet to see your balances and contribute to the liquidity pool

ethereum Pools

boba Pools

My Stakes Only

@@ -883,24 +883,24 @@ exports[`Earn should match snapshot when account is not enabled & layer is L1 1

Token

Available Balance

@@ -918,11 +918,11 @@ exports[`Earn should match snapshot when account is not enabled & layer is L1 1

Total Staked

@@ -940,11 +940,11 @@ exports[`Earn should match snapshot when account is not enabled & layer is L1 1

APR

@@ -962,38 +962,38 @@ exports[`Earn should match snapshot when account is not enabled & layer is L1 1

Your Stake

Earned

Actions

Bridging fees are proportionally distributed to stakers. The bridges are not farms. Your earnings only increase when someone uses the bridge you have staked into.

@@ -1048,44 +1048,44 @@ exports[`Earn should trigger actoins when basedEnabled & accountEnabled 1`] = `

ethereum Pools

boba Pools

My Stakes Only

@@ -1108,24 +1108,24 @@ exports[`Earn should trigger actoins when basedEnabled & accountEnabled 1`] = `

Token

Available Balance

@@ -1143,11 +1143,11 @@ exports[`Earn should trigger actoins when basedEnabled & accountEnabled 1`] = `

Total Staked

@@ -1165,11 +1165,11 @@ exports[`Earn should trigger actoins when basedEnabled & accountEnabled 1`] = `

APR

@@ -1187,38 +1187,38 @@ exports[`Earn should trigger actoins when basedEnabled & accountEnabled 1`] = `

Your Stake

Earned

Actions

Token

Available Balance

@@ -38,11 +38,11 @@ exports[`EarnList should match snapshot in case no data 1`] = `

Total Staked

@@ -60,11 +60,11 @@ exports[`EarnList should match snapshot in case no data 1`] = `

APR

@@ -82,38 +82,38 @@ exports[`EarnList should match snapshot in case no data 1`] = `

Your Stake

Earned

Actions

Token

Available Balance

@@ -176,11 +176,11 @@ exports[`EarnList should match snapshot with data 1`] = `

Total Staked

@@ -198,11 +198,11 @@ exports[`EarnList should match snapshot with data 1`] = `

APR

@@ -220,74 +220,74 @@ exports[`EarnList should match snapshot with data 1`] = `

Your Stake

Earned

Actions

logo

BOBA

Boba Token

@@ -297,65 +297,65 @@ exports[`EarnList should match snapshot with data 1`] = `

99.95k

100.00k

0.00

0

0

logo

ETH

ETH

@@ -412,65 +412,65 @@ exports[`EarnList should match snapshot with data 1`] = `

0.85

0.61

0.10

0

0

logo

OMG

OMG Token

@@ -527,65 +527,65 @@ exports[`EarnList should match snapshot with data 1`] = `

0

0

0.00

0

0

logo

USDC

USD Coin

@@ -642,65 +642,65 @@ exports[`EarnList should match snapshot with data 1`] = `

0

0

0.00

0

0

USDC

USD Coin

@@ -46,65 +46,65 @@ exports[`EarnList should match snapshot when lpChoice L1LP 1`] = `

0

0

0.00

0.00

0

USDC

USD Coin

@@ -166,65 +166,65 @@ exports[`EarnList should match snapshot when lpChoice L2LP 1`] = `

0

0

0.00

0.00

0

USDC

USD Coin

@@ -286,65 +286,65 @@ exports[`EarnList should match snapshot when lpChoice empty 1`] = `

0

0

0.00

0.00

0

USDC

USD Coin

@@ -406,65 +406,65 @@ exports[`EarnList should match snapshot when showMystake is disabled 1`] = `

0

0

0.00

0.00

0

@@ -524,65 +524,65 @@ exports[`EarnList should match snapshot when userInfo or poolInfo is empty 1`]

0

0

NaN

0

0

BOBA

Boba Token

@@ -644,65 +644,65 @@ exports[`EarnList should match snapshot when userreward is available 1`] = `

614.83

565.3

0.00

43.01

0.00126

( increase by 10 BOBA.

- Fast Bridge example. When a user - bridges 10 BOBA from L1 to L2 using the fast bridge, they send 10 BOBA to - the L1 pool, increasing its balance by 10 BOBA. Next, 9.99 BOBA flow out - from the L2 pool to the user's L2 wallet, completing the bridge. Note that - bridge operations do not change the pool's liquidity, but only its balance. - The difference between what was deposited into the L1 pool (10 BOBA) and - what was sent to the user on the L2 (9.99 BOBA), equal to 0.01 BOBA, is sent - to the reward pool, for harvesting by stakers. -
-
Pool rebalancing. In some circumstances, excess balances can accumulate on one chain. For example, if many people bridge from L1 to L2, then L1 pool balances will increase, while diff --git a/src/containers/earn/types.ts b/src/containers/earn/types.ts index 363d49a5..8bcf65eb 100644 --- a/src/containers/earn/types.ts +++ b/src/containers/earn/types.ts @@ -1,13 +1,3 @@ -type poolDetail = { - name: string - tab: string -} - -export type tabSwitcherTypes = { - L1LP: poolDetail - L2LP: poolDetail -} - export enum toLayer { L1 = 'L2', L2 = 'L1', diff --git a/src/containers/history/DatePicker.tsx b/src/containers/history/DatePicker.tsx index 98c53df4..419ae3fc 100644 --- a/src/containers/history/DatePicker.tsx +++ b/src/containers/history/DatePicker.tsx @@ -9,7 +9,7 @@ import { formatDate } from 'util/dates' import { DayPicker, DateRange } from 'react-day-picker' import 'react-day-picker/dist/style.css' -export interface IDatePickerProps { +interface IDatePickerProps { selected: Date timeFormat?: string onChange: Function diff --git a/src/containers/history/History.tsx b/src/containers/history/History.tsx index ee9d22df..bf2dd1ce 100644 --- a/src/containers/history/History.tsx +++ b/src/containers/history/History.tsx @@ -21,9 +21,9 @@ import { Button } from 'components/global' import { Network, - NetworkType, networkLimitedAvailability, NetworkList, + NetworkType, } from 'util/network/network.util' import { ALL_NETWORKS, @@ -41,38 +41,42 @@ import { selectTransactions, } from 'selectors' -import { fetchTransactions, setNetwork } from 'actions/networkAction' +import { + fetchTransactions, + resetTransaction, + setNetwork, +} from 'actions/networkAction' import { - Table, - NoHistory, - HistoryPageContainer, - TableHeader, - TableFilters, - NetworkDropdowns, DateDescriptions, - SwitchChainIcon, - SwitchIcon, - TableTransactionsContainer, DatePickerWrapper, DropdownNetwork, + HistoryPageContainer, MobileDateDescriptions, MobileDatePickerWrapper, + NetworkDropdowns, + NoHistory, + SwitchChainIcon, + SwitchIcon, + Table, + TableFilters, + TableHeader, + TableTransactionsContainer, } from './styles' import { setConnect } from 'actions/setupAction' -import useInterval from 'hooks/useInterval' -import { POLL_INTERVAL } from 'util/constant' +// import useInterval from 'hooks/useInterval' +// import { POLL_INTERVAL } from 'util/constant' import FilterIcon from 'assets/images/filter.svg' import noHistoryIcon from 'assets/images/noHistory.svg' import { FilterDropDown } from 'components/filter' +import { SearchInput } from 'components/global/searchInput' import { Svg } from 'components/global/svg' import { TransactionsTableHeader } from 'components/global/table/themes' import { TransactionsResolver } from './TransactionsResolver' import { CHAIN_NAME, TRANSACTION_FILTER_STATUS } from './types' -import { SearchInput } from 'components/global/searchInput' import { Typography } from 'components/global/typography' import DatePicker from './DatePicker' @@ -80,7 +84,6 @@ import DatePicker from './DatePicker' const History = () => { const [toNetwork, setToNetwork] = useState(ALL_NETWORKS) const [fromNetwork, setFromNetwork] = useState(ALL_NETWORKS) - const [transactionsFound, setTransactionsFound] = useState(true) const [switched, setSwitched] = useState(false) const networkType = useSelector(selectNetworkType()) @@ -157,15 +160,17 @@ const History = () => { const syncTransactions = useCallback(() => { if (accountEnabled) { + dispatch(resetTransaction()) dispatch(fetchTransactions()) } }, [accountEnabled]) useEffect(() => { syncTransactions() - }, []) + }, [accountEnabled]) - useInterval(syncTransactions, POLL_INTERVAL) + // TODO: setup tx with refresh option. + // useInterval(syncTransactions, POLL_INTERVAL) return ( @@ -248,33 +253,24 @@ const History = () => { - {transactionsFound && ( - - )} + )} - {!transactionsFound && ( - - -
No Transactions Found.
-
- )} {!layer && ( -
No History.
+ /> ) : ( - ), diff --git a/src/containers/history/constants.ts b/src/containers/history/constants.ts index b15aa7fa..c3d16f75 100644 --- a/src/containers/history/constants.ts +++ b/src/containers/history/constants.ts @@ -1,7 +1,7 @@ import AllNetworksIcon from 'assets/images/allNetworks.svg' import { IDropdownItem } from 'components/global/dropdown' import { IFilterDropdownItem } from 'components/filter' -import { TableHeaderOptionType } from 'components/global/table' +import { TableHeaderOptionType } from 'components/global' import { getCoinImage } from 'util/coinImage' import { NetworkType } from 'util/network/network.util' import { CHAIN_NAME, ChainMap } from './types' diff --git a/src/containers/history/styles.ts b/src/containers/history/styles.ts index b41f91d6..71cb92c6 100644 --- a/src/containers/history/styles.ts +++ b/src/containers/history/styles.ts @@ -17,7 +17,7 @@ import { import { Dropdown } from 'components/global/dropdown/' -export const DefaultIcon = styled.div` +const DefaultIcon = styled.div` width: 32px; height: 32px; border-radius: 50%; @@ -105,17 +105,6 @@ export const MobileDatePickerWrapper = styled.div` `)} ` -export const DateInput = styled.button` - display: flex; - gap: 8px; - align-items: center; - border: 1px solid #545454; - border-radius: 8px; - background: #262626; - padding: 10px 20px; - color: ${({ theme }) => theme.color}; -` - export const NetworkDropdowns = styled.div` display: flex; flex-direction: row; @@ -129,9 +118,6 @@ export const NetworkDropdowns = styled.div` gap: 0px 5px; `)} ` -export const TransactionsTableWrapper = styled.div` - width: 100%; -` export const TransactionsWrapper = styled.div` width: 100%; @@ -726,13 +712,6 @@ export const DatePickerHeader = styled.div` `)} ` -export const DatePickerHeadersContainer = styled.div` - box-sizing: border-box; - position: relative; - display: flex; - flex-direction: row; -` - export const DatePickerDropdown = styled.div<{ isRange?: boolean }>` transition: 0.25s all; position: absolute; diff --git a/src/containers/history/tests/__snapshots__/history.test.tsx.snap b/src/containers/history/tests/__snapshots__/history.test.tsx.snap index 33a11dbf..c19e4363 100644 --- a/src/containers/history/tests/__snapshots__/history.test.tsx.snap +++ b/src/containers/history/tests/__snapshots__/history.test.tsx.snap @@ -3,14 +3,14 @@ exports[`Testing history page Test History Page 1`] = `
@@ -21,56 +21,56 @@ exports[`Testing history page Test History Page 1`] = `

Date Range From

02/24/2023

To

08/24/2023

Date Range

02/24/2023 - 08/24/2023
@@ -78,38 +78,38 @@ exports[`Testing history page Test History Page 1`] = `

From