From 9fd2f82a8b43444ba582505bd08c2e4528e53bb3 Mon Sep 17 00:00:00 2001 From: m00n620 Date: Tue, 14 Mar 2023 00:13:05 -0400 Subject: [PATCH 01/22] vite config - wip --- .../fortune/launcher/client/.env.development | 4 +- .../fortune/launcher/client/.eslintrc.json | 67 ++++++++ .../fortune/launcher/client/babel.config.js | 7 - .../launcher/client/{public => }/index.html | 23 +-- .../fortune/launcher/client/jest.config.ts | 15 -- .../fortune/launcher/client/package.json | 50 +++--- .../fortune/launcher/client/src/App.tsx | 6 +- .../src/__tests__/FiatJobRequest.test.tsx | 27 ++- .../src/__tests__/FundingMethod.test.tsx | 20 +-- .../client/src/__tests__/JobRequest.test.tsx | 31 ++-- .../client/src/__tests__/Launch.test.tsx | 19 +-- .../client/src/__tests__/LaunchFail.test.tsx | 19 +-- .../src/__tests__/LaunchSuccess.test.tsx | 19 +-- .../client/src/components/FiatJobRequest.tsx | 14 +- .../client/src/components/WalletModal.tsx | 4 +- .../client/src/{index.tsx => main.tsx} | 17 +- .../launcher/client/src/react-app-env.d.ts | 4 - .../fortune/launcher/client/src/setupTests.ts | 5 - .../fortune/launcher/client/src/vite-env.d.ts | 14 ++ .../fortune/launcher/client/tests/setup.ts | 4 +- .../fortune/launcher/client/tests/utils.tsx | 18 +- .../fortune/launcher/client/tsconfig.json | 21 +-- .../fortune/launcher/client/vite.config.ts | 9 +- yarn.lock | 157 ++++++++---------- 24 files changed, 297 insertions(+), 277 deletions(-) create mode 100644 packages/examples/fortune/launcher/client/.eslintrc.json delete mode 100644 packages/examples/fortune/launcher/client/babel.config.js rename packages/examples/fortune/launcher/client/{public => }/index.html (58%) delete mode 100644 packages/examples/fortune/launcher/client/jest.config.ts rename packages/examples/fortune/launcher/client/src/{index.tsx => main.tsx} (92%) delete mode 100644 packages/examples/fortune/launcher/client/src/react-app-env.d.ts delete mode 100644 packages/examples/fortune/launcher/client/src/setupTests.ts create mode 100644 packages/examples/fortune/launcher/client/src/vite-env.d.ts diff --git a/packages/examples/fortune/launcher/client/.env.development b/packages/examples/fortune/launcher/client/.env.development index e52cc8f00e..ff778c57cd 100644 --- a/packages/examples/fortune/launcher/client/.env.development +++ b/packages/examples/fortune/launcher/client/.env.development @@ -1,2 +1,2 @@ -REACT_APP_JOB_LAUNCHER_SERVER_URL=http://localhost:8080 -REACT_APP_JOB_LAUNCHER_ADDRESS=0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199 \ No newline at end of file +VITE_APP_JOB_LAUNCHER_SERVER_URL=http://localhost:8080 +VITE_APP_JOB_LAUNCHER_ADDRESS=0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199 \ No newline at end of file diff --git a/packages/examples/fortune/launcher/client/.eslintrc.json b/packages/examples/fortune/launcher/client/.eslintrc.json new file mode 100644 index 0000000000..552eb871b6 --- /dev/null +++ b/packages/examples/fortune/launcher/client/.eslintrc.json @@ -0,0 +1,67 @@ +{ + "extends": [ + "plugin:import/recommended", + "plugin:import/typescript", + "plugin:prettier/recommended", + "react-app" + ], + "settings": { + "import/resolver": { + "typescript": {}, + "node": { + "extensions": [".js", ".jsx", ".ts", ".tsx", ".d.ts"] + } + }, + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"] + } + }, + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module" + }, + "rules": { + "no-console": "warn", + "no-unused-vars": "off", + "import/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "ts": "never", + "tsx": "never" + } + ], + "import/order": [ + "error", + { + "pathGroups": [ + { + "pattern": "~/**", + "group": "external" + } + ], + "alphabetize": { + "order": "asc", + "caseInsensitive": true + } + } + ], + "@typescript-eslint/no-unused-vars": ["error"], + "prettier/prettier": ["error"] + }, + "overrides": [ + { + "files": ["*.ts", "*.tsx"], + "rules": { + "no-undef": "off" + } + } + ], + "env": { + "browser": true, + "jest": true, + "node": true + } +} diff --git a/packages/examples/fortune/launcher/client/babel.config.js b/packages/examples/fortune/launcher/client/babel.config.js deleted file mode 100644 index 9ff6fd17c3..0000000000 --- a/packages/examples/fortune/launcher/client/babel.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - presets: [ - '@babel/preset-env', - '@babel/preset-typescript', - ['@babel/preset-react', {runtime: 'automatic'}], - ], -}; diff --git a/packages/examples/fortune/launcher/client/public/index.html b/packages/examples/fortune/launcher/client/index.html similarity index 58% rename from packages/examples/fortune/launcher/client/public/index.html rename to packages/examples/fortune/launcher/client/index.html index 65fee46bc0..1ba561bde4 100644 --- a/packages/examples/fortune/launcher/client/public/index.html +++ b/packages/examples/fortune/launcher/client/index.html @@ -2,19 +2,16 @@ - + - - + + - + + diff --git a/packages/examples/fortune/launcher/client/jest.config.ts b/packages/examples/fortune/launcher/client/jest.config.ts deleted file mode 100644 index 3ce520e242..0000000000 --- a/packages/examples/fortune/launcher/client/jest.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Config } from '@jest/types'; - -const config: Config.InitialOptions = { - verbose: true, - testEnvironment: 'jsdom', - preset: 'ts-jest', - setupFilesAfterEnv: ['/src/setupTests.ts'], - moduleNameMapper: { - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': - '/src/__mocks__/fileMock.js', - '\\.(css|less|scss|sass)$': 'identity-obj-proxy', - }, -}; - -export default config; \ No newline at end of file diff --git a/packages/examples/fortune/launcher/client/package.json b/packages/examples/fortune/launcher/client/package.json index a25473ecb6..522578d844 100644 --- a/packages/examples/fortune/launcher/client/package.json +++ b/packages/examples/fortune/launcher/client/package.json @@ -9,35 +9,24 @@ "@mui/material": "^5.11.7", "@stripe/react-stripe-js": "^1.16.4", "@stripe/stripe-js": "^1.46.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "@types/jest": "^27.5.2", - "@types/node": "^16.18.3", - "@types/react": "^18.0.25", - "@types/react-dom": "^18.0.9", "axios": "^1.1.3", - "buffer": "^6.0.3", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-scripts": "5.0.1", "typescript": "^4.9.3", "wagmi": "^0.11.2", "web-vitals": "^2.1.4", "web3": "^1.8.1" }, "scripts": { - "start": "cross-env GENERATE_SOURCEMAP=false react-scripts start", + "lint": "eslint \"**/*.{ts,tsx}\"", + "start": "vite", + "build": "vite build", + "preview": "vite preview", "start-prod": "serve -s build", - "build": "cross-env GENERATE_SOURCEMAP=false react-scripts build", - "test": "vitest -u", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] + "test": "vitest run", + "format:prettier": "prettier --write \"**/*.{ts,tsx}\"", + "format:lint": "eslint --fix \"**/*.{ts,tsx}\"", + "format": "npm run format:prettier && npm run format:lint" }, "browserslist": { "production": [ @@ -52,7 +41,28 @@ ] }, "devDependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^14.0.0", + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", + "@types/react-test-renderer": "^18.0.0", "@vitejs/plugin-react": "^3.1.0", - "vitest": "^0.28.5" + "eslint-config-react-app": "^7.0.1", + "eslint-import-resolver-typescript": "^3.5.3", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "happy-dom": "^8.9.0", + "identity-obj-proxy": "^3.0.0", + "jsdom": "^21.1.0", + "resize-observer-polyfill": "^1.5.1", + "vite": "^4.1.4", + "vitest": "^0.28.4" + }, + "lint-staged": { + "*.{ts,tsx}": [ + "prettier --write", + "eslint --fix" + ] } } diff --git a/packages/examples/fortune/launcher/client/src/App.tsx b/packages/examples/fortune/launcher/client/src/App.tsx index e7ef22ac32..b100c7ca1d 100644 --- a/packages/examples/fortune/launcher/client/src/App.tsx +++ b/packages/examples/fortune/launcher/client/src/App.tsx @@ -1,8 +1,10 @@ import EscrowFactoryABI from '@human-protocol/core/abis/EscrowFactory.json'; -import Box from '@mui/material/Box'; import { Grid, Link, Typography } from '@mui/material'; +import Box from '@mui/material/Box'; import { ethers } from 'ethers'; import React, { useEffect, useState } from 'react'; +import { useSigner, useChainId } from 'wagmi'; +import { ChainId, ESCROW_NETWORKS } from './constants'; import { FortuneStages, FortuneFundingMethod, @@ -17,8 +19,6 @@ import { FundingMethodType, JobLaunchResponse, } from 'src/components/types'; -import { useSigner, useChainId } from 'wagmi'; -import { ChainId, ESCROW_NETWORKS } from './constants'; function App() { const { data: signer } = useSigner(); diff --git a/packages/examples/fortune/launcher/client/src/__tests__/FiatJobRequest.test.tsx b/packages/examples/fortune/launcher/client/src/__tests__/FiatJobRequest.test.tsx index 1f1eadb670..9972334f6b 100644 --- a/packages/examples/fortune/launcher/client/src/__tests__/FiatJobRequest.test.tsx +++ b/packages/examples/fortune/launcher/client/src/__tests__/FiatJobRequest.test.tsx @@ -1,7 +1,7 @@ import { Elements } from '@stripe/react-stripe-js'; import { render, screen } from '@testing-library/react'; import { act } from 'react-dom/test-utils'; -import renderer from 'react-test-renderer'; +import { create } from 'react-test-renderer'; import { vi } from 'vitest'; import { JobRequest } from '../components/FiatJobRequest'; @@ -41,7 +41,6 @@ const mockStripe = () => ({ describe('when rendered FiatJobRequest component', () => { const mockstripe = mockStripe() as any; it('should render buttons', async () => { - // eslint-disable-next-line testing-library/no-unnecessary-act await act(async () => { render( { it('FiatJobRequest component renders correctly, corresponds to the snapshot', () => { const mockstripe = mockStripe() as any; - const tree = renderer - .create( - - 1} - onLaunch={() => 1} - onSuccess={() => 1} - onFail={() => 1} - /> - - ) - .toJSON(); + const tree = create( + + 1} + onLaunch={() => 1} + onSuccess={() => 1} + onFail={() => 1} + /> + + ).toJSON(); expect(tree).toMatchSnapshot(); }); diff --git a/packages/examples/fortune/launcher/client/src/__tests__/FundingMethod.test.tsx b/packages/examples/fortune/launcher/client/src/__tests__/FundingMethod.test.tsx index c8efcce980..4618e67156 100644 --- a/packages/examples/fortune/launcher/client/src/__tests__/FundingMethod.test.tsx +++ b/packages/examples/fortune/launcher/client/src/__tests__/FundingMethod.test.tsx @@ -1,10 +1,10 @@ -import * as React from 'react'; import { render, screen } from '@testing-library/react'; -import renderer from 'react-test-renderer'; +import { MockConnector } from '@wagmi/core/connectors/mock'; +import * as React from 'react'; import { act } from 'react-dom/test-utils'; +import { create } from 'react-test-renderer'; import { FundingMethod } from 'src/components/FundingMethod'; import { Providers, setupClient, getSigners } from 'tests/utils'; -import { MockConnector } from '@wagmi/core/connectors/mock'; describe('when rendered FundingMethod component', () => { it('should render Crypto and Fiat buttons', async () => { @@ -14,7 +14,6 @@ describe('when rendered FundingMethod component', () => { ], }); - // eslint-disable-next-line testing-library/no-unnecessary-act await act(async () => { render( 1} />, { wrapper: ({ children }: { children: React.ReactNode }) => ( @@ -33,7 +32,6 @@ describe('when rendered FundingMethod component', () => { ], }); - // eslint-disable-next-line testing-library/no-unnecessary-act await act(async () => { render( 1} />, { wrapper: ({ children }: { children: React.ReactNode }) => ( @@ -51,12 +49,10 @@ it('FundingMethod component renders correctly, corresponds to the snapshot', () const client = setupClient({ connectors: [new MockConnector({ options: { signer: getSigners()[0]! } })], }); - const tree = renderer - .create( - - 1} /> - - ) - .toJSON(); + const tree = create( + + 1} /> + + ).toJSON(); expect(tree).toMatchSnapshot(); }); diff --git a/packages/examples/fortune/launcher/client/src/__tests__/JobRequest.test.tsx b/packages/examples/fortune/launcher/client/src/__tests__/JobRequest.test.tsx index af1b9dda1c..2653634a17 100644 --- a/packages/examples/fortune/launcher/client/src/__tests__/JobRequest.test.tsx +++ b/packages/examples/fortune/launcher/client/src/__tests__/JobRequest.test.tsx @@ -1,10 +1,10 @@ -import * as React from 'react'; import { render, screen } from '@testing-library/react'; -import renderer from 'react-test-renderer'; +import { MockConnector } from '@wagmi/core/connectors/mock'; +import * as React from 'react'; import { act } from 'react-dom/test-utils'; +import { create } from 'react-test-renderer'; import { JobRequest } from 'src/components/JobRequest'; import { Providers, setupClient, getSigners } from 'tests/utils'; -import { MockConnector } from '@wagmi/core/connectors/mock'; describe('when rendered JobRequest component', () => { it('should render buttons', async () => { @@ -14,7 +14,6 @@ describe('when rendered JobRequest component', () => { ], }); - // eslint-disable-next-line testing-library/no-unnecessary-act await act(async () => { render( const client = setupClient({ connectors: [new MockConnector({ options: { signer: getSigners()[0]! } })], }); - const tree = renderer - .create( - - 1} - onLaunch={() => 1} - onSuccess={() => 1} - onFail={() => 1} - /> - - ) - .toJSON(); + const tree = create( + + 1} + onLaunch={() => 1} + onSuccess={() => 1} + onFail={() => 1} + /> + + ).toJSON(); expect(tree).toMatchSnapshot(); }); diff --git a/packages/examples/fortune/launcher/client/src/__tests__/Launch.test.tsx b/packages/examples/fortune/launcher/client/src/__tests__/Launch.test.tsx index 77aa9d6faf..9bfcee2b1d 100644 --- a/packages/examples/fortune/launcher/client/src/__tests__/Launch.test.tsx +++ b/packages/examples/fortune/launcher/client/src/__tests__/Launch.test.tsx @@ -1,10 +1,10 @@ -import * as React from 'react'; import { render, screen } from '@testing-library/react'; -import renderer from 'react-test-renderer'; +import { MockConnector } from '@wagmi/core/connectors/mock'; +import * as React from 'react'; import { act } from 'react-dom/test-utils'; +import { create } from 'react-test-renderer'; import { Launch } from 'src/components/Launch'; import { Providers, setupClient, getSigners } from 'tests/utils'; -import { MockConnector } from '@wagmi/core/connectors/mock'; describe('when rendered Launch component', () => { it('should render texts', async () => { @@ -14,7 +14,6 @@ describe('when rendered Launch component', () => { ], }); - // eslint-disable-next-line testing-library/no-unnecessary-act await act(async () => { render(, { wrapper: ({ children }: { children: React.ReactNode }) => ( @@ -33,12 +32,10 @@ it('Launch component renders correctly, corresponds to the snapshot', () => { const client = setupClient({ connectors: [new MockConnector({ options: { signer: getSigners()[0]! } })], }); - const tree = renderer - .create( - - - - ) - .toJSON(); + const tree = create( + + + + ).toJSON(); expect(tree).toMatchSnapshot(); }); diff --git a/packages/examples/fortune/launcher/client/src/__tests__/LaunchFail.test.tsx b/packages/examples/fortune/launcher/client/src/__tests__/LaunchFail.test.tsx index 710b685d93..48d4ba1063 100644 --- a/packages/examples/fortune/launcher/client/src/__tests__/LaunchFail.test.tsx +++ b/packages/examples/fortune/launcher/client/src/__tests__/LaunchFail.test.tsx @@ -1,10 +1,10 @@ -import * as React from 'react'; import { render, screen } from '@testing-library/react'; -import renderer from 'react-test-renderer'; +import { MockConnector } from '@wagmi/core/connectors/mock'; +import * as React from 'react'; import { act } from 'react-dom/test-utils'; +import { create } from 'react-test-renderer'; import { LaunchFail } from 'src/components/LaunchFail'; import { Providers, setupClient, getSigners } from 'tests/utils'; -import { MockConnector } from '@wagmi/core/connectors/mock'; describe('when rendered LaunchFail component', () => { it('should render texts', async () => { @@ -14,7 +14,6 @@ describe('when rendered LaunchFail component', () => { ], }); - // eslint-disable-next-line testing-library/no-unnecessary-act await act(async () => { render( 1} />, { wrapper: ({ children }: { children: React.ReactNode }) => ( @@ -31,12 +30,10 @@ it('LaunchFail component renders correctly, corresponds to the snapshot', () => const client = setupClient({ connectors: [new MockConnector({ options: { signer: getSigners()[0]! } })], }); - const tree = renderer - .create( - - 1} /> - - ) - .toJSON(); + const tree = create( + + 1} /> + + ).toJSON(); expect(tree).toMatchSnapshot(); }); diff --git a/packages/examples/fortune/launcher/client/src/__tests__/LaunchSuccess.test.tsx b/packages/examples/fortune/launcher/client/src/__tests__/LaunchSuccess.test.tsx index e59c997ded..b709144f7b 100644 --- a/packages/examples/fortune/launcher/client/src/__tests__/LaunchSuccess.test.tsx +++ b/packages/examples/fortune/launcher/client/src/__tests__/LaunchSuccess.test.tsx @@ -1,10 +1,10 @@ -import * as React from 'react'; import { render, screen } from '@testing-library/react'; -import renderer from 'react-test-renderer'; +import { MockConnector } from '@wagmi/core/connectors/mock'; +import * as React from 'react'; import { act } from 'react-dom/test-utils'; +import { create } from 'react-test-renderer'; import { LaunchSuccess } from 'src/components/LaunchSuccess'; import { Providers, setupClient, getSigners } from 'tests/utils'; -import { MockConnector } from '@wagmi/core/connectors/mock'; const jobResponse = { escrowAddress: '0x5FbDB2315678afecb367f032d93F642f64180aa3', @@ -20,7 +20,6 @@ describe('when rendered LaunchSuccess component', () => { ], }); - // eslint-disable-next-line testing-library/no-unnecessary-act await act(async () => { render( 1} />, @@ -43,12 +42,10 @@ it('LaunchSuccess component renders correctly, corresponds to the snapshot', () const client = setupClient({ connectors: [new MockConnector({ options: { signer: getSigners()[0]! } })], }); - const tree = renderer - .create( - - 1} /> - - ) - .toJSON(); + const tree = create( + + 1} /> + + ).toJSON(); expect(tree).toMatchSnapshot(); }); diff --git a/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx b/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx index 67c8493f5d..2b6d9e187e 100644 --- a/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx +++ b/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx @@ -15,13 +15,6 @@ import { CardElement, useElements, useStripe } from '@stripe/react-stripe-js'; import axios from 'axios'; import { ethers } from 'ethers'; import { useEffect, useState } from 'react'; -import { - ChainId, - Currencies, - ESCROW_NETWORKS, - HM_TOKEN_DECIMALS, - SUPPORTED_CHAIN_IDS, -} from 'src/constants'; import { RoundedBox } from './RoundedBox'; import { CreatePaymentType, @@ -29,6 +22,13 @@ import { FundingMethodType, JobLaunchResponse, } from './types'; +import { + ChainId, + Currencies, + ESCROW_NETWORKS, + HM_TOKEN_DECIMALS, + SUPPORTED_CHAIN_IDS, +} from 'src/constants'; type JobRequestProps = { fundingMethod: FundingMethodType; diff --git a/packages/examples/fortune/launcher/client/src/components/WalletModal.tsx b/packages/examples/fortune/launcher/client/src/components/WalletModal.tsx index 3720bc47c4..487c79cb58 100644 --- a/packages/examples/fortune/launcher/client/src/components/WalletModal.tsx +++ b/packages/examples/fortune/launcher/client/src/components/WalletModal.tsx @@ -1,3 +1,4 @@ +import CloseIcon from '@mui/icons-material/Close'; import { Box, Button, @@ -6,12 +7,11 @@ import { Typography, useTheme, } from '@mui/material'; -import CloseIcon from '@mui/icons-material/Close'; import React from 'react'; import { useConnect } from 'wagmi'; -import metaMaskSvg from 'src/assets/metamask.svg'; import coinbaseSvg from 'src/assets/coinbase.svg'; +import metaMaskSvg from 'src/assets/metamask.svg'; import walletConnectSvg from 'src/assets/walletconnect.svg'; const WALLET_ICONS: Record = { diff --git a/packages/examples/fortune/launcher/client/src/index.tsx b/packages/examples/fortune/launcher/client/src/main.tsx similarity index 92% rename from packages/examples/fortune/launcher/client/src/index.tsx rename to packages/examples/fortune/launcher/client/src/main.tsx index 87a265ab17..7797a68463 100644 --- a/packages/examples/fortune/launcher/client/src/index.tsx +++ b/packages/examples/fortune/launcher/client/src/main.tsx @@ -1,7 +1,11 @@ +import { Buffer } from 'buffer'; import CssBaseline from '@mui/material/CssBaseline'; import { ThemeProvider } from '@mui/material/styles'; +import { Elements } from '@stripe/react-stripe-js'; +import { loadStripe } from '@stripe/stripe-js'; +import axios from 'axios'; import React from 'react'; -import ReactDOM from 'react-dom/client'; +import { createRoot } from 'react-dom/client'; import { WagmiConfig, createClient, configureChains, Chain } from 'wagmi'; import { goerli, @@ -11,19 +15,16 @@ import { bsc, bscTestnet, } from 'wagmi/chains'; -import axios from 'axios'; -import { publicProvider } from 'wagmi/providers/public'; import { CoinbaseWalletConnector } from 'wagmi/connectors/coinbaseWallet'; import { MetaMaskConnector } from 'wagmi/connectors/metaMask'; import { WalletConnectConnector } from 'wagmi/connectors/walletConnect'; -import { Elements } from '@stripe/react-stripe-js'; -import { loadStripe } from '@stripe/stripe-js'; +import { publicProvider } from 'wagmi/providers/public'; import App from './App'; import reportWebVitals from './reportWebVitals'; import theme from './theme'; -window.Buffer = window.Buffer || require('buffer').Buffer; +window.Buffer = window.Buffer || Buffer; const fortune: Chain = { id: 1338, @@ -90,9 +91,7 @@ axios.get(`${baseUrl}/config`).then((r) => ) ); -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement -); +const root = createRoot(document.getElementById('root') as HTMLElement); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) diff --git a/packages/examples/fortune/launcher/client/src/react-app-env.d.ts b/packages/examples/fortune/launcher/client/src/react-app-env.d.ts deleted file mode 100644 index 4f3b2f0ff4..0000000000 --- a/packages/examples/fortune/launcher/client/src/react-app-env.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -interface Window { - ethereum: any -} \ No newline at end of file diff --git a/packages/examples/fortune/launcher/client/src/setupTests.ts b/packages/examples/fortune/launcher/client/src/setupTests.ts deleted file mode 100644 index 8f2609b7b3..0000000000 --- a/packages/examples/fortune/launcher/client/src/setupTests.ts +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/packages/examples/fortune/launcher/client/src/vite-env.d.ts b/packages/examples/fortune/launcher/client/src/vite-env.d.ts new file mode 100644 index 0000000000..60d69da6a4 --- /dev/null +++ b/packages/examples/fortune/launcher/client/src/vite-env.d.ts @@ -0,0 +1,14 @@ +/// + +interface ImportMetaEnv { + readonly VITE_APP_NFT_STORAGE_API: string; + readonly VITE_APP_FAUCET_SERVER_URL: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} + +interface Window { + ethereum: any; +} diff --git a/packages/examples/fortune/launcher/client/tests/setup.ts b/packages/examples/fortune/launcher/client/tests/setup.ts index 098df9bed8..46c4b3754c 100644 --- a/packages/examples/fortune/launcher/client/tests/setup.ts +++ b/packages/examples/fortune/launcher/client/tests/setup.ts @@ -1,6 +1,6 @@ -import { expect, afterEach } from 'vitest'; -import { cleanup } from '@testing-library/react'; import matchers from '@testing-library/jest-dom/matchers'; +import { cleanup } from '@testing-library/react'; +import { expect, afterEach } from 'vitest'; // extends Vitest's expect method with methods from react-testing-library expect.extend(matchers); diff --git a/packages/examples/fortune/launcher/client/tests/utils.tsx b/packages/examples/fortune/launcher/client/tests/utils.tsx index deeffd47fe..a8770f5b9a 100644 --- a/packages/examples/fortune/launcher/client/tests/utils.tsx +++ b/packages/examples/fortune/launcher/client/tests/utils.tsx @@ -1,12 +1,3 @@ -import { - CreateClientConfig, - WagmiConfig, - WagmiConfigProps, - Chain, - createClient, -} from 'wagmi'; -import { MockConnector } from '@wagmi/core/connectors/mock'; -import { Wallet, providers } from 'ethers'; import type { Provider, WebSocketProvider } from '@wagmi/core'; import { foundry, @@ -15,6 +6,15 @@ import { optimism, polygon, } from '@wagmi/core/chains'; +import { MockConnector } from '@wagmi/core/connectors/mock'; +import { Wallet, providers } from 'ethers'; +import { + CreateClientConfig, + WagmiConfig, + WagmiConfigProps, + Chain, + createClient, +} from 'wagmi'; type Config = Partial; function getNetwork(chain: Chain) { return { diff --git a/packages/examples/fortune/launcher/client/tsconfig.json b/packages/examples/fortune/launcher/client/tsconfig.json index 070c020f70..f9b958ceb0 100644 --- a/packages/examples/fortune/launcher/client/tsconfig.json +++ b/packages/examples/fortune/launcher/client/tsconfig.json @@ -1,11 +1,8 @@ { + "extends": "../../../../../tsconfig.json", "compilerOptions": { - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "target": "es6", + "lib": ["dom", "dom.iterable", "esnext", "es2015.promise"], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, @@ -13,15 +10,15 @@ "strict": true, "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, - "module": "CommonJS", + "module": "esnext", "moduleResolution": "node", - "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "baseUrl": "." + "resolveJsonModule": true, + "downlevelIteration": true, + "baseUrl": ".", + "types": ["node", "jest", "@testing-library/jest-dom"] }, - "include": [ - "./src" - ] + "include": ["src", "tests"] } diff --git a/packages/examples/fortune/launcher/client/vite.config.ts b/packages/examples/fortune/launcher/client/vite.config.ts index c80dacee57..10359f7176 100644 --- a/packages/examples/fortune/launcher/client/vite.config.ts +++ b/packages/examples/fortune/launcher/client/vite.config.ts @@ -1,8 +1,9 @@ /// /// -import { defineConfig } from 'vite'; +import path from 'path'; import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vite'; // https://vitejs.dev/config/ export default defineConfig({ @@ -10,6 +11,9 @@ export default defineConfig({ worker: { plugins: [react()], }, + resolve: { + alias: [{ find: 'src', replacement: path.resolve(__dirname, 'src') }], + }, test: { globals: true, environment: 'happy-dom', @@ -18,4 +22,7 @@ export default defineConfig({ reporter: ['text', 'json', 'html'], }, }, + server: { + port: 3005, + }, }); diff --git a/yarn.lock b/yarn.lock index 764929933e..440e12b6de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4150,6 +4150,20 @@ lz-string "^1.4.4" pretty-format "^27.0.2" +"@testing-library/dom@^9.0.0": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.0.1.tgz#fb9e3837fe2a662965df1536988f0863f01dbf51" + integrity sha512-fTOVsMY9QLFCCXRHG3Ese6cMH5qIWwSbgxZsgeF5TNsy81HKaZ4kgehnSF8FsR3OF+numlIV2YcU79MzbnhSig== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "^5.0.0" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" + "@testing-library/jest-dom@^5.16.5": version "5.16.5" resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" @@ -4182,6 +4196,15 @@ "@testing-library/dom" "^8.5.0" "@types/react-dom" "^18.0.0" +"@testing-library/react@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.0.0.tgz#59030392a6792450b9ab8e67aea5f3cc18d6347c" + integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^9.0.0" + "@types/react-dom" "^18.0.0" + "@testing-library/user-event@^13.5.0": version "13.5.0" resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-13.5.0.tgz#69d77007f1e124d55314a2b73fd204b333b13295" @@ -4665,7 +4688,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== -"@types/node@^16.11.68", "@types/node@^16.18.3": +"@types/node@^16.11.68": version "16.18.11" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.11.tgz#cbb15c12ca7c16c85a72b6bdc4d4b01151bb3cae" integrity sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA== @@ -4729,6 +4752,13 @@ dependencies: "@types/react" "*" +"@types/react-dom@^18.0.11": + version "18.0.11" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" + integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== + dependencies: + "@types/react" "*" + "@types/react-is@^16.7.1 || ^17.0.0": version "17.0.3" resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.3.tgz#2d855ba575f2fc8d17ef9861f084acc4b90a137a" @@ -4759,6 +4789,15 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/react@^18.0.28": + version "18.0.28" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.28.tgz#accaeb8b86f4908057ad629a26635fe641480065" + integrity sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -5063,15 +5102,6 @@ "@vitest/utils" "0.28.4" chai "^4.3.7" -"@vitest/expect@0.28.5": - version "0.28.5" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.28.5.tgz#d5a6eccd014e9ad66fe87a20d16426a2815c0e8a" - integrity sha512-gqTZwoUTwepwGIatnw4UKpQfnoyV0Z9Czn9+Lo2/jLIt4/AXLTn+oVZxlQ7Ng8bzcNkR+3DqLJ08kNr8jRmdNQ== - dependencies: - "@vitest/spy" "0.28.5" - "@vitest/utils" "0.28.5" - chai "^4.3.7" - "@vitest/runner@0.28.4": version "0.28.4" resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.28.4.tgz#4c4e5aed91d4b19a3071e601c75745d672868388" @@ -5081,15 +5111,6 @@ p-limit "^4.0.0" pathe "^1.1.0" -"@vitest/runner@0.28.5": - version "0.28.5" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.28.5.tgz#4a18fe0e40b25569763f9f1f64b799d1629b3026" - integrity sha512-NKkHtLB+FGjpp5KmneQjTcPLWPTDfB7ie+MmF1PnUBf/tGe2OjGxWyB62ySYZ25EYp9krR5Bw0YPLS/VWh1QiA== - dependencies: - "@vitest/utils" "0.28.5" - p-limit "^4.0.0" - pathe "^1.1.0" - "@vitest/spy@0.28.4": version "0.28.4" resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.28.4.tgz#beb994b7d46edee4966160eb1363e0493f9d9ef1" @@ -5097,13 +5118,6 @@ dependencies: tinyspy "^1.0.2" -"@vitest/spy@0.28.5": - version "0.28.5" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.28.5.tgz#b69affa0786200251b9e5aac5c58bbfb1b3273c9" - integrity sha512-7if6rsHQr9zbmvxN7h+gGh2L9eIIErgf8nSKYDlg07HHimCxp4H6I/X/DPXktVPPLQfiZ1Cw2cbDIx9fSqDjGw== - dependencies: - tinyspy "^1.0.2" - "@vitest/utils@0.28.4": version "0.28.4" resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.28.4.tgz#be8378f860f40c2d48a62f46c808cf98b9736100" @@ -5115,17 +5129,6 @@ picocolors "^1.0.0" pretty-format "^27.5.1" -"@vitest/utils@0.28.5": - version "0.28.5" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.28.5.tgz#7b82b528df86adfbd4a1f6a3b72c39790e81de0d" - integrity sha512-UyZdYwdULlOa4LTUSwZ+Paz7nBHGTT72jKwdFSV4IjHF1xsokp+CabMdhjvVhYwkLfO88ylJT46YMilnkSARZA== - dependencies: - cli-truncate "^3.1.0" - diff "^5.1.0" - loupe "^2.3.6" - picocolors "^1.0.0" - pretty-format "^27.5.1" - "@wagmi/chains@0.2.4": version "0.2.4" resolved "https://registry.yarnpkg.com/@wagmi/chains/-/chains-0.2.4.tgz#7f90e64f42e614d9d324b5be2a6a49dfb0d39264" @@ -10852,7 +10855,7 @@ eslint-import-resolver-node@^0.3.7: is-core-module "^2.11.0" resolve "^1.22.1" -eslint-import-resolver-typescript@^3.5.2: +eslint-import-resolver-typescript@^3.5.2, eslint-import-resolver-typescript@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz#db5ed9e906651b7a59dd84870aaef0e78c663a05" integrity sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ== @@ -10880,7 +10883,7 @@ eslint-plugin-flowtype@^8.0.3: lodash "^4.17.21" string-natural-compare "^3.0.1" -eslint-plugin-import@^2.25.3, eslint-plugin-import@^2.26.0: +eslint-plugin-import@^2.25.3, eslint-plugin-import@^2.26.0, eslint-plugin-import@^2.27.5: version "2.27.5" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== @@ -10949,7 +10952,7 @@ eslint-plugin-react-hooks@^4.3.0, eslint-plugin-react-hooks@^4.6.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@^7.27.1, eslint-plugin-react@^7.31.10: +eslint-plugin-react@^7.27.1, eslint-plugin-react@^7.31.10, eslint-plugin-react@^7.32.2: version "7.32.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== @@ -12665,6 +12668,19 @@ happy-dom@^8.2.6: whatwg-encoding "^2.0.0" whatwg-mimetype "^3.0.0" +happy-dom@^8.9.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/happy-dom/-/happy-dom-8.9.0.tgz#b7c9986538b83c3ca3197ce22a1d27a1777c49d9" + integrity sha512-JZwJuGdR7ko8L61136YzmrLv7LgTh5b8XaEM3P709mLjyQuXJ3zHTDXvUtBBahRjGlcYW0zGjIiEWizoTUGKfA== + dependencies: + css.escape "^1.5.1" + he "^1.2.0" + iconv-lite "^0.6.3" + node-fetch "^2.x.x" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -16071,6 +16087,11 @@ lz-string@^1.4.4: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== + mafmt@^6.0.2: version "6.0.10" resolved "https://registry.yarnpkg.com/mafmt/-/mafmt-6.0.10.tgz#3ad251c78f14f8164e66f70fd3265662da41113a" @@ -22334,20 +22355,6 @@ vite-node@0.28.4: source-map-support "^0.5.21" vite "^3.0.0 || ^4.0.0" -vite-node@0.28.5: - version "0.28.5" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.28.5.tgz#56d0f78846ea40fddf2e28390899df52a4738006" - integrity sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - mlly "^1.1.0" - pathe "^1.1.0" - picocolors "^1.0.0" - source-map "^0.6.1" - source-map-support "^0.5.21" - vite "^3.0.0 || ^4.0.0" - "vite@^3.0.0 || ^4.0.0": version "4.1.1" resolved "https://registry.yarnpkg.com/vite/-/vite-4.1.1.tgz#3b18b81a4e85ce3df5cbdbf4c687d93ebf402e6b" @@ -22360,6 +22367,18 @@ vite-node@0.28.5: optionalDependencies: fsevents "~2.3.2" +vite@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.1.4.tgz#170d93bcff97e0ebc09764c053eebe130bfe6ca0" + integrity sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg== + dependencies: + esbuild "^0.16.14" + postcss "^8.4.21" + resolve "^1.22.1" + rollup "^3.10.0" + optionalDependencies: + fsevents "~2.3.2" + vitest@^0.25.8: version "0.25.8" resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.25.8.tgz#9b57e0b41cd6f2d2d92aa94a39b35c36f715f8cc" @@ -22410,36 +22429,6 @@ vitest@^0.28.1, vitest@^0.28.4: vite-node "0.28.4" why-is-node-running "^2.2.2" -vitest@^0.28.5: - version "0.28.5" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.28.5.tgz#94410a8924cd7189e4f1adffa8c5cde809cbf2f9" - integrity sha512-pyCQ+wcAOX7mKMcBNkzDwEHRGqQvHUl0XnoHR+3Pb1hytAHISgSxv9h0gUiSiYtISXUU3rMrKiKzFYDrI6ZIHA== - dependencies: - "@types/chai" "^4.3.4" - "@types/chai-subset" "^1.3.3" - "@types/node" "*" - "@vitest/expect" "0.28.5" - "@vitest/runner" "0.28.5" - "@vitest/spy" "0.28.5" - "@vitest/utils" "0.28.5" - acorn "^8.8.1" - acorn-walk "^8.2.0" - cac "^6.7.14" - chai "^4.3.7" - debug "^4.3.4" - local-pkg "^0.4.2" - pathe "^1.1.0" - picocolors "^1.0.0" - source-map "^0.6.1" - std-env "^3.3.1" - strip-literal "^1.0.0" - tinybench "^2.3.1" - tinypool "^0.3.1" - tinyspy "^1.0.2" - vite "^3.0.0 || ^4.0.0" - vite-node "0.28.5" - why-is-node-running "^2.2.2" - w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" From 9fae7181959a32f514d3ce49b3139de2991453c1 Mon Sep 17 00:00:00 2001 From: m00n620 Date: Tue, 14 Mar 2023 23:51:41 -0400 Subject: [PATCH 02/22] fix vite env --- packages/examples/fortune/launcher/client/Dockerfile | 2 +- packages/examples/fortune/launcher/client/README.md | 8 ++++---- .../launcher/client/src/components/FiatJobRequest.tsx | 4 ++-- .../fortune/launcher/client/src/components/JobRequest.tsx | 4 ++-- .../fortune/launcher/client/src/constants/index.ts | 2 +- packages/examples/fortune/launcher/client/src/main.tsx | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/examples/fortune/launcher/client/Dockerfile b/packages/examples/fortune/launcher/client/Dockerfile index ae3a3b3c14..726fb5fc5d 100644 --- a/packages/examples/fortune/launcher/client/Dockerfile +++ b/packages/examples/fortune/launcher/client/Dockerfile @@ -11,5 +11,5 @@ RUN yarn COPY ./public ./public COPY ./src ./src -RUN REACT_APP_JOB_LAUNCHER_SERVER_URL=$JOB_LAUNCHER_SERVER_URL \ +RUN VITE_APP_JOB_LAUNCHER_SERVER_URL=$JOB_LAUNCHER_SERVER_URL \ yarn build \ No newline at end of file diff --git a/packages/examples/fortune/launcher/client/README.md b/packages/examples/fortune/launcher/client/README.md index ff458e469a..6873422a70 100644 --- a/packages/examples/fortune/launcher/client/README.md +++ b/packages/examples/fortune/launcher/client/README.md @@ -12,8 +12,8 @@ $ yarn Before running the client app, you need to make sure that you have correct environment variables. ``` -REACT_APP_JOB_LAUNCHER_SERVER_URL= -REACT_APP_JOB_LAUNCHER_ADDRESS= +VITE_APP_JOB_LAUNCHER_SERVER_URL= +VITE_APP_JOB_LAUNCHER_ADDRESS= ``` Now run this command to start fortune launcher client. @@ -46,5 +46,5 @@ $ yarn test - Output Directory: `build` - Install Command: `yarn install` 7. Set Environnment Variables: - - REACT_APP_JOB_LAUNCHER_ADDRESS - - REACT_APP_JOB_LAUNCHER_SERVER_URL + - VITE_APP_JOB_LAUNCHER_ADDRESS + - VITE_APP_JOB_LAUNCHER_SERVER_URL diff --git a/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx b/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx index 2b6d9e187e..11fefbf77d 100644 --- a/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx +++ b/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx @@ -124,7 +124,7 @@ export const JobRequest = ({ }; try { const contract = new ethers.Contract(data.token, HMTokenABI, provider); - const jobLauncherAddress = process.env.REACT_APP_JOB_LAUNCHER_ADDRESS; + const jobLauncherAddress = import.meta.env.VITE_APP_JOB_LAUNCHER_ADDRESS; if (!jobLauncherAddress) { alert('Job Launcher address is missing'); setIsLoading(false); @@ -139,7 +139,7 @@ export const JobRequest = ({ if (balance.lt(fundAmount)) { throw new Error('Balance not enough for funding the escrow'); } - const baseUrl = process.env.REACT_APP_JOB_LAUNCHER_SERVER_URL; + const baseUrl = import.meta.env.VITE_APP_JOB_LAUNCHER_SERVER_URL; await axios.post(`${baseUrl}/check-escrow`, data); const clientSecret = ( diff --git a/packages/examples/fortune/launcher/client/src/components/JobRequest.tsx b/packages/examples/fortune/launcher/client/src/components/JobRequest.tsx index 24c04306d1..23bfb01f0b 100644 --- a/packages/examples/fortune/launcher/client/src/components/JobRequest.tsx +++ b/packages/examples/fortune/launcher/client/src/components/JobRequest.tsx @@ -90,7 +90,7 @@ export const JobRequest = ({ }; try { const contract = new ethers.Contract(data.token, HMTokenABI, signer); - const jobLauncherAddress = process.env.REACT_APP_JOB_LAUNCHER_ADDRESS; + const jobLauncherAddress = import.meta.env.VITE_APP_JOB_LAUNCHER_ADDRESS; if (!jobLauncherAddress) { alert('Job Launcher address is missing'); setIsLoading(false); @@ -105,7 +105,7 @@ export const JobRequest = ({ throw new Error('Balance not enough for funding the escrow'); } - const baseUrl = process.env.REACT_APP_JOB_LAUNCHER_SERVER_URL; + const baseUrl = import.meta.env.VITE_APP_JOB_LAUNCHER_SERVER_URL; await axios.post(`${baseUrl}/check-escrow`, data); const allowance = await contract.allowance(address, jobLauncherAddress); diff --git a/packages/examples/fortune/launcher/client/src/constants/index.ts b/packages/examples/fortune/launcher/client/src/constants/index.ts index 4ccb902a76..8747da267c 100644 --- a/packages/examples/fortune/launcher/client/src/constants/index.ts +++ b/packages/examples/fortune/launcher/client/src/constants/index.ts @@ -22,7 +22,7 @@ export const SUPPORTED_CHAIN_IDS_PRODUCTION = [ ]; export const SUPPORTED_CHAIN_IDS = - process.env.NODE_ENV === 'development' + import.meta.env.MODE === 'development' ? [ChainId.LOCALHOST] : SUPPORTED_CHAIN_IDS_PRODUCTION; diff --git a/packages/examples/fortune/launcher/client/src/main.tsx b/packages/examples/fortune/launcher/client/src/main.tsx index 7797a68463..4fbd26865f 100644 --- a/packages/examples/fortune/launcher/client/src/main.tsx +++ b/packages/examples/fortune/launcher/client/src/main.tsx @@ -73,7 +73,7 @@ const client = createClient({ provider, webSocketProvider, }); -const baseUrl = process.env.REACT_APP_JOB_LAUNCHER_SERVER_URL; +const baseUrl = import.meta.env.VITE_APP_JOB_LAUNCHER_SERVER_URL; axios.get(`${baseUrl}/config`).then((r) => loadStripe(r.data.publishableKey).then((stripePromise) => root.render( From 78289a2ea17aad22e7e5696d19ce8da4461b0d38 Mon Sep 17 00:00:00 2001 From: m00n620 Date: Tue, 28 Mar 2023 00:37:24 -0400 Subject: [PATCH 03/22] fix lint error --- .../examples/fortune/launcher/client/src/App.tsx | 6 +++--- .../client/src/__tests__/FundingMethod.test.tsx | 4 ++-- .../client/src/__tests__/JobRequest.test.tsx | 4 ++-- .../launcher/client/src/__tests__/Launch.test.tsx | 4 ++-- .../client/src/__tests__/LaunchFail.test.tsx | 4 ++-- .../client/src/__tests__/LaunchSuccess.test.tsx | 4 ++-- .../client/src/components/FiatJobRequest.tsx | 14 +++++++------- .../launcher/client/src/components/WalletModal.tsx | 7 +++---- 8 files changed, 23 insertions(+), 24 deletions(-) diff --git a/packages/examples/fortune/launcher/client/src/App.tsx b/packages/examples/fortune/launcher/client/src/App.tsx index b100c7ca1d..a7b29fdc08 100644 --- a/packages/examples/fortune/launcher/client/src/App.tsx +++ b/packages/examples/fortune/launcher/client/src/App.tsx @@ -4,7 +4,6 @@ import Box from '@mui/material/Box'; import { ethers } from 'ethers'; import React, { useEffect, useState } from 'react'; import { useSigner, useChainId } from 'wagmi'; -import { ChainId, ESCROW_NETWORKS } from './constants'; import { FortuneStages, FortuneFundingMethod, @@ -13,12 +12,13 @@ import { FortuneLaunch, FortuneLaunchSuccess, FortuneLaunchFail, -} from 'src/components'; +} from './components'; import { FortuneStageStatus, FundingMethodType, JobLaunchResponse, -} from 'src/components/types'; +} from './components/types'; +import { ChainId, ESCROW_NETWORKS } from './constants'; function App() { const { data: signer } = useSigner(); diff --git a/packages/examples/fortune/launcher/client/src/__tests__/FundingMethod.test.tsx b/packages/examples/fortune/launcher/client/src/__tests__/FundingMethod.test.tsx index 4618e67156..9f0dbf789f 100644 --- a/packages/examples/fortune/launcher/client/src/__tests__/FundingMethod.test.tsx +++ b/packages/examples/fortune/launcher/client/src/__tests__/FundingMethod.test.tsx @@ -3,8 +3,8 @@ import { MockConnector } from '@wagmi/core/connectors/mock'; import * as React from 'react'; import { act } from 'react-dom/test-utils'; import { create } from 'react-test-renderer'; -import { FundingMethod } from 'src/components/FundingMethod'; -import { Providers, setupClient, getSigners } from 'tests/utils'; +import { Providers, setupClient, getSigners } from '../../tests/utils'; +import { FundingMethod } from '../components/FundingMethod'; describe('when rendered FundingMethod component', () => { it('should render Crypto and Fiat buttons', async () => { diff --git a/packages/examples/fortune/launcher/client/src/__tests__/JobRequest.test.tsx b/packages/examples/fortune/launcher/client/src/__tests__/JobRequest.test.tsx index 2653634a17..b450f07756 100644 --- a/packages/examples/fortune/launcher/client/src/__tests__/JobRequest.test.tsx +++ b/packages/examples/fortune/launcher/client/src/__tests__/JobRequest.test.tsx @@ -3,8 +3,8 @@ import { MockConnector } from '@wagmi/core/connectors/mock'; import * as React from 'react'; import { act } from 'react-dom/test-utils'; import { create } from 'react-test-renderer'; -import { JobRequest } from 'src/components/JobRequest'; -import { Providers, setupClient, getSigners } from 'tests/utils'; +import { Providers, setupClient, getSigners } from '../../tests/utils'; +import { JobRequest } from '../components/JobRequest'; describe('when rendered JobRequest component', () => { it('should render buttons', async () => { diff --git a/packages/examples/fortune/launcher/client/src/__tests__/Launch.test.tsx b/packages/examples/fortune/launcher/client/src/__tests__/Launch.test.tsx index 9bfcee2b1d..a106fd3edd 100644 --- a/packages/examples/fortune/launcher/client/src/__tests__/Launch.test.tsx +++ b/packages/examples/fortune/launcher/client/src/__tests__/Launch.test.tsx @@ -3,8 +3,8 @@ import { MockConnector } from '@wagmi/core/connectors/mock'; import * as React from 'react'; import { act } from 'react-dom/test-utils'; import { create } from 'react-test-renderer'; -import { Launch } from 'src/components/Launch'; -import { Providers, setupClient, getSigners } from 'tests/utils'; +import { Providers, setupClient, getSigners } from '../../tests/utils'; +import { Launch } from '../components/Launch'; describe('when rendered Launch component', () => { it('should render texts', async () => { diff --git a/packages/examples/fortune/launcher/client/src/__tests__/LaunchFail.test.tsx b/packages/examples/fortune/launcher/client/src/__tests__/LaunchFail.test.tsx index 48d4ba1063..9187fa9109 100644 --- a/packages/examples/fortune/launcher/client/src/__tests__/LaunchFail.test.tsx +++ b/packages/examples/fortune/launcher/client/src/__tests__/LaunchFail.test.tsx @@ -3,8 +3,8 @@ import { MockConnector } from '@wagmi/core/connectors/mock'; import * as React from 'react'; import { act } from 'react-dom/test-utils'; import { create } from 'react-test-renderer'; -import { LaunchFail } from 'src/components/LaunchFail'; -import { Providers, setupClient, getSigners } from 'tests/utils'; +import { Providers, setupClient, getSigners } from '../../tests/utils'; +import { LaunchFail } from '../components/LaunchFail'; describe('when rendered LaunchFail component', () => { it('should render texts', async () => { diff --git a/packages/examples/fortune/launcher/client/src/__tests__/LaunchSuccess.test.tsx b/packages/examples/fortune/launcher/client/src/__tests__/LaunchSuccess.test.tsx index b709144f7b..e37b069e97 100644 --- a/packages/examples/fortune/launcher/client/src/__tests__/LaunchSuccess.test.tsx +++ b/packages/examples/fortune/launcher/client/src/__tests__/LaunchSuccess.test.tsx @@ -3,8 +3,8 @@ import { MockConnector } from '@wagmi/core/connectors/mock'; import * as React from 'react'; import { act } from 'react-dom/test-utils'; import { create } from 'react-test-renderer'; -import { LaunchSuccess } from 'src/components/LaunchSuccess'; -import { Providers, setupClient, getSigners } from 'tests/utils'; +import { Providers, setupClient, getSigners } from '../../tests/utils'; +import { LaunchSuccess } from '../components/LaunchSuccess'; const jobResponse = { escrowAddress: '0x5FbDB2315678afecb367f032d93F642f64180aa3', diff --git a/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx b/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx index 11fefbf77d..8c3880c4ec 100644 --- a/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx +++ b/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx @@ -15,6 +15,13 @@ import { CardElement, useElements, useStripe } from '@stripe/react-stripe-js'; import axios from 'axios'; import { ethers } from 'ethers'; import { useEffect, useState } from 'react'; +import { + ChainId, + Currencies, + ESCROW_NETWORKS, + HM_TOKEN_DECIMALS, + SUPPORTED_CHAIN_IDS, +} from '../constants'; import { RoundedBox } from './RoundedBox'; import { CreatePaymentType, @@ -22,13 +29,6 @@ import { FundingMethodType, JobLaunchResponse, } from './types'; -import { - ChainId, - Currencies, - ESCROW_NETWORKS, - HM_TOKEN_DECIMALS, - SUPPORTED_CHAIN_IDS, -} from 'src/constants'; type JobRequestProps = { fundingMethod: FundingMethodType; diff --git a/packages/examples/fortune/launcher/client/src/components/WalletModal.tsx b/packages/examples/fortune/launcher/client/src/components/WalletModal.tsx index 487c79cb58..41a692b032 100644 --- a/packages/examples/fortune/launcher/client/src/components/WalletModal.tsx +++ b/packages/examples/fortune/launcher/client/src/components/WalletModal.tsx @@ -9,10 +9,9 @@ import { } from '@mui/material'; import React from 'react'; import { useConnect } from 'wagmi'; - -import coinbaseSvg from 'src/assets/coinbase.svg'; -import metaMaskSvg from 'src/assets/metamask.svg'; -import walletConnectSvg from 'src/assets/walletconnect.svg'; +import coinbaseSvg from '../assets/coinbase.svg'; +import metaMaskSvg from '../assets/metamask.svg'; +import walletConnectSvg from '../assets/walletconnect.svg'; const WALLET_ICONS: Record = { metaMask: metaMaskSvg, From 9aefc65c5569f8341df0fd344132a95c0af72c33 Mon Sep 17 00:00:00 2001 From: m00n620 Date: Wed, 29 Mar 2023 22:35:09 -0400 Subject: [PATCH 04/22] add walletconnect project id to env --- packages/examples/fortune/launcher/client/README.md | 2 ++ packages/examples/fortune/launcher/client/src/main.tsx | 2 +- packages/examples/fortune/launcher/client/src/vite-env.d.ts | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/examples/fortune/launcher/client/README.md b/packages/examples/fortune/launcher/client/README.md index 6873422a70..816670f381 100644 --- a/packages/examples/fortune/launcher/client/README.md +++ b/packages/examples/fortune/launcher/client/README.md @@ -14,6 +14,7 @@ Before running the client app, you need to make sure that you have correct envir ``` VITE_APP_JOB_LAUNCHER_SERVER_URL= VITE_APP_JOB_LAUNCHER_ADDRESS= +VITE_APP_WALLETCONNECT_PROJECT_ID= ``` Now run this command to start fortune launcher client. @@ -48,3 +49,4 @@ $ yarn test 7. Set Environnment Variables: - VITE_APP_JOB_LAUNCHER_ADDRESS - VITE_APP_JOB_LAUNCHER_SERVER_URL + - VITE_APP_WALLETCONNECT_PROJECT_ID diff --git a/packages/examples/fortune/launcher/client/src/main.tsx b/packages/examples/fortune/launcher/client/src/main.tsx index 85e8851a7f..fd679a884e 100644 --- a/packages/examples/fortune/launcher/client/src/main.tsx +++ b/packages/examples/fortune/launcher/client/src/main.tsx @@ -62,7 +62,7 @@ const { chains, provider, webSocketProvider } = configureChains( [publicProvider()] ); -const projectId = process.env.REACT_APP_WALLETCONNECT_PROJECT_ID; +const projectId = import.meta.env.VITE_APP_WALLETCONNECT_PROJECT_ID; // Set up client const client = createClient({ diff --git a/packages/examples/fortune/launcher/client/src/vite-env.d.ts b/packages/examples/fortune/launcher/client/src/vite-env.d.ts index 60d69da6a4..239ee088fd 100644 --- a/packages/examples/fortune/launcher/client/src/vite-env.d.ts +++ b/packages/examples/fortune/launcher/client/src/vite-env.d.ts @@ -3,6 +3,7 @@ interface ImportMetaEnv { readonly VITE_APP_NFT_STORAGE_API: string; readonly VITE_APP_FAUCET_SERVER_URL: string; + readonly VITE_APP_WALLETCONNECT_PROJECT_ID: string; } interface ImportMeta { From bdc0214da3a4fae13e1a5dd9352d48771c9df5c5 Mon Sep 17 00:00:00 2001 From: m00n620 <50647994+m00n620@users.noreply.github.com> Date: Thu, 30 Mar 2023 16:04:02 -0400 Subject: [PATCH 05/22] center dashboard warning message (#361) --- .../escrow-dashboard/src/components/Header/Header.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/apps/escrow-dashboard/src/components/Header/Header.tsx b/packages/apps/escrow-dashboard/src/components/Header/Header.tsx index 1c9ee4f503..4ac09b77c0 100644 --- a/packages/apps/escrow-dashboard/src/components/Header/Header.tsx +++ b/packages/apps/escrow-dashboard/src/components/Header/Header.tsx @@ -106,7 +106,15 @@ export const Header: FC = () => { } - sx={{ px: 5 }} + sx={{ + px: 5, + justifyContent: 'center', + alignItems: 'center', + '& .MuiAlert-action': { + marginLeft: 0, + paddingTop: 0, + }, + }} > Beta Dashboard: minor inaccuracies may be present From b808198af9ee24c869e8b5afedf60c22a12a963a Mon Sep 17 00:00:00 2001 From: CryptoRush <98655210+leric7@users.noreply.github.com> Date: Fri, 31 Mar 2023 08:54:32 -0400 Subject: [PATCH 06/22] Monorepo Cleanup (#362) * add dependency review workflow * setup rate limit to faucet server * upgrade ejs version --- .github/workflows/ci-dependency-review.yaml | 14 ++++++++++++++ package.json | 2 +- packages/apps/faucet-server/package.json | 3 ++- packages/apps/faucet-server/src/index.ts | 9 +++++++++ yarn.lock | 13 +++++++++---- 5 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/ci-dependency-review.yaml diff --git a/.github/workflows/ci-dependency-review.yaml b/.github/workflows/ci-dependency-review.yaml new file mode 100644 index 0000000000..24a35a06ad --- /dev/null +++ b/.github/workflows/ci-dependency-review.yaml @@ -0,0 +1,14 @@ +name: "Dependency Review" +on: [pull_request] + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: "Checkout Repository" + uses: actions/checkout@v3 + - name: "Dependency Review" + uses: actions/dependency-review-action@v3 diff --git a/package.json b/package.json index c3fd197879..1f6dc943e7 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "typescript": "^4.9.3" }, "resolutions": { - "ejs": "^3.0.0", + "ejs": "^3.1.8", "gluegun": "^5.0.0", "mocha": "^10.0.0", "node-fetch": "^2.6.7", diff --git a/packages/apps/faucet-server/package.json b/packages/apps/faucet-server/package.json index 93a5c9e85e..a24b706de6 100644 --- a/packages/apps/faucet-server/package.json +++ b/packages/apps/faucet-server/package.json @@ -13,12 +13,13 @@ "license": "ISC", "dependencies": { "@human-protocol/core": "workspace:*", - "@types/express": "^4.17.14", "@skaleproject/pow-ethers": "^0.2.4", + "@types/express": "^4.17.14", "axios": "^1.3.4", "body-parser": "^1.20.0", "cors": "^2.8.5", "express": "^4.18.1", + "express-rate-limit": "^6.7.0", "node-cache": "^5.1.2", "web3": "^1.8.0" } diff --git a/packages/apps/faucet-server/src/index.ts b/packages/apps/faucet-server/src/index.ts index 0e705e81d9..51ef58ece0 100644 --- a/packages/apps/faucet-server/src/index.ts +++ b/packages/apps/faucet-server/src/index.ts @@ -4,6 +4,7 @@ dotenv.config({ path: `.env.${process.env.NODE_ENV}` }); import bodyParser from 'body-parser'; import cors from 'cors'; import express, { Request, Response } from 'express'; +import RateLimit from 'express-rate-limit'; import NodeCache from 'node-cache'; import path from 'path'; import Web3 from 'web3'; @@ -25,6 +26,14 @@ app.use(bodyParser.urlencoded({ extended: false })); app.use(express.static(path.join(__dirname, '..', 'client', 'build'))); const port = process.env.APP_PORT; +// set up rate limiter: maximum of five requests per second +app.use( + RateLimit({ + windowMs: 1 * 1000, // 1 second + max: 5, + }) +); + // init cache const blockList = new NodeCache(); diff --git a/yarn.lock b/yarn.lock index 3b127bc62b..a18515f560 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9030,10 +9030,10 @@ eip1193-provider@1.0.1: dependencies: "@json-rpc-tools/provider" "^1.5.5" -ejs@3.1.6, ejs@^3.0.0, ejs@^3.1.6: - version "3.1.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== +ejs@3.1.6, ejs@^3.1.6, ejs@^3.1.8: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" @@ -10219,6 +10219,11 @@ explain-error@^1.0.4: resolved "https://registry.yarnpkg.com/explain-error/-/explain-error-1.0.4.tgz#a793d3ac0cad4c6ab571e9968fbbab6cb2532929" integrity sha512-/wSgNMxFusiYRy1rd19LT2SQlIXDppHpumpWo06wxjflD1OYxDLbl6rMVw+U3bxD5Nuhex4TKqv9Aem4D0lVzQ== +express-rate-limit@^6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-6.7.0.tgz#6aa8a1bd63dfe79702267b3af1161a93afc1d3c2" + integrity sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA== + express@^4.14.0, express@^4.17.3, express@^4.18.1: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" From 0c2a6bc15abaab8f313c2e97d8827aa9df9cfa0c Mon Sep 17 00:00:00 2001 From: CryptoRush <98655210+leric7@users.noreply.github.com> Date: Wed, 5 Apr 2023 03:21:20 -0400 Subject: [PATCH 07/22] migrate CRA to vite for fortune exchange (#363) * migrate CRA to vite for fortune exchange * clean up fortune package name and scripts * fix global tsconfig * fix dependency * fix fortune tests --- .../.dockerignore | 0 .../fortune/exchange-oracle/.env.development | 2 + .../fortune/exchange-oracle/.eslintrc.json | 67 + .../{exchange => exchange-oracle}/Dockerfile | 0 .../{exchange => exchange-oracle}/README.md | 0 .../fortune/exchange-oracle/index.html | 34 + .../fortune/exchange-oracle/package.json | 60 + .../exchange-oracle/public/favicon.ico | Bin 0 -> 4286 bytes .../exchange-oracle/public/manifest.json | 15 + .../public/robots.txt | 0 .../{exchange => exchange-oracle}/src/App.css | 0 .../fortune/exchange-oracle/src/App.test.tsx | 30 + .../{exchange => exchange-oracle}/src/App.tsx | 5 +- .../src/components/Escrow/Escrow.css | 0 .../src/components/Escrow/Escrow.test.tsx | 41 + .../src/components/Escrow/Escrow.tsx | 0 .../src/components/Escrow/index.ts | 1 + .../src/connectors/chains.ts | 0 .../src/connectors/connectors.ts | 32 +- .../src/index.css | 0 .../src/main.tsx} | 6 +- .../src/reportWebVitals.ts | 0 .../RecordingOracle/RecordingClient.ts | 0 .../fortune/exchange-oracle/src/vite-env.d.ts | 9 + .../fortune/exchange-oracle/tests/setup.ts | 11 + .../fortune/exchange-oracle/tests/utils.tsx | 184 + .../tsconfig.json | 19 +- .../fortune/exchange-oracle/vercel.json | 3 + .../fortune/exchange-oracle/vite.config.ts | 31 + .../fortune/exchange/.env.development | 3 - .../examples/fortune/exchange/babel.config.js | 7 - .../examples/fortune/exchange/jest.config.ts | 15 - .../examples/fortune/exchange/package.json | 56 - ...a5a2c4630f02618b72f7_human-favicon (1).png | Bin 1470 -> 0 bytes .../fortune/exchange/public/favicon.ico | Bin 101471 -> 0 bytes .../fortune/exchange/public/index.html | 43 - .../fortune/exchange/public/logo192.png | Bin 5347 -> 0 bytes .../fortune/exchange/public/logo512.png | Bin 9664 -> 0 bytes .../fortune/exchange/public/manifest.json | 25 - .../fortune/exchange/src/App.test.tsx | 9 - .../src/components/Escrow/Escrow.test.tsx | 23 - .../exchange/src/components/Escrow/index.ts | 1 - .../fortune/exchange/src/react-app-env.d.ts | 4 - .../fortune/exchange/src/setupTests.ts | 5 - .../fortune/launcher/client/package.json | 8 +- .../fortune/launcher/client/src/App.tsx | 1 + .../client/src/components/FiatJobRequest.tsx | 3 +- .../client/src/components/JobRequest.tsx | 6 +- .../fortune/launcher/server/package.json | 7 +- packages/examples/fortune/package.json | 39 +- .../fortune/recording-oracle/.eslintrc.json | 10 + .../fortune/recording-oracle/package.json | 3 +- .../fortune/reputation-oracle/.eslintrc.json | 10 + .../fortune/reputation-oracle/package.json | 8 +- tsconfig.json | 2 +- yarn.lock | 4417 +---------------- 56 files changed, 808 insertions(+), 4447 deletions(-) rename packages/examples/fortune/{exchange => exchange-oracle}/.dockerignore (100%) create mode 100644 packages/examples/fortune/exchange-oracle/.env.development create mode 100644 packages/examples/fortune/exchange-oracle/.eslintrc.json rename packages/examples/fortune/{exchange => exchange-oracle}/Dockerfile (100%) rename packages/examples/fortune/{exchange => exchange-oracle}/README.md (100%) create mode 100644 packages/examples/fortune/exchange-oracle/index.html create mode 100644 packages/examples/fortune/exchange-oracle/package.json create mode 100644 packages/examples/fortune/exchange-oracle/public/favicon.ico create mode 100644 packages/examples/fortune/exchange-oracle/public/manifest.json rename packages/examples/fortune/{exchange => exchange-oracle}/public/robots.txt (100%) rename packages/examples/fortune/{exchange => exchange-oracle}/src/App.css (100%) create mode 100644 packages/examples/fortune/exchange-oracle/src/App.test.tsx rename packages/examples/fortune/{exchange => exchange-oracle}/src/App.tsx (93%) rename packages/examples/fortune/{exchange => exchange-oracle}/src/components/Escrow/Escrow.css (100%) create mode 100644 packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.test.tsx rename packages/examples/fortune/{exchange => exchange-oracle}/src/components/Escrow/Escrow.tsx (100%) create mode 100644 packages/examples/fortune/exchange-oracle/src/components/Escrow/index.ts rename packages/examples/fortune/{exchange => exchange-oracle}/src/connectors/chains.ts (100%) rename packages/examples/fortune/{exchange => exchange-oracle}/src/connectors/connectors.ts (63%) rename packages/examples/fortune/{exchange => exchange-oracle}/src/index.css (100%) rename packages/examples/fortune/{exchange/src/index.tsx => exchange-oracle/src/main.tsx} (82%) rename packages/examples/fortune/{exchange => exchange-oracle}/src/reportWebVitals.ts (100%) rename packages/examples/fortune/{exchange => exchange-oracle}/src/services/RecordingOracle/RecordingClient.ts (100%) create mode 100644 packages/examples/fortune/exchange-oracle/src/vite-env.d.ts create mode 100644 packages/examples/fortune/exchange-oracle/tests/setup.ts create mode 100644 packages/examples/fortune/exchange-oracle/tests/utils.tsx rename packages/examples/fortune/{exchange => exchange-oracle}/tsconfig.json (60%) create mode 100644 packages/examples/fortune/exchange-oracle/vercel.json create mode 100644 packages/examples/fortune/exchange-oracle/vite.config.ts delete mode 100644 packages/examples/fortune/exchange/.env.development delete mode 100644 packages/examples/fortune/exchange/babel.config.js delete mode 100644 packages/examples/fortune/exchange/jest.config.ts delete mode 100644 packages/examples/fortune/exchange/package.json delete mode 100644 packages/examples/fortune/exchange/public/618ea5a2c4630f02618b72f7_human-favicon (1).png delete mode 100644 packages/examples/fortune/exchange/public/favicon.ico delete mode 100644 packages/examples/fortune/exchange/public/index.html delete mode 100644 packages/examples/fortune/exchange/public/logo192.png delete mode 100644 packages/examples/fortune/exchange/public/logo512.png delete mode 100644 packages/examples/fortune/exchange/public/manifest.json delete mode 100644 packages/examples/fortune/exchange/src/App.test.tsx delete mode 100644 packages/examples/fortune/exchange/src/components/Escrow/Escrow.test.tsx delete mode 100644 packages/examples/fortune/exchange/src/components/Escrow/index.ts delete mode 100644 packages/examples/fortune/exchange/src/react-app-env.d.ts delete mode 100644 packages/examples/fortune/exchange/src/setupTests.ts create mode 100644 packages/examples/fortune/recording-oracle/.eslintrc.json create mode 100644 packages/examples/fortune/reputation-oracle/.eslintrc.json diff --git a/packages/examples/fortune/exchange/.dockerignore b/packages/examples/fortune/exchange-oracle/.dockerignore similarity index 100% rename from packages/examples/fortune/exchange/.dockerignore rename to packages/examples/fortune/exchange-oracle/.dockerignore diff --git a/packages/examples/fortune/exchange-oracle/.env.development b/packages/examples/fortune/exchange-oracle/.env.development new file mode 100644 index 0000000000..ac976cd15e --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/.env.development @@ -0,0 +1,2 @@ +PUBLIC_URL=/ +VITE_APP_WALLETCONNECT_PROJECT_ID=68415bedd1597a33e8e83cc53e52071b diff --git a/packages/examples/fortune/exchange-oracle/.eslintrc.json b/packages/examples/fortune/exchange-oracle/.eslintrc.json new file mode 100644 index 0000000000..552eb871b6 --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/.eslintrc.json @@ -0,0 +1,67 @@ +{ + "extends": [ + "plugin:import/recommended", + "plugin:import/typescript", + "plugin:prettier/recommended", + "react-app" + ], + "settings": { + "import/resolver": { + "typescript": {}, + "node": { + "extensions": [".js", ".jsx", ".ts", ".tsx", ".d.ts"] + } + }, + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"] + } + }, + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module" + }, + "rules": { + "no-console": "warn", + "no-unused-vars": "off", + "import/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "ts": "never", + "tsx": "never" + } + ], + "import/order": [ + "error", + { + "pathGroups": [ + { + "pattern": "~/**", + "group": "external" + } + ], + "alphabetize": { + "order": "asc", + "caseInsensitive": true + } + } + ], + "@typescript-eslint/no-unused-vars": ["error"], + "prettier/prettier": ["error"] + }, + "overrides": [ + { + "files": ["*.ts", "*.tsx"], + "rules": { + "no-undef": "off" + } + } + ], + "env": { + "browser": true, + "jest": true, + "node": true + } +} diff --git a/packages/examples/fortune/exchange/Dockerfile b/packages/examples/fortune/exchange-oracle/Dockerfile similarity index 100% rename from packages/examples/fortune/exchange/Dockerfile rename to packages/examples/fortune/exchange-oracle/Dockerfile diff --git a/packages/examples/fortune/exchange/README.md b/packages/examples/fortune/exchange-oracle/README.md similarity index 100% rename from packages/examples/fortune/exchange/README.md rename to packages/examples/fortune/exchange-oracle/README.md diff --git a/packages/examples/fortune/exchange-oracle/index.html b/packages/examples/fortune/exchange-oracle/index.html new file mode 100644 index 0000000000..8a38d82a2b --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/index.html @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + Human Protocol Fortune Exchange Oracle + + +
+ + + diff --git a/packages/examples/fortune/exchange-oracle/package.json b/packages/examples/fortune/exchange-oracle/package.json new file mode 100644 index 0000000000..c482a31c5c --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/package.json @@ -0,0 +1,60 @@ +{ + "name": "@human-protocol/fortune-exchange-oracle", + "description": "Fortune Exchange Oracle", + "version": "1.0.0", + "license": "MIT", + "private": false, + "dependencies": { + "@human-protocol/core": "workspace:*", + "@web3modal/ethereum": "^2.2.1", + "@web3modal/react": "^2.2.1", + "@web3modal/ui": "^2.2.1", + "axios": "^1.1.3", + "ethers": "^5.7.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "wagmi": "^0.12.2", + "web-vitals": "^3.1.0", + "web3": "^1.8.1" + }, + "scripts": { + "lint": "eslint '**/*.{ts,tsx}'", + "start": "vite", + "build": "vite build", + "preview": "vite preview", + "start-prod": "serve -s dist", + "test": "vitest run -u", + "format:prettier": "prettier --write '**/*.{ts,tsx}'", + "format:lint": "eslint --fix '**/*.{ts,tsx}'", + "format": "npm run format:prettier && npm run format:lint" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^14.4.3", + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@types/react-test-renderer": "^18.0.0", + "@vitejs/plugin-react": "^3.1.0", + "eslint-config-react-app": "^7.0.1", + "eslint-import-resolver-typescript": "^3.5.4", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "react-test-renderer": "^18.2.0", + "vite": "^4.1.4", + "vitest": "^0.29.2" + } +} diff --git a/packages/examples/fortune/exchange-oracle/public/favicon.ico b/packages/examples/fortune/exchange-oracle/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..361e421bdc429eb1ffc5e17ad44800965a405bfb GIT binary patch literal 4286 zcmc&&X>3eU6n@k$#1cY6)DlZbh!8)-_CvIdkRU=Lii$PXihW-~wMY;&G$EFV`q5Uc zv9(2zRAVo(Z>_Bz`|fkTx$}C*Oz(Ryp&Yq=Gxwc2-`VfEEUTRSi;T4R*VPzYwv4X$dy%&dx8u&oW2W0K__dvj9=6V~}(x)75VB z7kyAmODX*mefazh@a;$G@9o|9pMh1Ghmmoq*xm|z{uJQLkAUUrK)2;UR3dPvFpRBa zgV>XI0v+b7=kaU6r>`Zi!#_uSXRsqm)0Z?hAT2yMe`UAzl4oTTxqj|TQT#LEr8 z(5G_A#^=+?pE_L~i)srH2gNr0R+G6F+{BNg9xr z3)C1B@Ri`Vnh895ZRU5w=PxI0*Y?v7qf>w%hGxC%EKp5y&epZlLg2;QKf|ZLOX4p! zu^x7x175zhE6gi{7i8V=dV_*#6~{y3y8PZ0=L1tB*BSX`j5{^LMXB zhwdwM94Oyj!8&n|dawsM)t#-2SNz=jK$}@Qw#1>$>~A$C-~ILnbfP|t&-QG9=cf~S z!Ds&VPSDtt&l;mYHlI-E;h+sbJ@y^3-S$DG)IM|4iM-(7mh(Pxy22-Ro$-*FMe<+t zvWc@qW**RXc95Q;3+vH|yx>1665j{pvj20ocqZpUDACn%+jOsDTn>m%PUHojb>3x( ziZSuq&jSid!6%N5&p6bRxgk5>30=?FPF!z4srWO;h~HZBkUj||_QYXZl>Nl#9KdE^kOcD?gs}|1!#?Fa|&l%W_ z7;nztJ*4J`$a&1397^mpD>8u2i-0M+fD1B8JHKEr=6?_TCnEMQJ!3J; literal 0 HcmV?d00001 diff --git a/packages/examples/fortune/exchange-oracle/public/manifest.json b/packages/examples/fortune/exchange-oracle/public/manifest.json new file mode 100644 index 0000000000..deae9bc034 --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "Fortune Exchange", + "name": "Fortune Exchange Oracle", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/packages/examples/fortune/exchange/public/robots.txt b/packages/examples/fortune/exchange-oracle/public/robots.txt similarity index 100% rename from packages/examples/fortune/exchange/public/robots.txt rename to packages/examples/fortune/exchange-oracle/public/robots.txt diff --git a/packages/examples/fortune/exchange/src/App.css b/packages/examples/fortune/exchange-oracle/src/App.css similarity index 100% rename from packages/examples/fortune/exchange/src/App.css rename to packages/examples/fortune/exchange-oracle/src/App.css diff --git a/packages/examples/fortune/exchange-oracle/src/App.test.tsx b/packages/examples/fortune/exchange-oracle/src/App.test.tsx new file mode 100644 index 0000000000..2dd642f0cd --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/src/App.test.tsx @@ -0,0 +1,30 @@ +import { render, screen } from '@testing-library/react'; +import { act } from 'react-test-renderer'; +import { MockConnector } from 'wagmi/connectors/mock'; + +import App from './App'; +import { Providers, setupClient, getSigners } from 'tests/utils'; + +test('renders correctly', async () => { + const client = setupClient({ + connectors: [ + new MockConnector({ + options: { + signer: getSigners()[0]!, + // Turn on `failConnect` flag to simulate connect failure + }, + }), + ], + }); + + await act(async () => { + render(, { + wrapper: ({ children }: { children: React.ReactNode }) => ( + {children} + ), + }); + }); + + const linkElement = screen.getByText(/Select Network/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/packages/examples/fortune/exchange/src/App.tsx b/packages/examples/fortune/exchange-oracle/src/App.tsx similarity index 93% rename from packages/examples/fortune/exchange/src/App.tsx rename to packages/examples/fortune/exchange-oracle/src/App.tsx index f0e4bc98f8..82838d8192 100644 --- a/packages/examples/fortune/exchange/src/App.tsx +++ b/packages/examples/fortune/exchange-oracle/src/App.tsx @@ -14,9 +14,10 @@ function App() { const { isConnected } = useAccount(); setTheme({ - themeColor: 'purple', themeMode: 'light', - themeBackground: 'themeColor', + themeVariables: { + '--w3m-accent-color': 'purple', + }, }); return ( diff --git a/packages/examples/fortune/exchange/src/components/Escrow/Escrow.css b/packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.css similarity index 100% rename from packages/examples/fortune/exchange/src/components/Escrow/Escrow.css rename to packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.css diff --git a/packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.test.tsx b/packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.test.tsx new file mode 100644 index 0000000000..ca855ea81e --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.test.tsx @@ -0,0 +1,41 @@ +import { screen, render } from '@testing-library/react'; +import { act, create } from 'react-test-renderer'; +import { MockConnector } from 'wagmi/connectors/mock'; + +import { Escrow } from './Escrow'; +import { Providers, setupClient, getSigners } from 'tests/utils'; + +describe('When rendered Escrow component', () => { + it('renders landing page', async () => { + const client = setupClient({ + connectors: [ + new MockConnector({ + options: { + signer: getSigners()[0]!, + // Turn on `failConnect` flag to simulate connect failure + }, + }), + ], + }); + await act(async () => { + render(, { + wrapper: ({ children }: { children: React.ReactNode }) => ( + {children} + ), + }); + }); + + expect(screen.getByTestId('escrowAddress')).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Confirm' })).toBeInTheDocument(); + expect( + screen.getByRole('button', { name: 'Send Fortune' }) + ).toBeInTheDocument(); + }); + + it('should match snapshot', () => { + const component = create(); + let tree = component.toJSON(); + expect(tree).toMatchSnapshot(); + return; + }); +}); diff --git a/packages/examples/fortune/exchange/src/components/Escrow/Escrow.tsx b/packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.tsx similarity index 100% rename from packages/examples/fortune/exchange/src/components/Escrow/Escrow.tsx rename to packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.tsx diff --git a/packages/examples/fortune/exchange-oracle/src/components/Escrow/index.ts b/packages/examples/fortune/exchange-oracle/src/components/Escrow/index.ts new file mode 100644 index 0000000000..e13d83d93f --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/src/components/Escrow/index.ts @@ -0,0 +1 @@ +export { Escrow } from './Escrow'; diff --git a/packages/examples/fortune/exchange/src/connectors/chains.ts b/packages/examples/fortune/exchange-oracle/src/connectors/chains.ts similarity index 100% rename from packages/examples/fortune/exchange/src/connectors/chains.ts rename to packages/examples/fortune/exchange-oracle/src/connectors/chains.ts diff --git a/packages/examples/fortune/exchange/src/connectors/connectors.ts b/packages/examples/fortune/exchange-oracle/src/connectors/connectors.ts similarity index 63% rename from packages/examples/fortune/exchange/src/connectors/connectors.ts rename to packages/examples/fortune/exchange-oracle/src/connectors/connectors.ts index 4efc885d7f..8b6e94e0e8 100644 --- a/packages/examples/fortune/exchange/src/connectors/connectors.ts +++ b/packages/examples/fortune/exchange-oracle/src/connectors/connectors.ts @@ -1,3 +1,9 @@ +import { + EthereumClient, + w3mConnectors, + w3mProvider, +} from '@web3modal/ethereum'; +import { configureChains, createClient } from 'wagmi'; import { goerli, mainnet, @@ -5,24 +11,18 @@ import { polygonMumbai, bsc, bscTestnet, - skaleHumanProtocol + skaleHumanProtocol, } from 'wagmi/chains'; -import { - EthereumClient, - modalConnectors, - walletConnectProvider, -} from '@web3modal/ethereum'; -import { configureChains, createClient } from 'wagmi'; import { fortune } from './chains'; // 1. Get projectID at https://cloud.walletconnect.com -if (!process.env.REACT_APP_WALLETCONNECT_PROJECT_ID) { +if (!import.meta.env.VITE_APP_WALLETCONNECT_PROJECT_ID) { const message = - 'You need to provide REACT_APP_WALLETCONNECT_PROJECT_ID env variable'; + 'You need to provide VITE_APP_WALLETCONNECT_PROJECT_ID env variable'; alert(message); throw new Error(message); } -export const projectId = process.env.REACT_APP_WALLETCONNECT_PROJECT_ID; +export const projectId = import.meta.env.VITE_APP_WALLETCONNECT_PROJECT_ID; // 2. Configure wagmi client const chains = [ @@ -35,17 +35,15 @@ const chains = [ bscTestnet, fortune, ]; -const { provider } = configureChains(chains, [ - walletConnectProvider({ projectId }), -]); + +const { provider } = configureChains(chains, [w3mProvider({ projectId })]); export const wagmiClient = createClient({ autoConnect: true, - connectors: modalConnectors({ - version: '2', - appName: 'web3Modal', - chains, + connectors: w3mConnectors({ projectId, + version: 1, + chains, }), provider, }); diff --git a/packages/examples/fortune/exchange/src/index.css b/packages/examples/fortune/exchange-oracle/src/index.css similarity index 100% rename from packages/examples/fortune/exchange/src/index.css rename to packages/examples/fortune/exchange-oracle/src/index.css diff --git a/packages/examples/fortune/exchange/src/index.tsx b/packages/examples/fortune/exchange-oracle/src/main.tsx similarity index 82% rename from packages/examples/fortune/exchange/src/index.tsx rename to packages/examples/fortune/exchange-oracle/src/main.tsx index 4945784961..a459027143 100644 --- a/packages/examples/fortune/exchange/src/index.tsx +++ b/packages/examples/fortune/exchange-oracle/src/main.tsx @@ -1,14 +1,12 @@ import React from 'react'; -import ReactDOM from 'react-dom/client'; +import { createRoot } from 'react-dom/client'; import { WagmiConfig } from 'wagmi'; import App from './App'; import { wagmiClient } from './connectors/connectors'; import './index.css'; import reportWebVitals from './reportWebVitals'; -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement -); +const root = createRoot(document.getElementById('root') as HTMLElement); root.render( diff --git a/packages/examples/fortune/exchange/src/reportWebVitals.ts b/packages/examples/fortune/exchange-oracle/src/reportWebVitals.ts similarity index 100% rename from packages/examples/fortune/exchange/src/reportWebVitals.ts rename to packages/examples/fortune/exchange-oracle/src/reportWebVitals.ts diff --git a/packages/examples/fortune/exchange/src/services/RecordingOracle/RecordingClient.ts b/packages/examples/fortune/exchange-oracle/src/services/RecordingOracle/RecordingClient.ts similarity index 100% rename from packages/examples/fortune/exchange/src/services/RecordingOracle/RecordingClient.ts rename to packages/examples/fortune/exchange-oracle/src/services/RecordingOracle/RecordingClient.ts diff --git a/packages/examples/fortune/exchange-oracle/src/vite-env.d.ts b/packages/examples/fortune/exchange-oracle/src/vite-env.d.ts new file mode 100644 index 0000000000..0cff76ce96 --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/src/vite-env.d.ts @@ -0,0 +1,9 @@ +/// + +interface ImportMetaEnv { + readonly VITE_APP_WALLETCONNECT_PROJECT_ID: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/packages/examples/fortune/exchange-oracle/tests/setup.ts b/packages/examples/fortune/exchange-oracle/tests/setup.ts new file mode 100644 index 0000000000..46c4b3754c --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/tests/setup.ts @@ -0,0 +1,11 @@ +import matchers from '@testing-library/jest-dom/matchers'; +import { cleanup } from '@testing-library/react'; +import { expect, afterEach } from 'vitest'; + +// extends Vitest's expect method with methods from react-testing-library +expect.extend(matchers); + +// runs a cleanup after each test case (e.g. clearing jsdom) +afterEach(() => { + cleanup(); +}); diff --git a/packages/examples/fortune/exchange-oracle/tests/utils.tsx b/packages/examples/fortune/exchange-oracle/tests/utils.tsx new file mode 100644 index 0000000000..f19bc52ff1 --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/tests/utils.tsx @@ -0,0 +1,184 @@ +import { Provider, WebSocketProvider } from '@wagmi/core'; +import { Wallet, providers } from 'ethers'; +import { + CreateClientConfig, + WagmiConfig, + WagmiConfigProps, + Chain, + createClient, +} from 'wagmi'; +import { foundry, goerli, mainnet, optimism, polygon } from 'wagmi/chains'; +import { MockConnector } from 'wagmi/connectors/mock'; + +type Config = Partial; +function getNetwork(chain: Chain) { + return { + chainId: chain.id, + ensAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + name: chain.name, + }; +} + +const foundryMainnet: Chain = { + ...mainnet, + rpcUrls: foundry.rpcUrls, +}; +const accounts = [ + { + privateKey: + '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356', + balance: '10000000000000000000000', + }, + { + privateKey: + '0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6', + balance: '10000000000000000000000', + }, + { + privateKey: + '0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82', + balance: '10000000000000000000000', + }, + { + privateKey: + '0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd', + balance: '10000000000000000000000', + }, + { + privateKey: + '0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61', + balance: '10000000000000000000000', + }, + { + privateKey: + '0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0', + balance: '10000000000000000000000', + }, + { + privateKey: + '0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd', + balance: '10000000000000000000000', + }, + { + privateKey: + '0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0', + balance: '10000000000000000000000', + }, + { + privateKey: + '0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e', + balance: '10000000000000000000000', + }, +]; +export class WalletSigner extends Wallet { + connectUnchecked(): providers.JsonRpcSigner { + const uncheckedSigner = ( + this.provider as EthersProviderWrapper + ).getUncheckedSigner(this.address); + return uncheckedSigner; + } +} +export function getSigners() { + const provider = getProvider(); + return accounts.map((x) => new WalletSigner(x.privateKey, provider)); +} +export const testChains = [foundryMainnet, mainnet, goerli, optimism, polygon]; + +class EthersProviderWrapper extends providers.StaticJsonRpcProvider { + toJSON() { + return ``; + } +} + +export function getProvider({ + chains = testChains, + chainId, +}: { chains?: Chain[]; chainId?: number } = {}) { + const chain = testChains.find((x) => x.id === chainId) ?? foundryMainnet; + const url = foundryMainnet.rpcUrls.default.http[0]; + const provider = new EthersProviderWrapper(url, getNetwork(chain)); + provider.pollingInterval = 1_000; + return Object.assign(provider, { chains }); +} + +export function setupClient(config: Config = {}) { + return createClient({ + connectors: [ + new MockConnector({ + options: { + signer: getSigners()[0]!, + }, + }), + ], + provider: ({ chainId }) => + getProvider({ chainId, chains: [mainnet, goerli] }), + ...config, + }); +} + +type ProvidersProps = { + children: React.ReactNode; + client?: WagmiConfigProps['client']; +}; + +export function Providers({ + children, + client = setupClient(), +}: ProvidersProps) { + return {children}; +} diff --git a/packages/examples/fortune/exchange/tsconfig.json b/packages/examples/fortune/exchange-oracle/tsconfig.json similarity index 60% rename from packages/examples/fortune/exchange/tsconfig.json rename to packages/examples/fortune/exchange-oracle/tsconfig.json index 5f579a803e..df9ed0dbbc 100644 --- a/packages/examples/fortune/exchange/tsconfig.json +++ b/packages/examples/fortune/exchange-oracle/tsconfig.json @@ -1,11 +1,8 @@ { + "extends": "../../../../tsconfig.json", "compilerOptions": { - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "target": "es6", + "lib": ["dom", "dom.iterable", "esnext", "es2015.promise"], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, @@ -15,13 +12,13 @@ "noFallthroughCasesInSwitch": true, "module": "esnext", "moduleResolution": "node", - "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "baseUrl": "." + "resolveJsonModule": true, + "downlevelIteration": true, + "baseUrl": ".", + "types": ["node", "jest", "@testing-library/jest-dom"] }, - "include": [ - "./src" - ] + "include": ["src", "tests"] } diff --git a/packages/examples/fortune/exchange-oracle/vercel.json b/packages/examples/fortune/exchange-oracle/vercel.json new file mode 100644 index 0000000000..0f32683a98 --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/vercel.json @@ -0,0 +1,3 @@ +{ + "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }] +} diff --git a/packages/examples/fortune/exchange-oracle/vite.config.ts b/packages/examples/fortune/exchange-oracle/vite.config.ts new file mode 100644 index 0000000000..0da24c7931 --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/vite.config.ts @@ -0,0 +1,31 @@ +/// +/// + +import path from 'path'; +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vite'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react({ fastRefresh: false })], + worker: { + plugins: [react()], + }, + resolve: { + alias: [{ find: 'src', replacement: path.resolve(__dirname, 'src') }], + }, + test: { + globals: true, + environment: 'happy-dom', + setupFiles: './tests/setup.ts', + coverage: { + reporter: ['text', 'json', 'html'], + }, + env: { + VITE_APP_WALLETCONNECT_PROJECT_ID: 'PROJECT_ID', + }, + }, + server: { + port: 3001, + }, +}); diff --git a/packages/examples/fortune/exchange/.env.development b/packages/examples/fortune/exchange/.env.development deleted file mode 100644 index 464dbe110d..0000000000 --- a/packages/examples/fortune/exchange/.env.development +++ /dev/null @@ -1,3 +0,0 @@ -PORT=3001 -PUBLIC_URL=/ -REACT_APP_WALLETCONNECT_PROJECT_ID=68415bedd1597a33e8e83cc53e52071b \ No newline at end of file diff --git a/packages/examples/fortune/exchange/babel.config.js b/packages/examples/fortune/exchange/babel.config.js deleted file mode 100644 index 18683739b4..0000000000 --- a/packages/examples/fortune/exchange/babel.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - presets: [ - '@babel/preset-env', - '@babel/preset-typescript', - '@babel/preset-react', - ], -}; diff --git a/packages/examples/fortune/exchange/jest.config.ts b/packages/examples/fortune/exchange/jest.config.ts deleted file mode 100644 index 223475a315..0000000000 --- a/packages/examples/fortune/exchange/jest.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { Config } from 'jest'; - -const config: Config = { - verbose: true, - testEnvironment: 'jsdom', - preset: 'ts-jest', - setupFilesAfterEnv: ['/src/setupTests.ts'], - moduleNameMapper: { - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': - '/src/__mocks__/fileMock.js', - '\\.(css|less|scss|sass)$': 'identity-obj-proxy', - }, -}; - -export default config; \ No newline at end of file diff --git a/packages/examples/fortune/exchange/package.json b/packages/examples/fortune/exchange/package.json deleted file mode 100644 index ca7caa5425..0000000000 --- a/packages/examples/fortune/exchange/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "exchange", - "version": "0.1.0", - "license": "MIT", - "private": false, - "dependencies": { - "@human-protocol/core": "workspace:*", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "@types/react": "^18.0.25", - "@types/react-dom": "^18.0.9", - "@web3modal/ethereum": "2.0.0", - "@web3modal/react": "2.0.0", - "axios": "^1.1.3", - "ethers": "^5.7.2", - "identity-obj-proxy": "^3.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-scripts": "^5.0.1", - "remove": "^0.1.5", - "wagmi": "^0.12.2", - "web-vitals": "^3.1.0", - "web3": "^1.8.1" - }, - "scripts": { - "start": "GENERATE_SOURCEMAP=false react-scripts start", - "start-prod": "serve -s build", - "build": "GENERATE_SOURCEMAP=false react-scripts build", - "test": "jest", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "devDependencies": { - "babel-jest": "^29.3.1", - "identity-obj-proxy": "^3.0.0", - "react-test-renderer": "^18.2.0" - } -} diff --git a/packages/examples/fortune/exchange/public/618ea5a2c4630f02618b72f7_human-favicon (1).png b/packages/examples/fortune/exchange/public/618ea5a2c4630f02618b72f7_human-favicon (1).png deleted file mode 100644 index 461335c356637b0256b6a9f55a64f89ad4ffab75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1470 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%&M6o5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8ATTyALtl;P~0NLHB1PYfIv)m$^~-ZX+Jd&nBa?mDf@=?1SJLrCVfvA$B>F! zN5ZYWnH>ennj0koKO1!RtF=aO3I(swNK)na$7sD(aO36xYwO@;-b<67G6((8*diwA zc=4Q*z!fI}okfOfLSO!fg>@9pFK^eY@iE$N{rm2jH)rHF>a2cd@1DE0N#N7t|5MJd zYJb6Ut8w#Ip~@+eNB*d|u@;VN-sbcmRK|JzY?dUMyAozEr|0ZTN$8H} z)Mh(BxAy?2nRSy7bG3uO47RjJv&OZPWSLGo$X_^HX?CQ5--U6$j%h^d6TYC>`P$Wt z_qK>WI_S85r%Tee8}C>p=JU;-TeNqLxQarVjF876KQ<2Orwn2jl8bqMh`Odv|JuWN za*yN!W(h;jLoF%Aw`PSm_#QDo&T;woAr=G86$_f(JUN;l|JZqO=KN#JiYINjc>1*F zg`<@*+oS%}%D7qzh`!h^x^%~ZEav>o zJOK?01pyO9fkFodktVg{o*g>ZIUR34s8dwAu%Pn(<6d!hxd|}}r)ROmShkft)>nRT zU8%w1@~xVTD#g$%T)%2(T>Zx2(c|=mN%B|i@pb8%bMJ2aCYCh!F6+7m*I%V9wPC9z e|9<@;l)$j?+AK9L=@V~2C90>ZpUXO@geCyGM-J}* diff --git a/packages/examples/fortune/exchange/public/favicon.ico b/packages/examples/fortune/exchange/public/favicon.ico deleted file mode 100644 index 56bf7a58b963a9edd8de21bbb1ab426098eaee2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101471 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 diff --git a/packages/examples/fortune/exchange/public/index.html b/packages/examples/fortune/exchange/public/index.html deleted file mode 100644 index aa069f27cb..0000000000 --- a/packages/examples/fortune/exchange/public/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - React App - - - -
- - - diff --git a/packages/examples/fortune/exchange/public/logo192.png b/packages/examples/fortune/exchange/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/packages/examples/fortune/exchange/public/manifest.json b/packages/examples/fortune/exchange/public/manifest.json deleted file mode 100644 index 080d6c77ac..0000000000 --- a/packages/examples/fortune/exchange/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/packages/examples/fortune/exchange/src/App.test.tsx b/packages/examples/fortune/exchange/src/App.test.tsx deleted file mode 100644 index 8b78689393..0000000000 --- a/packages/examples/fortune/exchange/src/App.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders metamask', () => { - render(); - const linkElement = screen.getByText(/Metamask not installed/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/packages/examples/fortune/exchange/src/components/Escrow/Escrow.test.tsx b/packages/examples/fortune/exchange/src/components/Escrow/Escrow.test.tsx deleted file mode 100644 index 8afd4bb6be..0000000000 --- a/packages/examples/fortune/exchange/src/components/Escrow/Escrow.test.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import renderer from 'react-test-renderer'; -import { screen, render } from '@testing-library/react'; -import { Escrow } from './Escrow'; - -describe('When rendered Escrow component', () => { - - it('renders landing page', async () => { - render(); - expect(screen.getByTestId("escrowAddress")).toBeInTheDocument(); - expect(screen.getByRole("button", { name: "Confirm" })).toBeInTheDocument(); - expect(screen.getByRole("button", { name: "Send Fortune" })).toBeInTheDocument(); - }); - - - it('should match snapshot', () => { - const component = renderer.create( - - ); - let tree = component.toJSON(); - expect(tree).toMatchSnapshot(); - return; - }); -}); \ No newline at end of file diff --git a/packages/examples/fortune/exchange/src/components/Escrow/index.ts b/packages/examples/fortune/exchange/src/components/Escrow/index.ts deleted file mode 100644 index 40fdc139e5..0000000000 --- a/packages/examples/fortune/exchange/src/components/Escrow/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Escrow } from './Escrow'; \ No newline at end of file diff --git a/packages/examples/fortune/exchange/src/react-app-env.d.ts b/packages/examples/fortune/exchange/src/react-app-env.d.ts deleted file mode 100644 index 4f3b2f0ff4..0000000000 --- a/packages/examples/fortune/exchange/src/react-app-env.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -interface Window { - ethereum: any -} \ No newline at end of file diff --git a/packages/examples/fortune/exchange/src/setupTests.ts b/packages/examples/fortune/exchange/src/setupTests.ts deleted file mode 100644 index 8f2609b7b3..0000000000 --- a/packages/examples/fortune/exchange/src/setupTests.ts +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/packages/examples/fortune/launcher/client/package.json b/packages/examples/fortune/launcher/client/package.json index 91c2839e4f..a7d451d574 100644 --- a/packages/examples/fortune/launcher/client/package.json +++ b/packages/examples/fortune/launcher/client/package.json @@ -1,7 +1,7 @@ { - "name": "@human-protocol/job-launcher-client", - "version": "0.1.0", - "private": true, + "name": "@human-protocol/fortune-job-launcher-client", + "version": "1.0.0", + "description": "Fortune Job Launcher Client", "dependencies": { "@emotion/react": "^11.10.5", "@emotion/styled": "^11.10.5", @@ -23,7 +23,7 @@ "build": "vite build", "preview": "vite preview", "start-prod": "serve -s build", - "test": "vitest run", + "test": "vitest run -u", "format:prettier": "prettier --write \"**/*.{ts,tsx}\"", "format:lint": "eslint --fix \"**/*.{ts,tsx}\"", "format": "npm run format:prettier && npm run format:lint" diff --git a/packages/examples/fortune/launcher/client/src/App.tsx b/packages/examples/fortune/launcher/client/src/App.tsx index a7b29fdc08..f07270b993 100644 --- a/packages/examples/fortune/launcher/client/src/App.tsx +++ b/packages/examples/fortune/launcher/client/src/App.tsx @@ -73,6 +73,7 @@ function App() { useEffect(() => { fetchLastEscrow(ESCROW_NETWORKS[chainId as ChainId]?.factoryAddress); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [chainId, signer]); return ( diff --git a/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx b/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx index 8c3880c4ec..c99fa08684 100644 --- a/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx +++ b/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx @@ -166,8 +166,7 @@ export const JobRequest = ({ data.paymentId = paymentIntent?.id; const result = await axios.post(`${baseUrl}/escrow`, data); onSuccess(result.data); - } catch (err: any) { - console.error(err); + } catch (err) { if (err.name === 'AxiosError') onFail(err.response.data); else onFail(err.message); } diff --git a/packages/examples/fortune/launcher/client/src/components/JobRequest.tsx b/packages/examples/fortune/launcher/client/src/components/JobRequest.tsx index 23bfb01f0b..530def3ed5 100644 --- a/packages/examples/fortune/launcher/client/src/components/JobRequest.tsx +++ b/packages/examples/fortune/launcher/client/src/components/JobRequest.tsx @@ -112,15 +112,13 @@ export const JobRequest = ({ if (allowance.lt(fundAmount)) { const tx = await contract.approve(jobLauncherAddress, fundAmount); - const receipt = await tx.wait(); - console.log(receipt); + await tx.wait(); } onLaunch(); const result = await axios.post(`${baseUrl}/escrow`, data); onSuccess(result.data); - } catch (err: any) { - console.log(err); + } catch (err) { if (err.name === 'AxiosError') onFail(err.response.data); else onFail(err.message); } diff --git a/packages/examples/fortune/launcher/server/package.json b/packages/examples/fortune/launcher/server/package.json index d1a1d2a099..b8b96a1364 100644 --- a/packages/examples/fortune/launcher/server/package.json +++ b/packages/examples/fortune/launcher/server/package.json @@ -1,7 +1,7 @@ { - "name": "@human-protocol/job-launcher-server", + "name": "@human-protocol/fortune-job-launcher-server", "version": "1.0.0", - "description": "Job Launcher Server", + "description": "Fortune Job Launcher Server", "main": "index.ts", "license": "MIT", "private": false, @@ -25,6 +25,7 @@ "build": "tsc", "start:prod": "ts-node build/src/index.js", "start": "NODE_ENV=development ts-node ./src/index.ts", - "test": "concurrently -k -s first --hide 0 \"hardhat node --port 8546\" \"sleep 5 && RPC_PORT=8546 yarn workspace @human-protocol/core deploy:local && RPC_PORT=8546 vitest --run\"" + "test": "concurrently -k -s first --hide 0 \"hardhat node --port 8546\" \"sleep 5 && RPC_PORT=8546 yarn workspace @human-protocol/core deploy:local && RPC_PORT=8546 vitest --run\"", + "lint": "eslint '**/*.ts'" } } diff --git a/packages/examples/fortune/package.json b/packages/examples/fortune/package.json index e2d2524284..f71cab1969 100644 --- a/packages/examples/fortune/package.json +++ b/packages/examples/fortune/package.json @@ -5,24 +5,29 @@ "description": "Human Protocol Fortune Exchange Oracle", "license": "MIT", "scripts": { - "exchange": "cd exchange && yarn && yarn start", - "recording-oracle": "cd recording-oracle && yarn start", - "reputation-oracle": "cd reputation-oracle && yarn start", - "launcher-server": "cd launcher/server && yarn start", - "launcher-client": "cd launcher/client && yarn start", - "minio": "docker compose --env-file=.env.development up -d minio-mc", + "start:exchange-oracle": "yarn workspace @human-protocol/fortune-exchange-oracle start", + "start:recording-oracle": "yarn workspace @human-protocol/fortune-recording-oracle start", + "start:reputation-oracle": "yarn workspace @human-protocol/fortune-reputation-oracle start", + "start:launcher-server": "yarn workspace @human-protocol/fortune-job-launcher-server start", + "start:launcher-client": "yarn workspace @human-protocol/fortune-job-launcher-client start", + "start:minio": "docker compose --env-file=.env.development up -d minio-mc", "deploy:contracts": "yarn workspace @human-protocol/core install && yarn workspace @human-protocol/core deploy:local && ts-node setupAccounts.ts", - "local": "docker compose down && (concurrently --hide 0 \"hardhat node\" \"yarn deploy:contracts\" \"yarn launcher-server\" \"yarn launcher-client\" \"yarn exchange\" \"yarn recording-oracle\" \"yarn reputation-oracle\" \"yarn minio\")", - "local:test": "docker compose down && (concurrently --hide 0 \"hardhat node\" \"yarn recording-oracle\" \"yarn reputation-oracle\" \"yarn minio\")", - "test:launcher-server": "yarn workspace @human-protocol/job-launcher-server test", - "test:exchange": "cd exchange && yarn test", - "test:recording": "yarn workspace @human-protocol/fortune-recording-oracle test", - "test:reputation": "cd reputation-oracle && yarn test", - "test:e2e": "(concurrently -k -s first -g --hide 0 \"yarn local:test\" \"sleep 5 && yarn deploy:contracts && jest tests/e2e-backend --runInBand\") && docker compose down", - "test:unit": "(concurrently -g \"yarn test:launcher-server\" \"yarn test:recording\" \"yarn test:reputation\") && docker compose down", - "test": "concurrently -g \"yarn minio\" \"yarn test:unit\"", - "lint": "eslint .", - "lint:fix": "eslint . --fix" + "start:local": "docker compose down && (concurrently --hide 0 \"hardhat node\" \"yarn deploy:contracts\" \"yarn start:launcher-server\" \"yarn start:launcher-client\" \"yarn start:exchange-oracle\" \"yarn start:recording-oracle\" \"yarn start:reputation-oracle\" \"yarn start:minio\")", + "start:backend": "docker compose down && (concurrently --hide 0 \"hardhat node\" \"yarn start:recording-oracle\" \"yarn start:reputation-oracle\" \"yarn start:minio\")", + "test:exchange-oracle": "yarn workspace @human-protocol/fortune-exchange-oracle test", + "test:recording-oracle": "yarn workspace @human-protocol/fortune-recording-oracle test", + "test:reputation-oracle": "yarn workspace @human-protocol/fortune-reputation-oracle test", + "test:launcher-server": "yarn workspace @human-protocol/fortune-job-launcher-server test", + "test:launcher-client": "yarn workspace @human-protocol/fortune-job-launcher-client test", + "test:e2e:backend": "(concurrently -k -s first -g --hide 0 \"yarn start:backend\" \"sleep 5 && yarn deploy:contracts && jest tests/e2e-backend --runInBand\") && docker compose down", + "test:unit": "(concurrently -g \"yarn test:exchange-oracle\" \"yarn test:recording-oracle\" \"yarn test:reputation-oracle\" \"yarn test:launcher-server\" \"yarn test:launcher-client\") && docker compose down", + "test": "concurrently -g \"yarn start:minio\" \"yarn test:unit\"", + "lint:exchange-oracle": "yarn workspace @human-protocol/fortune-exchange-oracle lint", + "lint:recording-oracle": "yarn workspace @human-protocol/fortune-recording-oracle lint", + "lint:reputation-oracle": "yarn workspace @human-protocol/fortune-reputation-oracle lint", + "lint:launcher-server": "yarn workspace @human-protocol/fortune-job-launcher-server lint", + "lint:launcher-client": "yarn workspace @human-protocol/fortune-job-launcher-client lint", + "lint": "concurrently -g \"yarn lint:exchange-oracle\" \"yarn lint:recording-oracle\" \"yarn lint:reputation-oracle\" \"yarn lint:launcher-server\" \"yarn lint:launcher-client\"" }, "devDependencies": { "@human-protocol/core": "workspace:*", diff --git a/packages/examples/fortune/recording-oracle/.eslintrc.json b/packages/examples/fortune/recording-oracle/.eslintrc.json new file mode 100644 index 0000000000..adffb2cae3 --- /dev/null +++ b/packages/examples/fortune/recording-oracle/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "overrides": [ + { + "files": ["*.test.ts"], + "rules": { + "jest/valid-describe-callback": "off" + } + } + ] +} diff --git a/packages/examples/fortune/recording-oracle/package.json b/packages/examples/fortune/recording-oracle/package.json index 7ff7cdff7a..7524528740 100644 --- a/packages/examples/fortune/recording-oracle/package.json +++ b/packages/examples/fortune/recording-oracle/package.json @@ -6,8 +6,7 @@ "author": "human-protocol", "license": "MIT", "scripts": { - "lint": "eslint .", - "lint:fix": "eslint . --fix", + "lint": "eslint '**/*.ts'", "build": "tsc", "start:prod": "ts-node build/src/index.js", "start": "NODE_ENV=development ts-node ./src/index.ts", diff --git a/packages/examples/fortune/reputation-oracle/.eslintrc.json b/packages/examples/fortune/reputation-oracle/.eslintrc.json new file mode 100644 index 0000000000..adffb2cae3 --- /dev/null +++ b/packages/examples/fortune/reputation-oracle/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "overrides": [ + { + "files": ["*.test.ts"], + "rules": { + "jest/valid-describe-callback": "off" + } + } + ] +} diff --git a/packages/examples/fortune/reputation-oracle/package.json b/packages/examples/fortune/reputation-oracle/package.json index 8b9bd84126..c1cbce7a70 100644 --- a/packages/examples/fortune/reputation-oracle/package.json +++ b/packages/examples/fortune/reputation-oracle/package.json @@ -1,11 +1,10 @@ { - "name": "reputation-oracle", + "name": "@human-protocol/fortune-reputation-oracle", "version": "1.0.0", - "description": "fortune reputation oracle", + "description": "Fortune Reputation Oracle", "main": "index.ts", "author": "human-protocol", "license": "MIT", - "private": false, "devDependencies": { "@types/body-parser": "^1.19.2", "@types/cors": "^2.8.12", @@ -22,6 +21,7 @@ "build": "tsc", "start:prod": "ts-node build/src/index.js", "start": "ts-node src/index.ts", - "test": "concurrently -k -s first --hide 0 \"hardhat node --port 8548\" \"jest\"" + "test": "concurrently -k -s first --hide 0 \"hardhat node --port 8548\" \"jest\"", + "lint": "eslint '**/*.ts'" } } diff --git a/tsconfig.json b/tsconfig.json index 9354480bc6..0ff8c83337 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,7 +6,7 @@ "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, - "types": ["node"], + "types": ["node", "jest"], "resolveJsonModule": true } } diff --git a/yarn.lock b/yarn.lock index a18515f560..017e6c02bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,15 +15,6 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@apideck/better-ajv-errors@^0.3.1": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" - integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== - dependencies: - json-schema "^0.4.0" - jsonpointer "^5.0.0" - leven "^3.1.0" - "@ardatan/sync-fetch@^0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz#3385d3feedceb60a896518a1db857ec1e945348f" @@ -43,7 +34,7 @@ dependencies: tslib "^2.3.1" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== @@ -55,7 +46,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298" integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.20.12", "@babel/core@^7.20.2", "@babel/core@^7.7.2", "@babel/core@^7.8.0": +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.20.12", "@babel/core@^7.20.2": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13" integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== @@ -189,7 +180,7 @@ dependencies: "@babel/types" "^7.21.0" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== @@ -809,13 +800,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz#3f02c784e0b711970d7d8ccc96c4359d64e27ac7" - integrity sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" @@ -950,7 +934,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.20.2": +"@babel/preset-env@^7.16.4", "@babel/preset-env@^7.20.2": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506" integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== @@ -1042,7 +1026,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0", "@babel/preset-react@^7.18.6": +"@babel/preset-react@^7.16.0", "@babel/preset-react@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== @@ -1068,7 +1052,7 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== @@ -1100,7 +1084,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.16.8", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.16.8", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.21.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw== @@ -1159,117 +1143,6 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@csstools/normalize.css@*": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4" - integrity sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg== - -"@csstools/postcss-cascade-layers@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz#8a997edf97d34071dd2e37ea6022447dd9e795ad" - integrity sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA== - dependencies: - "@csstools/selector-specificity" "^2.0.2" - postcss-selector-parser "^6.0.10" - -"@csstools/postcss-color-function@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b" - integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-font-format-keywords@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a" - integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-hwb-function@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b" - integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-ic-unit@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58" - integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-is-pseudo-class@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1" - integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA== - dependencies: - "@csstools/selector-specificity" "^2.0.0" - postcss-selector-parser "^6.0.10" - -"@csstools/postcss-nested-calc@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz#d7e9d1d0d3d15cf5ac891b16028af2a1044d0c26" - integrity sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-normalize-display-values@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3" - integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844" - integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa" - integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-stepped-value-functions@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4" - integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-text-decoration-shorthand@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz#ea96cfbc87d921eca914d3ad29340d9bcc4c953f" - integrity sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-trigonometric-functions@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756" - integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-unset-value@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77" - integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g== - -"@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz#c9c61d9fe5ca5ac664e1153bb0aa0eba1c6d6308" - integrity sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw== - "@dabh/diagnostics@^2.0.2": version "2.0.3" resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" @@ -2421,30 +2294,6 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - -"@jest/console@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" - integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== - dependencies: - "@jest/types" "^28.1.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - slash "^3.0.0" - "@jest/console@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.5.0.tgz#593a6c5c0d3f75689835f1b3b4688c4f8544cb57" @@ -2457,40 +2306,6 @@ jest-util "^29.5.0" slash "^3.0.0" -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" - micromatch "^4.0.4" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - "@jest/core@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.5.0.tgz#76674b96904484e8214614d17261cc491e5f1f03" @@ -2525,16 +2340,6 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== - dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - "@jest/environment@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.5.0.tgz#9152d56317c1fdb1af389c46640ba74ef0bb4c65" @@ -2560,18 +2365,6 @@ expect "^29.5.0" jest-snapshot "^29.5.0" -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== - dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" - "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" - "@jest/fake-timers@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.5.0.tgz#d4d09ec3286b3d90c60bdcd66ed28d35f1b4dc2c" @@ -2584,15 +2377,6 @@ jest-mock "^29.5.0" jest-util "^29.5.0" -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" - "@jest/globals@^29.3.1", "@jest/globals@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.5.0.tgz#6166c0bfc374c58268677539d0c181f9c1833298" @@ -2603,37 +2387,6 @@ "@jest/types" "^29.5.0" jest-mock "^29.5.0" -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" - "@jest/reporters@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.5.0.tgz#985dfd91290cd78ddae4914ba7921bcbabe8ac9b" @@ -2664,13 +2417,6 @@ strip-ansi "^6.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" - integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== - dependencies: - "@sinclair/typebox" "^0.24.1" - "@jest/schemas@^29.4.3": version "29.4.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" @@ -2678,15 +2424,6 @@ dependencies: "@sinclair/typebox" "^0.25.16" -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.9" - source-map "^0.6.0" - "@jest/source-map@^29.4.3": version "29.4.3" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" @@ -2696,26 +2433,6 @@ callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== - dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-result@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" - integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== - dependencies: - "@jest/console" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - "@jest/test-result@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.5.0.tgz#7c856a6ca84f45cc36926a4e9c6b57f1973f1408" @@ -2726,16 +2443,6 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== - dependencies: - "@jest/test-result" "^27.5.1" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" - "@jest/test-sequencer@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz#34d7d82d3081abd523dbddc038a3ddcb9f6d3cc4" @@ -2746,27 +2453,6 @@ jest-haste-map "^29.5.0" slash "^3.0.0" -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - "@jest/transform@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.5.0.tgz#cf9c872d0965f0cbd32f1458aa44a2b1988b00f9" @@ -2788,29 +2474,6 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - -"@jest/types@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" - integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== - dependencies: - "@jest/schemas" "^28.1.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - "@jest/types@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" @@ -2831,7 +2494,7 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": +"@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== @@ -2850,14 +2513,6 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" @@ -2914,11 +2569,6 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/connect-kit-loader/-/connect-kit-loader-1.0.2.tgz#8554e16943f86cc2a5f6348a14dfe6e5bd0c572a" integrity sha512-TQ21IjcZOw/scqypaVFY3jHVqI7X7Hta3qN/us6FvTol3AY06UmrhhXGww0E9xHmAbdX241ddwXEiMBSQZFr9g== -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== - "@lit-labs/ssr-dom-shim@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.0.0.tgz#427e19a2765681fd83411cd72c55ba80a01e0523" @@ -3487,21 +3137,6 @@ tiny-glob "^0.2.9" tslib "^2.4.0" -"@pmmmwh/react-refresh-webpack-plugin@^0.5.3": - version "0.5.10" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz#2eba163b8e7dbabb4ce3609ab5e32ab63dda3ef8" - integrity sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA== - dependencies: - ansi-html-community "^0.0.8" - common-path-prefix "^3.0.0" - core-js-pure "^3.23.3" - error-stack-parser "^2.0.6" - find-up "^5.0.0" - html-entities "^2.1.0" - loader-utils "^2.0.4" - schema-utils "^3.0.0" - source-map "^0.7.3" - "@popperjs/core@^2.11.6": version "2.11.6" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" @@ -3585,14 +3220,6 @@ resolved "https://registry.yarnpkg.com/@rescript/std/-/std-9.0.0.tgz#df53f3fa5911cb4e85bd66b92e9e58ddf3e4a7e1" integrity sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ== -"@rollup/plugin-babel@^5.2.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - "@rollup/plugin-inject@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-5.0.3.tgz#0783711efd93a9547d52971db73b2fb6140a67b1" @@ -3602,35 +3229,6 @@ estree-walker "^2.0.2" magic-string "^0.27.0" -"@rollup/plugin-node-resolve@^11.2.1": - version "11.2.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" - integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/plugin-replace@^2.4.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" - integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - magic-string "^0.25.7" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - "@rollup/pluginutils@^5.0.1": version "5.0.2" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" @@ -3771,11 +3369,6 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d" integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg== -"@sinclair/typebox@^0.24.1": - version "0.24.51" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" - integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== - "@sinclair/typebox@^0.25.16", "@sinclair/typebox@^0.25.21": version "0.25.24" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" @@ -3786,13 +3379,6 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== - dependencies: - type-detect "4.0.8" - "@sinonjs/commons@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" @@ -3807,13 +3393,6 @@ dependencies: "@sinonjs/commons" "^2.0.0" -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== - dependencies: - "@sinonjs/commons" "^1.7.0" - "@skaleproject/pow-ethers@^0.2.4": version "0.2.4" resolved "https://registry.yarnpkg.com/@skaleproject/pow-ethers/-/pow-ethers-0.2.4.tgz#8fcdd7ee4d2e389916804d7c6d077511f086a77d" @@ -4017,119 +3596,6 @@ resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.48.0.tgz#53d07ebc32da03ee3d76eb6aebf4447c160807fd" integrity sha512-Kw2BRXk6z/wnTU9m2IJOhxJNrx9xzmpFSbk6D/Z0x6LJntMafiHeHFag2PvSF30O2quMb1UUdWsnZqGVDruZww== -"@surma/rollup-plugin-off-main-thread@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" - integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== - dependencies: - ejs "^3.1.6" - json5 "^2.2.0" - magic-string "^0.25.0" - string.prototype.matchall "^4.0.6" - -"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" - integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== - -"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" - integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== - -"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" - integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== - -"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" - integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== - -"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" - integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== - -"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" - integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== - -"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" - integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== - -"@svgr/babel-plugin-transform-svg-component@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" - integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== - -"@svgr/babel-preset@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" - integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" - "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" - "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" - "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" - "@svgr/babel-plugin-transform-svg-component" "^5.5.0" - -"@svgr/core@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" - integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== - dependencies: - "@svgr/plugin-jsx" "^5.5.0" - camelcase "^6.2.0" - cosmiconfig "^7.0.0" - -"@svgr/hast-util-to-babel-ast@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" - integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== - dependencies: - "@babel/types" "^7.12.6" - -"@svgr/plugin-jsx@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" - integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== - dependencies: - "@babel/core" "^7.12.3" - "@svgr/babel-preset" "^5.5.0" - "@svgr/hast-util-to-babel-ast" "^5.5.0" - svg-parser "^2.0.2" - -"@svgr/plugin-svgo@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" - integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== - dependencies: - cosmiconfig "^7.0.0" - deepmerge "^4.2.2" - svgo "^1.2.2" - -"@svgr/webpack@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" - integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== - dependencies: - "@babel/core" "^7.12.3" - "@babel/plugin-transform-react-constant-elements" "^7.12.1" - "@babel/preset-env" "^7.12.1" - "@babel/preset-react" "^7.12.5" - "@svgr/core" "^5.5.0" - "@svgr/plugin-jsx" "^5.5.0" - "@svgr/plugin-svgo" "^5.5.0" - loader-utils "^2.0.0" - "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" @@ -4260,21 +3726,11 @@ resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591" integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -4320,7 +3776,7 @@ resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": +"@types/babel__core@^7.1.14": version "7.20.0" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== @@ -4346,7 +3802,7 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.18.3" resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== @@ -4375,13 +3831,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== - dependencies: - "@types/node" "*" - "@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": version "6.0.3" resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" @@ -4418,14 +3867,6 @@ dependencies: "@types/node" "*" -"@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - "@types/connect@*", "@types/connect@^3.4.33": version "3.4.35" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" @@ -4491,38 +3932,12 @@ resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.0.tgz#e2505f1c21ec08bda8915238e397fb71d2fc54ce" integrity sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g== -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": - version "8.21.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.21.1.tgz#110b441a210d53ab47795124dbc3e9bb993d1e7c" - integrity sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": +"@types/estree@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33", "@types/express-serve-static-core@^4.17.9": +"@types/express-serve-static-core@^4.17.33", "@types/express-serve-static-core@^4.17.9": version "4.17.33" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== @@ -4531,7 +3946,7 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.14": +"@types/express@^4.17.14": version "4.17.17" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== @@ -4556,7 +3971,7 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": +"@types/graceful-fs@^4.1.3": version "4.1.6" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== @@ -4571,23 +3986,11 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - "@types/http-cache-semantics@*": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== -"@types/http-proxy@^1.17.8": - version "1.17.10" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.10.tgz#e576c8e4a0cc5c6a138819025a88e167ebb38d6c" - integrity sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g== - dependencies: - "@types/node" "*" - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -4624,7 +4027,7 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.11", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -4740,11 +4143,6 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== - "@types/qs@*", "@types/qs@^6.2.31", "@types/qs@^6.9.7": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -4792,13 +4190,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - "@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" @@ -4828,14 +4219,7 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": +"@types/serve-static@*": version "1.15.1" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== @@ -4843,13 +4227,6 @@ "@types/mime" "*" "@types/node" "*" -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== - dependencies: - "@types/node" "*" - "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -4894,7 +4271,7 @@ dependencies: "@types/node" "*" -"@types/ws@^8.0.0", "@types/ws@^8.5.1": +"@types/ws@^8.0.0": version "8.5.4" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== @@ -4906,13 +4283,6 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== -"@types/yargs@^16.0.0": - version "16.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" - integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^17.0.8": version "17.0.22" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" @@ -5502,14 +4872,6 @@ resolved "https://registry.yarnpkg.com/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz#6b69dc2a32a5b207ba43e556c25cc136a56659c4" integrity sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw== -"@web3modal/core@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@web3modal/core/-/core-2.0.0.tgz#151bc60702fb5e8367a06a97a8fe39a81226409d" - integrity sha512-ZoM3U5DndBAVnnkBJ3hIkOKO81VtWfyda458D1vdN/T6q8IoWzWZR5QHZNc1qNKqm7ecXfEpsPj2YMS3bgOY2A== - dependencies: - buffer "6.0.3" - valtio "1.9.0" - "@web3modal/core@2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@web3modal/core/-/core-2.2.1.tgz#290be7e0da628afc7651e552752fa8c1ee22d956" @@ -5518,18 +4880,35 @@ buffer "6.0.3" valtio "1.10.3" -"@web3modal/ethereum@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@web3modal/ethereum/-/ethereum-2.0.0.tgz#d8e14c1857447c673567519aac5487b88cfc384d" - integrity sha512-Zz+/3Q/1ovZXXKVGbWzdtoZt8X6YD42km4J8L3tPNkkBJZlj0I/xERLeeJg/w4BDcbDmOQ4qqT1TXZ37ol1D0w== - -"@web3modal/react@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@web3modal/react/-/react-2.0.0.tgz#5100eda2ad80ae875ab41c1ebdda80e02a0d2991" - integrity sha512-tpzfywUmibfr7lquLBSmD8AFIHoqqpeOHlYWIM8gIk801IkbnFa8h6chghCwEtL8xq/ihNrV0v/+5+gj+wLs8Q== +"@web3modal/core@2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@web3modal/core/-/core-2.2.2.tgz#1e282dc45bddb11c04f1c93abce570bac1b9a620" + integrity sha512-RKbYNIEVP5Hwiva68PWXExbkTFLUTasneyRpcjoQSM4BIh78qXp1YMt0nyTvFdHmHQEGxXEMCuRG5qoE97uMHA== dependencies: - "@web3modal/core" "2.0.0" - "@web3modal/ui" "2.0.0" + buffer "6.0.3" + valtio "1.10.3" + +"@web3modal/ethereum@^2.2.1": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@web3modal/ethereum/-/ethereum-2.2.2.tgz#aad8957deb4db4a3224b9e7bac538f1995bb5bcf" + integrity sha512-ksyGQsyK4pMU2Z83zZNo7HKPmjWkhcfK6K4ip+w3R/Rstcpqy/kHW/DUClXY76itu323EdesV6gBzASZ3CwBdQ== + +"@web3modal/react@^2.2.1": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@web3modal/react/-/react-2.2.2.tgz#2ff0f6b03e3824b3c46e27aeb183caca84d6a7a5" + integrity sha512-NgMbRaF4XP6uzLsB935bQtjXgGEUoAM5ywXo6tVMdhmfQarEUyqxoG+H1HM2GLndMDSxJqMjVNoYXo3ibQUvVw== + dependencies: + "@web3modal/core" "2.2.2" + "@web3modal/standalone" "2.2.2" + "@web3modal/ui" "2.2.2" + +"@web3modal/standalone@2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@web3modal/standalone/-/standalone-2.2.2.tgz#2d5ce74bbb7f112b31da32049620afa75c4a4686" + integrity sha512-c05kkTFNGZqnjJ3n2C8uo+wWL6ut1jexGYAyTvbweDengdsOr8LDo0VpK5V3XSKCV2fFcPh5JE9H1aA4jpnZPg== + dependencies: + "@web3modal/core" "2.2.2" + "@web3modal/ui" "2.2.2" "@web3modal/standalone@^2.2.1": version "2.2.1" @@ -5539,16 +4918,6 @@ "@web3modal/core" "2.2.1" "@web3modal/ui" "2.2.1" -"@web3modal/ui@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@web3modal/ui/-/ui-2.0.0.tgz#a06127bc09bb0da2a914f51f91bd54b636b4ff88" - integrity sha512-kNSXD/YI+Sl92hxMzsjkRWUj8H+CyV89WDS0Ywy2YV9HxVzC6MzntnsYZ4rti5//IzeDlxPhTKKaiBWE68Gwzw== - dependencies: - "@web3modal/core" "2.0.0" - lit "2.6.1" - motion "10.15.5" - qrcode "1.5.1" - "@web3modal/ui@2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@web3modal/ui/-/ui-2.2.1.tgz#92ea69900c4e1b0b6ce9457ea2081b17a5588413" @@ -5559,126 +4928,15 @@ motion "10.15.5" qrcode "1.5.1" -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== - -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== - -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== - -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== - -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@xtuc/long" "4.2.2" +"@web3modal/ui@2.2.2", "@web3modal/ui@^2.2.1": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@web3modal/ui/-/ui-2.2.2.tgz#f1c1ac908230d4214c35891a5d922c118353eaf2" + integrity sha512-PAuMOuk4sZ4UGjucGMZKzu6Qu56XtFsgLaqOn8ZgP2RkZmYEBGSG9mUQVzJd3XzfzAy1T91Wmqp/3TI3m0pXuQ== + dependencies: + "@web3modal/core" "2.2.2" + lit "2.6.1" + motion "10.15.5" + qrcode "1.5.1" "@whatwg-node/events@^0.0.2": version "0.0.2" @@ -5707,16 +4965,6 @@ fast-url-parser "^1.1.3" tslib "^2.3.1" -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - "@zeit/schemas@2.29.0": version "2.29.0" resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.29.0.tgz#a59ae6ebfdf4ddc66a876872dd736baa58b6696c" @@ -5743,7 +4991,7 @@ JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: +abab@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== @@ -5793,7 +5041,7 @@ abstract-logging@^2.0.1: resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839" integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: +accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -5801,14 +5049,6 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - acorn-globals@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" @@ -5817,58 +5057,26 @@ acorn-globals@^7.0.0: acorn "^8.1.0" acorn-walk "^8.0.2" -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== - acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-node@^1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" - integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - dependencies: - acorn "^7.0.0" - acorn-walk "^7.0.0" - xtend "^4.0.2" - -acorn-walk@^7.0.0, acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - acorn-walk@^8.0.2, acorn-walk@^8.1.1, acorn-walk@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^7.0.0, acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.1.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2: +acorn@^8.1.0, acorn@^8.4.1, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2: version "8.8.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== -address@^1.0.1, address@^1.1.2: +address@^1.0.1: version "1.2.2" resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== -adjust-sourcemap-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99" - integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A== - dependencies: - loader-utils "^2.0.0" - regex-parser "^2.2.11" - adm-zip@^0.4.16: version "0.4.16" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" @@ -5915,18 +5123,6 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - ajv@8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" @@ -5937,7 +5133,7 @@ ajv@8.11.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -5947,7 +5143,7 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.10.0, ajv@^8.11.0, ajv@^8.11.2, ajv@^8.12.0, ajv@^8.6.0, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.10.0, ajv@^8.11.0, ajv@^8.11.2, ajv@^8.12.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -5979,18 +5175,13 @@ ansi-colors@^4.1.0, ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - ansi-regex@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" @@ -6088,7 +5279,7 @@ archy@^1.0.0: resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== -arg@5.0.2, arg@^5.0.2: +arg@5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== @@ -6132,11 +5323,6 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" @@ -6178,17 +5364,6 @@ array.prototype.flatmap@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -array.prototype.reduce@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" - integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - array.prototype.tosorted@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" @@ -6347,18 +5522,6 @@ atomic-sleep@^1.0.0: resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== -autoprefixer@^10.4.13: - version "10.4.14" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" - integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== - dependencies: - browserslist "^4.21.5" - caniuse-lite "^1.0.30001464" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" @@ -6435,21 +5598,7 @@ axobject-query@^3.1.1: dependencies: deep-equal "^2.0.5" -babel-jest@^27.4.2, babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== - dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-jest@^29.3.1, babel-jest@^29.5.0: +babel-jest@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5" integrity sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q== @@ -6462,16 +5611,6 @@ babel-jest@^29.3.1, babel-jest@^29.5.0: graceful-fs "^4.2.9" slash "^3.0.0" -babel-loader@^8.2.3: - version "8.3.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" - integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -6483,16 +5622,6 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - babel-plugin-jest-hoist@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a" @@ -6512,11 +5641,6 @@ babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-named-asset-import@^0.3.8: - version "0.3.8" - resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" - integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== - babel-plugin-polyfill-corejs2@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" @@ -6564,14 +5688,6 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== - dependencies: - babel-plugin-jest-hoist "^27.5.1" - babel-preset-current-node-syntax "^1.0.0" - babel-preset-jest@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2" @@ -6619,11 +5735,6 @@ base64-js@^1.0.2, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -6636,21 +5747,6 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -bfj@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" - integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== - dependencies: - bluebird "^3.5.5" - check-types "^11.1.1" - hoopy "^0.1.4" - tryer "^1.0.1" - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - bigint-buffer@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" @@ -6789,7 +5885,7 @@ blockstore-core@^1.0.2: it-take "^1.0.1" multiformats "^9.4.7" -bluebird@^3.5.0, bluebird@^3.5.5: +bluebird@^3.5.0: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -6845,21 +5941,6 @@ body-parser@^1.16.0, body-parser@^1.20.0: type-is "~1.6.18" unpipe "1.0.0" -bonjour-service@^1.0.11: - version "1.1.0" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.0.tgz#424170268d68af26ff83a5c640b95def01803a13" - integrity sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q== - 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, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - borc@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/borc/-/borc-2.1.2.tgz#6ce75e7da5ce711b963755117dd1b187f6f8cf19" @@ -6938,11 +6019,6 @@ browser-or-node@^1.3.0: resolved "https://registry.yarnpkg.com/browser-or-node/-/browser-or-node-1.3.0.tgz#f2a4e8568f60263050a6714b2cc236bb976647a7" integrity sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg== -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - browser-readablestream-to-it@^1.0.0, browser-readablestream-to-it@^1.0.1, browser-readablestream-to-it@^1.0.2, browser-readablestream-to-it@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.3.tgz#ac3e406c7ee6cdf0a502dd55db33bab97f7fba76" @@ -7021,7 +6097,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: +browserslist@^4.21.3, browserslist@^4.21.5: version "4.21.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -7139,11 +6215,6 @@ bufferutil@^4.0.1: dependencies: node-gyp-build "^4.3.0" -builtin-modules@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -7212,19 +6283,6 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" @@ -7239,7 +6297,7 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0, camelcase@^6.2.0, camelcase@^6.2.1: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -7249,17 +6307,7 @@ camelcase@^7.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: +caniuse-lite@^1.0.30001449: version "1.0.30001464" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001464.tgz#888922718df48ce5e33dcfe1a2af7d42676c5eb7" integrity sha512-oww27MtUmusatpRpCGSOneQk2/l5czXANDSFvsc7VuOQ86s3ANhZetpwXNf1zY/zdfP63Xvjz325DAdAoES13g== @@ -7274,11 +6322,6 @@ carbites@^1.0.6: "@ipld/dag-pb" "^2.0.2" multiformats "^9.0.4" -case-sensitive-paths-webpack-plugin@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" - integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== - caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -7321,13 +6364,6 @@ chai@^4.3.7: pathval "^1.1.1" type-detect "^4.0.5" -"chainsaw@>=0.0.7 <0.1": - version "0.0.9" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.0.9.tgz#11a05102d1c4c785b6d0415d336d5a3a1612913e" - integrity sha512-nG8PYH+/4xB+8zkV4G844EtfvZ5tTiLFoX3dZ4nhF4t3OCKIb9UvaFyNmeZO2zOSmRWzBoTD+napN6hiL+EgcA== - dependencies: - traverse ">=0.3.0 <0.4" - chalk-template@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-0.4.0.tgz#692c034d0ed62436b9062c1707fadcd0f753204b" @@ -7353,7 +6389,7 @@ chalk@5.2.0, chalk@^5.0.1: resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -7375,11 +6411,6 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -char-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" - integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== - "charenc@>= 0.0.1": version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" @@ -7390,11 +6421,6 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== -check-types@^11.1.1: - version "11.2.2" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.2.tgz#7afc0b6a860d686885062f2dba888ba5710335b4" - integrity sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA== - chokidar@3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -7410,7 +6436,7 @@ chokidar@3.5.1: optionalDependencies: fsevents "~2.3.1" -chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.4.2, chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -7435,11 +6461,6 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -7506,13 +6527,6 @@ classnames@^2.2.5: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== -clean-css@^5.2.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" - integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== - dependencies: - source-map "~0.6.0" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -7654,15 +6668,6 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -7687,7 +6692,7 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -7708,12 +6713,7 @@ color@^3.1.3: color-convert "^1.9.3" color-string "^1.6.0" -colord@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.10, colorette@^2.0.19, colorette@^2.0.7: +colorette@^2.0.19, colorette@^2.0.7: version "2.0.19" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== @@ -7773,41 +6773,16 @@ commander@^10.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1" integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA== -commander@^2.15.0, commander@^2.20.0, commander@^2.20.3: +commander@^2.15.0, commander@^2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - commander@^9.4.0: version "9.5.0" resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - compare-versions@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-5.0.3.tgz#a9b34fea217472650ef4a2651d905f42c28ebfd7" @@ -7820,7 +6795,7 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.43.0 < 2" -compression@1.7.4, compression@^1.7.4: +compression@1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== @@ -7875,11 +6850,6 @@ confusing-browser-globals@^1.0.11: resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" @@ -7916,7 +6886,7 @@ content-type@~1.0.4, content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -7955,16 +6925,6 @@ core-js-compat@^3.25.1: dependencies: browserslist "^4.21.5" -core-js-pure@^3.23.3: - version "3.29.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.29.0.tgz#0e1ac889214398641ea4bb1c6cf25ff0959ec1d2" - integrity sha512-v94gUjN5UTe1n0yN/opTihJ8QBWD2O8i19RfTZR7foONPWArnjB96QA/wk5ozu1mm6ja3udQCzOzwQXTxi3xOQ== - -core-js@^3.19.2: - version "3.29.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.29.0.tgz#0273e142b67761058bcde5615c503c7406b572d6" - integrity sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg== - core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -8004,17 +6964,6 @@ cosmiconfig@8.0.0: parse-json "^5.0.0" path-type "^4.0.0" -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - cosmiconfig@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" @@ -8105,199 +7054,21 @@ crypto-browserify@^3.11.0, crypto-browserify@^3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - crypto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== -css-blank-pseudo@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561" - integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== - dependencies: - postcss-selector-parser "^6.0.9" - -css-declaration-sorter@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec" - integrity sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w== - -css-has-pseudo@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" - integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== - dependencies: - postcss-selector-parser "^6.0.9" - -css-loader@^6.5.1: - version "6.7.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" - integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.19" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.3.8" - -css-minimizer-webpack-plugin@^3.2.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f" - integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== - dependencies: - cssnano "^5.0.6" - jest-worker "^27.0.2" - postcss "^8.3.5" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - -css-prefers-color-scheme@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" - integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - css-unit-converter@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - -css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== -cssdb@^7.1.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.4.1.tgz#61d55c0173126689922a219e15e131e4b5caf422" - integrity sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^5.2.14: - version "5.2.14" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" - integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== - dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.1" - postcss-convert-values "^5.1.3" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.7" - postcss-merge-rules "^5.1.4" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.4" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.1" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.2" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" - -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== - -cssnano@^5.0.6: - version "5.1.15" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" - integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== - dependencies: - cssnano-preset-default "^5.2.14" - lilconfig "^2.0.3" - yaml "^1.10.2" - -csso@^4.0.2, csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - cssom@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" @@ -8416,15 +7187,6 @@ data-uri-to-buffer@^3.0.1: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" @@ -8459,7 +7221,7 @@ death@^1.1.0: resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== -debug@2.6.9, debug@^2.2.0, debug@^2.6.0: +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -8510,7 +7272,7 @@ decimal.js-light@^2.4.1: resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== -decimal.js@^10.2.1, decimal.js@^10.4.2: +decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== @@ -8584,13 +7346,6 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - defaults@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" @@ -8616,11 +7371,6 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -defined@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" - integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== - delay@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" @@ -8651,11 +7401,6 @@ depd@2.0.0, depd@^2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -8684,14 +7429,6 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -detect-port-alt@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== - dependencies: - address "^1.0.1" - debug "^2.6.0" - detect-port@^1.3.0: version "1.5.1" resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" @@ -8700,25 +7437,6 @@ detect-port@^1.3.0: address "^1.0.1" debug "4" -detective@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" - integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== - dependencies: - acorn-node "^1.8.2" - defined "^1.0.0" - minimist "^1.2.6" - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - diff-sequences@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" @@ -8767,16 +7485,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - dns-over-http-resolver@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz#194d5e140a42153f55bb79ac5a64dd2768c36af9" @@ -8786,13 +7494,6 @@ dns-over-http-resolver@^1.2.3: native-fetch "^3.0.0" receptacle "^1.3.2" -dns-packet@^5.2.2: - version "5.4.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" - integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - docker-compose@0.23.4: version "0.23.4" resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-0.23.4.tgz#43bcabcde55a6ba2873b52fe0ccd99dd8fdceba8" @@ -8836,13 +7537,6 @@ dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - dom-helpers@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" @@ -8858,23 +7552,6 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" @@ -8885,23 +7562,6 @@ domain-browser@^4.22.0: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.22.0.tgz#6ddd34220ec281f9a65d3386d267ddd35c491f9f" integrity sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw== -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - domexception@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" @@ -8909,38 +7569,6 @@ domexception@^4.0.0: dependencies: webidl-conversions "^7.0.0" -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - dotenv-cli@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/dotenv-cli/-/dotenv-cli-6.0.0.tgz#8a30cbc59d0a8aaa166b2fee0a9a55e23a1223ab" @@ -8951,11 +7579,6 @@ dotenv-cli@^6.0.0: dotenv-expand "^8.0.1" minimist "^1.2.5" -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - dotenv-expand@^8.0.1: version "8.0.3" resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-8.0.3.tgz#29016757455bcc748469c83a19b36aaf2b83dd6e" @@ -8966,11 +7589,6 @@ dotenv-expand@^9.0.0: resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-9.0.0.tgz#1fd37e2cd63ea0b5f7389fb87256efc38b035b26" integrity sha512-uW8Hrhp5ammm9x7kBLR6jDfujgaDarNA02tprvZdyrJ7MpdzD1KyrIHG4l+YoC2fJ2UcdFdNWNWIjt+sexBHJw== -dotenv@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - dotenv@^16.0.0, dotenv@^16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" @@ -8990,11 +7608,6 @@ dset@^3.1.2: resolved "https://registry.yarnpkg.com/dset/-/dset-3.1.2.tgz#89c436ca6450398396dc6538ea00abc0c54cd45a" integrity sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q== -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - duplexify@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" @@ -9030,7 +7643,7 @@ eip1193-provider@1.0.1: dependencies: "@json-rpc-tools/provider" "^1.5.5" -ejs@3.1.6, ejs@^3.1.6, ejs@^3.1.8: +ejs@3.1.6, ejs@^3.1.8: version "3.1.9" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== @@ -9062,21 +7675,11 @@ elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5 minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emittery@^0.10.2: - version "0.10.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" - integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== - emittery@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -9087,11 +7690,6 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - enabled@2.0.x: version "2.0.0" resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" @@ -9121,7 +7719,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enhanced-resolve@^5.10.0: +enhanced-resolve@^5.10.0, enhanced-resolve@^5.12.0: version "5.12.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== @@ -9136,11 +7734,6 @@ enquirer@2.3.6, enquirer@^2.3.0, enquirer@^2.3.6: dependencies: ansi-colors "^4.1.1" -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - entities@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" @@ -9182,14 +7775,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -error-stack-parser@^2.0.6: - version "2.1.4" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" - integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== - dependencies: - stackframe "^1.3.4" - -es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: +es-abstract@^1.19.0, es-abstract@^1.20.4: version "1.21.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== @@ -9228,11 +7814,6 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: unbox-primitive "^1.0.2" which-typed-array "^1.1.9" -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - es-get-iterator@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" @@ -9248,11 +7829,6 @@ es-get-iterator@^1.1.2: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - es-set-tostringtag@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" @@ -9615,6 +8191,19 @@ eslint-import-resolver-typescript@^3.5.2, eslint-import-resolver-typescript@^3.5 is-glob "^4.0.3" synckit "^0.8.4" +eslint-import-resolver-typescript@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.4.tgz#7370c326c3c08f0c1839c592d79d20b704de15d4" + integrity sha512-9xUpnedEmSfG57sN1UvWPiEhfJ8bPt0Wg2XysA7Mlc79iFGhmJtRUg9LxtkK81FhMUui0YuR2E8iUsVhePkh4A== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.12.0" + get-tsconfig "^4.5.0" + globby "^13.1.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + synckit "^0.8.5" + eslint-module-utils@^2.7.4: version "2.7.4" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" @@ -9760,18 +8349,7 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint-webpack-plugin@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c" - integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w== - dependencies: - "@types/eslint" "^7.29.0 || ^8.4.1" - jest-worker "^28.0.2" - micromatch "^4.0.5" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - -eslint@^8.27.0, eslint@^8.3.0: +eslint@^8.27.0: version "8.36.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.36.0.tgz#1bd72202200a5492f91803b113fb8a83b11285cf" integrity sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw== @@ -9865,11 +8443,6 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" @@ -10135,7 +8708,7 @@ eventemitter3@4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== -eventemitter3@^4.0.0, eventemitter3@^4.0.1, eventemitter3@^4.0.7: +eventemitter3@^4.0.1, eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== @@ -10145,7 +8718,7 @@ events@1.1.1: resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== -events@^3.0.0, events@^3.2.0, events@^3.3.0: +events@^3.0.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -10193,16 +8766,6 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== - dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - expect@^29.0.0, expect@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" @@ -10224,7 +8787,7 @@ express-rate-limit@^6.7.0: resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-6.7.0.tgz#6aa8a1bd63dfe79702267b3af1161a93afc1d3c2" integrity sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA== -express@^4.14.0, express@^4.17.3, express@^4.18.1: +express@^4.14.0, express@^4.18.1: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== @@ -10445,13 +9008,6 @@ fastq@^1.6.0, fastq@^1.6.1: dependencies: reusify "^1.0.4" -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - fb-watchman@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" @@ -10471,14 +9027,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - file-saver@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" @@ -10496,11 +9044,6 @@ filelist@^1.0.1: dependencies: minimatch "^5.0.1" -filesize@^8.0.6: - version "8.0.7" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" - integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -10526,15 +9069,6 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - find-my-way@^7.3.0: version "7.6.0" resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-7.6.0.tgz#f1e271fd1aafe87e87860662f9940124274f73c7" @@ -10571,13 +9105,6 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -10621,7 +9148,7 @@ fn.name@1.x.x: resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -follow-redirects@^1.0.0, follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.14.9, follow-redirects@^1.15.0: +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.14.9, follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -10638,25 +9165,6 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== -fork-ts-checker-webpack-plugin@^6.5.0: - version "6.5.3" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" - integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@types/json-schema" "^7.0.5" - chalk "^4.1.0" - chokidar "^3.4.2" - cosmiconfig "^6.0.0" - deepmerge "^4.2.2" - fs-extra "^9.0.0" - glob "^7.1.6" - memfs "^3.1.2" - minimatch "^3.0.4" - schema-utils "2.7.0" - semver "^7.3.2" - tapable "^1.0.0" - form-data-encoder@1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" @@ -10671,15 +9179,6 @@ form-data@^2.2.0: combined-stream "^1.0.6" mime-types "^2.1.12" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -10713,11 +9212,6 @@ fp-ts@^1.0.0: resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== -fraction.js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -10785,7 +9279,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: +fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -10817,11 +9311,6 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" -fs-monkey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== - fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -10891,11 +9380,6 @@ get-iterator@^1.0.2: resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -10936,6 +9420,11 @@ get-tsconfig@^4.2.0, get-tsconfig@^4.4.0: resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.4.0.tgz#64eee64596668a81b8fce18403f94f245ee0d4e5" integrity sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ== +get-tsconfig@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.5.0.tgz#6d52d1c7b299bd3ee9cd7638561653399ac77b0f" + integrity sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ== + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -10972,11 +9461,6 @@ glob-promise@^4.2.2: dependencies: "@types/glob" "^7.1.3" -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - glob@7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -11024,7 +9508,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -11109,7 +9593,7 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" -globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: +globby@^11.0.3, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -11121,7 +9605,7 @@ globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^13.1.2: +globby@^13.1.2, globby@^13.1.3: version "13.1.3" resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== @@ -11216,7 +9700,7 @@ got@^11.8.5: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -11270,13 +9754,6 @@ graphql@^16.6.0: resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - hamt-sharding@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/hamt-sharding/-/hamt-sharding-2.0.1.tgz#f45686d0339e74b03b233bee1bde9587727129b6" @@ -11285,11 +9762,6 @@ hamt-sharding@^2.0.0: sparse-array "^1.3.1" uint8arrays "^3.0.0" -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - handlebars@^4.0.1: version "4.7.7" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" @@ -11471,7 +9943,7 @@ has-proto@^1.0.1: resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== @@ -11515,13 +9987,6 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" -"hashish@>=0.0.2 <0.1": - version "0.0.4" - resolved "https://registry.yarnpkg.com/hashish/-/hashish-0.0.4.tgz#6d60bc6ffaf711b6afd60e426d077988014e6554" - integrity sha512-xyD4XgslstNAs72ENaoFvgMwtv8xhiDtC2AtzCG+8yF7W/Knxxm9BX+e2s25mm+HxMKh0rBmXVOEGF3zNImXvA== - dependencies: - traverse ">=0.2.4" - he@1.2.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -11566,11 +10031,6 @@ hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react- dependencies: react-is "^16.7.0" -hoopy@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== - hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -11583,23 +10043,6 @@ hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - html-encoding-sniffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" @@ -11607,50 +10050,11 @@ html-encoding-sniffer@^3.0.0: dependencies: whatwg-encoding "^2.0.0" -html-entities@^2.1.0, html-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-webpack-plugin@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" - integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - http-basic@^8.1.1: version "8.1.3" resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" @@ -11666,11 +10070,6 @@ http-cache-semantics@^4.0.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -11682,35 +10081,11 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-https@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== -http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" @@ -11720,26 +10095,6 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" -http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - http-response-object@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" @@ -11826,11 +10181,6 @@ iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - idb-keyval@^6.0.3: version "6.2.0" resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.0.tgz#3af94a3cc0689d6ee0bc9e045d2a3340ea897173" @@ -11838,11 +10188,6 @@ idb-keyval@^6.0.3: dependencies: safari-14-idb-fix "^3.0.0" -idb@^7.0.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" - integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== - identity-obj-proxy@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" @@ -11877,7 +10222,7 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -immer@^9.0.16, immer@^9.0.7: +immer@^9.0.16: version "9.0.19" resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.19.tgz#67fb97310555690b5f9cd8380d38fc0aabb6b38b" integrity sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ== @@ -11892,7 +10237,7 @@ immutable@^4.0.0-rc.12: resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -11936,11 +10281,6 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - ini@^1.3.5, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" @@ -12432,11 +10772,6 @@ is-map@^2.0.1, is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - is-nan@^1.2.1: version "1.3.2" resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" @@ -12462,11 +10797,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" @@ -12482,11 +10812,6 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - is-port-reachable@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-port-reachable/-/is-port-reachable-4.0.0.tgz#dac044091ef15319c8ab2f34604d8794181f8c2d" @@ -12520,16 +10845,6 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - -is-root@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" - integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== - is-set@^2.0.1, is-set@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" @@ -12857,15 +11172,6 @@ jayson@^3.4.4: uuid "^8.3.2" ws "^7.4.5" -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== - dependencies: - "@jest/types" "^27.5.1" - execa "^5.0.0" - throat "^6.0.1" - jest-changed-files@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" @@ -12874,31 +11180,6 @@ jest-changed-files@^29.5.0: execa "^5.0.0" p-limit "^3.1.0" -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - throat "^6.0.1" - jest-circus@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.5.0.tgz#b5926989449e75bff0d59944bae083c9d7fb7317" @@ -12925,24 +11206,6 @@ jest-circus@^29.5.0: slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== - dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - jest-cli@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.5.0.tgz#b34c20a6d35968f3ee47a7437ff8e53e086b4a67" @@ -12961,36 +11224,6 @@ jest-cli@^29.5.0: prompts "^2.0.1" yargs "^17.3.1" -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^27.5.1" - slash "^3.0.0" - strip-json-comments "^3.1.1" - jest-config@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.5.0.tgz#3cc972faec8c8aaea9ae158c694541b79f3748da" @@ -13019,16 +11252,6 @@ jest-config@^29.5.0: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - jest-diff@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" @@ -13039,13 +11262,6 @@ jest-diff@^29.5.0: jest-get-type "^29.4.3" pretty-format "^29.5.0" -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== - dependencies: - detect-newline "^3.0.0" - jest-docblock@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" @@ -13053,17 +11269,6 @@ jest-docblock@^29.4.3: dependencies: detect-newline "^3.0.0" -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== - dependencies: - "@jest/types" "^27.5.1" - chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - jest-each@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.5.0.tgz#fc6e7014f83eac68e22b7195598de8554c2e5c06" @@ -13075,19 +11280,6 @@ jest-each@^29.5.0: jest-util "^29.5.0" pretty-format "^29.5.0" -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - jest-environment-jsdom@^29.3.1: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz#cfe86ebaf1453f3297b5ff3470fbe94739c960cb" @@ -13102,18 +11294,6 @@ jest-environment-jsdom@^29.3.1: jest-util "^29.5.0" jsdom "^20.0.0" -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jest-environment-node@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.5.0.tgz#f17219d0f0cc0e68e0727c58b792c040e332c967" @@ -13126,36 +11306,11 @@ jest-environment-node@^29.5.0: jest-mock "^29.5.0" jest-util "^29.5.0" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== - jest-get-type@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== - dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - micromatch "^4.0.4" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" - jest-haste-map@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.5.0.tgz#69bd67dc9012d6e2723f20a945099e972b2e94de" @@ -13175,37 +11330,6 @@ jest-haste-map@^29.5.0: optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - jest-leak-detector@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c" @@ -13214,16 +11338,6 @@ jest-leak-detector@^29.5.0: jest-get-type "^29.4.3" pretty-format "^29.5.0" -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== - dependencies: - chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - jest-matcher-utils@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" @@ -13234,36 +11348,6 @@ jest-matcher-utils@^29.5.0: jest-get-type "^29.4.3" pretty-format "^29.5.0" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-message-util@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" - integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.1.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^28.1.3" - slash "^3.0.0" - stack-utils "^2.0.3" - jest-message-util@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" @@ -13279,14 +11363,6 @@ jest-message-util@^29.5.0: slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.5.0.tgz#26e2172bcc71d8b0195081ff1f146ac7e1518aed" @@ -13301,30 +11377,11 @@ jest-pnp-resolver@^1.2.2: resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== - -jest-regex-util@^28.0.0: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" - integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== - jest-regex-util@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== - dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" - jest-resolve-dependencies@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4" @@ -13333,22 +11390,6 @@ jest-resolve-dependencies@^29.5.0: jest-regex-util "^29.4.3" jest-snapshot "^29.5.0" -jest-resolve@^27.4.2, jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== - dependencies: - "@jest/types" "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" - resolve "^1.20.0" - resolve.exports "^1.1.0" - slash "^3.0.0" - jest-resolve@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.5.0.tgz#b053cc95ad1d5f6327f0ac8aae9f98795475ecdc" @@ -13364,33 +11405,6 @@ jest-resolve@^29.5.0: resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.8.1" - graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - jest-runner@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.5.0.tgz#6a57c282eb0ef749778d444c1d758c6a7693b6f8" @@ -13418,34 +11432,6 @@ jest-runner@^29.5.0: p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - execa "^5.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - strip-bom "^4.0.0" - jest-runtime@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.5.0.tgz#c83f943ee0c1da7eb91fa181b0811ebd59b03420" @@ -13474,42 +11460,6 @@ jest-runtime@^29.5.0: slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== - dependencies: - "@babel/core" "^7.7.2" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^27.5.1" - graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" - jest-snapshot@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.5.0.tgz#c9c1ce0331e5b63cd444e2f95a55a73b84b1e8ce" @@ -13539,30 +11489,6 @@ jest-snapshot@^29.5.0: pretty-format "^29.5.0" semver "^7.3.5" -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-util@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" - integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== - dependencies: - "@jest/types" "^28.1.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - jest-util@^29.0.0, jest-util@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" @@ -13575,18 +11501,6 @@ jest-util@^29.0.0, jest-util@^29.5.0: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== - dependencies: - "@jest/types" "^27.5.1" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^27.5.1" - leven "^3.1.0" - pretty-format "^27.5.1" - jest-validate@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" @@ -13599,46 +11513,6 @@ jest-validate@^29.5.0: leven "^3.1.0" pretty-format "^29.5.0" -jest-watch-typeahead@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz#b4a6826dfb9c9420da2f7bc900de59dad11266a9" - integrity sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw== - dependencies: - ansi-escapes "^4.3.1" - chalk "^4.0.0" - jest-regex-util "^28.0.0" - jest-watcher "^28.0.0" - slash "^4.0.0" - string-length "^5.0.1" - strip-ansi "^7.0.1" - -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== - dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^27.5.1" - string-length "^4.0.1" - -jest-watcher@^28.0.0: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" - integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== - dependencies: - "@jest/test-result" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.10.2" - jest-util "^28.1.3" - string-length "^4.0.1" - jest-watcher@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.5.0.tgz#cf7f0f949828ba65ddbbb45c743a382a4d911363" @@ -13653,33 +11527,6 @@ jest-watcher@^29.5.0: jest-util "^29.5.0" string-length "^4.0.1" -jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^27.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^28.0.2: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" - integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - jest-worker@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" @@ -13690,15 +11537,6 @@ jest-worker@^29.5.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.4.3: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== - dependencies: - "@jest/core" "^27.5.1" - import-local "^3.0.2" - jest-cli "^27.5.1" - jest@^29.3.1: version "29.5.0" resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" @@ -13772,39 +11610,6 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsdom@^20.0.0: version "20.0.3" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" @@ -13884,7 +11689,7 @@ json-buffer@3.0.1: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -13932,7 +11737,7 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.4.0, json-schema@^0.4.0: +json-schema@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== @@ -13966,7 +11771,7 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.0, json5@^2.2.2, json5@^2.2.3: +json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -14004,11 +11809,6 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jsonpointer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" - integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== - jsonschema@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" @@ -14095,11 +11895,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -klona@^2.0.4, klona@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== - kuler@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" @@ -14222,7 +12017,7 @@ light-my-request@^5.6.1: process-warning "^2.0.0" set-cookie-parser "^2.4.1" -lilconfig@2.1.0, lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.0.6: +lilconfig@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== @@ -14289,25 +12084,6 @@ lit@2.6.1: lit-element "^3.2.0" lit-html "^2.6.0" -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^2.0.0, loader-utils@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -loader-utils@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== - local-pkg@^0.4.2: version "0.4.3" resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" @@ -14321,14 +12097,6 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -14373,7 +12141,7 @@ lodash.lowerfirst@^4.3.1: resolved "https://registry.yarnpkg.com/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz#de3c7b12e02c6524a0059c2f6cb7c5c52655a13d" integrity sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w== -lodash.memoize@4.x, lodash.memoize@^4.1.2: +lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== @@ -14408,11 +12176,6 @@ lodash.snakecase@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - lodash.startcase@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" @@ -14438,11 +12201,6 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - lodash.uppercase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.uppercase/-/lodash.uppercase-4.3.0.tgz#c404abfd1469f93931f9bb24cf6cc7d57059bc73" @@ -14453,7 +12211,7 @@ lodash.upperfirst@^4.3.1: resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.16, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.16, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -14524,13 +12282,6 @@ loupe@^2.3.1, loupe@^2.3.6: dependencies: get-func-name "^2.0.0" -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - lowercase-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" @@ -14586,13 +12337,6 @@ mafmt@^7.0.0: dependencies: multiaddr "^7.3.0" -magic-string@^0.25.0, magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - magic-string@^0.27.0: version "0.27.0" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" @@ -14600,7 +12344,7 @@ magic-string@^0.27.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -14662,28 +12406,11 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memfs@^3.1.2, memfs@^3.4.3: - version "3.4.13" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.13.tgz#248a8bd239b3c240175cd5ec548de5227fc4f345" - integrity sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg== - dependencies: - fs-monkey "^1.0.3" - memoizee@^0.4.15: version "0.4.15" resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" @@ -14762,7 +12489,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: +micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -14795,7 +12522,7 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" -mime-types@^2.1.12, mime-types@^2.1.14, mime-types@^2.1.16, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.14, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -14839,13 +12566,6 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^2.4.5: - version "2.7.3" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.3.tgz#794aa4d598bf178a66b2a35fe287c3df3eac394e" - integrity sha512-CD9cXeKeXLcnMw8FZdtfrRrLaM7gwCl4nKuKn2YkY2Bw5wdlB8zU2cCzw+w2zS9RFvbrufTBkMCJACNPwqQA0w== - dependencies: - schema-utils "^4.0.0" - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -14968,7 +12688,7 @@ mkdirp@*: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.5.tgz#78d7eaf15e069ba7b6b47d76dd94cfadf7a4062f" integrity sha512-jbjfql+shJtAPrFoKxHOXip4xS+kul9W3OzfzzrqueWK2QMGon2bFH2opl6W9EagBThjEz+iysyi/swOoVfB/w== -mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -15142,14 +12862,6 @@ multibase@~0.6.0: base-x "^3.0.8" buffer "^5.5.0" -multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - multicodec@^0.5.5, multicodec@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" @@ -15326,7 +13038,7 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.6.0, neo-async@^2.6.2: +neo-async@^2.6.0: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -15355,14 +13067,6 @@ nft.storage@^7.0.0: streaming-iterables "^6.0.0" throttled-queue "^2.1.2" -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -15389,7 +13093,7 @@ node-fetch@2.6.0, node-fetch@2.6.7, node-fetch@^2.3.0, node-fetch@^2.6.1, node-f dependencies: whatwg-url "^5.0.0" -node-forge@^0.10.0, node-forge@^1, node-forge@^1.0.0: +node-forge@^0.10.0, node-forge@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== @@ -15494,11 +13198,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - normalize-url@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" @@ -15518,20 +13217,6 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - number-to-bn@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" @@ -15545,7 +13230,7 @@ numeral@^2.0.6: resolved "https://registry.yarnpkg.com/numeral/-/numeral-2.0.6.tgz#4ad080936d443c2561aed9f2197efffe25f4e506" integrity sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA== -nwsapi@^2.2.0, nwsapi@^2.2.2: +nwsapi@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== @@ -15565,11 +13250,6 @@ object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1 resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - object-inspect@^1.12.2, object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" @@ -15616,16 +13296,6 @@ object.fromentries@^2.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -object.getownpropertydescriptors@^2.1.0: - version "2.1.5" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3" - integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw== - dependencies: - array.prototype.reduce "^1.0.5" - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - object.hasown@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" @@ -15634,7 +13304,7 @@ object.hasown@^1.1.2: define-properties "^1.1.4" es-abstract "^1.20.4" -object.values@^1.1.0, object.values@^1.1.6: +object.values@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== @@ -15655,11 +13325,6 @@ oboe@2.1.5: dependencies: http-https "^1.0.0" -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - on-exit-leak-free@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" @@ -15715,7 +13380,7 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" -open@^8.0.9, open@^8.4.0: +open@^8.4.0: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== @@ -15834,7 +13499,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -15855,13 +13520,6 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -15883,7 +13541,7 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-retry@^4.5.0, p-retry@^4.6.1: +p-retry@^4.6.1: version "4.6.2" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== @@ -15906,14 +13564,6 @@ pako@~1.0.2, pako@~1.0.5: resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -15957,11 +13607,6 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parse5@^7.0.0, parse5@^7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" @@ -15969,19 +13614,11 @@ parse5@^7.0.0, parse5@^7.1.1: dependencies: entities "^4.4.0" -parseurl@~1.3.2, parseurl@~1.3.3: +parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - path-browserify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" @@ -16095,17 +13732,12 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -16115,11 +13747,6 @@ pidtree@^0.6.0: resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -16240,7 +13867,7 @@ pirates@^4.0.4: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -16263,13 +13890,6 @@ pkg-types@^1.0.2: mlly "^1.1.1" pathe "^1.1.0" -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - pkginfo@0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" @@ -16285,671 +13905,105 @@ pngjs@^5.0.0: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== -postcss-attribute-case-insensitive@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" - integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-browser-comments@^4: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz#bcfc86134df5807f5d3c0eefa191d42136b5e72a" - integrity sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg== +postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-calc@^8.2.3: - version "8.2.4" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== +postcss@^8.4.21: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== dependencies: - postcss-selector-parser "^6.0.9" - postcss-value-parser "^4.2.0" + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" +preact@^10.12.0, preact@^10.5.9: + version "10.13.1" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.13.1.tgz#d220bd8771b8fa197680d4917f3cefc5eed88720" + integrity sha512-KyoXVDU5OqTpG9LXlB3+y639JAGzl8JSBXLn1J9HTSB3gbKcuInga7bZnXLlxmK94ntTs1EFeZp0lrja2AuBYQ== -postcss-color-functional-notation@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec" - integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg== - dependencies: - postcss-value-parser "^4.2.0" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -postcss-color-hex-alpha@^8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5" - integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== - dependencies: - postcss-value-parser "^4.2.0" +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== -postcss-color-rebeccapurple@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0" - integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg== +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: - postcss-value-parser "^4.2.0" + fast-diff "^1.1.2" -postcss-colormin@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" - integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== +prettier-plugin-solidity@^1.0.0-beta.24: + version "1.1.3" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz#9a35124f578404caf617634a8cab80862d726cba" + integrity sha512-fQ9yucPi2sBbA2U2Xjh6m4isUTJ7S7QLc/XDDsktqqxYfTwdYKJ0EnnywXHwCGAaYbQNK+HIYPL1OemxuMsgeg== dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" + "@solidity-parser/parser" "^0.16.0" + semver "^7.3.8" + solidity-comments-extractor "^0.0.7" -postcss-convert-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" - integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" +prettier@1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -postcss-custom-media@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea" - integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== - dependencies: - postcss-value-parser "^4.2.0" +prettier@^2.3.1, prettier@^2.6.2, prettier@^2.7.1: + version "2.8.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" + integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== -postcss-custom-properties@^12.1.10: - version "12.1.11" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz#d14bb9b3989ac4d40aaa0e110b43be67ac7845cf" - integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== +pretty-format@^27.0.2, pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: - postcss-value-parser "^4.2.0" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" -postcss-custom-selectors@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9" - integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== +pretty-format@^29.0.0, pretty-format@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" + integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== dependencies: - postcss-selector-parser "^6.0.4" + "@jest/schemas" "^29.4.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" -postcss-dir-pseudo-class@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c" - integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA== - dependencies: - postcss-selector-parser "^6.0.10" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== +process-warning@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" + integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== +process-warning@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.1.0.tgz#1e60e3bfe8183033bbc1e702c2da74f099422d1a" + integrity sha512-9C20RLxrZU/rFnxWncDkuF6O999NdIf3E1ws4B0ZeY3sRVPzWBMsYDE2lxjxhiXxg464cQTgKUGm8/i6y2YGXg== -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== - -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== - -postcss-double-position-gradients@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91" - integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -postcss-env-function@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a" - integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-flexbugs-fixes@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" - integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== - -postcss-focus-visible@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e" - integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== - dependencies: - postcss-selector-parser "^6.0.9" - -postcss-focus-within@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20" - integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== - dependencies: - postcss-selector-parser "^6.0.9" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff" - integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg== - -postcss-image-set-function@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f" - integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-import@^14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" - integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-initial@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" - integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== - -postcss-js@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" - integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== - dependencies: - camelcase-css "^2.0.1" - -postcss-lab-function@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98" - integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -postcss-load-config@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" - -postcss-loader@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.5" - -postcss-logical@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73" - integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== - -postcss-media-minmax@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" - integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== - -postcss-merge-longhand@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" - integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^5.1.1" - -postcss-merge-rules@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" - integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" - -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== - dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" - integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== - dependencies: - browserslist "^4.21.4" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-nested@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" - integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-nesting@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz#0b12ce0db8edfd2d8ae0aaf86427370b898890be" - integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA== - dependencies: - "@csstools/selector-specificity" "^2.0.0" - postcss-selector-parser "^6.0.10" - -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== - -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" - integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== - dependencies: - normalize-url "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-10.0.1.tgz#464692676b52792a06b06880a176279216540dd7" - integrity sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA== - dependencies: - "@csstools/normalize.css" "*" - postcss-browser-comments "^4" - sanitize.css "*" - -postcss-opacity-percentage@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz#5b89b35551a556e20c5d23eb5260fbfcf5245da6" - integrity sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A== - -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== - dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-overflow-shorthand@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e" - integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4" - integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^7.0.1: - version "7.8.3" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz#2a50f5e612c3149cc7af75634e202a5b2ad4f1e2" - integrity sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag== - dependencies: - "@csstools/postcss-cascade-layers" "^1.1.1" - "@csstools/postcss-color-function" "^1.1.1" - "@csstools/postcss-font-format-keywords" "^1.0.1" - "@csstools/postcss-hwb-function" "^1.0.2" - "@csstools/postcss-ic-unit" "^1.0.1" - "@csstools/postcss-is-pseudo-class" "^2.0.7" - "@csstools/postcss-nested-calc" "^1.0.0" - "@csstools/postcss-normalize-display-values" "^1.0.1" - "@csstools/postcss-oklab-function" "^1.1.1" - "@csstools/postcss-progressive-custom-properties" "^1.3.0" - "@csstools/postcss-stepped-value-functions" "^1.0.1" - "@csstools/postcss-text-decoration-shorthand" "^1.0.0" - "@csstools/postcss-trigonometric-functions" "^1.0.2" - "@csstools/postcss-unset-value" "^1.0.2" - autoprefixer "^10.4.13" - browserslist "^4.21.4" - css-blank-pseudo "^3.0.3" - css-has-pseudo "^3.0.4" - css-prefers-color-scheme "^6.0.3" - cssdb "^7.1.0" - postcss-attribute-case-insensitive "^5.0.2" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^4.2.4" - postcss-color-hex-alpha "^8.0.4" - postcss-color-rebeccapurple "^7.1.1" - postcss-custom-media "^8.0.2" - postcss-custom-properties "^12.1.10" - postcss-custom-selectors "^6.0.3" - postcss-dir-pseudo-class "^6.0.5" - postcss-double-position-gradients "^3.1.2" - postcss-env-function "^4.0.6" - postcss-focus-visible "^6.0.4" - postcss-focus-within "^5.0.4" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^3.0.5" - postcss-image-set-function "^4.0.7" - postcss-initial "^4.0.1" - postcss-lab-function "^4.2.1" - postcss-logical "^5.0.4" - postcss-media-minmax "^5.0.0" - postcss-nesting "^10.2.0" - postcss-opacity-percentage "^1.1.2" - postcss-overflow-shorthand "^3.0.4" - postcss-page-break "^3.0.4" - postcss-place "^7.0.5" - postcss-pseudo-class-any-link "^7.1.6" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-pseudo-class-any-link@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab" - integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-reduce-initial@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" - integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-selector-not@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" - integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^2.7.0" - -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-value-parser@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^7.0.35: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -postcss@^8.0.9, postcss@^8.3.5, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.4: - version "8.4.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -preact@^10.12.0, preact@^10.5.9: - version "10.13.1" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.13.1.tgz#d220bd8771b8fa197680d4917f3cefc5eed88720" - integrity sha512-KyoXVDU5OqTpG9LXlB3+y639JAGzl8JSBXLn1J9HTSB3gbKcuInga7bZnXLlxmK94ntTs1EFeZp0lrja2AuBYQ== - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier-plugin-solidity@^1.0.0-beta.24: - version "1.1.3" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz#9a35124f578404caf617634a8cab80862d726cba" - integrity sha512-fQ9yucPi2sBbA2U2Xjh6m4isUTJ7S7QLc/XDDsktqqxYfTwdYKJ0EnnywXHwCGAaYbQNK+HIYPL1OemxuMsgeg== - dependencies: - "@solidity-parser/parser" "^0.16.0" - semver "^7.3.8" - solidity-comments-extractor "^0.0.7" - -prettier@1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -prettier@^2.3.1, prettier@^2.6.2, prettier@^2.7.1: - version "2.8.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" - integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== - -pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -pretty-format@^27.0.2, pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-format@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" - integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== - dependencies: - "@jest/schemas" "^28.1.3" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-format@^29.0.0, pretty-format@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" - integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== - dependencies: - "@jest/schemas" "^29.4.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process-warning@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" - integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== - -process-warning@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.1.0.tgz#1e60e3bfe8183033bbc1e702c2da74f099422d1a" - integrity sha512-9C20RLxrZU/rFnxWncDkuF6O999NdIf3E1ws4B0ZeY3sRVPzWBMsYDE2lxjxhiXxg464cQTgKUGm8/i6y2YGXg== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== promise-nodeify@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/promise-nodeify/-/promise-nodeify-3.0.1.tgz#f0f5d9720ee9ec71dd2bfa92667be504c10229c2" integrity sha512-ghsSuzZXJX8iO7WVec2z7GI+Xk/EyiD+JZK7AZKhUqYfpLa/Zs4ylUD+CwwnKlG6G3HnkUPMAi6PO7zeqGKssg== -promise@^8.0.0, promise@^8.1.0: +promise@^8.0.0: version "8.3.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== @@ -17036,11 +14090,6 @@ proxy-addr@^2.0.7, proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-compare@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.4.0.tgz#90f6abffe734ef86d8e37428c5026268606a9c1b" - integrity sha512-FD8KmQUQD6Mfpd0hywCOzcon/dbkFP8XBd9F1ycbKtvVsfv6TsFUKJ2eC0Iz2y+KzlkdT1Z8SY6ZSgm07zOyqg== - proxy-compare@2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.5.0.tgz#0387c5e4d283ba9b1c0353bb20def4449b06bbd2" @@ -17138,11 +14187,6 @@ pvutils@^1.1.3: resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - qrcode@1.5.1, qrcode@^1.5.0, qrcode@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.1.tgz#0103f97317409f7bc91772ef30793a54cd59f0cb" @@ -17258,13 +14302,6 @@ rabin-wasm@^0.1.4: node-fetch "^2.6.1" readable-stream "^3.6.0" -raf@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -17285,7 +14322,7 @@ range-parser@1.2.0: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== -range-parser@^1.2.1, range-parser@~1.2.1: +range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== @@ -17320,48 +14357,6 @@ rc@^1.0.1, rc@^1.1.6: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-app-polyfill@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7" - integrity sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w== - dependencies: - core-js "^3.19.2" - object-assign "^4.1.1" - promise "^8.1.0" - raf "^3.4.1" - regenerator-runtime "^0.13.9" - whatwg-fetch "^3.6.2" - -react-dev-utils@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" - integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== - dependencies: - "@babel/code-frame" "^7.16.0" - address "^1.1.2" - browserslist "^4.18.1" - chalk "^4.1.2" - cross-spawn "^7.0.3" - detect-port-alt "^1.1.6" - escape-string-regexp "^4.0.0" - filesize "^8.0.6" - find-up "^5.0.0" - fork-ts-checker-webpack-plugin "^6.5.0" - global-modules "^2.0.0" - globby "^11.0.4" - gzip-size "^6.0.0" - immer "^9.0.7" - is-root "^2.1.0" - loader-utils "^3.2.0" - open "^8.4.0" - pkg-up "^3.1.0" - prompts "^2.4.2" - react-error-overlay "^6.0.11" - recursive-readdir "^2.2.2" - shell-quote "^1.7.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - react-dom@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" @@ -17370,11 +14365,6 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-error-overlay@^6.0.11: - version "6.0.11" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" - integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== - react-is@^16.10.2, react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -17414,11 +14404,6 @@ react-redux@^8.0.5: react-is "^18.0.0" use-sync-external-store "^1.0.0" -react-refresh@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" - integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== - react-refresh@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" @@ -17446,61 +14431,6 @@ react-router@6.9.0: dependencies: "@remix-run/router" "1.4.0" -react-scripts@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003" - integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ== - dependencies: - "@babel/core" "^7.16.0" - "@pmmmwh/react-refresh-webpack-plugin" "^0.5.3" - "@svgr/webpack" "^5.5.0" - babel-jest "^27.4.2" - babel-loader "^8.2.3" - babel-plugin-named-asset-import "^0.3.8" - babel-preset-react-app "^10.0.1" - bfj "^7.0.2" - browserslist "^4.18.1" - camelcase "^6.2.1" - case-sensitive-paths-webpack-plugin "^2.4.0" - css-loader "^6.5.1" - css-minimizer-webpack-plugin "^3.2.0" - dotenv "^10.0.0" - dotenv-expand "^5.1.0" - eslint "^8.3.0" - eslint-config-react-app "^7.0.1" - eslint-webpack-plugin "^3.1.1" - file-loader "^6.2.0" - fs-extra "^10.0.0" - html-webpack-plugin "^5.5.0" - identity-obj-proxy "^3.0.0" - jest "^27.4.3" - jest-resolve "^27.4.2" - jest-watch-typeahead "^1.0.0" - mini-css-extract-plugin "^2.4.5" - postcss "^8.4.4" - postcss-flexbugs-fixes "^5.0.2" - postcss-loader "^6.2.1" - postcss-normalize "^10.0.1" - postcss-preset-env "^7.0.1" - prompts "^2.4.2" - react-app-polyfill "^3.0.0" - react-dev-utils "^12.0.1" - react-refresh "^0.11.0" - resolve "^1.20.0" - resolve-url-loader "^4.0.0" - sass-loader "^12.3.0" - semver "^7.3.5" - source-map-loader "^3.0.0" - style-loader "^3.3.1" - tailwindcss "^3.0.2" - terser-webpack-plugin "^5.2.5" - webpack "^5.64.4" - webpack-dev-server "^4.6.0" - webpack-manifest-plugin "^4.0.2" - workbox-webpack-plugin "^6.4.1" - optionalDependencies: - fsevents "^2.3.2" - react-shallow-renderer@^16.15.0: version "16.15.0" resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" @@ -17553,13 +14483,6 @@ react@^18.2.0: dependencies: loose-envify "^1.1.0" -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -17579,7 +14502,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.1, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.1, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -17588,7 +14511,7 @@ read-pkg@^5.2.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^2.0.1, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: +readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -17733,7 +14656,7 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.9: +regenerator-runtime@^0.13.11: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== @@ -17745,11 +14668,6 @@ regenerator-transform@^0.15.1: dependencies: "@babel/runtime" "^7.8.4" -regex-parser@^2.2.11: - version "2.2.11" - resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" - integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== - regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" @@ -17798,34 +14716,11 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== -remove@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/remove/-/remove-0.1.5.tgz#095ffd827d65c9f41ad97d33e416a75811079955" - integrity sha512-AJMA9oWvJzdTjwIGwSQZsjGQiRx73YTmiOWmfCp1fpLa/D4n7jKcpoA+CZiVLJqKcEKUuh1Suq80c5wF+L/qVQ== - dependencies: - seq ">= 0.3.5" - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - req-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" @@ -17939,22 +14834,6 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-url-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57" - integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA== - dependencies: - adjust-sourcemap-loader "^4.0.0" - convert-source-map "^1.7.0" - loader-utils "^2.0.0" - postcss "^7.0.35" - source-map "0.6.1" - -resolve.exports@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== - resolve.exports@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.1.tgz#cee884cd4e3f355660e501fa3276b27d7ffe5a20" @@ -17972,7 +14851,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -18064,23 +14943,6 @@ rlp@^2.2.3, rlp@^2.2.4: dependencies: bn.js "^5.2.0" -rollup-plugin-terser@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup@^2.43.1: - version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== - optionalDependencies: - fsevents "~2.3.2" - rollup@^3.10.0: version "3.19.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.19.1.tgz#2b3a31ac1ff9f3afab2e523fa687fef5b0ee20fc" @@ -18159,7 +15021,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -18202,36 +15064,16 @@ safe-stable-stringify@^2.1.0, safe-stable-stringify@^2.3.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sanitize.css@*: - version "13.0.0" - resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" - integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA== - -sass-loader@^12.3.0: - version "12.6.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - sax@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== -sax@>=0.6.0, sax@~1.2.4: +sax@>=0.6.0: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - saxes@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" @@ -18266,43 +15108,6 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.8.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - scrypt-js@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" @@ -18341,18 +15146,6 @@ secure-json-parse@^2.4.0, secure-json-parse@^2.5.0: resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - -selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - "semver@2 || 3 || 4 || 5", semver@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -18365,7 +15158,7 @@ semver@7.3.5: dependencies: lru-cache "^6.0.0" -semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@7.x, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -18393,16 +15186,8 @@ send@0.18.0: mime "1.6.0" ms "2.1.3" on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -"seq@>= 0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/seq/-/seq-0.3.5.tgz#ae02af3a424793d8ccbf212d69174e0c54dffe38" - integrity sha512-sisY2Ln1fj43KBkRtXkesnRHYNdswIkIibvNe/0UKm2GZxjMbqmccpiatoKr/k2qX5VKiLU8xm+tz/74LAho4g== - dependencies: - chainsaw ">=0.0.7 <0.1" - hashish ">=0.0.2 <0.1" + range-parser "~1.2.1" + statuses "2.0.1" serialize-javascript@6.0.0: version "6.0.0" @@ -18411,20 +15196,6 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - serve-handler@6.1.5: version "6.1.5" resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.5.tgz#a4a0964f5c55c7e37a02a633232b6f0d6f068375" @@ -18439,19 +15210,6 @@ serve-handler@6.1.5: path-to-regexp "2.2.1" range-parser "1.2.0" -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - serve-static@1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" @@ -18510,11 +15268,6 @@ setimmediate@^1.0.4, setimmediate@^1.0.5: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -18650,15 +15403,6 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -18724,25 +15468,11 @@ sonic-boom@^3.0.0, sonic-boom@^3.1.0: dependencies: atomic-sleep "^1.0.0" -source-list-map@^2.0.0, source-list-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-js@^1.0.1, source-map-js@^1.0.2: +source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-loader@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.2.tgz#af23192f9b344daa729f6772933194cc5fa54fee" - integrity sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg== - dependencies: - abab "^2.0.5" - iconv-lite "^0.6.3" - source-map-js "^1.0.1" - source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -18751,7 +15481,7 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.13, source-map-support@^0.5.20, source-map-support@^0.5.21, source-map-support@^0.5.6, source-map-support@~0.5.20: +source-map-support@^0.5.13, source-map-support@^0.5.20, source-map-support@^0.5.21: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -18759,27 +15489,15 @@ source-map-support@^0.5.13, source-map-support@^0.5.20, source-map-support@^0.5. buffer-from "^1.0.0" source-map "^0.6.0" -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -source-map@^0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@~0.2.0: version "0.2.0" @@ -18788,11 +15506,6 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - sparse-array@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/sparse-array/-/sparse-array-1.3.2.tgz#0e1a8b71706d356bc916fe754ff496d450ec20b0" @@ -18829,29 +15542,6 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - split-ca@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" @@ -18894,7 +15584,7 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -stable@^0.1.8, stable@~0.1.8: +stable@~0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== @@ -18916,11 +15606,6 @@ stackback@0.0.2: resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -stackframe@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" - integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== - stacktrace-parser@^0.1.10: version "0.1.10" resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" @@ -18933,11 +15618,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - std-env@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.2.tgz#af27343b001616015534292178327b202b9ee955" @@ -19041,14 +15721,6 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-length@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-5.0.1.tgz#3d647f497b6e8e8d41e422f7e0b23bc536c8381e" - integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow== - dependencies: - char-regex "^2.0.0" - strip-ansi "^7.0.1" - string-natural-compare@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" @@ -19080,7 +15752,7 @@ string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8: +string.prototype.matchall@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== @@ -19131,15 +15803,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" @@ -19178,11 +15841,6 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" - integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -19237,19 +15895,6 @@ strnum@^1.0.4: resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== -style-loader@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" - integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== - -stylehacks@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" - integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== - dependencies: - browserslist "^4.21.4" - postcss-selector-parser "^6.0.4" - stylis@4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" @@ -19281,63 +15926,18 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -svg-parser@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" - integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== - -svgo@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -svgo@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" - swarm-js@^0.1.40: version "0.1.42" resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" @@ -19381,7 +15981,7 @@ sync-rpc@^1.2.1: dependencies: get-port "^3.1.0" -synckit@^0.8.4: +synckit@^0.8.4, synckit@^0.8.5: version "0.8.5" resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== @@ -19410,41 +16010,7 @@ table@^6.8.0: string-width "^4.2.3" strip-ansi "^6.0.1" -tailwindcss@^3.0.2: - version "3.2.7" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.7.tgz#5936dd08c250b05180f0944500c01dce19188c07" - integrity sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ== - dependencies: - arg "^5.0.2" - chokidar "^3.5.3" - color-name "^1.1.4" - detective "^5.2.1" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.2.12" - glob-parent "^6.0.2" - is-glob "^4.0.3" - lilconfig "^2.0.6" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.0.9" - postcss-import "^14.1.0" - postcss-js "^4.0.0" - postcss-load-config "^3.1.4" - postcss-nested "6.0.0" - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - quick-lru "^5.1.1" - resolve "^1.22.1" - -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: +tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== @@ -19508,21 +16074,6 @@ tar@^6.1.0: mkdirp "^1.0.3" yallist "^4.0.0" -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -tempy@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" - integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== - dependencies: - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - tenderly@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/tenderly/-/tenderly-0.4.0.tgz#681e2efdec48f4617117ddfce9612fe1b57fdf78" @@ -19538,35 +16089,6 @@ tenderly@^0.4.0: prompts "^2.4.2" tslog "^4.4.0" -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5: - version "5.3.7" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" - integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.5" - -terser@^5.0.0, terser@^5.10.0, terser@^5.16.5: - version "5.16.6" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.6.tgz#f6c7a14a378ee0630fbe3ac8d1f41b4681109533" - integrity sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -19636,11 +16158,6 @@ thread-stream@^2.0.0: dependencies: real-require "^0.2.0" -throat@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - throttled-queue@^2.1.2: version "2.1.4" resolved "https://registry.yarnpkg.com/throttled-queue/-/throttled-queue-2.1.4.tgz#4e2008c73ab3f72ba1bb09496c3cc9c5b745dbee" @@ -19659,11 +16176,6 @@ through2@^3.0.0, through2@^3.0.1: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -19781,7 +16293,7 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^4.0.0, tough-cookie@^4.1.2: +tough-cookie@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== @@ -19791,20 +16303,6 @@ tough-cookie@^4.0.0, tough-cookie@^4.1.2: universalify "^0.2.0" url-parse "^1.5.3" -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== - dependencies: - punycode "^2.1.0" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" @@ -19817,16 +16315,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -traverse@>=0.2.4: - version "0.6.7" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" - integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== - -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== - tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -19842,11 +16330,6 @@ triple-beam@^1.3.0: resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== -tryer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== - ts-command-line-args@^2.2.0: version "2.4.2" resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.4.2.tgz#b4815b23c35f8a0159d4e69e01012d95690bc448" @@ -19911,7 +16394,7 @@ tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.5.0: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -19990,11 +16473,6 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - type-fest@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" @@ -20167,13 +16645,6 @@ unique-by@^1.0.0: resolved "https://registry.yarnpkg.com/unique-by/-/unique-by-1.0.0.tgz#5220c86ba7bc572fb713ad74651470cb644212bd" integrity sha512-rJRXK5V0zL6TiSzhoGNpJp5dr+TZBLoPJFC06rLn17Ug++7Aa0Qnve5v+skXeQxx6/sI7rBsSesa6MAcmFi8Ew== -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -20206,16 +16677,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== - -upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - update-browserslist-db@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" @@ -20300,21 +16761,11 @@ utf8@3.0.0: resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - util@^0.12.0, util@^0.12.3, util@^0.12.4, util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" @@ -20326,11 +16777,6 @@ util@^0.12.0, util@^0.12.3, util@^0.12.4, util@^0.12.5: is-typed-array "^1.1.3" which-typed-array "^1.1.2" -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -20371,15 +16817,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - v8-to-istanbul@^9.0.1: version "9.1.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" @@ -20405,14 +16842,6 @@ valtio@1.10.3: proxy-compare "2.5.0" use-sync-external-store "1.2.0" -valtio@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.9.0.tgz#d5d9f664319eaf18dd98f758d50495eca28eb0b8" - integrity sha512-mQLFsAlKbYascZygFQh6lXuDjU5WHLoeZ8He4HqMnWfasM96V6rDbeFkw1XeG54xycmDonr/Jb4xgviHtuySrA== - dependencies: - proxy-compare "2.4.0" - use-sync-external-store "1.2.0" - value-or-promise@1.0.12, value-or-promise@^1.0.11, value-or-promise@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c" @@ -20593,20 +17022,6 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - w3c-xmlserializer@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" @@ -20631,28 +17046,13 @@ wagmi@^0.12.2: abitype "^0.3.0" use-sync-external-store "^1.2.0" -walker@^1.0.7, walker@^1.0.8: +walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -20950,145 +17350,11 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@^4.6.0: - version "4.11.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz#ae07f0d71ca0438cf88446f09029b92ce81380b5" - integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.4.2" - -webpack-manifest-plugin@^4.0.2: - version "4.1.1" - resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz#10f8dbf4714ff93a215d5a45bcc416d80506f94f" - integrity sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow== - dependencies: - tapable "^2.0.0" - webpack-sources "^2.2.0" - -webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-sources@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" - integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.64.4: - version "5.76.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.1.tgz#7773de017e988bccb0f13c7d75ec245f377d295c" - integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - websocket@^1.0.32: version "1.0.34" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" @@ -21101,13 +17367,6 @@ websocket@^1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - whatwg-encoding@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" @@ -21115,16 +17374,6 @@ whatwg-encoding@^2.0.0: dependencies: iconv-lite "0.6.3" -whatwg-fetch@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-mimetype@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" @@ -21146,24 +17395,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -21280,175 +17511,6 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.2.0" -workbox-background-sync@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9" - integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g== - dependencies: - idb "^7.0.1" - workbox-core "6.5.4" - -workbox-broadcast-update@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66" - integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw== - dependencies: - workbox-core "6.5.4" - -workbox-build@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389" - integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA== - dependencies: - "@apideck/better-ajv-errors" "^0.3.1" - "@babel/core" "^7.11.1" - "@babel/preset-env" "^7.11.0" - "@babel/runtime" "^7.11.2" - "@rollup/plugin-babel" "^5.2.0" - "@rollup/plugin-node-resolve" "^11.2.1" - "@rollup/plugin-replace" "^2.4.1" - "@surma/rollup-plugin-off-main-thread" "^2.2.3" - ajv "^8.6.0" - common-tags "^1.8.0" - fast-json-stable-stringify "^2.1.0" - fs-extra "^9.0.1" - glob "^7.1.6" - lodash "^4.17.20" - pretty-bytes "^5.3.0" - rollup "^2.43.1" - rollup-plugin-terser "^7.0.0" - source-map "^0.8.0-beta.0" - stringify-object "^3.3.0" - strip-comments "^2.0.1" - tempy "^0.6.0" - upath "^1.2.0" - workbox-background-sync "6.5.4" - workbox-broadcast-update "6.5.4" - workbox-cacheable-response "6.5.4" - workbox-core "6.5.4" - workbox-expiration "6.5.4" - workbox-google-analytics "6.5.4" - workbox-navigation-preload "6.5.4" - workbox-precaching "6.5.4" - workbox-range-requests "6.5.4" - workbox-recipes "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - workbox-streams "6.5.4" - workbox-sw "6.5.4" - workbox-window "6.5.4" - -workbox-cacheable-response@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137" - integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug== - dependencies: - workbox-core "6.5.4" - -workbox-core@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" - integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== - -workbox-expiration@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539" - integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ== - dependencies: - idb "^7.0.1" - workbox-core "6.5.4" - -workbox-google-analytics@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d" - integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg== - dependencies: - workbox-background-sync "6.5.4" - workbox-core "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - -workbox-navigation-preload@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212" - integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng== - dependencies: - workbox-core "6.5.4" - -workbox-precaching@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" - integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg== - dependencies: - workbox-core "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - -workbox-range-requests@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399" - integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg== - dependencies: - workbox-core "6.5.4" - -workbox-recipes@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb" - integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA== - dependencies: - workbox-cacheable-response "6.5.4" - workbox-core "6.5.4" - workbox-expiration "6.5.4" - workbox-precaching "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - -workbox-routing@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" - integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg== - dependencies: - workbox-core "6.5.4" - -workbox-strategies@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" - integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw== - dependencies: - workbox-core "6.5.4" - -workbox-streams@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69" - integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg== - dependencies: - workbox-core "6.5.4" - workbox-routing "6.5.4" - -workbox-sw@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736" - integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA== - -workbox-webpack-plugin@^6.4.1: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz#baf2d3f4b8f435f3469887cf4fba2b7fac3d0fd7" - integrity sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg== - dependencies: - fast-json-stable-stringify "^2.1.0" - pretty-bytes "^5.4.1" - upath "^1.2.0" - webpack-sources "^1.4.3" - workbox-build "6.5.4" - -workbox-window@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91" - integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug== - dependencies: - "@types/trusted-types" "^2.0.2" - workbox-core "6.5.4" - workerpool@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" @@ -21486,16 +17548,6 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - write-file-atomic@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" @@ -21528,7 +17580,7 @@ ws@^7.4.0, ws@^7.4.5, ws@^7.4.6, ws@^7.5.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.11.0, ws@^8.12.0, ws@^8.4.2, ws@^8.5.0: +ws@^8.11.0, ws@^8.12.0, ws@^8.5.0: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== @@ -21568,11 +17620,6 @@ xhr@^2.0.4, xhr@^2.3.3: parse-headers "^2.0.0" xtend "^4.0.0" -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" @@ -21656,7 +17703,7 @@ yaml@1.9.2: dependencies: "@babel/runtime" "^7.9.2" -yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: +yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== @@ -21699,7 +17746,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0, yargs@^16.2.0: +yargs@16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== From 903a19fe329fa094ac5a72b91e8601fc4d53ba8a Mon Sep 17 00:00:00 2001 From: portuu3 <61605646+portuu3@users.noreply.github.com> Date: Thu, 6 Apr 2023 08:37:46 +0200 Subject: [PATCH 08/22] deploy contracts on Ethereum mainnet (#369) * deploy contracts on eth mainnet * downgrade python version to 3.9 for base models * fix pydantic version --------- Co-authored-by: Eric Lee --- .github/workflows/cd-deploy-contracts.yaml | 8 + .github/workflows/cd-subgraph.yaml | 2 + CONTRACTS_LIST.md | 9 + .../escrow-dashboard/src/constants/index.ts | 18 + packages/core/.openzeppelin/mainnet.json | 574 ++++++++++++++++++ packages/core/hardhat.config.ts | 6 + .../python/human-protocol-basemodels/Pipfile | 2 +- .../subgraph/config/mainnet-v1.json | 32 + 8 files changed, 650 insertions(+), 1 deletion(-) create mode 100644 packages/core/.openzeppelin/mainnet.json create mode 100644 packages/sdk/typescript/subgraph/config/mainnet-v1.json diff --git a/.github/workflows/cd-deploy-contracts.yaml b/.github/workflows/cd-deploy-contracts.yaml index 01505640c3..7f5ddf51f8 100644 --- a/.github/workflows/cd-deploy-contracts.yaml +++ b/.github/workflows/cd-deploy-contracts.yaml @@ -71,6 +71,13 @@ jobs: reputation: '0x87469B4f2Fcf37cBd34E54244c0BD4Fa0603664c', private_key: TESTNET_PRIVATE_KEY, }, + { + name: mainnet, + escrow_factory: '0xD9c75a1Aa4237BB72a41E5E26bd8384f10c1f55a', + staking: '0x05398211bA2046E296fBc9a9D3EB49e3F15C3123', + reward_pool: '0x4A5963Dd6792692e9147EdC7659936b96251917a', + private_key: MAINNET_PRIVATE_KEY, + } # { # name: avalanche, # escrow_factory, @@ -107,6 +114,7 @@ jobs: ETH_BSC_TESTNET_URL: ${{ secrets.ETH_BSC_TESTNET_URL }}å ETH_MOONBEAM_URL: ${{ secrets.ETH_MOONBEAM_URL }} ETH_MOONBASE_ALPHA_URL: ${{ secrets.ETH_MOONBASE_ALPHA_URL }} + ETH_MAINNET_TESTNET_URL: ${{ secrets.ETH_MAINNET_TESTNET_URL }} # ETH_SKALE_URL: ${{ secrets.ETH_SKALE_URL }} ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} POLYGONSCAN_API_KEY: ${{ secrets.POLYGONSCAN_API_KEY }} diff --git a/.github/workflows/cd-subgraph.yaml b/.github/workflows/cd-subgraph.yaml index 965b0dd13b..0950baa936 100644 --- a/.github/workflows/cd-subgraph.yaml +++ b/.github/workflows/cd-subgraph.yaml @@ -29,6 +29,8 @@ jobs: graph: mumbai-v1 - name: mbase graph: moonbase-alpha-v1 + - name: mainnet + graph: mainnet-v1 # - name: avalanche # graph: avalanche # - name: fuji diff --git a/CONTRACTS_LIST.md b/CONTRACTS_LIST.md index 667fed7eea..78175724b5 100644 --- a/CONTRACTS_LIST.md +++ b/CONTRACTS_LIST.md @@ -19,6 +19,15 @@ |2023/01/26 | EthKVStore | 0xD7F61E812e139a5a02eDae9Dfec146E1b8eA3807 | N/A | |2023/01/26 | Reputation | 0x7B9f9Dc6c157899C1Eb1c6B86f94855cC2F537dF | 0xC522463d36f76b881bE66484e3068F11e7038Ace | +|🟢 Ethereum (Mainnet) | Contract | Address | Proxy | +|----------------------------|----------------|--------------------------------------------|--------------------------------------------| +|2021/04/06 | HMToken | 0xd1ba9BAC957322D6e8c07a160a3A8dA11A0d2867 | N/A | +|2023/03/28 | EscrowFactory | 0xe44D7eb960f24797D36FAdD8a8FfF29C76375Ef0 | 0xD9c75a1Aa4237BB72a41E5E26bd8384f10c1f55a | +|2023/03/28 | Staking | 0xC2163A0928034e020f0d31e1171Ba0D6d9AfFB6c | 0x05398211bA2046E296fBc9a9D3EB49e3F15C3123 | +|2023/04/03 | RewardPool | 0x25E53A6D48A2744273C082e55bA5CCFCfD80f9e1 | 0x4A5963Dd6792692e9147EdC7659936b96251917a | +|2023/03/28 | EthKVStore | 0x70671167176C4934204B1C7e97F5e86695857ef2 | N/A | +| | Reputation | N/A | N/A | + |🟠 Goerli (Testnet) | Contract | Address | Proxy | |----------------------------|----------------|--------------------------------------------|--------------------------------------------| |2022/10/12 | HMToken | 0xd3A31D57FDD790725d0F6B78095F62E8CD4ab317 | N/A | diff --git a/packages/apps/escrow-dashboard/src/constants/index.ts b/packages/apps/escrow-dashboard/src/constants/index.ts index 79be03649b..2e97c36edd 100644 --- a/packages/apps/escrow-dashboard/src/constants/index.ts +++ b/packages/apps/escrow-dashboard/src/constants/index.ts @@ -38,6 +38,7 @@ export const HMT_ADDRESSES: { [chainId in ChainId]?: string } = { }; export const SUPPORTED_CHAIN_IDS = [ + ChainId.MAINNET, ChainId.RINKEBY, ChainId.GOERLI, ChainId.BSC_MAINNET, @@ -72,6 +73,23 @@ export const FAUCET_CHAIN_IDS = [ export const ESCROW_NETWORKS: { [chainId in ChainId]?: EscrowNetwork; } = { + [ChainId.MAINNET]: { + chainId: ChainId.MAINNET, + title: 'Ethereum', + scanUrl: 'https://etherscan.io', + rpcUrl: + 'https://eth-mainnet.g.alchemy.com/v2/VVDrD3TpJv8ZBP4CiwH2m5Oj6r0hM2st', + subgraphUrl: + 'https://api.thegraph.com/subgraphs/name/humanprotocol/mainnet-v1', + wagmiChain: {} as Chain, + factoryAddress: '0xD9c75a1Aa4237BB72a41E5E26bd8384f10c1f55a', + hmtAddress: '0xd1ba9BAC957322D6e8c07a160a3A8dA11A0d2867', + stakingAddress: '0x05398211bA2046E296fBc9a9D3EB49e3F15C3123', + kvstoreAddress: '0x70671167176C4934204B1C7e97F5e86695857ef2', + + oldSubgraphUrl: '', + oldFactoryAddress: '', + }, // TODO: Remove Rinkeby from supported chainlist [ChainId.RINKEBY]: { chainId: ChainId.RINKEBY, diff --git a/packages/core/.openzeppelin/mainnet.json b/packages/core/.openzeppelin/mainnet.json new file mode 100644 index 0000000000..8462cd3308 --- /dev/null +++ b/packages/core/.openzeppelin/mainnet.json @@ -0,0 +1,574 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0xD9c75a1Aa4237BB72a41E5E26bd8384f10c1f55a", + "kind": "uups" + }, + { + "address": "0x05398211bA2046E296fBc9a9D3EB49e3F15C3123", + "kind": "uups" + }, + { + "address": "0x4A5963Dd6792692e9147EdC7659936b96251917a", + "kind": "uups" + } + ], + "impls": { + "cae65b8f50337c1dca74ba0eb1370dc1e9494498c41590e1f88603f6d8f1fd84": { + "address": "0xe44D7eb960f24797D36FAdD8a8FfF29C76375Ef0", + "layout": { + "solcVersion": "0.8.9", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "counter", + "offset": 0, + "slot": "201", + "type": "t_uint256", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:16" + }, + { + "label": "escrowCounters", + "offset": 0, + "slot": "202", + "type": "t_mapping(t_address,t_uint256)", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:17" + }, + { + "label": "lastEscrow", + "offset": 0, + "slot": "203", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:18" + }, + { + "label": "staking", + "offset": 0, + "slot": "204", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:19" + }, + { + "label": "__gap", + "offset": 0, + "slot": "205", + "type": "t_array(t_uint256)46_storage", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:76" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "9737c9f30c6de85d6ea5d58b6d97e39fdefcdf6e4ddd6485660bcafb3d7bdf4b": { + "address": "0xC2163A0928034e020f0d31e1171Ba0D6d9AfFB6c", + "layout": { + "solcVersion": "0.8.9", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "token", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "Staking", + "src": "contracts/Staking.sol:26" + }, + { + "label": "rewardPool", + "offset": 0, + "slot": "202", + "type": "t_address", + "contract": "Staking", + "src": "contracts/Staking.sol:29" + }, + { + "label": "minimumStake", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "Staking", + "src": "contracts/Staking.sol:32" + }, + { + "label": "lockPeriod", + "offset": 0, + "slot": "204", + "type": "t_uint32", + "contract": "Staking", + "src": "contracts/Staking.sol:35" + }, + { + "label": "stakes", + "offset": 0, + "slot": "205", + "type": "t_mapping(t_address,t_struct(Staker)6830_storage)", + "contract": "Staking", + "src": "contracts/Staking.sol:38" + }, + { + "label": "stakers", + "offset": 0, + "slot": "206", + "type": "t_array(t_address)dyn_storage", + "contract": "Staking", + "src": "contracts/Staking.sol:41" + }, + { + "label": "allocations", + "offset": 0, + "slot": "207", + "type": "t_mapping(t_address,t_struct(Allocation)6690_storage)", + "contract": "Staking", + "src": "contracts/Staking.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "208", + "type": "t_array(t_uint256)43_storage", + "contract": "Staking", + "src": "contracts/Staking.sol:581" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)43_storage": { + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_struct(Allocation)6690_storage)": { + "label": "mapping(address => struct IStaking.Allocation)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Staker)6830_storage)": { + "label": "mapping(address => struct Stakes.Staker)", + "numberOfBytes": "32" + }, + "t_struct(Allocation)6690_storage": { + "label": "struct IStaking.Allocation", + "members": [ + { + "label": "escrowAddress", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "staker", + "type": "t_address", + "offset": 0, + "slot": "1" + }, + { + "label": "tokens", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "createdAt", + "type": "t_uint256", + "offset": 0, + "slot": "3" + }, + { + "label": "closedAt", + "type": "t_uint256", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(Staker)6830_storage": { + "label": "struct Stakes.Staker", + "members": [ + { + "label": "tokensStaked", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tokensAllocated", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "tokensLocked", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "tokensLockedUntil", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "14ec7e82555dc0398381585da8cdbc43e7a8b6e8fc7e28bd070b1390050b0d2b": { + "address": "0x25E53A6D48A2744273C082e55bA5CCFCfD80f9e1", + "layout": { + "solcVersion": "0.8.9", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "token", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:21" + }, + { + "label": "staking", + "offset": 0, + "slot": "202", + "type": "t_address", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:24" + }, + { + "label": "fees", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:27" + }, + { + "label": "rewards", + "offset": 0, + "slot": "204", + "type": "t_mapping(t_address,t_array(t_struct(Reward)1894_storage)dyn_storage)", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:30" + }, + { + "label": "totalFee", + "offset": 0, + "slot": "205", + "type": "t_uint256", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:32" + }, + { + "label": "__gap", + "offset": 0, + "slot": "206", + "type": "t_array(t_uint256)45_storage", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:137" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Reward)1894_storage)dyn_storage": { + "label": "struct IRewardPool.Reward[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_array(t_struct(Reward)1894_storage)dyn_storage)": { + "label": "mapping(address => struct IRewardPool.Reward[])", + "numberOfBytes": "32" + }, + "t_struct(Reward)1894_storage": { + "label": "struct IRewardPool.Reward", + "members": [ + { + "label": "escrowAddress", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "slasher", + "type": "t_address", + "offset": 0, + "slot": "1" + }, + { + "label": "tokens", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + } + } +} diff --git a/packages/core/hardhat.config.ts b/packages/core/hardhat.config.ts index 3fb9f71e2d..97b58e2d86 100644 --- a/packages/core/hardhat.config.ts +++ b/packages/core/hardhat.config.ts @@ -66,6 +66,12 @@ const config: HardhatUserConfig = { tenderly: { url: `https://rpc.tenderly.co/fork/${process.env.TENDERLY_FORK_ID}`, }, + mainnet: { + chainId: 1, + url: process.env.ETH_MAINNET_TESTNET_URL || '', + accounts: + process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], + }, goerli: { chainId: 5, url: process.env.ETH_GOERLI_TESTNET_URL || '', diff --git a/packages/sdk/python/human-protocol-basemodels/Pipfile b/packages/sdk/python/human-protocol-basemodels/Pipfile index 1307ecd98c..495bf31c44 100644 --- a/packages/sdk/python/human-protocol-basemodels/Pipfile +++ b/packages/sdk/python/human-protocol-basemodels/Pipfile @@ -7,7 +7,7 @@ verify_ssl = true [packages] requests = "*" -pydantic = "*" +pydantic = "==1.10.4" pytest = "*" black = "*" pylint = "*" diff --git a/packages/sdk/typescript/subgraph/config/mainnet-v1.json b/packages/sdk/typescript/subgraph/config/mainnet-v1.json new file mode 100644 index 0000000000..54f768db7c --- /dev/null +++ b/packages/sdk/typescript/subgraph/config/mainnet-v1.json @@ -0,0 +1,32 @@ +{ + "network": "mainnet", + "description": "Human subgraph on Ethereum Mainnet", + "EscrowFactory": { + "address": "0xD9c75a1Aa4237BB72a41E5E26bd8384f10c1f55a", + "startBlock": 16924057, + "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + }, + "HMToken": { + "address": "0xd1ba9BAC957322D6e8c07a160a3A8dA11A0d2867", + "startBlock": 12184475, + "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + }, + "Escrow": { + "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + }, + "KVStore": { + "address": "0x70671167176C4934204B1C7e97F5e86695857ef2", + "startBlock": 16924058, + "abi": "./node_modules/@human-protocol/core/abis/KVStore.json" + }, + "Staking": { + "address": "0x05398211bA2046E296fBc9a9D3EB49e3F15C3123", + "startBlock": 16924055, + "abi": "./node_modules/@human-protocol/core/abis/Staking.json" + }, + "RewardPool": { + "address": "0x4A5963Dd6792692e9147EdC7659936b96251917a", + "startBlock": 16968283, + "abi": "./node_modules/@human-protocol/core/abis/RewardPool.json" + } +} From 515983ecf7d6810ee107e1104cd6d84e408d09a5 Mon Sep 17 00:00:00 2001 From: portuu3 <61605646+portuu3@users.noreply.github.com> Date: Thu, 6 Apr 2023 15:54:02 +0200 Subject: [PATCH 09/22] set stripe keys for testing (#372) --- packages/examples/fortune/launcher/server/.env.development | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/examples/fortune/launcher/server/.env.development b/packages/examples/fortune/launcher/server/.env.development index ad583de70c..171774030e 100644 --- a/packages/examples/fortune/launcher/server/.env.development +++ b/packages/examples/fortune/launcher/server/.env.development @@ -17,6 +17,6 @@ REP_ORACLE_URL=http://localhost:3006/ EX_ORACLE_URL=http://localhost:3001/ REC_ORACLE_PERCENTAGE_FEE=10 REP_ORACLE_PERCENTAGE_FEE=10 -STRIPE_PUBLISHABLE_KEY= -STRIPE_SECRET_KEY= -STRIPE_WEBHOOK_SECRET= \ No newline at end of file +STRIPE_PUBLISHABLE_KEY=pk_test_51MZvgcDcc6kqFhbsVz5wGpwUwMdP99Nraxjs1UwjvOZbASMVCfXmIi8BGpswqc1IwjKpWqF6vv1yu5BeYyNWtLl0004X60vTQT +STRIPE_SECRET_KEY=sk_test_51MZvgcDcc6kqFhbsSak0B76CHI5IqV95O0Fg4nJthnxewhuEViQDrYqUuHb6O4ZbSaz9cjJwdM335SGHxC9oRbAa00aR77EkVk +STRIPE_WEBHOOK_SECRET=whsec_a7b3b3650c647809a8cfcc7d448c934a300de3cae6147143e3668b376d9b6f3f \ No newline at end of file From 4a744b45436cf691ea1efa7161c924ce47aec73b Mon Sep 17 00:00:00 2001 From: CryptoRush <98655210+leric7@users.noreply.github.com> Date: Mon, 10 Apr 2023 09:47:14 -0400 Subject: [PATCH 10/22] add mainnet wagmi config (#378) --- packages/apps/escrow-dashboard/src/constants/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/apps/escrow-dashboard/src/constants/index.ts b/packages/apps/escrow-dashboard/src/constants/index.ts index 2e97c36edd..750993c0cd 100644 --- a/packages/apps/escrow-dashboard/src/constants/index.ts +++ b/packages/apps/escrow-dashboard/src/constants/index.ts @@ -4,6 +4,7 @@ import { bscTestnet, polygon, polygonMumbai, + mainnet, moonbeam, Chain, moonbaseAlpha, @@ -81,7 +82,7 @@ export const ESCROW_NETWORKS: { 'https://eth-mainnet.g.alchemy.com/v2/VVDrD3TpJv8ZBP4CiwH2m5Oj6r0hM2st', subgraphUrl: 'https://api.thegraph.com/subgraphs/name/humanprotocol/mainnet-v1', - wagmiChain: {} as Chain, + wagmiChain: mainnet, factoryAddress: '0xD9c75a1Aa4237BB72a41E5E26bd8384f10c1f55a', hmtAddress: '0xd1ba9BAC957322D6e8c07a160a3A8dA11A0d2867', stakingAddress: '0x05398211bA2046E296fBc9a9D3EB49e3F15C3123', From 5c3a53ad232be7f5e2c72fea67f75937512a3380 Mon Sep 17 00:00:00 2001 From: CryptoRush <98655210+leric7@users.noreply.github.com> Date: Tue, 11 Apr 2023 09:55:32 -0400 Subject: [PATCH 11/22] Certik audit v2 (#371) * disable initializers from constructor * fix contract based on certik report * revert disable initializer from constructor * fix bulk payout * fix bulk payout logic * fix bulk payout * add disableInitializer to constructor * revert bulkPaid function change * remove bulkPaid and fix node sdk * fix node and python sdk * fix subgraph test * fix fortune test * fix github actions to compile core package * fix vercel config * fix job launcher server vercel config * fix server vercel config * add core compile to package * remove unnecessary artifacts from package * fix fortune test script * fix fortune test script * remove core build * fix ci test * fix vercel config for express servers * fix job launcher server vercel config * fix serverless for job launcher server * add install command in vercel config * fix vercel config for job launcher server * fix vercel config for job launcher server * fix vercel config for servers * revert unnecessary change --- .github/workflows/cd-node-basemodels.yaml | 3 + .github/workflows/cd-node-sdk.yaml | 3 + .github/workflows/cd-subgraph.yaml | 3 + .github/workflows/ci-lint.yaml | 3 + .../workflows/ci-test-escrow-dashboard.yaml | 3 + .github/workflows/ci-test-faucet-server.yaml | 3 + .github/workflows/ci-test-fortune.yaml | 7 +- .../workflows/ci-test-node-basemodels.yaml | 3 + .github/workflows/ci-test-node-sdk.yaml | 3 + .github/workflows/ci-test-subgraph.yaml | 3 + package.json | 2 +- packages/apps/faucet-server/.gitignore | 2 +- packages/apps/faucet-server/package.json | 5 +- packages/apps/faucet-server/vercel.json | 4 +- packages/core/.gitignore | 4 +- packages/core/contracts/Escrow.sol | 75 +++++---------- packages/core/contracts/EscrowFactory.sol | 5 + packages/core/contracts/HMToken.sol | 2 +- packages/core/contracts/Reputation.sol | 5 + packages/core/contracts/RewardPool.sol | 5 + packages/core/contracts/Staking.sol | 5 + .../core/contracts/interfaces/IEscrow.sol | 5 +- packages/core/hardhat.config.ts | 4 + packages/core/package.json | 8 +- packages/core/test/Escrow.ts | 38 ++------ .../fortune/exchange-oracle/package.json | 2 +- .../fortune/launcher/client/package.json | 2 +- .../fortune/launcher/server/package.json | 7 +- .../launcher/server/src/plugins/escrow.ts | 6 +- .../server/tests/plugins/escrow.test.ts | 3 - .../fortune/launcher/server/vercel.json | 4 +- packages/examples/fortune/package.json | 4 +- .../fortune/recording-oracle/package.json | 5 +- .../fortune/recording-oracle/vercel.json | 4 +- .../fortune/reputation-oracle/package.json | 5 +- .../fortune/reputation-oracle/src/index.ts | 20 ++-- .../src/services/escrow.test.ts | 95 ++++++++++++------- .../reputation-oracle/src/services/escrow.ts | 6 -- .../src/services/reputation.test.ts | 54 +++++++++-- .../fortune/reputation-oracle/vercel.json | 18 ++-- .../contracts/InvalidEscrowAbi.json | 13 --- .../fortune/tests/e2e-backend/fixtures.js | 3 +- .../sdk/python/human-protocol-sdk/.gitignore | 1 + .../sdk/python/human-protocol-sdk/Makefile | 2 +- .../human_protocol_sdk/eth_bridge.py | 50 +++++++--- .../human_protocol_sdk/job.py | 53 ++--------- .../scripts/build-contracts.sh | 4 +- .../human-protocol-sdk/package.json | 2 +- .../typescript/human-protocol-sdk/src/job.ts | 17 ++-- .../human-protocol-sdk/src/utils.ts | 46 ++++++--- .../typescript/subgraph/config/avalanche.json | 6 +- .../typescript/subgraph/config/bsc-v1.json | 12 +-- .../subgraph/config/bsctest-v1.json | 14 +-- .../sdk/typescript/subgraph/config/fuji.json | 6 +- .../typescript/subgraph/config/goerli-v1.json | 14 +-- .../subgraph/config/moonbase-alpha-v1.json | 14 +-- .../subgraph/config/moonbeam-v1.json | 12 +-- .../typescript/subgraph/config/mumbai-v1.json | 14 +-- .../subgraph/config/polygon-v1.json | 12 +-- .../sdk/typescript/subgraph/config/skale.json | 12 +-- packages/sdk/typescript/subgraph/package.json | 2 +- yarn.lock | 10 +- 62 files changed, 397 insertions(+), 360 deletions(-) diff --git a/.github/workflows/cd-node-basemodels.yaml b/.github/workflows/cd-node-basemodels.yaml index 5c990ec428..5a11ab47e0 100644 --- a/.github/workflows/cd-node-basemodels.yaml +++ b/.github/workflows/cd-node-basemodels.yaml @@ -12,6 +12,9 @@ jobs: - uses: actions/checkout@v3 - run: yarn --ignore-scripts name: Install dependencies + - run: yarn compile + name: Compile smart contracts + working-directory: ./packages/core - name: Change Package version uses: jossef/action-set-json-field@v2 with: diff --git a/.github/workflows/cd-node-sdk.yaml b/.github/workflows/cd-node-sdk.yaml index 7ab623f3f2..b2f3f57090 100644 --- a/.github/workflows/cd-node-sdk.yaml +++ b/.github/workflows/cd-node-sdk.yaml @@ -12,6 +12,9 @@ jobs: - uses: actions/checkout@v3 - run: yarn --ignore-scripts name: Install dependencies + - run: yarn compile + name: Compile smart contracts + working-directory: ./packages/core - name: Change Node.js SDK version uses: jossef/action-set-json-field@v2 with: diff --git a/.github/workflows/cd-subgraph.yaml b/.github/workflows/cd-subgraph.yaml index 0950baa936..47d3d111a9 100644 --- a/.github/workflows/cd-subgraph.yaml +++ b/.github/workflows/cd-subgraph.yaml @@ -43,6 +43,9 @@ jobs: - uses: actions/checkout@v3 - run: yarn --ignore-scripts name: Install dependencies + - run: yarn compile + name: Compile smart contracts + working-directory: ./packages/core - run: yarn global add @graphprotocol/graph-cli name: Install Graph CLI - run: graph auth --product hosted-service ${API_KEY} diff --git a/.github/workflows/ci-lint.yaml b/.github/workflows/ci-lint.yaml index d91beb0615..55f51d7fa5 100644 --- a/.github/workflows/ci-lint.yaml +++ b/.github/workflows/ci-lint.yaml @@ -15,5 +15,8 @@ jobs: - uses: actions/checkout@v3 - run: npm install --global yarn && yarn name: Install dependencies + - run: yarn compile + name: Compile smart contracts + working-directory: ./packages/core - run: yarn lint name: Run lint diff --git a/.github/workflows/ci-test-escrow-dashboard.yaml b/.github/workflows/ci-test-escrow-dashboard.yaml index f1914d47a9..721a4ab5fc 100644 --- a/.github/workflows/ci-test-escrow-dashboard.yaml +++ b/.github/workflows/ci-test-escrow-dashboard.yaml @@ -15,5 +15,8 @@ jobs: - uses: actions/checkout@v3 - run: npm install --global yarn && yarn name: Install dependencies + - run: yarn compile + name: Compile smart contracts + working-directory: ./packages/core - run: yarn escrow-dashboard:test name: Run escrow-dashboard test diff --git a/.github/workflows/ci-test-faucet-server.yaml b/.github/workflows/ci-test-faucet-server.yaml index e27438f6b7..b068db7b35 100644 --- a/.github/workflows/ci-test-faucet-server.yaml +++ b/.github/workflows/ci-test-faucet-server.yaml @@ -15,5 +15,8 @@ jobs: - uses: actions/checkout@v3 - run: npm install --global yarn && yarn name: Install dependencies + - run: yarn compile + name: Compile smart contracts + working-directory: ./packages/core - run: yarn faucet-server:test name: Run faucet-server test diff --git a/.github/workflows/ci-test-fortune.yaml b/.github/workflows/ci-test-fortune.yaml index 6c2e374092..69ecbff0a4 100644 --- a/.github/workflows/ci-test-fortune.yaml +++ b/.github/workflows/ci-test-fortune.yaml @@ -16,7 +16,10 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 18 - - run: npm install --global yarn && yarn --ignore-scripts - name: npm Install dependencies + - run: npm install --global yarn && yarn + name: Install dependencies + - run: yarn compile + name: Compile smart contracts + working-directory: ./packages/core - run: yarn fortune:test name: Run fortune test diff --git a/.github/workflows/ci-test-node-basemodels.yaml b/.github/workflows/ci-test-node-basemodels.yaml index 5bac24880e..95605015ea 100644 --- a/.github/workflows/ci-test-node-basemodels.yaml +++ b/.github/workflows/ci-test-node-basemodels.yaml @@ -15,5 +15,8 @@ jobs: - uses: actions/checkout@v3 - run: npm install --global yarn && yarn --ignore-scripts name: Install dependencies + - run: yarn compile + name: Compile smart contracts + working-directory: ./packages/core - run: yarn basemodels:test name: Run Node.js Base Models Test diff --git a/.github/workflows/ci-test-node-sdk.yaml b/.github/workflows/ci-test-node-sdk.yaml index 2a04b77d7c..9a77379389 100644 --- a/.github/workflows/ci-test-node-sdk.yaml +++ b/.github/workflows/ci-test-node-sdk.yaml @@ -15,5 +15,8 @@ jobs: - uses: actions/checkout@v3 - run: npm install --global yarn && yarn --ignore-scripts name: Install dependencies + - run: yarn compile + name: Compile smart contracts + working-directory: ./packages/core - run: yarn sdk:test name: Run Node.js SDK test diff --git a/.github/workflows/ci-test-subgraph.yaml b/.github/workflows/ci-test-subgraph.yaml index cb7cbbf767..17fc3f7428 100644 --- a/.github/workflows/ci-test-subgraph.yaml +++ b/.github/workflows/ci-test-subgraph.yaml @@ -15,5 +15,8 @@ jobs: - uses: actions/checkout@v3 - run: npm install --global yarn && yarn --ignore-scripts name: Install dependencies + - run: yarn compile + name: Compile smart contracts + working-directory: ./packages/core - run: yarn subgraph:test name: Run subgraph test diff --git a/package.json b/package.json index 1f6dc943e7..b8a4f617f2 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ }, "workspaces": { "packages": [ - "packages/**" + "packages/**/*" ] }, "devDependencies": { diff --git a/packages/apps/faucet-server/.gitignore b/packages/apps/faucet-server/.gitignore index a355c000db..456f8bd8fb 100644 --- a/packages/apps/faucet-server/.gitignore +++ b/packages/apps/faucet-server/.gitignore @@ -131,4 +131,4 @@ dist .yarn/unplugged .yarn/build-state.yml .yarn/install-state.gz -.pnp.* \ No newline at end of file +.pnp.* diff --git a/packages/apps/faucet-server/package.json b/packages/apps/faucet-server/package.json index a24b706de6..b7ae0b5eb6 100644 --- a/packages/apps/faucet-server/package.json +++ b/packages/apps/faucet-server/package.json @@ -7,12 +7,13 @@ "build": "tsc", "lint": "eslint src", "test": "concurrently -k -s first --hide 0 \"hardhat node --port 8549\" \"jest\"", - "start": "NODE_ENV=development ts-node src/index.ts" + "start": "NODE_ENV=development ts-node src/index.ts", + "vercel-build": "yarn workspace @human-protocol/core compile" }, "author": "", "license": "ISC", "dependencies": { - "@human-protocol/core": "workspace:*", + "@human-protocol/core": "*", "@skaleproject/pow-ethers": "^0.2.4", "@types/express": "^4.17.14", "axios": "^1.3.4", diff --git a/packages/apps/faucet-server/vercel.json b/packages/apps/faucet-server/vercel.json index 87168a11dc..6bf627d515 100644 --- a/packages/apps/faucet-server/vercel.json +++ b/packages/apps/faucet-server/vercel.json @@ -1,7 +1,5 @@ { - "buildCommand": "yarn workspace @human-protocol/faucet-server build", - "installCommand": "yarn install", - "outputDirectory": "build", + "version": 2, "builds": [ { "src": "src/index.ts", diff --git a/packages/core/.gitignore b/packages/core/.gitignore index d6dcca6719..178014e7c2 100644 --- a/packages/core/.gitignore +++ b/packages/core/.gitignore @@ -26,8 +26,8 @@ deployments_tenderly # OpenZeppelin .openzeppelin/unknown-*.json # moonbeam -!.openzeppelin/unknown-1284.json +!.openzeppelin/unknown-1284.json # moonbaseAlpha !.openzeppelin/unknown-1287.json -# skale +# skale !.openzeppelin/unknown-1273227453.json diff --git a/packages/core/contracts/Escrow.sol b/packages/core/contracts/Escrow.sol index 77a42f435e..1acdcb8b72 100644 --- a/packages/core/contracts/Escrow.sol +++ b/packages/core/contracts/Escrow.sol @@ -15,8 +15,6 @@ contract Escrow is IEscrow, ReentrancyGuard { bytes4 private constant FUNC_SELECTOR_BALANCE_OF = bytes4(keccak256('balanceOf(address)')); - bytes4 private constant FUNC_SELECTOR_TRANSFER = - bytes4(keccak256('transfer(address,uint256)')); string constant ERROR_ZERO_ADDRESS = 'Escrow: zero address'; @@ -48,16 +46,12 @@ contract Escrow is IEscrow, ReentrancyGuard { string public manifestUrl; string public manifestHash; - uint256 public remainingSolutions; string public finalResultsUrl; string public finalResultsHash; uint256 public duration; - uint256[] public finalAmounts; - bool public bulkPaid; - mapping(address => bool) public areTrustedHandlers; constructor( @@ -110,8 +104,7 @@ contract Escrow is IEscrow, ReentrancyGuard { uint256 _reputationOracleStake, uint256 _recordingOracleStake, string memory _url, - string memory _hash, - uint256 _solutionsRequested + string memory _hash ) external override trusted notExpired { require( _reputationOracle != address(0), @@ -121,7 +114,6 @@ contract Escrow is IEscrow, ReentrancyGuard { _recordingOracle != address(0), 'Invalid or missing token spender' ); - require(_solutionsRequested > 0, 'Invalid or missing solutions'); uint256 totalStake = _reputationOracleStake.add(_recordingOracleStake); require(totalStake <= 100, 'Stake out of bounds'); require( @@ -139,7 +131,6 @@ contract Escrow is IEscrow, ReentrancyGuard { manifestUrl = _url; manifestHash = _hash; - remainingSolutions = _solutionsRequested; status = EscrowStatuses.Pending; emit Pending(manifestUrl, manifestHash); } @@ -191,6 +182,10 @@ contract Escrow is IEscrow, ReentrancyGuard { emit IntermediateStorage(_sender, _url, _hash); } + /** + * @dev Bulk payout workers + * Should fail if any of the transaction is failing. + */ function bulkPayOut( address[] memory _recipients, uint256[] memory _amounts, @@ -206,7 +201,6 @@ contract Escrow is IEscrow, ReentrancyGuard { notPaid notExpired nonReentrant - returns (bool) { require( _recipients.length == _amounts.length, @@ -220,71 +214,46 @@ contract Escrow is IEscrow, ReentrancyGuard { ); uint256 balance = getBalance(); - bulkPaid = false; uint256 aggregatedBulkAmount = 0; for (uint256 i; i < _amounts.length; i++) { aggregatedBulkAmount = aggregatedBulkAmount.add(_amounts[i]); } require(aggregatedBulkAmount < BULK_MAX_VALUE, 'Bulk value too high'); - - if (balance < aggregatedBulkAmount) { - return bulkPaid; - } + require(aggregatedBulkAmount <= balance, 'Not enough balance'); _storeResult(_url, _hash); ( + uint256[] memory finalAmounts, uint256 reputationOracleFee, uint256 recordingOracleFee ) = finalizePayouts(_amounts); - uint256[] memory _amountsPaid = new uint256[](_recipients.length); for (uint256 i = 0; i < _recipients.length; ++i) { - uint256 amount = finalAmounts[i]; - if (amount == 0) { - continue; - } - finalAmounts[i] = 0; - _safeTransfer(_recipients[i], amount); - _amountsPaid[i] = amount; + _safeTransfer(_recipients[i], finalAmounts[i]); } - delete finalAmounts; - _safeTransfer(reputationOracle, reputationOracleFee); _safeTransfer(recordingOracle, recordingOracleFee); - bulkPaid = true; balance = getBalance(); - if (bulkPaid) { - if (status == EscrowStatuses.Pending) { - status = EscrowStatuses.Partial; - remainingSolutions = remainingSolutions.sub(_recipients.length); - } - if ( - balance > 0 && - status == EscrowStatuses.Partial && - remainingSolutions == 0 - ) { - _safeTransfer(canceler, balance); - status = EscrowStatuses.Paid; - } - if (balance == 0 && status == EscrowStatuses.Partial) { - status = EscrowStatuses.Paid; - } + + bool isPartial; + if (balance == 0) { + status = EscrowStatuses.Paid; + isPartial = false; + } else { + status = EscrowStatuses.Partial; + isPartial = true; } - emit BulkTransfer( - _txId, - _recipients, - _amountsPaid, - status == EscrowStatuses.Partial - ); - return true; + + emit BulkTransfer(_txId, _recipients, finalAmounts, isPartial); } function finalizePayouts( uint256[] memory _amounts - ) internal returns (uint256, uint256) { + ) internal view returns (uint256[] memory, uint256, uint256) { + uint256[] memory finalAmounts = new uint256[](_amounts.length); uint256 reputationOracleFee = 0; uint256 recordingOracleFee = 0; for (uint256 j; j < _amounts.length; j++) { @@ -303,9 +272,9 @@ contract Escrow is IEscrow, ReentrancyGuard { recordingOracleFee = recordingOracleFee.add( singleRecordingOracleFee ); - finalAmounts.push(amount); + finalAmounts[j] = amount; } - return (reputationOracleFee, recordingOracleFee); + return (finalAmounts, reputationOracleFee, recordingOracleFee); } function _safeTransfer(address to, uint256 value) internal { diff --git a/packages/core/contracts/EscrowFactory.sol b/packages/core/contracts/EscrowFactory.sol index b029488e59..8d1f147b0a 100644 --- a/packages/core/contracts/EscrowFactory.sol +++ b/packages/core/contracts/EscrowFactory.sol @@ -20,6 +20,11 @@ contract EscrowFactory is OwnableUpgradeable, UUPSUpgradeable { event Launched(address token, address escrow); + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + function initialize(address _staking) external payable virtual initializer { __Ownable_init_unchained(); __EscrowFactory_init_unchained(_staking); diff --git a/packages/core/contracts/HMToken.sol b/packages/core/contracts/HMToken.sol index 25a3abbdcf..830490bbf6 100644 --- a/packages/core/contracts/HMToken.sol +++ b/packages/core/contracts/HMToken.sol @@ -23,7 +23,7 @@ contract HMToken is HMTokenInterface, Ownable { uint256 public totalSupply; uint256 private constant MAX_UINT256 = ~uint256(0); - uint256 private constant BULK_MAX_VALUE = 1000000000 * (10 ** 18); + uint256 private constant BULK_MAX_VALUE = (10 ** 9) * (10 ** 18); uint32 private constant BULK_MAX_COUNT = 100; event BulkTransfer(uint256 indexed _txId, uint256 _bulkCount); diff --git a/packages/core/contracts/Reputation.sol b/packages/core/contracts/Reputation.sol index 0264120ccd..f7da39f9a4 100644 --- a/packages/core/contracts/Reputation.sol +++ b/packages/core/contracts/Reputation.sol @@ -23,6 +23,11 @@ contract Reputation is OwnableUpgradeable, UUPSUpgradeable { int256 private constant MAX_REPUTATION = 100; mapping(address => int256) public reputations; + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + function initialize( address _staking, uint256 _minimumStake diff --git a/packages/core/contracts/RewardPool.sol b/packages/core/contracts/RewardPool.sol index 3bfb9fc3fc..52074f0045 100644 --- a/packages/core/contracts/RewardPool.sol +++ b/packages/core/contracts/RewardPool.sol @@ -40,6 +40,11 @@ contract RewardPool is IRewardPool, OwnableUpgradeable, UUPSUpgradeable { uint256 tokens ); + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + function initialize( address _token, address _staking, diff --git a/packages/core/contracts/Staking.sol b/packages/core/contracts/Staking.sol index f6658dfe81..032abe2154 100644 --- a/packages/core/contracts/Staking.sol +++ b/packages/core/contracts/Staking.sol @@ -103,6 +103,11 @@ contract Staking is IStaking, OwnableUpgradeable, UUPSUpgradeable { */ event SetRewardPool(address indexed rewardPool); + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + function initialize( address _token, uint256 _minimumStake, diff --git a/packages/core/contracts/interfaces/IEscrow.sol b/packages/core/contracts/interfaces/IEscrow.sol index d92c90c545..ba37744890 100644 --- a/packages/core/contracts/interfaces/IEscrow.sol +++ b/packages/core/contracts/interfaces/IEscrow.sol @@ -22,8 +22,7 @@ interface IEscrow { uint256 _reputationOracleStake, uint256 _recordingOracleStake, string memory _url, - string memory _hash, - uint256 _solutionsRequested + string memory _hash ) external; function abort() external; @@ -44,5 +43,5 @@ interface IEscrow { string memory _url, string memory _hash, uint256 _txId - ) external returns (bool); + ) external; } diff --git a/packages/core/hardhat.config.ts b/packages/core/hardhat.config.ts index 97b58e2d86..5bb2502f1b 100644 --- a/packages/core/hardhat.config.ts +++ b/packages/core/hardhat.config.ts @@ -13,6 +13,7 @@ import * as tdly from '@tenderly/hardhat-tenderly'; import 'hardhat-abi-exporter'; import '@nomicfoundation/hardhat-toolbox'; import '@openzeppelin/hardhat-upgrades'; +import 'hardhat-dependency-compiler'; dotenv.config(); @@ -184,6 +185,9 @@ const config: HardhatUserConfig = { mocha: { timeout: 200000, }, + dependencyCompiler: { + paths: ['@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol'], + }, }; export default config; diff --git a/packages/core/package.json b/packages/core/package.json index b15d0c1f1a..5fb3cb9fcf 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,15 +1,16 @@ { "name": "@human-protocol/core", "description": "Human Protocol Core Smart Contracts", - "version": "1.0.41", + "version": "1.0.45", "files": [ "contracts/**/*.sol", "abis/**/*.json", - "artifacts/contracts/**/*.json", + "artifacts/@openzeppelin/**/[^.]*.json", + "artifacts/contracts/**/[^.]*.json", "typechain-types/**/*.ts" ], "scripts": { - "clean": "hardhat clean && rm -rf abis cache artifacts", + "clean": "hardhat clean && rm -rf abis cache artifacts typechain-types", "precompile": "npm run clean", "compile": "hardhat compile", "verify": "hardhat verify", @@ -60,6 +61,7 @@ "hardhat": "^2.12.6", "hardhat-abi-exporter": "^2.10.1", "hardhat-contract-sizer": "^2.6.1", + "hardhat-dependency-compiler": "^1.1.3", "hardhat-gas-reporter": "^1.0.9", "openpgp": "5.5.0", "prettier-plugin-solidity": "^1.0.0-beta.24", diff --git a/packages/core/test/Escrow.ts b/packages/core/test/Escrow.ts index 426ac99e5a..e92719a9bc 100644 --- a/packages/core/test/Escrow.ts +++ b/packages/core/test/Escrow.ts @@ -6,7 +6,6 @@ import { Escrow, HMToken } from '../typechain-types'; const MOCK_URL = 'http://google.com/fake'; const MOCK_HASH = 'kGKmnj9BRf'; -const MOCK_SOLUTIONS = 3; const BULK_MAX_COUNT = 100; enum Status { @@ -48,8 +47,7 @@ async function setupEscrow() { 10, 10, MOCK_URL, - MOCK_HASH, - MOCK_SOLUTIONS + MOCK_HASH ); } @@ -290,8 +288,7 @@ describe('Escrow', function () { 10, 10, MOCK_URL, - MOCK_HASH, - MOCK_SOLUTIONS + MOCK_HASH ) ).to.be.revertedWith('Address calling not trusted'); }); @@ -306,8 +303,7 @@ describe('Escrow', function () { 10, 10, MOCK_URL, - MOCK_HASH, - MOCK_SOLUTIONS + MOCK_HASH ) ).to.be.revertedWith('Invalid or missing token spender'); }); @@ -322,28 +318,11 @@ describe('Escrow', function () { 10, 10, MOCK_URL, - MOCK_HASH, - MOCK_SOLUTIONS + MOCK_HASH ) ).to.be.revertedWith('Invalid or missing token spender'); }); - it('Should revert with the right error if set invalid number of solutions', async function () { - await expect( - escrow - .connect(owner) - .setup( - await reputationOracle.getAddress(), - await recordingOracle.getAddress(), - 10, - 10, - MOCK_URL, - MOCK_HASH, - 0 - ) - ).to.be.revertedWith('Invalid or missing solutions'); - }); - it('Should revert with the right error if stake out of bounds and too high', async function () { await expect( escrow @@ -354,8 +333,7 @@ describe('Escrow', function () { 500, 500, MOCK_URL, - MOCK_HASH, - MOCK_SOLUTIONS + MOCK_HASH ) ).to.be.revertedWith('Stake out of bounds'); }); @@ -376,8 +354,7 @@ describe('Escrow', function () { 10, 10, MOCK_URL, - MOCK_HASH, - MOCK_SOLUTIONS + MOCK_HASH ) ) .to.emit(escrow, 'Pending') @@ -400,8 +377,7 @@ describe('Escrow', function () { 10, 10, MOCK_URL, - MOCK_HASH, - MOCK_SOLUTIONS + MOCK_HASH ); expect(await escrow.reputationOracle()).to.equal( diff --git a/packages/examples/fortune/exchange-oracle/package.json b/packages/examples/fortune/exchange-oracle/package.json index c482a31c5c..6f2fecf549 100644 --- a/packages/examples/fortune/exchange-oracle/package.json +++ b/packages/examples/fortune/exchange-oracle/package.json @@ -5,7 +5,7 @@ "license": "MIT", "private": false, "dependencies": { - "@human-protocol/core": "workspace:*", + "@human-protocol/core": "*", "@web3modal/ethereum": "^2.2.1", "@web3modal/react": "^2.2.1", "@web3modal/ui": "^2.2.1", diff --git a/packages/examples/fortune/launcher/client/package.json b/packages/examples/fortune/launcher/client/package.json index a7d451d574..435329ca3c 100644 --- a/packages/examples/fortune/launcher/client/package.json +++ b/packages/examples/fortune/launcher/client/package.json @@ -5,7 +5,7 @@ "dependencies": { "@emotion/react": "^11.10.5", "@emotion/styled": "^11.10.5", - "@human-protocol/core": "workspace:*", + "@human-protocol/core": "*", "@mui/material": "^5.11.7", "@stripe/react-stripe-js": "^1.16.4", "@stripe/stripe-js": "^1.46.0", diff --git a/packages/examples/fortune/launcher/server/package.json b/packages/examples/fortune/launcher/server/package.json index b8b96a1364..398fc6024e 100644 --- a/packages/examples/fortune/launcher/server/package.json +++ b/packages/examples/fortune/launcher/server/package.json @@ -7,7 +7,7 @@ "private": false, "dependencies": { "@fastify/cors": "^8.2.0", - "@human-protocol/core": "workspace:*", + "@human-protocol/core": "*", "@sinclair/typebox": "^0.25.21", "@types/minio": "^7.0.15", "ajv": "^8.12.0", @@ -25,7 +25,8 @@ "build": "tsc", "start:prod": "ts-node build/src/index.js", "start": "NODE_ENV=development ts-node ./src/index.ts", - "test": "concurrently -k -s first --hide 0 \"hardhat node --port 8546\" \"sleep 5 && RPC_PORT=8546 yarn workspace @human-protocol/core deploy:local && RPC_PORT=8546 vitest --run\"", - "lint": "eslint '**/*.ts'" + "test": "concurrently -k -s first --hide 0 \"hardhat node --port 8546\" \"sleep 5 && RPC_PORT=8546 yarn workspace @human-protocol/core deploy:local && RPC_PORT=8546 vitest run -u\"", + "lint": "eslint '**/*.ts'", + "vercel-build": "yarn workspace @human-protocol/core compile" } } diff --git a/packages/examples/fortune/launcher/server/src/plugins/escrow.ts b/packages/examples/fortune/launcher/server/src/plugins/escrow.ts index c2dbb3a4d8..0a1630eedd 100644 --- a/packages/examples/fortune/launcher/server/src/plugins/escrow.ts +++ b/packages/examples/fortune/launcher/server/src/plugins/escrow.ts @@ -56,8 +56,7 @@ class Escrow { this.repOracleFee, this.recOracleFee, url, - url, - fortunesRequested + url ) .estimateGas({ from: web3.eth.defaultAccount }); const gasPrice = await web3.eth.getGasPrice(); @@ -68,8 +67,7 @@ class Escrow { this.repOracleFee, this.recOracleFee, url, - url, - fortunesRequested + url ) .send({ from: web3.eth.defaultAccount, gas, gasPrice }); } diff --git a/packages/examples/fortune/launcher/server/tests/plugins/escrow.test.ts b/packages/examples/fortune/launcher/server/tests/plugins/escrow.test.ts index 9ff5dee1c2..cabe7179af 100644 --- a/packages/examples/fortune/launcher/server/tests/plugins/escrow.test.ts +++ b/packages/examples/fortune/launcher/server/tests/plugins/escrow.test.ts @@ -130,9 +130,6 @@ describe('Escrow tests', async () => { const url = 'http://test.com'; await escrow.setupEscrow(web3Client, escrowAddress, url, 3); expect(await escrowContract.methods.manifestUrl().call()).eq(url); - expect(Number(await escrowContract.methods.remainingSolutions().call())).eq( - 3 - ); }); test('Should not detect curse words', () => { diff --git a/packages/examples/fortune/launcher/server/vercel.json b/packages/examples/fortune/launcher/server/vercel.json index 5cb92ece10..6bf627d515 100644 --- a/packages/examples/fortune/launcher/server/vercel.json +++ b/packages/examples/fortune/launcher/server/vercel.json @@ -1,7 +1,5 @@ { - "buildCommand": "yarn workspace @human-protocol/job-launcher-server build", - "installCommand": "yarn install", - "outputDirectory": "build", + "version": 2, "builds": [ { "src": "src/index.ts", diff --git a/packages/examples/fortune/package.json b/packages/examples/fortune/package.json index f71cab1969..581d907c2b 100644 --- a/packages/examples/fortune/package.json +++ b/packages/examples/fortune/package.json @@ -20,7 +20,7 @@ "test:launcher-server": "yarn workspace @human-protocol/fortune-job-launcher-server test", "test:launcher-client": "yarn workspace @human-protocol/fortune-job-launcher-client test", "test:e2e:backend": "(concurrently -k -s first -g --hide 0 \"yarn start:backend\" \"sleep 5 && yarn deploy:contracts && jest tests/e2e-backend --runInBand\") && docker compose down", - "test:unit": "(concurrently -g \"yarn test:exchange-oracle\" \"yarn test:recording-oracle\" \"yarn test:reputation-oracle\" \"yarn test:launcher-server\" \"yarn test:launcher-client\") && docker compose down", + "test:unit": "yarn test:exchange-oracle && yarn test:recording-oracle && yarn test:reputation-oracle && yarn test:launcher-server && yarn test:launcher-client && docker compose down", "test": "concurrently -g \"yarn start:minio\" \"yarn test:unit\"", "lint:exchange-oracle": "yarn workspace @human-protocol/fortune-exchange-oracle lint", "lint:recording-oracle": "yarn workspace @human-protocol/fortune-recording-oracle lint", @@ -30,7 +30,7 @@ "lint": "concurrently -g \"yarn lint:exchange-oracle\" \"yarn lint:recording-oracle\" \"yarn lint:reputation-oracle\" \"yarn lint:launcher-server\" \"yarn lint:launcher-client\"" }, "devDependencies": { - "@human-protocol/core": "workspace:*", + "@human-protocol/core": "*", "axios": "^1.1.3", "hardhat": "^2.12.2", "web3": "^1.8.0" diff --git a/packages/examples/fortune/recording-oracle/package.json b/packages/examples/fortune/recording-oracle/package.json index 7524528740..6aab05a792 100644 --- a/packages/examples/fortune/recording-oracle/package.json +++ b/packages/examples/fortune/recording-oracle/package.json @@ -10,7 +10,8 @@ "build": "tsc", "start:prod": "ts-node build/src/index.js", "start": "NODE_ENV=development ts-node ./src/index.ts", - "test": "concurrently -k -s first --hide 0 \"hardhat node --port 8547\" \"sleep 10 && RPC_PORT=8547 yarn workspace @human-protocol/core deploy:local && RPC_PORT=8547 vitest --run\"" + "test": "concurrently -k -s first --hide 0 \"hardhat node --port 8547\" \"sleep 10 && RPC_PORT=8547 yarn workspace @human-protocol/core deploy:local && RPC_PORT=8547 vitest run -u\"", + "vercel-build": "yarn workspace @human-protocol/core compile" }, "repository": { "type": "git", @@ -30,7 +31,7 @@ "homepage": "https://github.com/humanprotocol/human-protocol/tree/main/packages/examples/fortune/recording-oracle#readme", "dependencies": { "@fastify/cors": "^8.2.0", - "@human-protocol/core": "workspace:*", + "@human-protocol/core": "*", "@sinclair/typebox": "^0.23.5", "ajv": "^8.11.2", "aws-sdk": "^2.1294.0", diff --git a/packages/examples/fortune/recording-oracle/vercel.json b/packages/examples/fortune/recording-oracle/vercel.json index 06aac0c929..6bf627d515 100644 --- a/packages/examples/fortune/recording-oracle/vercel.json +++ b/packages/examples/fortune/recording-oracle/vercel.json @@ -1,7 +1,5 @@ { - "buildCommand": "yarn workspace @human-protocol/fortune-recording-oracle build", - "installCommand": "yarn install", - "outputDirectory": "build", + "version": 2, "builds": [ { "src": "src/index.ts", diff --git a/packages/examples/fortune/reputation-oracle/package.json b/packages/examples/fortune/reputation-oracle/package.json index c1cbce7a70..65a0e33ba3 100644 --- a/packages/examples/fortune/reputation-oracle/package.json +++ b/packages/examples/fortune/reputation-oracle/package.json @@ -12,7 +12,7 @@ "@types/minio": "^7.0.14" }, "dependencies": { - "@human-protocol/core": "workspace:*", + "@human-protocol/core": "*", "axios": "^1.1.3", "minio": "^7.0.32", "web3": "^1.8.1" @@ -22,6 +22,7 @@ "start:prod": "ts-node build/src/index.js", "start": "ts-node src/index.ts", "test": "concurrently -k -s first --hide 0 \"hardhat node --port 8548\" \"jest\"", - "lint": "eslint '**/*.ts'" + "lint": "eslint '**/*.ts'", + "vercel-build": "yarn workspace @human-protocol/core compile" } } diff --git a/packages/examples/fortune/reputation-oracle/src/index.ts b/packages/examples/fortune/reputation-oracle/src/index.ts index 79ba3f20ae..bb4ad6afd2 100644 --- a/packages/examples/fortune/reputation-oracle/src/index.ts +++ b/packages/examples/fortune/reputation-oracle/src/index.ts @@ -4,7 +4,6 @@ import bodyParser from 'body-parser'; import Web3 from 'web3'; import { bulkPayOut, - bulkPaid, getBalance, getEscrowManifestUrl, } from './services/escrow'; @@ -98,15 +97,16 @@ app.post('/send-fortunes', async (req, res) => { // TODO calculate the URL hash(?) const resultsUrl = await uploadResults(escrow, escrow.escrowAddress); const resultHash = resultsUrl; - await bulkPayOut( - web3, - escrow.escrowAddress, - workerAddresses, - rewards, - resultsUrl, - resultHash - ); - if (!(await bulkPaid(web3, escrow.escrowAddress))) { + try { + await bulkPayOut( + web3, + escrow.escrowAddress, + workerAddresses, + rewards, + resultsUrl, + resultHash + ); + } catch { errorMessage.push( `Escrow ${escrow.escrowAddress} payout couldn't be done` ); diff --git a/packages/examples/fortune/reputation-oracle/src/services/escrow.test.ts b/packages/examples/fortune/reputation-oracle/src/services/escrow.test.ts index b769beae86..61be2771d2 100644 --- a/packages/examples/fortune/reputation-oracle/src/services/escrow.test.ts +++ b/packages/examples/fortune/reputation-oracle/src/services/escrow.test.ts @@ -1,11 +1,7 @@ import Web3 from 'web3'; -import { - getBalance, - bulkPayOut, - bulkPaid, - getEscrowManifestUrl, -} from './escrow'; +import { getBalance, bulkPayOut, getEscrowManifestUrl } from './escrow'; import { describe, expect, it, beforeAll, beforeEach } from '@jest/globals'; +import Proxy from '@human-protocol/core/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json'; import Escrow from '@human-protocol/core/artifacts/contracts/Escrow.sol/Escrow.json'; import HMToken from '@human-protocol/core/artifacts/contracts/HMToken.sol//HMToken.json'; import EscrowFactory from '@human-protocol/core/artifacts/contracts/EscrowFactory.sol/EscrowFactory.json'; @@ -51,8 +47,10 @@ describe('Fortune', () => { from: owner.address, }); + const proxyContract = new web3.eth.Contract(Proxy.abi as []); + const stakingContract = new web3.eth.Contract(Staking.abi as []); - staking = await stakingContract + const stakingIml = await stakingContract .deploy({ data: Staking.bytecode, arguments: [], @@ -60,15 +58,32 @@ describe('Fortune', () => { .send({ from: owner.address, }); - - await staking.methods - .initialize(token.options.address, web3.utils.toWei('1', 'ether'), 1) - .send({ from: owner.address }); + const stakingProxy = await proxyContract + .deploy({ + data: Proxy.bytecode, + arguments: [ + stakingIml.options.address, + stakingContract.methods + .initialize( + token.options.address, + web3.utils.toWei('1', 'ether'), + 1 + ) + .encodeABI(), + ], + }) + .send({ + from: owner.address, + }); + staking = new web3.eth.Contract( + Staking.abi as [], + stakingProxy.options.address + ); const escrowFactoryContract = new web3.eth.Contract( EscrowFactory.abi as [] ); - escrowFactory = await escrowFactoryContract + const escrowFactoryImpl = await escrowFactoryContract .deploy({ data: EscrowFactory.bytecode, arguments: [], @@ -76,10 +91,23 @@ describe('Fortune', () => { .send({ from: owner.address, }); - - await escrowFactory.methods.initialize(staking.options.address).send({ - from: owner.address, - }); + const escrowFactoryProxy = await proxyContract + .deploy({ + data: Proxy.bytecode, + arguments: [ + escrowFactoryImpl.options.address, + escrowFactoryContract.methods + .initialize(staking.options.address) + .encodeABI(), + ], + }) + .send({ + from: owner.address, + }); + escrowFactory = new web3.eth.Contract( + EscrowFactory.abi as [], + escrowFactoryProxy.options.address + ); await token.methods .transfer(launcher.address, web3.utils.toWei('1000', 'ether')) @@ -114,8 +142,7 @@ describe('Fortune', () => { 10, 10, 'manifestUrl', - 'manifestUrl', - 3 + 'manifestUrl' ) .send({ from: launcher.address }); }); @@ -131,21 +158,23 @@ describe('Fortune', () => { }); it('Bulk payout rewards, higher amount than balance', async () => { - await bulkPayOut( - web3, - escrowAddress, - [worker1, worker2, worker3], - [ - web3.utils.toWei('15', 'ether'), - web3.utils.toWei('15', 'ether'), - web3.utils.toWei('15', 'ether'), - ], - 'localhost', - 'localhost' - ); - const result = await bulkPaid(web3, escrowAddress); + try { + await bulkPayOut( + web3, + escrowAddress, + [worker1, worker2, worker3], + [ + web3.utils.toWei('15', 'ether'), + web3.utils.toWei('15', 'ether'), + web3.utils.toWei('15', 'ether'), + ], + 'localhost', + 'localhost' + ); + } catch (e) { + expect(e.message).toContain('Not enough balance'); + } - expect(result).toBe(false); expect(await token.methods.balanceOf(worker1).call()).toBe( web3.utils.toWei('0', 'ether') ); @@ -170,9 +199,7 @@ describe('Fortune', () => { 'localhost', 'localhost' ); - const result = await bulkPaid(web3, escrowAddress); - expect(result).toBe(true); expect(await token.methods.balanceOf(worker1).call()).toBe( web3.utils.toWei('8', 'ether') ); diff --git a/packages/examples/fortune/reputation-oracle/src/services/escrow.ts b/packages/examples/fortune/reputation-oracle/src/services/escrow.ts index 7a939a3b79..ebd1e35a9f 100644 --- a/packages/examples/fortune/reputation-oracle/src/services/escrow.ts +++ b/packages/examples/fortune/reputation-oracle/src/services/escrow.ts @@ -32,9 +32,3 @@ export async function bulkPayOut( .bulkPayOut(workerAddresses, rewards, resultsUrl, resultHash, 1) .send({ from: web3.eth.defaultAccount, gas: gasNeeded, gasPrice }); } - -export async function bulkPaid(web3: Web3, escrowAddress: string) { - const Escrow = new web3.eth.Contract(EscrowAbi as [], escrowAddress); - const result = await Escrow.methods.bulkPaid().call(); - return result; -} diff --git a/packages/examples/fortune/reputation-oracle/src/services/reputation.test.ts b/packages/examples/fortune/reputation-oracle/src/services/reputation.test.ts index 4a72bbbe15..9c1317a766 100644 --- a/packages/examples/fortune/reputation-oracle/src/services/reputation.test.ts +++ b/packages/examples/fortune/reputation-oracle/src/services/reputation.test.ts @@ -1,3 +1,4 @@ +import Proxy from '@human-protocol/core/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json'; import HMToken from '@human-protocol/core/artifacts/contracts/HMToken.sol//HMToken.json'; import Reputation from '@human-protocol/core/artifacts/contracts/Reputation.sol/Reputation.json'; import Staking from '@human-protocol/core/artifacts/contracts/Staking.sol/Staking.json'; @@ -49,8 +50,10 @@ describe('Reputation', () => { from: owner.address, }); + const proxyContract = new web3.eth.Contract(Proxy.abi as []); + const stakingContract = new web3.eth.Contract(Staking.abi as []); - staking = await stakingContract + const stakingIml = await stakingContract .deploy({ data: Staking.bytecode, arguments: [], @@ -58,15 +61,34 @@ describe('Reputation', () => { .send({ from: owner.address, }); - - await staking.methods - .initialize(token.options.address, web3.utils.toWei('1', 'ether'), 1) - .send({ from: owner.address }); + const stakingProxy = await proxyContract + .deploy({ + data: Proxy.bytecode, + arguments: [ + stakingIml.options.address, + stakingContract.methods + .initialize( + token.options.address, + web3.utils.toWei('1', 'ether'), + 1 + ) + .encodeABI(), + ], + }) + .send({ + from: owner.address, + }); + staking = new web3.eth.Contract( + Staking.abi as [], + stakingProxy.options.address + ); }); beforeEach(async () => { + const proxyContract = new web3.eth.Contract(Proxy.abi as []); + const reputationContract = new web3.eth.Contract(Reputation.abi as []); - reputation = await reputationContract + const reputationImpl = await reputationContract .deploy({ data: Reputation.bytecode, arguments: [], @@ -75,9 +97,23 @@ describe('Reputation', () => { from: owner.address, }); - await reputation.methods - .initialize(staking.options.address, 1) - .send({ from: owner.address }); + const reputationProxy = await proxyContract + .deploy({ + data: Proxy.bytecode, + arguments: [ + reputationImpl.options.address, + reputationContract.methods + .initialize(staking.options.address, 1) + .encodeABI(), + ], + }) + .send({ + from: owner.address, + }); + reputation = new web3.eth.Contract( + Reputation.abi as [], + reputationProxy.options.address + ); await token.methods .transfer(reputationAccount.address, web3.utils.toWei('1000', 'ether')) diff --git a/packages/examples/fortune/reputation-oracle/vercel.json b/packages/examples/fortune/reputation-oracle/vercel.json index a6e05184e2..6bf627d515 100644 --- a/packages/examples/fortune/reputation-oracle/vercel.json +++ b/packages/examples/fortune/reputation-oracle/vercel.json @@ -1,15 +1,15 @@ { "version": 2, "builds": [ - { - "src": "src/index.ts", - "use": "@vercel/node" - } + { + "src": "src/index.ts", + "use": "@vercel/node" + } ], "routes": [ - { - "src": "/(.*)", - "dest": "src/index.ts" - } + { + "src": "/(.*)", + "dest": "src/index.ts" + } ] -} \ No newline at end of file +} diff --git a/packages/examples/fortune/tests/e2e-backend/contracts/InvalidEscrowAbi.json b/packages/examples/fortune/tests/e2e-backend/contracts/InvalidEscrowAbi.json index ef1b344491..6ef80bf1b4 100644 --- a/packages/examples/fortune/tests/e2e-backend/contracts/InvalidEscrowAbi.json +++ b/packages/examples/fortune/tests/e2e-backend/contracts/InvalidEscrowAbi.json @@ -102,19 +102,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "bulkPaid", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { diff --git a/packages/examples/fortune/tests/e2e-backend/fixtures.js b/packages/examples/fortune/tests/e2e-backend/fixtures.js index 558190d79b..58553cb0b5 100644 --- a/packages/examples/fortune/tests/e2e-backend/fixtures.js +++ b/packages/examples/fortune/tests/e2e-backend/fixtures.js @@ -99,8 +99,7 @@ const setupEscrow = async ( reoOracleStake || stakes.repOracle, recOracleStake || stakes.recOracle, urls.manifestUrl, - urls.manifestUrl, - fortunesRequested + urls.manifestUrl ) .send({ from: launcher, gasLimit }); } catch (err) { diff --git a/packages/sdk/python/human-protocol-sdk/.gitignore b/packages/sdk/python/human-protocol-sdk/.gitignore index fec1987d8e..3a3f19a3ca 100644 --- a/packages/sdk/python/human-protocol-sdk/.gitignore +++ b/packages/sdk/python/human-protocol-sdk/.gitignore @@ -13,6 +13,7 @@ dist *.egg-info # ABIs +artifacts contracts # Minio Data diff --git a/packages/sdk/python/human-protocol-sdk/Makefile b/packages/sdk/python/human-protocol-sdk/Makefile index db58229ab2..3cbcfb772f 100644 --- a/packages/sdk/python/human-protocol-sdk/Makefile +++ b/packages/sdk/python/human-protocol-sdk/Makefile @@ -1,5 +1,5 @@ clean-package: - rm -rf build contracts dist *.egg-info + rm -rf build artifacts dist *.egg-info build-contracts: ./scripts/build-contracts.sh diff --git a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/eth_bridge.py b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/eth_bridge.py index 674db28b83..eb3ad0b68a 100644 --- a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/eth_bridge.py +++ b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/eth_bridge.py @@ -25,7 +25,7 @@ os.getenv("STAKING_ADDR", "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0") ) -ABIS_FOLDER = os.path.join(os.path.dirname(os.path.dirname(__file__)), "contracts") +ARTIFACTS_FOLDER = os.path.join(os.path.dirname(os.path.dirname(__file__)), "artifacts") # See more details about the eth-kvstore here: https://github.com/hCaptcha/eth-kvstore KVSTORE_CONTRACT = Web3.toChecksumAddress( @@ -201,7 +201,9 @@ def get_hmtoken_interface(): """ return get_contract_interface( - "{}/interfaces/HMTokenInterface.sol/HMTokenInterface.json".format(ABIS_FOLDER) + "{}/contracts/interfaces/HMTokenInterface.sol/HMTokenInterface.json".format( + ARTIFACTS_FOLDER + ) ) @@ -259,7 +261,7 @@ def get_escrow(escrow_addr: str, hmt_server_addr: str = None) -> Contract: w3 = get_w3(hmt_server_addr) contract_interface = get_contract_interface( - "{}/Escrow.sol/Escrow.json".format(ABIS_FOLDER) + "{}/contracts/Escrow.sol/Escrow.json".format(ARTIFACTS_FOLDER) ) escrow = w3.eth.contract( address=ChecksumAddress(HexAddress(HexStr(escrow_addr))), @@ -292,7 +294,7 @@ def get_factory(factory_addr: str, hmt_server_addr: str = None) -> Contract: """ w3 = get_w3(hmt_server_addr) contract_interface = get_contract_interface( - "{}/EscrowFactory.sol/EscrowFactory.json".format(ABIS_FOLDER) + "{}/contracts/EscrowFactory.sol/EscrowFactory.json".format(ARTIFACTS_FOLDER) ) escrow_factory = w3.eth.contract( address=ChecksumAddress(HexAddress(HexStr(factory_addr))), @@ -327,11 +329,11 @@ def deploy_factory( staking_address = STAKING_ADDR if staking_addr is None else staking_addr w3 = get_w3(hmt_server_addr) - contract_interface = get_contract_interface( - "{}/EscrowFactory.sol/EscrowFactory.json".format(ABIS_FOLDER) + factory_interface = get_contract_interface( + "{}/contracts/EscrowFactory.sol/EscrowFactory.json".format(ARTIFACTS_FOLDER) ) factory = w3.eth.contract( - abi=contract_interface["abi"], bytecode=contract_interface["bytecode"] + abi=factory_interface["abi"], bytecode=factory_interface["bytecode"] ) txn_func = factory.constructor @@ -343,14 +345,30 @@ def deploy_factory( "hmt_server_addr": hmt_server_addr, } txn_receipt = handle_transaction(txn_func, *func_args, **txn_info) - contract_addr = txn_receipt["contractAddress"] + factory_addr = txn_receipt["contractAddress"] - factory_contract = get_factory(contract_addr) - txn_func = factory_contract.functions.initialize - func_args = [staking_address] + proxy_interface = get_contract_interface( + "{}/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json".format( + ARTIFACTS_FOLDER + ) + ) + proxy = w3.eth.contract( + abi=proxy_interface["abi"], bytecode=proxy_interface["bytecode"] + ) + txn_func = proxy.constructor + init_encoded = factory.encodeABI(fn_name="initialize", args=[staking_address]) + + func_args = [factory_addr, init_encoded] + txn_info = { + "gas_payer": gas_payer, + "gas_payer_priv": gas_payer_priv, + "gas": gas, + "hmt_server_addr": hmt_server_addr, + } txn_receipt = handle_transaction(txn_func, *func_args, **txn_info) + proxy_addr = txn_receipt["contractAddress"] - return str(contract_addr) + return str(proxy_addr) def get_staking_interface(): @@ -361,7 +379,9 @@ def get_staking_interface(): """ - return get_contract_interface("{}/Staking.sol/Staking.json".format(ABIS_FOLDER)) + return get_contract_interface( + "{}/contracts/Staking.sol/Staking.json".format(ARTIFACTS_FOLDER) + ) def get_staking(staking_addr=HMTOKEN_ADDR, hmt_server_addr: str = None) -> Contract: @@ -432,7 +452,7 @@ def get_pub_key_from_addr( w3 = get_w3(hmt_server_addr) contract_interface = get_contract_interface( - "{}/KVStore.sol/KVStore.json".format(ABIS_FOLDER) + "{}/contracts/KVStore.sol/KVStore.json".format(ARTIFACTS_FOLDER) ) kvstore = w3.eth.contract(address=kvstore_contract, abi=contract_interface["abi"]) @@ -482,7 +502,7 @@ def set_pub_key_at_addr( w3 = get_w3(hmt_server_addr) contract_interface = get_contract_interface( - "{}/KVStore.sol/KVStore.json".format(ABIS_FOLDER) + "{}/contracts/KVStore.sol/KVStore.json".format(ARTIFACTS_FOLDER) ) kvstore = w3.eth.contract(address=KVSTORE_CONTRACT, abi=contract_interface["abi"]) diff --git a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/job.py b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/job.py index 23663a320a..e3305524fb 100644 --- a/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/job.py +++ b/packages/sdk/python/human-protocol-sdk/human_protocol_sdk/job.py @@ -417,7 +417,6 @@ def setup(self, sender: str = None) -> bool: recording_oracle = str(self.serialized_manifest["recording_oracle_addr"]) hmt_amount = int(self.amount * 10**18) hmtoken_contract = get_hmtoken(self.hmtoken_addr, self.hmt_server_addr) - requested_solutions = int(self.serialized_manifest["job_total_tasks"]) tx_balance = None hmt_transferred = False @@ -482,7 +481,6 @@ def setup(self, sender: str = None) -> bool: recording_oracle_stake, self.manifest_url, self.manifest_hash, - requested_solutions, ] try: @@ -1112,7 +1110,7 @@ def stake(self, amount: Decimal, staker: Optional[str] = None) -> bool: f"{txn_event} failed from operator: {gas_payer}, {gas_payer_priv} due to {e}." ) - txn_event = "Staking" + txn_event = "Staking HMT" txn_func = self.staking_contract.functions.stake txn_info = { "gas_payer": gas_payer, @@ -1163,7 +1161,7 @@ def unstake(self, amount: Decimal, staker: Optional[str] = None) -> bool: (gas_payer, gas_payer_priv) = operator - txn_event = "Staking" + txn_event = "Unstaking HMT" txn_func = self.staking_contract.functions.unstake txn_info = { "gas_payer": gas_payer, @@ -1216,7 +1214,7 @@ def withdraw(self, amount: Decimal, staker: Optional[str] = None) -> bool: (gas_payer, gas_payer_priv) = operator - txn_event = "Staking" + txn_event = "Withdrawing HMT from stake" txn_func = self.staking_contract.functions.withdraw txn_info = { "gas_payer": gas_payer, @@ -1270,7 +1268,7 @@ def allocate(self, amount: Decimal, staker: Optional[str] = None) -> bool: (gas_payer, gas_payer_priv) = operator - txn_event = "Staking" + txn_event = "Allocating HMT to job" txn_func = self.staking_contract.functions.allocate txn_info = { "gas_payer": gas_payer, @@ -1331,7 +1329,7 @@ def closeAllocation(self, staker: Optional[str] = None) -> bool: (gas_payer, gas_payer_priv) = operator - txn_event = "Staking" + txn_event = "Closing HMT allocation from job" txn_func = self.staking_contract.functions.closeAllocation txn_info = { "gas_payer": gas_payer, @@ -1781,45 +1779,6 @@ def _init_factory( return factory - def _bulk_paid(self) -> int: - """Checks if the last bulk payment has succeeded. - - >>> from test.human_protocol_sdk.utils import manifest - >>> credentials = { - ... "gas_payer": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - ... "gas_payer_priv": "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" - ... } - >>> rep_oracle_pub_key = b"8318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5" - >>> job = Job(credentials, manifest) - >>> job.stake(1) - True - >>> job.launch(rep_oracle_pub_key) - True - >>> job.setup() - True - - No payout has been performed yet. - >>> job._bulk_paid() - False - - Bulk has been paid upon successful bulk payout. - >>> payouts = [("0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", Decimal('20.0')), ("0x852023fbb19050B8291a335E5A83Ac9701E7B4E6", Decimal('50.0'))] - >>> job.bulk_payout(payouts, {}, rep_oracle_pub_key) - True - >>> job._bulk_paid() - True - - Args: - gas (int): maximum amount of gas the caller is ready to pay. - - Returns: - returns True if the last bulk payout has succeeded. - - """ - return self.job_contract.functions.bulkPaid().call( - {"from": self.gas_payer, "gas": Wei(self.gas)} - ) - def _create_escrow(self, trusted_handlers=[]) -> RaffleTxn: """Launches a new escrow contract to the ethereum network. @@ -1854,7 +1813,7 @@ def _create_escrow(self, trusted_handlers=[]) -> RaffleTxn: TimeoutError: if wait_on_transaction times out. """ - txn_event = "Contract creation" + txn_event = "Job creation" txn_func = self.factory_contract.functions.createEscrow txn_info = { "gas_payer": self.gas_payer, diff --git a/packages/sdk/python/human-protocol-sdk/scripts/build-contracts.sh b/packages/sdk/python/human-protocol-sdk/scripts/build-contracts.sh index 4f70ccd99f..6f0b618204 100755 --- a/packages/sdk/python/human-protocol-sdk/scripts/build-contracts.sh +++ b/packages/sdk/python/human-protocol-sdk/scripts/build-contracts.sh @@ -1,6 +1,6 @@ #!/bin/bash set -eux -rm -rf contracts +rm -rf artifacts yarn workspace @human-protocol/core compile -cp -r ../../../core/artifacts/contracts . +cp -r ../../../core/artifacts . diff --git a/packages/sdk/typescript/human-protocol-sdk/package.json b/packages/sdk/typescript/human-protocol-sdk/package.json index 34385407fb..935d304919 100644 --- a/packages/sdk/typescript/human-protocol-sdk/package.json +++ b/packages/sdk/typescript/human-protocol-sdk/package.json @@ -38,7 +38,7 @@ ] }, "dependencies": { - "@human-protocol/core": "^1.0.12", + "@human-protocol/core": "*", "aws-sdk": "^2.1255.0", "crypto": "^1.0.1", "ethers": "^5.7.2", diff --git a/packages/sdk/typescript/human-protocol-sdk/src/job.ts b/packages/sdk/typescript/human-protocol-sdk/src/job.ts index 51338fcd02..cfb75de660 100644 --- a/packages/sdk/typescript/human-protocol-sdk/src/job.ts +++ b/packages/sdk/typescript/human-protocol-sdk/src/job.ts @@ -337,8 +337,9 @@ export class Job { escrowAddr, this.providerData?.gasPayer ); - } catch { - this._logError(new Error('Error creating escrow...')); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (e: any) { + this._logError(new Error('Error creating escrow... ' + e.message)); return false; } @@ -385,8 +386,6 @@ export class Job { this.manifestData?.manifest?.reputation_oracle_addr || ''; const recordingOracleAddr = this.manifestData?.manifest?.recording_oracle_addr || ''; - const requestedSolutions = - this.manifestData?.manifest?.job_total_tasks || 0; this._logger.info( `Transferring ${this.amount} HMT to ${this.contractData.escrow.address}...` @@ -440,8 +439,7 @@ export class Job { reputationOracleStake, recordingOracleStake, this.manifestData?.manifestlink?.url, - this.manifestData?.manifestlink?.hash, - requestedSolutions + this.manifestData?.manifestlink?.hash ); if (!contractSetup) { @@ -532,7 +530,7 @@ export class Job { const url = isPublic ? getPublicURL(this.storageAccessData, key) : key; this._logger.info('Bulk paying out the workers...'); - await this._raffleExecute( + const paid = await this._raffleExecute( this.contractData.escrow, 'bulkPayOut', payouts.map(({ address }) => address), @@ -542,15 +540,14 @@ export class Job { 1 ); - const bulkPaid = await this.contractData.escrow.bulkPaid(); - if (!bulkPaid) { + if (!paid) { this._logError(new Error('Failed to bulk payout users')); return false; } this._logger.info('Workers are paid out.'); - return bulkPaid; + return true; } /** diff --git a/packages/sdk/typescript/human-protocol-sdk/src/utils.ts b/packages/sdk/typescript/human-protocol-sdk/src/utils.ts index 183444b40d..d4c648b405 100644 --- a/packages/sdk/typescript/human-protocol-sdk/src/utils.ts +++ b/packages/sdk/typescript/human-protocol-sdk/src/utils.ts @@ -11,6 +11,7 @@ import { Staking__factory, RewardPool, RewardPool__factory, + ERC1967Proxy__factory, } from '@human-protocol/core/typechain-types'; /** @@ -42,11 +43,20 @@ export const deployEscrowFactory = async ( stakingAddr: string, signer?: ethers.Signer ): Promise => { - const factory = new EscrowFactory__factory(signer); - - const contract = await factory.deploy(); - await contract.initialize(stakingAddr); - + const escrowFactoryFactory = new EscrowFactory__factory(signer); + const escrowFactoryImpl = await escrowFactoryFactory.deploy(); + + const proxyFactory = new ERC1967Proxy__factory(signer); + const initEncoded = await escrowFactoryImpl.interface.encodeFunctionData( + 'initialize', + [stakingAddr] + ); + const proxy = await proxyFactory.deploy( + escrowFactoryImpl.address, + initEncoded + ); + + const contract = await escrowFactoryFactory.attach(proxy.address); return contract; }; @@ -101,10 +111,17 @@ export const deployStaking = async ( lockPeriod: number, signer?: ethers.Signer ): Promise => { - const staking = new Staking__factory(signer); - const contract = await staking.deploy(); - await contract.initialize(hmTokenAddr, minimumStake, lockPeriod); + const stakingFactory = new Staking__factory(signer); + const stakingImpl = await stakingFactory.deploy(); + const proxyFactory = new ERC1967Proxy__factory(signer); + const initEncoded = await stakingImpl.interface.encodeFunctionData( + 'initialize', + [hmTokenAddr, minimumStake, lockPeriod] + ); + const proxy = await proxyFactory.deploy(stakingImpl.address, initEncoded); + + const contract = await stakingFactory.attach(proxy.address); return contract; }; @@ -141,10 +158,17 @@ export const deployRewardPool = async ( fee: number, signer?: ethers.Signer ): Promise => { - const rewardPool = new RewardPool__factory(signer); - const contract = await rewardPool.deploy(); - await contract.initialize(hmTokenAddr, stakingAddr, fee); + const rewardPoolFactory = new RewardPool__factory(signer); + const rewardPoolImpl = await rewardPoolFactory.deploy(); + + const proxyFactory = new ERC1967Proxy__factory(signer); + const initEncoded = await rewardPoolImpl.interface.encodeFunctionData( + 'initialize', + [hmTokenAddr, stakingAddr, fee] + ); + const proxy = await proxyFactory.deploy(rewardPoolImpl.address, initEncoded); + const contract = await rewardPoolFactory.attach(proxy.address); return contract; }; diff --git a/packages/sdk/typescript/subgraph/config/avalanche.json b/packages/sdk/typescript/subgraph/config/avalanche.json index 9e390642b1..d3b87b5109 100644 --- a/packages/sdk/typescript/subgraph/config/avalanche.json +++ b/packages/sdk/typescript/subgraph/config/avalanche.json @@ -4,14 +4,14 @@ "EscrowFactory": { "address": "0x9767a578ba7a5FA1563c8229943cB01cd8446BB4", "startBlock": 23168540, - "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/EscrowFactory.json" }, "HMToken": { "address": "0x12365293cb6477d4fc2686e46BB97E3Fb64f1550", "startBlock": 20412574, - "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/HMToken.json" }, "Escrow": { - "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Escrow.json" } } diff --git a/packages/sdk/typescript/subgraph/config/bsc-v1.json b/packages/sdk/typescript/subgraph/config/bsc-v1.json index f802147e7d..773031c1d4 100644 --- a/packages/sdk/typescript/subgraph/config/bsc-v1.json +++ b/packages/sdk/typescript/subgraph/config/bsc-v1.json @@ -8,29 +8,29 @@ "EscrowFactory": { "address": "0xD9c75a1Aa4237BB72a41E5E26bd8384f10c1f55a", "startBlock": 25486222, - "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/EscrowFactory.json" }, "HMToken": { "address": "0x0d501B743F22b641B8C8dfe00F1AAb881D57DDC7", "startBlock": 20541027, - "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/HMToken.json" }, "Escrow": { - "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Escrow.json" }, "Staking": { "address": "0x05398211bA2046E296fBc9a9D3EB49e3F15C3123", "startBlock": 25486218, - "abi": "./node_modules/@human-protocol/core/abis/Staking.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Staking.json" }, "KVStore": { "address": "0x70671167176C4934204B1C7e97F5e86695857ef2", "startBlock": 25486223, - "abi": "./node_modules/@human-protocol/core/abis/KVStore.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/KVStore.json" }, "RewardPool": { "address": "0x4A5963Dd6792692e9147EdC7659936b96251917a", "startBlock": 25486227, - "abi": "./node_modules/@human-protocol/core/abis/RewardPool.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/RewardPool.json" } } diff --git a/packages/sdk/typescript/subgraph/config/bsctest-v1.json b/packages/sdk/typescript/subgraph/config/bsctest-v1.json index 585f0a6427..ac833fa340 100644 --- a/packages/sdk/typescript/subgraph/config/bsctest-v1.json +++ b/packages/sdk/typescript/subgraph/config/bsctest-v1.json @@ -8,34 +8,34 @@ "EscrowFactory": { "address": "0x2bfA592DBDaF434DDcbb893B1916120d181DAD18", "startBlock": 26716359, - "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/EscrowFactory.json" }, "HMToken": { "address": "0xE3D74BBFa45B4bCa69FF28891fBE392f4B4d4e4d", "startBlock": 26716354, - "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/HMToken.json" }, "Escrow": { - "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Escrow.json" }, "Staking": { "address": "0x5517fE916Fe9F8dB15B0DDc76ebDf0BdDCd4ed18", "startBlock": 26716357, - "abi": "./node_modules/@human-protocol/core/abis/Staking.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Staking.json" }, "KVStore": { "address": "0x3aD4B091E054f192a822D1406f4535eAd38580e4", "startBlock": 26716360, - "abi": "./node_modules/@human-protocol/core/abis/KVStore.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/KVStore.json" }, "RewardPool": { "address": "0xB0A0500103eCEc431b73F6BAd923F0a2774E6e29", "startBlock": 26716365, - "abi": "./node_modules/@human-protocol/core/abis/RewardPool.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/RewardPool.json" }, "Reputation": { "address": "0xb8F62639aA3DD51A39d6AACD969363e7F87dcc98", "startBlock": 26716369, - "abi": "./node_modules/@human-protocol/core/abis/Reputation.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Reputation.json" } } diff --git a/packages/sdk/typescript/subgraph/config/fuji.json b/packages/sdk/typescript/subgraph/config/fuji.json index 208e5ef8b9..33f549cfee 100644 --- a/packages/sdk/typescript/subgraph/config/fuji.json +++ b/packages/sdk/typescript/subgraph/config/fuji.json @@ -4,14 +4,14 @@ "EscrowFactory": { "address": "0xfb4469201951C3B9a7F1996c477cb7BDBEcE0A88", "startBlock": 14957503, - "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/EscrowFactory.json" }, "HMToken": { "address": "0x9406d5c635AD22b0d76c75E52De57A2177919ca3", "startBlock": 14935627, - "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/HMToken.json" }, "Escrow": { - "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Escrow.json" } } diff --git a/packages/sdk/typescript/subgraph/config/goerli-v1.json b/packages/sdk/typescript/subgraph/config/goerli-v1.json index 8b743cae16..1f08859697 100644 --- a/packages/sdk/typescript/subgraph/config/goerli-v1.json +++ b/packages/sdk/typescript/subgraph/config/goerli-v1.json @@ -8,34 +8,34 @@ "EscrowFactory": { "address": "0x87469B4f2Fcf37cBd34E54244c0BD4Fa0603664c", "startBlock": 8403038, - "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/EscrowFactory.json" }, "HMToken": { "address": "0xd3A31D57FDD790725d0F6B78095F62E8CD4ab317", "startBlock": 7755449, - "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/HMToken.json" }, "Escrow": { - "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Escrow.json" }, "Staking": { "address": "0xf46B45Df3d956369726d8Bd93Ba33963Ab692920", "startBlock": 8403036, - "abi": "./node_modules/@human-protocol/core/abis/Staking.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Staking.json" }, "KVStore": { "address": "0xc9Fe39c4b6e1d7A2991355Af159956982DADf842", "startBlock": 8403040, - "abi": "./node_modules/@human-protocol/core/abis/KVStore.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/KVStore.json" }, "RewardPool": { "address": "0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb4", "startBlock": 8403042, - "abi": "./node_modules/@human-protocol/core/abis/RewardPool.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/RewardPool.json" }, "Reputation": { "address": "0x6B220A6306D8D86C9878A1FBb3F49707b3E2b405", "startBlock": 8403044, - "abi": "./node_modules/@human-protocol/core/abis/Reputation.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Reputation.json" } } diff --git a/packages/sdk/typescript/subgraph/config/moonbase-alpha-v1.json b/packages/sdk/typescript/subgraph/config/moonbase-alpha-v1.json index 93d5d6ed84..1a7486d94a 100644 --- a/packages/sdk/typescript/subgraph/config/moonbase-alpha-v1.json +++ b/packages/sdk/typescript/subgraph/config/moonbase-alpha-v1.json @@ -8,34 +8,34 @@ "EscrowFactory": { "address": "0x5e622FF522D81aa426f082bDD95210BC25fCA7Ed", "startBlock": 3950929, - "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/EscrowFactory.json" }, "HMToken": { "address": "0x2dd72db2bBA65cE663e476bA8b84A1aAF802A8e3", "startBlock": 3950738, - "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/HMToken.json" }, "Escrow": { - "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Escrow.json" }, "Staking": { "address": "0xBFC7009F3371F93F3B54DdC8caCd02914a37495c", "startBlock": 3950927, - "abi": "./node_modules/@human-protocol/core/abis/Staking.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Staking.json" }, "KVStore": { "address": "0xE3D74BBFa45B4bCa69FF28891fBE392f4B4d4e4d", "startBlock": 3648030, - "abi": "./node_modules/@human-protocol/core/abis/KVStore.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/KVStore.json" }, "RewardPool": { "address": "0xf46B45Df3d956369726d8Bd93Ba33963Ab692920", "startBlock": 3950931, - "abi": "./node_modules/@human-protocol/core/abis/RewardPool.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/RewardPool.json" }, "Reputation": { "address": "0x87469B4f2Fcf37cBd34E54244c0BD4Fa0603664c", "startBlock": 3950933, - "abi": "./node_modules/@human-protocol/core/abis/Reputation.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Reputation.json" } } diff --git a/packages/sdk/typescript/subgraph/config/moonbeam-v1.json b/packages/sdk/typescript/subgraph/config/moonbeam-v1.json index d24fe15e4c..300ca6eeb0 100644 --- a/packages/sdk/typescript/subgraph/config/moonbeam-v1.json +++ b/packages/sdk/typescript/subgraph/config/moonbeam-v1.json @@ -8,29 +8,29 @@ "EscrowFactory": { "address": "0xD9c75a1Aa4237BB72a41E5E26bd8384f10c1f55a", "startBlock": 2904819, - "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/EscrowFactory.json" }, "HMToken": { "address": "0x3b25BC1dC591D24d60560d0135D6750A561D4764", "startBlock": 1105853, - "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/HMToken.json" }, "Escrow": { - "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Escrow.json" }, "Staking": { "address": "0x05398211bA2046E296fBc9a9D3EB49e3F15C3123", "startBlock": 2904815, - "abi": "./node_modules/@human-protocol/core/abis/Staking.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Staking.json" }, "KVStore": { "address": "0x70671167176C4934204B1C7e97F5e86695857ef2", "startBlock": 2904821, - "abi": "./node_modules/@human-protocol/core/abis/KVStore.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/KVStore.json" }, "RewardPool": { "address": "0x4A5963Dd6792692e9147EdC7659936b96251917a", "startBlock": 2904825, - "abi": "./node_modules/@human-protocol/core/abis/RewardPool.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/RewardPool.json" } } diff --git a/packages/sdk/typescript/subgraph/config/mumbai-v1.json b/packages/sdk/typescript/subgraph/config/mumbai-v1.json index 95d3f075fb..6fa15b8b63 100644 --- a/packages/sdk/typescript/subgraph/config/mumbai-v1.json +++ b/packages/sdk/typescript/subgraph/config/mumbai-v1.json @@ -8,34 +8,34 @@ "EscrowFactory": { "address": "0xA8D927C4DA17A6b71675d2D49dFda4E9eBE58f2d", "startBlock": 31433945, - "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/EscrowFactory.json" }, "HMToken": { "address": "0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb4", "startBlock": 26086128, - "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/HMToken.json" }, "Escrow": { - "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Escrow.json" }, "Staking": { "address": "0x7Fd3dF914E7b6Bd96B4c744Df32183b51368Bfac", "startBlock": 31433938, - "abi": "./node_modules/@human-protocol/core/abis/Staking.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Staking.json" }, "KVStore": { "address": "0xD7F61E812e139a5a02eDae9Dfec146E1b8eA3807", "startBlock": 31433948, - "abi": "./node_modules/@human-protocol/core/abis/KVStore.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/KVStore.json" }, "RewardPool": { "address": "0xf0145eD99AC3c4f877aDa7dA4D1E059ec9116BAE", "startBlock": 31433950, - "abi": "./node_modules/@human-protocol/core/abis/RewardPool.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/RewardPool.json" }, "Reputation": { "address": "0xC522463d36f76b881bE66484e3068F11e7038Ace", "startBlock": 31433953, - "abi": "./node_modules/@human-protocol/core/abis/Reputation.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Reputation.json" } } diff --git a/packages/sdk/typescript/subgraph/config/polygon-v1.json b/packages/sdk/typescript/subgraph/config/polygon-v1.json index 46fe7d3e28..d3111bcc58 100644 --- a/packages/sdk/typescript/subgraph/config/polygon-v1.json +++ b/packages/sdk/typescript/subgraph/config/polygon-v1.json @@ -8,29 +8,29 @@ "EscrowFactory": { "address": "0xBDBfD2cC708199C5640C6ECdf3B0F4A4C67AdfcB", "startBlock": 38858552, - "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/EscrowFactory.json" }, "HMToken": { "address": "0xc748B2A084F8eFc47E086ccdDD9b7e67aEb571Bf", "startBlock": 20181700, - "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/HMToken.json" }, "Escrow": { - "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Escrow.json" }, "Staking": { "address": "0xcbAd56bE3f504E98bd70875823d3CC0242B7bB29", "startBlock": 38858545, - "abi": "./node_modules/@human-protocol/core/abis/Staking.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Staking.json" }, "KVStore": { "address": "0x35Cf4beBD58F9C8D75B9eA2599479b6C173d406F", "startBlock": 38858596, - "abi": "./node_modules/@human-protocol/core/abis/KVStore.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/KVStore.json" }, "RewardPool": { "address": "0xa8e32d777a3839440cc7c24D591A64B9481753B3", "startBlock": 38858602, - "abi": "./node_modules/@human-protocol/core/abis/RewardPool.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/RewardPool.json" } } diff --git a/packages/sdk/typescript/subgraph/config/skale.json b/packages/sdk/typescript/subgraph/config/skale.json index b419204b3c..9f5066698c 100644 --- a/packages/sdk/typescript/subgraph/config/skale.json +++ b/packages/sdk/typescript/subgraph/config/skale.json @@ -4,29 +4,29 @@ "EscrowFactory": { "address": "0x319070b49C8d1cC015915D1E7Eb5fd8e22833885", "startBlock": 473600, - "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/EscrowFactory.json" }, "HMToken": { "address": "0x6E5FF61Ea88270F6142E0E0eC8cbe9d67476CbCd", "startBlock": 473551, - "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/HMToken.json" }, "Escrow": { - "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Escrow.json" }, "KVStore": { "address": "0xE1055607327b1be2080D31211dCDC4D9338CaF4A", "startBlock": 475569, - "abi": "./node_modules/@human-protocol/core/abis/KVStore.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/KVStore.json" }, "Staking": { "address": "0x79F37FB9C210910733c16228AC4D14a8e32C11BD", "startBlock": 473599, - "abi": "./node_modules/@human-protocol/core/abis/Staking.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Staking.json" }, "RewardPool": { "address": "0x881218246c25C6898aE96145259584340153aDA2", "startBlock": 473601, - "abi": "./node_modules/@human-protocol/core/abis/RewardPool.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/RewardPool.json" } } diff --git a/packages/sdk/typescript/subgraph/package.json b/packages/sdk/typescript/subgraph/package.json index d9a7d136f8..b670636b50 100644 --- a/packages/sdk/typescript/subgraph/package.json +++ b/packages/sdk/typescript/subgraph/package.json @@ -41,7 +41,7 @@ "@graphprotocol/graph-cli": "0.37.1", "@graphprotocol/graph-ts": "^0.27.0", "@graphql-eslint/eslint-plugin": "^3.15.0", - "@human-protocol/core": "workspace:*", + "@human-protocol/core": "*", "assemblyscript": "^0.25.1", "graphql": "^16.6.0", "matchstick-as": "^0.5.0", diff --git a/yarn.lock b/yarn.lock index 017e6c02bc..6b54ddcc4c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2222,11 +2222,6 @@ resolved "https://registry.yarnpkg.com/@human-protocol/core/-/core-1.0.10.tgz#946bc87cd8f8cf0eae5b410c27d227c0de5d599f" integrity sha512-oANinraKrMEwLwQU3lrE52K7aFKY2BL/6rbWImQDIIcSYGcSGPGayfV4lBHCdboKWvmXMamXSXY1IsHE+GEELw== -"@human-protocol/core@workspace:*": - version "1.0.41" - resolved "https://registry.yarnpkg.com/@human-protocol/core/-/core-1.0.41.tgz#e0094c86d27297082ad58735c1dbabf604223b8d" - integrity sha512-NZ/QYHDCQ7/NXTaB7KDk+EPPiNQ/BJG5H5/xELpECCyoiFS0vsKXSkasqejw2iKa9wIhn2tk7p8gJLFkbObepQ== - "@humanwhocodes/config-array@^0.11.8": version "0.11.8" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" @@ -9822,6 +9817,11 @@ hardhat-contract-sizer@^2.6.1: cli-table3 "^0.6.0" strip-ansi "^6.0.0" +hardhat-dependency-compiler@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hardhat-dependency-compiler/-/hardhat-dependency-compiler-1.1.3.tgz#1e49e23f68878bd713f860c66648a711bc4a4a79" + integrity sha512-bCDqsOxGST6WkbMvj4lPchYWidNSSBm5CFnkyAex1T11cGmr9otZTGl81W6f9pmrtBXbKCvr3OSuNJ6Q394sAw== + hardhat-deploy@^0.11.14: version "0.11.25" resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.25.tgz#bd6f2310ad9232a5d73f6e5dfff4112220a392e8" From 5e5a9919a7011aca976ffb809c9c3d846f89987b Mon Sep 17 00:00:00 2001 From: CryptoRush <98655210+leric7@users.noreply.github.com> Date: Thu, 13 Apr 2023 10:37:27 -0400 Subject: [PATCH 12/22] add bulk set function to kvstore and remove duplicate code from staking (#385) * add bulk set function to kvstore and remove duplicate code from staking * add test case for invalid slashing exceeding allocation amount --- packages/core/contracts/KVStore.sol | 13 +++++++ packages/core/contracts/libs/Stakes.sol | 11 +----- packages/core/test/KVStore.ts | 51 +++++++++++++++++++++++++ packages/core/test/Staking.ts | 21 ++++++++++ 4 files changed, 86 insertions(+), 10 deletions(-) diff --git a/packages/core/contracts/KVStore.sol b/packages/core/contracts/KVStore.sol index 4cbc8c4d81..55cfff7a40 100644 --- a/packages/core/contracts/KVStore.sol +++ b/packages/core/contracts/KVStore.sol @@ -3,6 +3,7 @@ pragma solidity >=0.6.0; contract KVStore { uint private constant MAX_STRING_LENGTH = 1000; + uint private constant BULK_MAX_COUNT = 20; mapping(address => mapping(string => string)) private store; event DataSaved(address indexed sender, string key, string value); @@ -23,4 +24,16 @@ contract KVStore { store[msg.sender][_key] = _value; emit DataSaved(msg.sender, _key, _value); } + + function setBulk(string[] memory _keys, string[] memory _values) public { + require( + _keys.length == _values.length, + 'Keys and values must have the same length' + ); + require(_keys.length < BULK_MAX_COUNT, 'Too many entries'); + + for (uint i = 0; i < _keys.length; i++) { + set(_keys[i], _values[i]); + } + } } diff --git a/packages/core/contracts/libs/Stakes.sol b/packages/core/contracts/libs/Stakes.sol index fc49e96ff4..f3eef6b2f4 100644 --- a/packages/core/contracts/libs/Stakes.sol +++ b/packages/core/contracts/libs/Stakes.sol @@ -28,15 +28,6 @@ library Stakes { stake.tokensStaked = stake.tokensStaked.add(_tokens); } - /** - * @dev Withdraw tokens from the staker stake. - * @param stake Staker struct - * @param _tokens Amount of tokens to withdraw - */ - function withdraw(Stakes.Staker storage stake, uint256 _tokens) internal { - stake.tokensStaked = stake.tokensStaked.sub(_tokens); - } - /** * @dev Release tokens from the staker stake. * @param stake Staker struct @@ -117,7 +108,7 @@ library Stakes { if (tokensToWithdraw > 0) { stake.unlockTokens(tokensToWithdraw); - stake.withdraw(tokensToWithdraw); + stake.release(tokensToWithdraw); } return tokensToWithdraw; diff --git a/packages/core/test/KVStore.ts b/packages/core/test/KVStore.ts index 6e5ec6dc33..1804b76a33 100644 --- a/packages/core/test/KVStore.ts +++ b/packages/core/test/KVStore.ts @@ -88,4 +88,55 @@ describe('KVStore', function () { }); expect(decrypted).equal('H'); }); + + it("doesn't allow storing invalid key-value pairs", async () => { + await expect( + kvStore.setBulk(['private_key1'], ['satoshi', 'satoshi']) + ).to.be.revertedWith('Keys and values must have the same length'); + }); + + it("doesn't allow storing too many key-value pairs", async () => { + await expect( + kvStore.setBulk(Array(21).fill('private_key1'), Array(21).fill('satoshi')) + ).to.be.revertedWith('Too many entries'); + }); + + it("doesn't allow storing too long key/value", async () => { + await expect( + kvStore.setBulk( + [ + 'satoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamoto', + 'satoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamoto', + ], + ['satoshi', 'satoshi'] + ) + ).to.be.revertedWith('Maximum string length'); + + await expect( + kvStore.setBulk( + ['satoshi', 'satoshi'], + [ + 'satoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamoto', + 'satoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamotosatoshinakamoto', + ] + ) + ).to.be.revertedWith('Maximum string length'); + }); + + it('store multiple values and its ipfs hash on smart contract', async () => { + await kvStore.setBulk( + ['public_key1', 'public_key2'], + [ + 'bafkreieadxyvobae4a2ww7tytw37dw2ihvvbujj5npjepurraavtaoczcq', + 'bafkreieadxyvobae4a2ww7tytw37dw2ihvvbujj5npjepurraavtaoczcr', + ] + ); + + expect(await kvStore.get(accountOne.getAddress(), 'public_key1')).equal( + 'bafkreieadxyvobae4a2ww7tytw37dw2ihvvbujj5npjepurraavtaoczcq' + ); + expect(await kvStore.get(accountOne.getAddress(), 'public_key2')).equal( + 'bafkreieadxyvobae4a2ww7tytw37dw2ihvvbujj5npjepurraavtaoczcr' + ); + }); }); diff --git a/packages/core/test/Staking.ts b/packages/core/test/Staking.ts index 73ae0f89d5..6c34676680 100644 --- a/packages/core/test/Staking.ts +++ b/packages/core/test/Staking.ts @@ -687,6 +687,27 @@ describe('Staking', function () { ).to.be.revertedWith('Must be a valid address'); }); + it('Should revert if slash amount exceeds allocation', async function () { + await staking + .connect(owner) + .slash( + await validator.getAddress(), + await operator.getAddress(), + escrowAddress, + slashedTokens + ); + + await expect( + staking + .connect(owner) + .slash( + await validator.getAddress(), + await operator.getAddress(), + escrowAddress, + allocatedTokens + ) + ).to.be.revertedWith('Slash tokens exceed allocated ones'); + }); // TODO: Add additional tests }); From 8984065aa52de4254a8caf76c7b01d90633e223f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20L=C3=B3pez?= <50665615+flopez7@users.noreply.github.com> Date: Mon, 17 Apr 2023 12:31:02 +0200 Subject: [PATCH 13/22] Exchange Server (#392) Add simple API for exchange oracle --- .../{ => client}/.dockerignore | 0 .../{ => client}/.env.development | 0 .../{ => client}/.eslintrc.json | 0 .../exchange-oracle/{ => client}/Dockerfile | 0 .../exchange-oracle/{ => client}/README.md | 0 .../exchange-oracle/{ => client}/index.html | 0 .../exchange-oracle/{ => client}/package.json | 2 +- .../{ => client}/public/favicon.ico | Bin .../{ => client}/public/manifest.json | 0 .../{ => client}/public/robots.txt | 0 .../exchange-oracle/{ => client}/src/App.css | 0 .../{ => client}/src/App.test.tsx | 0 .../exchange-oracle/{ => client}/src/App.tsx | 0 .../src/components/Escrow/Escrow.css | 0 .../src/components/Escrow/Escrow.test.tsx | 0 .../src/components/Escrow/Escrow.tsx | 0 .../src/components/Escrow/index.ts | 0 .../{ => client}/src/connectors/chains.ts | 0 .../{ => client}/src/connectors/connectors.ts | 0 .../{ => client}/src/index.css | 0 .../exchange-oracle/{ => client}/src/main.tsx | 0 .../{ => client}/src/reportWebVitals.ts | 0 .../RecordingOracle/RecordingClient.ts | 0 .../{ => client}/src/vite-env.d.ts | 0 .../{ => client}/tests/setup.ts | 0 .../{ => client}/tests/utils.tsx | 0 .../{ => client}/tsconfig.json | 2 +- .../exchange-oracle/{ => client}/vercel.json | 0 .../{ => client}/vite.config.ts | 0 .../fortune/exchange-oracle/server/README.md | 26 +++++ .../fortune/exchange-oracle/server/index.ts | 99 ++++++++++++++++++ .../exchange-oracle/server/package.json | 18 ++++ .../exchange-oracle/server/tsconfig.json | 20 ++++ packages/examples/fortune/package.json | 13 +-- yarn.lock | 6 +- 35 files changed, 175 insertions(+), 11 deletions(-) rename packages/examples/fortune/exchange-oracle/{ => client}/.dockerignore (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/.env.development (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/.eslintrc.json (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/Dockerfile (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/README.md (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/index.html (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/package.json (96%) rename packages/examples/fortune/exchange-oracle/{ => client}/public/favicon.ico (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/public/manifest.json (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/public/robots.txt (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/App.css (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/App.test.tsx (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/App.tsx (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/components/Escrow/Escrow.css (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/components/Escrow/Escrow.test.tsx (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/components/Escrow/Escrow.tsx (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/components/Escrow/index.ts (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/connectors/chains.ts (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/connectors/connectors.ts (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/index.css (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/main.tsx (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/reportWebVitals.ts (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/services/RecordingOracle/RecordingClient.ts (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/src/vite-env.d.ts (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/tests/setup.ts (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/tests/utils.tsx (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/tsconfig.json (93%) rename packages/examples/fortune/exchange-oracle/{ => client}/vercel.json (100%) rename packages/examples/fortune/exchange-oracle/{ => client}/vite.config.ts (100%) create mode 100644 packages/examples/fortune/exchange-oracle/server/README.md create mode 100644 packages/examples/fortune/exchange-oracle/server/index.ts create mode 100644 packages/examples/fortune/exchange-oracle/server/package.json create mode 100644 packages/examples/fortune/exchange-oracle/server/tsconfig.json diff --git a/packages/examples/fortune/exchange-oracle/.dockerignore b/packages/examples/fortune/exchange-oracle/client/.dockerignore similarity index 100% rename from packages/examples/fortune/exchange-oracle/.dockerignore rename to packages/examples/fortune/exchange-oracle/client/.dockerignore diff --git a/packages/examples/fortune/exchange-oracle/.env.development b/packages/examples/fortune/exchange-oracle/client/.env.development similarity index 100% rename from packages/examples/fortune/exchange-oracle/.env.development rename to packages/examples/fortune/exchange-oracle/client/.env.development diff --git a/packages/examples/fortune/exchange-oracle/.eslintrc.json b/packages/examples/fortune/exchange-oracle/client/.eslintrc.json similarity index 100% rename from packages/examples/fortune/exchange-oracle/.eslintrc.json rename to packages/examples/fortune/exchange-oracle/client/.eslintrc.json diff --git a/packages/examples/fortune/exchange-oracle/Dockerfile b/packages/examples/fortune/exchange-oracle/client/Dockerfile similarity index 100% rename from packages/examples/fortune/exchange-oracle/Dockerfile rename to packages/examples/fortune/exchange-oracle/client/Dockerfile diff --git a/packages/examples/fortune/exchange-oracle/README.md b/packages/examples/fortune/exchange-oracle/client/README.md similarity index 100% rename from packages/examples/fortune/exchange-oracle/README.md rename to packages/examples/fortune/exchange-oracle/client/README.md diff --git a/packages/examples/fortune/exchange-oracle/index.html b/packages/examples/fortune/exchange-oracle/client/index.html similarity index 100% rename from packages/examples/fortune/exchange-oracle/index.html rename to packages/examples/fortune/exchange-oracle/client/index.html diff --git a/packages/examples/fortune/exchange-oracle/package.json b/packages/examples/fortune/exchange-oracle/client/package.json similarity index 96% rename from packages/examples/fortune/exchange-oracle/package.json rename to packages/examples/fortune/exchange-oracle/client/package.json index 6f2fecf549..793387abc9 100644 --- a/packages/examples/fortune/exchange-oracle/package.json +++ b/packages/examples/fortune/exchange-oracle/client/package.json @@ -1,5 +1,5 @@ { - "name": "@human-protocol/fortune-exchange-oracle", + "name": "@human-protocol/fortune-exchange-client", "description": "Fortune Exchange Oracle", "version": "1.0.0", "license": "MIT", diff --git a/packages/examples/fortune/exchange-oracle/public/favicon.ico b/packages/examples/fortune/exchange-oracle/client/public/favicon.ico similarity index 100% rename from packages/examples/fortune/exchange-oracle/public/favicon.ico rename to packages/examples/fortune/exchange-oracle/client/public/favicon.ico diff --git a/packages/examples/fortune/exchange-oracle/public/manifest.json b/packages/examples/fortune/exchange-oracle/client/public/manifest.json similarity index 100% rename from packages/examples/fortune/exchange-oracle/public/manifest.json rename to packages/examples/fortune/exchange-oracle/client/public/manifest.json diff --git a/packages/examples/fortune/exchange-oracle/public/robots.txt b/packages/examples/fortune/exchange-oracle/client/public/robots.txt similarity index 100% rename from packages/examples/fortune/exchange-oracle/public/robots.txt rename to packages/examples/fortune/exchange-oracle/client/public/robots.txt diff --git a/packages/examples/fortune/exchange-oracle/src/App.css b/packages/examples/fortune/exchange-oracle/client/src/App.css similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/App.css rename to packages/examples/fortune/exchange-oracle/client/src/App.css diff --git a/packages/examples/fortune/exchange-oracle/src/App.test.tsx b/packages/examples/fortune/exchange-oracle/client/src/App.test.tsx similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/App.test.tsx rename to packages/examples/fortune/exchange-oracle/client/src/App.test.tsx diff --git a/packages/examples/fortune/exchange-oracle/src/App.tsx b/packages/examples/fortune/exchange-oracle/client/src/App.tsx similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/App.tsx rename to packages/examples/fortune/exchange-oracle/client/src/App.tsx diff --git a/packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.css b/packages/examples/fortune/exchange-oracle/client/src/components/Escrow/Escrow.css similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.css rename to packages/examples/fortune/exchange-oracle/client/src/components/Escrow/Escrow.css diff --git a/packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.test.tsx b/packages/examples/fortune/exchange-oracle/client/src/components/Escrow/Escrow.test.tsx similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.test.tsx rename to packages/examples/fortune/exchange-oracle/client/src/components/Escrow/Escrow.test.tsx diff --git a/packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.tsx b/packages/examples/fortune/exchange-oracle/client/src/components/Escrow/Escrow.tsx similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/components/Escrow/Escrow.tsx rename to packages/examples/fortune/exchange-oracle/client/src/components/Escrow/Escrow.tsx diff --git a/packages/examples/fortune/exchange-oracle/src/components/Escrow/index.ts b/packages/examples/fortune/exchange-oracle/client/src/components/Escrow/index.ts similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/components/Escrow/index.ts rename to packages/examples/fortune/exchange-oracle/client/src/components/Escrow/index.ts diff --git a/packages/examples/fortune/exchange-oracle/src/connectors/chains.ts b/packages/examples/fortune/exchange-oracle/client/src/connectors/chains.ts similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/connectors/chains.ts rename to packages/examples/fortune/exchange-oracle/client/src/connectors/chains.ts diff --git a/packages/examples/fortune/exchange-oracle/src/connectors/connectors.ts b/packages/examples/fortune/exchange-oracle/client/src/connectors/connectors.ts similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/connectors/connectors.ts rename to packages/examples/fortune/exchange-oracle/client/src/connectors/connectors.ts diff --git a/packages/examples/fortune/exchange-oracle/src/index.css b/packages/examples/fortune/exchange-oracle/client/src/index.css similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/index.css rename to packages/examples/fortune/exchange-oracle/client/src/index.css diff --git a/packages/examples/fortune/exchange-oracle/src/main.tsx b/packages/examples/fortune/exchange-oracle/client/src/main.tsx similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/main.tsx rename to packages/examples/fortune/exchange-oracle/client/src/main.tsx diff --git a/packages/examples/fortune/exchange-oracle/src/reportWebVitals.ts b/packages/examples/fortune/exchange-oracle/client/src/reportWebVitals.ts similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/reportWebVitals.ts rename to packages/examples/fortune/exchange-oracle/client/src/reportWebVitals.ts diff --git a/packages/examples/fortune/exchange-oracle/src/services/RecordingOracle/RecordingClient.ts b/packages/examples/fortune/exchange-oracle/client/src/services/RecordingOracle/RecordingClient.ts similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/services/RecordingOracle/RecordingClient.ts rename to packages/examples/fortune/exchange-oracle/client/src/services/RecordingOracle/RecordingClient.ts diff --git a/packages/examples/fortune/exchange-oracle/src/vite-env.d.ts b/packages/examples/fortune/exchange-oracle/client/src/vite-env.d.ts similarity index 100% rename from packages/examples/fortune/exchange-oracle/src/vite-env.d.ts rename to packages/examples/fortune/exchange-oracle/client/src/vite-env.d.ts diff --git a/packages/examples/fortune/exchange-oracle/tests/setup.ts b/packages/examples/fortune/exchange-oracle/client/tests/setup.ts similarity index 100% rename from packages/examples/fortune/exchange-oracle/tests/setup.ts rename to packages/examples/fortune/exchange-oracle/client/tests/setup.ts diff --git a/packages/examples/fortune/exchange-oracle/tests/utils.tsx b/packages/examples/fortune/exchange-oracle/client/tests/utils.tsx similarity index 100% rename from packages/examples/fortune/exchange-oracle/tests/utils.tsx rename to packages/examples/fortune/exchange-oracle/client/tests/utils.tsx diff --git a/packages/examples/fortune/exchange-oracle/tsconfig.json b/packages/examples/fortune/exchange-oracle/client/tsconfig.json similarity index 93% rename from packages/examples/fortune/exchange-oracle/tsconfig.json rename to packages/examples/fortune/exchange-oracle/client/tsconfig.json index df9ed0dbbc..f9b958ceb0 100644 --- a/packages/examples/fortune/exchange-oracle/tsconfig.json +++ b/packages/examples/fortune/exchange-oracle/client/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.json", + "extends": "../../../../../tsconfig.json", "compilerOptions": { "target": "es6", "lib": ["dom", "dom.iterable", "esnext", "es2015.promise"], diff --git a/packages/examples/fortune/exchange-oracle/vercel.json b/packages/examples/fortune/exchange-oracle/client/vercel.json similarity index 100% rename from packages/examples/fortune/exchange-oracle/vercel.json rename to packages/examples/fortune/exchange-oracle/client/vercel.json diff --git a/packages/examples/fortune/exchange-oracle/vite.config.ts b/packages/examples/fortune/exchange-oracle/client/vite.config.ts similarity index 100% rename from packages/examples/fortune/exchange-oracle/vite.config.ts rename to packages/examples/fortune/exchange-oracle/client/vite.config.ts diff --git a/packages/examples/fortune/exchange-oracle/server/README.md b/packages/examples/fortune/exchange-oracle/server/README.md new file mode 100644 index 0000000000..709a45f83d --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/server/README.md @@ -0,0 +1,26 @@ +# Exchange Oracle Server + +This is a simple API built with Express in TypeScript that provides endpoints to retrieve a list of similar jobs and check if a job exists based on address, chainId, and solution field. + +## Endpoints + +### `GET /jobs` + +Returns a list of similar jobs in JSON format. + +### `POST /jobs/solutions` + +Receives job parameters in the request body and add a new to solution to the job based on address, chainId, and solution fields. Returns a JSON response with a boolean value indicating whether the job exists or not. + +## Usage + +1. Start the API server: `yarn start` +2. Access the API endpoints at `http://localhost:3000/jobs` and `http://localhost:3000/jobs/check` using a REST client or a web browser. + +## Contributing + +Contributions are welcome! Please create a pull request or open an issue for any improvements or bug fixes. + +## License + +This project is licensed under the [MIT License](LICENSE). diff --git a/packages/examples/fortune/exchange-oracle/server/index.ts b/packages/examples/fortune/exchange-oracle/server/index.ts new file mode 100644 index 0000000000..afa0d661c6 --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/server/index.ts @@ -0,0 +1,99 @@ +import express from 'express'; + +// Define the data type for jobs +type Job = { + address: string; + chainId: number; + title: string; + description: string; + token: string; + estimatedPrice: number; + solutionsRequired: number; + solutionsSent: number; +}; + +// Create an instance of Express application +const app = express(); +// Specify the port on which the API will run +const PORT = 3000; + +// Example data for similar jobs +const jobs: Job[] = [ + { + address: '0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb6', + chainId: 80001, + title: 'Job title 1', + description: 'Job description 1', + token: '0x670bCc966ddc4fE7136c8793617a2C4D22849827', + estimatedPrice: 1, + solutionsRequired: 2, + solutionsSent: 1, + }, + { + address: '0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb7', + chainId: 80001, + title: 'Job title 2', + description: 'Job description 2', + token: '0x670bCc966ddc4fE7136c8793617a2C4D22849827', + estimatedPrice: 1, + solutionsRequired: 3, + solutionsSent: 2, + }, + { + address: '0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb8', + chainId: 80001, + title: 'Job title 3', + description: 'Job description 3', + token: '0x670bCc966ddc4fE7136c8793617a2C4D22849827', + estimatedPrice: 2, + solutionsRequired: 2, + solutionsSent: 0, + }, + { + address: '0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb9', + chainId: 80001, + title: 'Job title 4', + description: 'Job description 4', + token: '0x670bCc966ddc4fE7136c8793617a2C4D22849827', + estimatedPrice: 3, + solutionsRequired: 1, + solutionsSent: 1, + }, + { + address: '0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb10', + chainId: 80001, + title: 'Job title 5', + description: 'Job description 5', + token: '0x670bCc966ddc4fE7136c8793617a2C4D22849827', + estimatedPrice: 2, + solutionsRequired: 3, + solutionsSent: 2, + }, +]; + +// Endpoint to get the list of similar jobs +app.get('/jobs', (req, res) => { + res.json({ jobs: jobs }); +}); + +// Endpoint for sending solutions. Receive address, chainId, and solution +app.post('/jobs/solutions', (req, res) => { + const { address, chainId, solution } = req.body; + + // Find the job in the jobs array based on the provided address and chainId + const foundJob = jobs.find( + (job) => job.address === address && job.chainId === Number(chainId) + ); + + // Check if the job exists and if the provided solution matches the required solutions + if (foundJob && foundJob.solutionsSent < foundJob.solutionsRequired) { + res.json({ result: true }); + } else { + res.json({ result: false }); + } +}); + +// Start the server +app.listen(PORT, () => { + console.log(`Server running on port ${PORT}`); +}); diff --git a/packages/examples/fortune/exchange-oracle/server/package.json b/packages/examples/fortune/exchange-oracle/server/package.json new file mode 100644 index 0000000000..11018b3272 --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/server/package.json @@ -0,0 +1,18 @@ +{ + "name": "@human-protocol/fortune-exchange-server", + "version": "1.0.0", + "description": "A simple API for Exchange Oracle in TypeScript", + "main": "index.ts", + "scripts": { + "start": "ts-node index.ts" + }, + "dependencies": { + "express": "^4.17.1" + }, + "devDependencies": { + "@types/express": "^4.17.13", + "typescript": "^4.5.5" + }, + "license": "MIT" + } + \ No newline at end of file diff --git a/packages/examples/fortune/exchange-oracle/server/tsconfig.json b/packages/examples/fortune/exchange-oracle/server/tsconfig.json new file mode 100644 index 0000000000..14ee9c7523 --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/server/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es2016", + "lib": ["es6"], + "module": "commonjs", + "rootDir": ".", + "resolveJsonModule": true, + "outDir": "build", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitAny": true, + "skipLibCheck": true + }, + "exclude": [ + "./build/**/*", + "src/**/*.spec.ts", + "src/**/*.test.ts" + ] +} diff --git a/packages/examples/fortune/package.json b/packages/examples/fortune/package.json index 581d907c2b..13f26ad4cb 100644 --- a/packages/examples/fortune/package.json +++ b/packages/examples/fortune/package.json @@ -5,29 +5,30 @@ "description": "Human Protocol Fortune Exchange Oracle", "license": "MIT", "scripts": { - "start:exchange-oracle": "yarn workspace @human-protocol/fortune-exchange-oracle start", + "start:exchange-client": "yarn workspace @human-protocol/fortune-exchange-client start", + "start:exchange-server": "yarn workspace @human-protocol/fortune-exchange-server start", "start:recording-oracle": "yarn workspace @human-protocol/fortune-recording-oracle start", "start:reputation-oracle": "yarn workspace @human-protocol/fortune-reputation-oracle start", "start:launcher-server": "yarn workspace @human-protocol/fortune-job-launcher-server start", "start:launcher-client": "yarn workspace @human-protocol/fortune-job-launcher-client start", "start:minio": "docker compose --env-file=.env.development up -d minio-mc", "deploy:contracts": "yarn workspace @human-protocol/core install && yarn workspace @human-protocol/core deploy:local && ts-node setupAccounts.ts", - "start:local": "docker compose down && (concurrently --hide 0 \"hardhat node\" \"yarn deploy:contracts\" \"yarn start:launcher-server\" \"yarn start:launcher-client\" \"yarn start:exchange-oracle\" \"yarn start:recording-oracle\" \"yarn start:reputation-oracle\" \"yarn start:minio\")", + "start:local": "docker compose down && (concurrently --hide 0 \"hardhat node\" \"yarn deploy:contracts\" \"yarn start:launcher-server\" \"yarn start:launcher-client\" \"yarn start:exchange-client\" \"yarn start:recording-oracle\" \"yarn start:reputation-oracle\" \"yarn start:minio\")", "start:backend": "docker compose down && (concurrently --hide 0 \"hardhat node\" \"yarn start:recording-oracle\" \"yarn start:reputation-oracle\" \"yarn start:minio\")", - "test:exchange-oracle": "yarn workspace @human-protocol/fortune-exchange-oracle test", + "test:exchange-client": "yarn workspace @human-protocol/fortune-exchange-client test", "test:recording-oracle": "yarn workspace @human-protocol/fortune-recording-oracle test", "test:reputation-oracle": "yarn workspace @human-protocol/fortune-reputation-oracle test", "test:launcher-server": "yarn workspace @human-protocol/fortune-job-launcher-server test", "test:launcher-client": "yarn workspace @human-protocol/fortune-job-launcher-client test", "test:e2e:backend": "(concurrently -k -s first -g --hide 0 \"yarn start:backend\" \"sleep 5 && yarn deploy:contracts && jest tests/e2e-backend --runInBand\") && docker compose down", - "test:unit": "yarn test:exchange-oracle && yarn test:recording-oracle && yarn test:reputation-oracle && yarn test:launcher-server && yarn test:launcher-client && docker compose down", + "test:unit": "yarn test:exchange-client && yarn test:recording-oracle && yarn test:reputation-oracle && yarn test:launcher-server && yarn test:launcher-client && docker compose down", "test": "concurrently -g \"yarn start:minio\" \"yarn test:unit\"", - "lint:exchange-oracle": "yarn workspace @human-protocol/fortune-exchange-oracle lint", + "lint:exchange-client": "yarn workspace @human-protocol/fortune-exchange-client lint", "lint:recording-oracle": "yarn workspace @human-protocol/fortune-recording-oracle lint", "lint:reputation-oracle": "yarn workspace @human-protocol/fortune-reputation-oracle lint", "lint:launcher-server": "yarn workspace @human-protocol/fortune-job-launcher-server lint", "lint:launcher-client": "yarn workspace @human-protocol/fortune-job-launcher-client lint", - "lint": "concurrently -g \"yarn lint:exchange-oracle\" \"yarn lint:recording-oracle\" \"yarn lint:reputation-oracle\" \"yarn lint:launcher-server\" \"yarn lint:launcher-client\"" + "lint": "concurrently -g \"yarn lint:exchange-client\" \"yarn lint:recording-oracle\" \"yarn lint:reputation-oracle\" \"yarn lint:launcher-server\" \"yarn lint:launcher-client\"" }, "devDependencies": { "@human-protocol/core": "*", diff --git a/yarn.lock b/yarn.lock index 6b54ddcc4c..2eacc5d92c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3941,7 +3941,7 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@^4.17.14": +"@types/express@^4.17.13", "@types/express@^4.17.14": version "4.17.17" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== @@ -8782,7 +8782,7 @@ express-rate-limit@^6.7.0: resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-6.7.0.tgz#6aa8a1bd63dfe79702267b3af1161a93afc1d3c2" integrity sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA== -express@^4.14.0, express@^4.18.1: +express@^4.14.0, express@^4.17.1, express@^4.18.1: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== @@ -16563,7 +16563,7 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^4.9.3: +typescript@^4.5.5, typescript@^4.9.3: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== From 86ea8f2a8cf81a9601326047f2e14da1be90d278 Mon Sep 17 00:00:00 2001 From: portuu3 <61605646+portuu3@users.noreply.github.com> Date: Mon, 17 Apr 2023 16:49:21 +0200 Subject: [PATCH 14/22] fix subgraph config for mainnet (#407) --- .../sdk/typescript/subgraph/config/mainnet-v1.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/sdk/typescript/subgraph/config/mainnet-v1.json b/packages/sdk/typescript/subgraph/config/mainnet-v1.json index 54f768db7c..4db40bc0f9 100644 --- a/packages/sdk/typescript/subgraph/config/mainnet-v1.json +++ b/packages/sdk/typescript/subgraph/config/mainnet-v1.json @@ -4,29 +4,29 @@ "EscrowFactory": { "address": "0xD9c75a1Aa4237BB72a41E5E26bd8384f10c1f55a", "startBlock": 16924057, - "abi": "./node_modules/@human-protocol/core/abis/EscrowFactory.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/EscrowFactory.json" }, "HMToken": { "address": "0xd1ba9BAC957322D6e8c07a160a3A8dA11A0d2867", "startBlock": 12184475, - "abi": "./node_modules/@human-protocol/core/abis/HMToken.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/HMToken.json" }, "Escrow": { - "abi": "./node_modules/@human-protocol/core/abis/Escrow.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Escrow.json" }, "KVStore": { "address": "0x70671167176C4934204B1C7e97F5e86695857ef2", "startBlock": 16924058, - "abi": "./node_modules/@human-protocol/core/abis/KVStore.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/KVStore.json" }, "Staking": { "address": "0x05398211bA2046E296fBc9a9D3EB49e3F15C3123", "startBlock": 16924055, - "abi": "./node_modules/@human-protocol/core/abis/Staking.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/Staking.json" }, "RewardPool": { "address": "0x4A5963Dd6792692e9147EdC7659936b96251917a", "startBlock": 16968283, - "abi": "./node_modules/@human-protocol/core/abis/RewardPool.json" + "abi": "../../../../node_modules/@human-protocol/core/abis/RewardPool.json" } } From 537e5189c7dc175195d89e7c8508755a86fc4274 Mon Sep 17 00:00:00 2001 From: portuu3 <61605646+portuu3@users.noreply.github.com> Date: Tue, 18 Apr 2023 12:38:07 +0200 Subject: [PATCH 15/22] Ex oracle server - vercel deployment and updates (#414) * add vercel config to ex oracle server * update ex oracle server --- .../fortune/exchange-oracle/server/index.ts | 27 ++++++++++--------- .../exchange-oracle/server/package.json | 3 ++- .../exchange-oracle/server/vercel.json | 20 ++++++++++++++ 3 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 packages/examples/fortune/exchange-oracle/server/vercel.json diff --git a/packages/examples/fortune/exchange-oracle/server/index.ts b/packages/examples/fortune/exchange-oracle/server/index.ts index afa0d661c6..03e154b1b6 100644 --- a/packages/examples/fortune/exchange-oracle/server/index.ts +++ b/packages/examples/fortune/exchange-oracle/server/index.ts @@ -1,4 +1,5 @@ import express from 'express'; +import bodyParser from 'body-parser'; // Define the data type for jobs type Job = { @@ -9,11 +10,11 @@ type Job = { token: string; estimatedPrice: number; solutionsRequired: number; - solutionsSent: number; }; // Create an instance of Express application const app = express(); +app.use(bodyParser.json()); // Specify the port on which the API will run const PORT = 3000; @@ -26,8 +27,7 @@ const jobs: Job[] = [ description: 'Job description 1', token: '0x670bCc966ddc4fE7136c8793617a2C4D22849827', estimatedPrice: 1, - solutionsRequired: 2, - solutionsSent: 1, + solutionsRequired: 2 }, { address: '0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb7', @@ -37,7 +37,6 @@ const jobs: Job[] = [ token: '0x670bCc966ddc4fE7136c8793617a2C4D22849827', estimatedPrice: 1, solutionsRequired: 3, - solutionsSent: 2, }, { address: '0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb8', @@ -46,8 +45,7 @@ const jobs: Job[] = [ description: 'Job description 3', token: '0x670bCc966ddc4fE7136c8793617a2C4D22849827', estimatedPrice: 2, - solutionsRequired: 2, - solutionsSent: 0, + solutionsRequired: 2 }, { address: '0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb9', @@ -56,8 +54,7 @@ const jobs: Job[] = [ description: 'Job description 4', token: '0x670bCc966ddc4fE7136c8793617a2C4D22849827', estimatedPrice: 3, - solutionsRequired: 1, - solutionsSent: 1, + solutionsRequired: 1 }, { address: '0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb10', @@ -66,14 +63,20 @@ const jobs: Job[] = [ description: 'Job description 5', token: '0x670bCc966ddc4fE7136c8793617a2C4D22849827', estimatedPrice: 2, - solutionsRequired: 3, - solutionsSent: 2, + solutionsRequired: 3 }, ]; // Endpoint to get the list of similar jobs app.get('/jobs', (req, res) => { - res.json({ jobs: jobs }); + // Get the value of the workeraddress query parameter + const workerAddress = req.query.workeraddress; + + if (!workerAddress || workerAddress === '') { + return res.status(400).json({ error: 'workerAddress is required' }); + } + // Return the filtered jobs + res.json(jobs); }); // Endpoint for sending solutions. Receive address, chainId, and solution @@ -86,7 +89,7 @@ app.post('/jobs/solutions', (req, res) => { ); // Check if the job exists and if the provided solution matches the required solutions - if (foundJob && foundJob.solutionsSent < foundJob.solutionsRequired) { + if (foundJob) { res.json({ result: true }); } else { res.json({ result: false }); diff --git a/packages/examples/fortune/exchange-oracle/server/package.json b/packages/examples/fortune/exchange-oracle/server/package.json index 11018b3272..f5fa0b1e4a 100644 --- a/packages/examples/fortune/exchange-oracle/server/package.json +++ b/packages/examples/fortune/exchange-oracle/server/package.json @@ -4,7 +4,8 @@ "description": "A simple API for Exchange Oracle in TypeScript", "main": "index.ts", "scripts": { - "start": "ts-node index.ts" + "start": "ts-node index.ts", + "build": "tsc" }, "dependencies": { "express": "^4.17.1" diff --git a/packages/examples/fortune/exchange-oracle/server/vercel.json b/packages/examples/fortune/exchange-oracle/server/vercel.json new file mode 100644 index 0000000000..dd3a82461d --- /dev/null +++ b/packages/examples/fortune/exchange-oracle/server/vercel.json @@ -0,0 +1,20 @@ +{ + "version": 2, + "builds": [ + { + "src": "index.ts", + "use": "@vercel/node" + } + ], + "routes": [ + { + "src": "/jobs/solutions", + "methods": ["POST"], + "dest": "index.ts" + }, + { + "src": "/(.*)", + "dest": "index.ts" + } + ] +} From ad5b43cae028c4432f7aeb05e1baae98febbe3d8 Mon Sep 17 00:00:00 2001 From: portuu3 <61605646+portuu3@users.noreply.github.com> Date: Tue, 18 Apr 2023 16:29:44 +0200 Subject: [PATCH 16/22] cors origin ex oracle (#416) --- .../fortune/exchange-oracle/server/vercel.json | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/examples/fortune/exchange-oracle/server/vercel.json b/packages/examples/fortune/exchange-oracle/server/vercel.json index dd3a82461d..e231928315 100644 --- a/packages/examples/fortune/exchange-oracle/server/vercel.json +++ b/packages/examples/fortune/exchange-oracle/server/vercel.json @@ -10,11 +10,21 @@ { "src": "/jobs/solutions", "methods": ["POST"], - "dest": "index.ts" + "dest": "index.ts", + "headers": { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "POST,OPTIONS", + "Access-Control-Allow-Headers": "X-Requested-With,Content-Type,Accept" + } }, { "src": "/(.*)", - "dest": "index.ts" + "dest": "index.ts", + "headers": { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "*", + "Access-Control-Allow-Headers": "X-Requested-With,Content-Type,Accept" + } } ] } From db5430b781480e2fca0c896805884942bdb414cd Mon Sep 17 00:00:00 2001 From: portuu3 <61605646+portuu3@users.noreply.github.com> Date: Mon, 24 Apr 2023 10:17:35 +0200 Subject: [PATCH 17/22] remove unnecessary import in escrow contract (#420) --- packages/core/contracts/Escrow.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core/contracts/Escrow.sol b/packages/core/contracts/Escrow.sol index 1acdcb8b72..d4e04d8e90 100644 --- a/packages/core/contracts/Escrow.sol +++ b/packages/core/contracts/Escrow.sol @@ -6,7 +6,6 @@ import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol'; import '@openzeppelin/contracts/security/ReentrancyGuard.sol'; -import './interfaces/IRewardPool.sol'; import './interfaces/IEscrow.sol'; import './utils/SafeMath.sol'; From bb64fc367d0f07f0d6cf461d90c47921b7b7beb1 Mon Sep 17 00:00:00 2001 From: CryptoRush <98655210+leric7@users.noreply.github.com> Date: Mon, 24 Apr 2023 16:20:33 +0800 Subject: [PATCH 18/22] Fix: Staking/RewardPool contracts (#410) * fix core staking / reward pool contracts * add test cases --- packages/core/contracts/RewardPool.sol | 2 + packages/core/contracts/Staking.sol | 17 +-- packages/core/test/RewardPool.ts | 6 ++ packages/core/test/Staking.ts | 140 ++++++++++++++++++++++++- 4 files changed, 158 insertions(+), 7 deletions(-) diff --git a/packages/core/contracts/RewardPool.sol b/packages/core/contracts/RewardPool.sol index 52074f0045..6e1d867e18 100644 --- a/packages/core/contracts/RewardPool.sol +++ b/packages/core/contracts/RewardPool.sol @@ -106,6 +106,8 @@ contract RewardPool is IRewardPool, OwnableUpgradeable, UUPSUpgradeable { function distributeReward(address _escrowAddress) external override { Reward[] memory rewardsForEscrow = rewards[_escrowAddress]; + require(rewardsForEscrow.length > 0, 'No rewards for escrow'); + // Delete rewards for allocation delete rewards[_escrowAddress]; diff --git a/packages/core/contracts/Staking.sol b/packages/core/contracts/Staking.sol index 032abe2154..1ca219a0ba 100644 --- a/packages/core/contracts/Staking.sol +++ b/packages/core/contracts/Staking.sol @@ -282,7 +282,8 @@ contract Staking is IStaking, OwnableUpgradeable, UUPSUpgradeable { if ( allocation.closedAt == 0 && - escrowStatus == IEscrow.EscrowStatuses.Complete + (escrowStatus == IEscrow.EscrowStatuses.Complete || + escrowStatus == IEscrow.EscrowStatuses.Cancelled) ) { return AllocationState.Completed; } @@ -371,7 +372,6 @@ contract Staking is IStaking, OwnableUpgradeable, UUPSUpgradeable { function unstake(uint256 _tokens) external override onlyStaker(msg.sender) { Stakes.Staker storage staker = stakes[msg.sender]; - require(staker.tokensStaked > 0, 'Must be a positive number'); require(_tokens > 0, 'Must be a positive number'); require( staker.tokensAvailable() >= _tokens, @@ -439,7 +439,7 @@ contract Staking is IStaking, OwnableUpgradeable, UUPSUpgradeable { Allocation storage allocation = allocations[_escrowAddress]; - require(allocation.tokens > 0, 'Must be a positive number'); + require(_tokens > 0, 'Must be a positive number'); require( _tokens <= allocation.tokens, @@ -519,6 +519,8 @@ contract Staking is IStaking, OwnableUpgradeable, UUPSUpgradeable { function closeAllocation( address _escrowAddress ) external override onlyStaker(msg.sender) { + require(_escrowAddress != address(0), 'Must be a valid address'); + _closeAllocation(_escrowAddress); } @@ -533,7 +535,7 @@ contract Staking is IStaking, OwnableUpgradeable, UUPSUpgradeable { 'Allocation has no completed state' ); - Allocation memory allocation = allocations[_escrowAddress]; + Allocation storage allocation = allocations[_escrowAddress]; allocation.closedAt = block.number; uint256 diffInBlocks = Math.diffOrZero( @@ -542,11 +544,14 @@ contract Staking is IStaking, OwnableUpgradeable, UUPSUpgradeable { ); require(diffInBlocks > 0, 'Allocation cannot be closed so early'); - stakes[allocation.staker].unallocate(allocation.tokens); + uint256 _tokens = allocation.tokens; + + stakes[allocation.staker].unallocate(_tokens); + allocation.tokens = 0; emit AllocationClosed( allocation.staker, - allocation.tokens, + _tokens, _escrowAddress, allocation.closedAt ); diff --git a/packages/core/test/RewardPool.ts b/packages/core/test/RewardPool.ts index 8bac0c9150..620182ba5b 100644 --- a/packages/core/test/RewardPool.ts +++ b/packages/core/test/RewardPool.ts @@ -229,6 +229,12 @@ describe('RewardPool', function () { await staking.connect(operator).allocate(escrowAddress, allocatedTokens); }); + it('Should revert if there is no reward', async () => { + await expect( + rewardPool.distributeReward(escrowAddress) + ).to.be.revertedWith('No rewards for escrow'); + }); + it('Should distribute the reward.', async () => { const vSlashAmount = 2; const v2SlashAmount = 3; diff --git a/packages/core/test/Staking.ts b/packages/core/test/Staking.ts index 6c34676680..baebd198bf 100644 --- a/packages/core/test/Staking.ts +++ b/packages/core/test/Staking.ts @@ -3,12 +3,16 @@ import { expect } from 'chai'; import { ethers, upgrades } from 'hardhat'; import { Signer } from 'ethers'; import { + Escrow, EscrowFactory, HMToken, Staking, RewardPool, } from '../typechain-types'; +const MOCK_URL = 'http://google.com/fake'; +const MOCK_HASH = 'kGKmnj9BRf'; + const mineNBlocks = async (n: number) => { await Promise.all( Array(n) @@ -187,6 +191,14 @@ describe('Staking', function () { ).to.be.revertedWith('Must be a positive number'); }); + it('Should revert with the right error if total stake is below the unstake amount', async function () { + const amount = 15; + + await expect( + staking.connect(operator).unstake(amount) + ).to.be.revertedWith('Insufficient amount to unstake'); + }); + it('Should revert with the right error if total stake is below the minimum threshold', async function () { const amount = 9; @@ -708,7 +720,19 @@ describe('Staking', function () { ) ).to.be.revertedWith('Slash tokens exceed allocated ones'); }); - // TODO: Add additional tests + + it('Should revert if slash amount is 0', async function () { + await expect( + staking + .connect(owner) + .slash( + await validator.getAddress(), + await operator.getAddress(), + escrowAddress, + 0 + ) + ).to.be.revertedWith('Must be a positive number'); + }); }); describe('Events', function () { @@ -810,4 +834,118 @@ describe('Staking', function () { ); }); }); + + describe('closeAllocation', function () { + let escrowAddress: string; + let escrow: Escrow; + + this.beforeEach(async () => { + const amount = 10; + const allocationAmount = 5; + + await staking.connect(operator).stake(amount); + + const result = await ( + await escrowFactory + .connect(operator) + .createEscrow(token.address, [ + await validator.getAddress(), + await reputationOracle.getAddress(), + await recordingOracle.getAddress(), + ]) + ).wait(); + const event = result.events?.find(({ topics }) => + topics.includes(ethers.utils.id('Launched(address,address)')) + )?.args; + + expect(event?.token).to.equal(token.address, 'token address is correct'); + expect(event?.escrow).to.not.be.null; + + escrowAddress = event?.escrow; + + // Fund escrow + await token.connect(owner).transfer(escrowAddress, 100); + + const EscrowFactory = await ethers.getContractFactory('Escrow'); + escrow = await EscrowFactory.attach(escrowAddress); + + // Setup escrow + await escrow + .connect(operator) + .setup( + await reputationOracle.getAddress(), + await recordingOracle.getAddress(), + 10, + 10, + MOCK_URL, + MOCK_HASH + ); + + await staking + .connect(operator) + .allocate(escrowAddress.toString(), allocationAmount); + }); + + describe('Validations', function () { + it('Should revert with the right error if not a valid address', async function () { + await expect( + staking + .connect(operator) + .closeAllocation(ethers.constants.AddressZero) + ).to.be.revertedWith('Must be a valid address'); + }); + + it('Should revert with the right error if escrow is not completed nor cancelled', async function () { + await expect( + staking.connect(operator).closeAllocation(escrowAddress.toString()) + ).to.be.revertedWith('Allocation has no completed state'); + }); + }); + + describe('Close allocation on completed/cancelled escrows', function () { + it('Should close allocation on completed escrows', async function () { + // Bulk payout & Complete Escrow + await escrow + .connect(operator) + .bulkPayOut( + [await operator2.getAddress()], + [100], + MOCK_URL, + MOCK_HASH, + '000' + ); + + await escrow.connect(operator).complete(); + + // Close allocation + await staking + .connect(operator) + .closeAllocation(escrowAddress.toString()); + + const allocation = await staking + .connect(operator) + .getAllocation(escrowAddress.toString()); + + expect(allocation.closedAt).not.to.be.null; + expect(allocation.tokens.toString()).to.equal('0'); + }); + + it('Should close allocation on cancelled escrows', async function () { + // Close escrow + await escrow.connect(operator).cancel(); + + // Close allocation + await staking + .connect(operator) + .closeAllocation(escrowAddress.toString()); + + const allocation = await staking + .connect(operator) + .getAllocation(escrowAddress.toString()); + + expect(allocation.closedAt).not.to.be.null; + expect(allocation.tokens.toString()).to.equal('0'); + }); + }); + }); }); From 12c9e7cb58c547165015ba7d793674df7a55572e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=A6=AB=EA=A6=B6=EA=A6=A4=EA=A6=BA=EA=A6=B4?= <62529025+spiritbroski@users.noreply.github.com> Date: Tue, 25 Apr 2023 15:04:22 +0700 Subject: [PATCH 19/22] add meta code verify (#311) Add meta code verify to check integrity of dashboard --- .../workflows/ci-test-meta-code-verify.yml | 22 + package.json | 6 +- packages/apps/escrow-dashboard/README.md | 10 +- packages/apps/escrow-dashboard/index.html | 1 + packages/apps/escrow-dashboard/package.json | 6 + .../__tests__/generateMerkleTree.test.ts | 72 + .../scripts/generateMerkleTree.ts | 51 + packages/apps/escrow-dashboard/vite.config.ts | 75 +- packages/apps/meta-code-verify/.eslintrc.json | 21 + packages/apps/meta-code-verify/.gitignore | 5 + packages/apps/meta-code-verify/.prettierrc | 12 + packages/apps/meta-code-verify/README.md | 95 + .../_locales/en/messages.json | 116 + .../meta-code-verify/config/v2/manifest.json | 44 + .../meta-code-verify/config/v3/manifest.json | 42 + .../apps/meta-code-verify/images/check.svg | 5 + .../meta-code-verify/images/chevron-right.svg | 14 + .../images/circle-download-cta.svg | 14 + .../images/circle-exclamation-mark.svg | 14 + .../meta-code-verify/images/circle-info.svg | 14 + .../meta-code-verify/images/default_32.png | Bin 0 -> 1186 bytes .../meta-code-verify/images/default_64.png | Bin 0 -> 2563 bytes .../meta-code-verify/images/default_64@2x.png | Bin 0 -> 4532 bytes .../meta-code-verify/images/error-badge.svg | 16 + .../meta-code-verify/images/error-header.svg | 36 + .../meta-code-verify/images/failure_32.png | Bin 0 -> 945 bytes .../meta-code-verify/images/icon-badge.svg | 16 + .../images/loading-header.svg | 36 + .../meta-code-verify/images/menu-badge.svg | 14 + .../apps/meta-code-verify/images/risk_32.png | Bin 0 -> 1274 bytes .../images/temporary-extension-icon.svg | 3 + .../images/temporary-extension-icon128.png | Bin 0 -> 2176 bytes .../images/temporary-extension-icon32.png | Bin 0 -> 756 bytes .../images/temporary-extension-icon48.png | Bin 0 -> 1413 bytes .../images/validated-badge.svg | 16 + .../images/validated-header.svg | 36 + .../meta-code-verify/images/validated_32.png | Bin 0 -> 1180 bytes .../meta-code-verify/images/warning-badge.svg | 16 + .../images/warning-header.svg | 36 + packages/apps/meta-code-verify/images/x.svg | 14 + packages/apps/meta-code-verify/package.json | 46 + .../apps/meta-code-verify/rollup.config.ts | 70 + .../rollup-plugin-clean-once.ts | 45 + .../rollup-plugin-prettier-build-start.ts | 49 + .../rollup-plugin-static-files.ts | 52 + .../rollup-plugin-watch-additional.ts | 24 + .../meta-code-verify/rollup_scripts/utils.ts | 27 + .../apps/meta-code-verify/src/css/popup.css | 280 ++ .../apps/meta-code-verify/src/html/popup.html | 147 ++ .../src/js/__tests__/background.test.ts | 299 +++ .../src/js/__tests__/contentUtils.test.ts | 412 +++ .../js/__tests__/detectKvstoreMeta.test.ts | 14 + .../meta-code-verify/src/js/background.ts | 434 ++++ .../apps/meta-code-verify/src/js/config.ts | 148 ++ .../meta-code-verify/src/js/contentUtils.ts | 1115 ++++++++ .../src/js/detectKvstoreMeta.ts | 11 + .../apps/meta-code-verify/src/js/popup.ts | 355 +++ .../js/tab_state_tracker/FrameStateMachine.ts | 21 + .../src/js/tab_state_tracker/StateMachine.ts | 101 + .../js/tab_state_tracker/TabStateMachine.ts | 90 + .../js/tab_state_tracker/tabStateTracker.ts | 50 + packages/apps/meta-code-verify/tsconfig.json | 6 + .../apps/meta-code-verify/vitest.config.ts | 14 + .../apps/meta-code-verify/vitest.setup.ts | 103 + yarn.lock | 2242 ++++++++++++++++- 65 files changed, 6946 insertions(+), 87 deletions(-) create mode 100644 .github/workflows/ci-test-meta-code-verify.yml create mode 100644 packages/apps/escrow-dashboard/scripts/__tests__/generateMerkleTree.test.ts create mode 100644 packages/apps/escrow-dashboard/scripts/generateMerkleTree.ts create mode 100644 packages/apps/meta-code-verify/.eslintrc.json create mode 100644 packages/apps/meta-code-verify/.gitignore create mode 100644 packages/apps/meta-code-verify/.prettierrc create mode 100644 packages/apps/meta-code-verify/README.md create mode 100644 packages/apps/meta-code-verify/_locales/en/messages.json create mode 100644 packages/apps/meta-code-verify/config/v2/manifest.json create mode 100644 packages/apps/meta-code-verify/config/v3/manifest.json create mode 100644 packages/apps/meta-code-verify/images/check.svg create mode 100644 packages/apps/meta-code-verify/images/chevron-right.svg create mode 100644 packages/apps/meta-code-verify/images/circle-download-cta.svg create mode 100644 packages/apps/meta-code-verify/images/circle-exclamation-mark.svg create mode 100644 packages/apps/meta-code-verify/images/circle-info.svg create mode 100755 packages/apps/meta-code-verify/images/default_32.png create mode 100755 packages/apps/meta-code-verify/images/default_64.png create mode 100755 packages/apps/meta-code-verify/images/default_64@2x.png create mode 100644 packages/apps/meta-code-verify/images/error-badge.svg create mode 100644 packages/apps/meta-code-verify/images/error-header.svg create mode 100755 packages/apps/meta-code-verify/images/failure_32.png create mode 100644 packages/apps/meta-code-verify/images/icon-badge.svg create mode 100644 packages/apps/meta-code-verify/images/loading-header.svg create mode 100644 packages/apps/meta-code-verify/images/menu-badge.svg create mode 100755 packages/apps/meta-code-verify/images/risk_32.png create mode 100644 packages/apps/meta-code-verify/images/temporary-extension-icon.svg create mode 100644 packages/apps/meta-code-verify/images/temporary-extension-icon128.png create mode 100644 packages/apps/meta-code-verify/images/temporary-extension-icon32.png create mode 100644 packages/apps/meta-code-verify/images/temporary-extension-icon48.png create mode 100644 packages/apps/meta-code-verify/images/validated-badge.svg create mode 100644 packages/apps/meta-code-verify/images/validated-header.svg create mode 100755 packages/apps/meta-code-verify/images/validated_32.png create mode 100644 packages/apps/meta-code-verify/images/warning-badge.svg create mode 100644 packages/apps/meta-code-verify/images/warning-header.svg create mode 100644 packages/apps/meta-code-verify/images/x.svg create mode 100644 packages/apps/meta-code-verify/package.json create mode 100644 packages/apps/meta-code-verify/rollup.config.ts create mode 100644 packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-clean-once.ts create mode 100644 packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-prettier-build-start.ts create mode 100644 packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-static-files.ts create mode 100644 packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-watch-additional.ts create mode 100644 packages/apps/meta-code-verify/rollup_scripts/utils.ts create mode 100644 packages/apps/meta-code-verify/src/css/popup.css create mode 100644 packages/apps/meta-code-verify/src/html/popup.html create mode 100644 packages/apps/meta-code-verify/src/js/__tests__/background.test.ts create mode 100644 packages/apps/meta-code-verify/src/js/__tests__/contentUtils.test.ts create mode 100644 packages/apps/meta-code-verify/src/js/__tests__/detectKvstoreMeta.test.ts create mode 100644 packages/apps/meta-code-verify/src/js/background.ts create mode 100644 packages/apps/meta-code-verify/src/js/config.ts create mode 100644 packages/apps/meta-code-verify/src/js/contentUtils.ts create mode 100644 packages/apps/meta-code-verify/src/js/detectKvstoreMeta.ts create mode 100644 packages/apps/meta-code-verify/src/js/popup.ts create mode 100644 packages/apps/meta-code-verify/src/js/tab_state_tracker/FrameStateMachine.ts create mode 100644 packages/apps/meta-code-verify/src/js/tab_state_tracker/StateMachine.ts create mode 100644 packages/apps/meta-code-verify/src/js/tab_state_tracker/TabStateMachine.ts create mode 100644 packages/apps/meta-code-verify/src/js/tab_state_tracker/tabStateTracker.ts create mode 100644 packages/apps/meta-code-verify/tsconfig.json create mode 100644 packages/apps/meta-code-verify/vitest.config.ts create mode 100644 packages/apps/meta-code-verify/vitest.setup.ts diff --git a/.github/workflows/ci-test-meta-code-verify.yml b/.github/workflows/ci-test-meta-code-verify.yml new file mode 100644 index 0000000000..2e03dd5a72 --- /dev/null +++ b/.github/workflows/ci-test-meta-code-verify.yml @@ -0,0 +1,22 @@ +name: meta-code-verify CI + +on: + push: + branches: + - "main" + pull_request: + workflow_dispatch: + +jobs: + meta-code-verify-test: + name: meta-code-verify Test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: npm install --global yarn && yarn + name: Install dependencies + - run: yarn compile + name: Compile smart contracts + working-directory: ./packages/core + - run: yarn meta-code-verify:test + name: Run meta-code-verify test diff --git a/package.json b/package.json index b8a4f617f2..db6d41dcad 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,10 @@ "sdk:lint": "yarn workspace @human-protocol/sdk lint", "basemodels:test": "yarn workspace @human-protocol/basemodels test", "basemodels:lint": "yarn workspace @human-protocol/basemodels lint", - "test": "concurrently npm:core:test npm:subgraph:test npm:escrow-dashboard:test npm:fortune:test npm:sdk:test npm:basemodels:test npm:faucet-server:test", - "lint": "concurrently npm:core:lint npm:subgraph:lint npm:escrow-dashboard:lint npm:fortune:lint npm:sdk:lint npm:basemodels:lint npm:faucet-server:lint", + "meta-code-verify:test": "yarn workspace @human-protocol/meta-code-verify test", + "meta-code-verify:lint": "yarn workspace @human-protocol/meta-code-verify lint", + "test": "concurrently npm:core:test npm:subgraph:test npm:escrow-dashboard:test npm:fortune:test npm:sdk:test npm:basemodels:test npm:faucet-server:test npm:meta-code-verify:test", + "lint": "concurrently npm:core:lint npm:subgraph:lint npm:escrow-dashboard:lint npm:fortune:lint npm:sdk:lint npm:basemodels:lint npm:faucet-server:lint npm:meta-code-verify:lint", "prepare": "husky install" }, "workspaces": { diff --git a/packages/apps/escrow-dashboard/README.md b/packages/apps/escrow-dashboard/README.md index ccf89539ea..9fabd03730 100644 --- a/packages/apps/escrow-dashboard/README.md +++ b/packages/apps/escrow-dashboard/README.md @@ -18,7 +18,15 @@ You may also see any lint errors in the console. ### `yarn run build` -Builds the app for production to the `build` folder.\ +Before building you need to set environment variable in `.env`: + +``` +VITE_APP_NFT_STORAGE_API= +VITE_APP_FAUCET_SERVER_URL= +VITE_APP_WALLETCONNECT_PROJECT_ID= +``` + +Builds the app for production to the `dist` folder.\ It correctly bundles React in production mode and optimizes the build for the best performance. The build is minified and the filenames include the hashes. diff --git a/packages/apps/escrow-dashboard/index.html b/packages/apps/escrow-dashboard/index.html index bb2dbacb77..6723031f36 100644 --- a/packages/apps/escrow-dashboard/index.html +++ b/packages/apps/escrow-dashboard/index.html @@ -30,5 +30,6 @@
+ diff --git a/packages/apps/escrow-dashboard/package.json b/packages/apps/escrow-dashboard/package.json index 8a698631c9..b69fec0007 100644 --- a/packages/apps/escrow-dashboard/package.json +++ b/packages/apps/escrow-dashboard/package.json @@ -36,11 +36,15 @@ "devDependencies": { "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", + "@types/crypto-js": "^4.1.1", + "@types/glob": "^8.1.0", "@types/numeral": "^2.0.2", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", "@types/react-test-renderer": "^18.0.0", "@vitejs/plugin-react": "^3.1.0", + "crypto-js": "^4.1.1", + "dotenv": "^16.0.3", "eslint-config-react-app": "^7.0.1", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.26.0", @@ -49,7 +53,9 @@ "happy-dom": "^8.2.6", "identity-obj-proxy": "^3.0.0", "jsdom": "^21.1.0", + "merkletreejs": "^0.3.9", "resize-observer-polyfill": "^1.5.1", + "sinon": "^15.0.4", "vite": "^4.1.4", "vite-plugin-node-polyfills": "^0.7.0", "vitest": "^0.29.2" diff --git a/packages/apps/escrow-dashboard/scripts/__tests__/generateMerkleTree.test.ts b/packages/apps/escrow-dashboard/scripts/__tests__/generateMerkleTree.test.ts new file mode 100644 index 0000000000..ba0dad7bce --- /dev/null +++ b/packages/apps/escrow-dashboard/scripts/__tests__/generateMerkleTree.test.ts @@ -0,0 +1,72 @@ +import * as fs from 'node:fs'; +import * as path from 'path'; +import { NFTStorage } from 'nft.storage'; +import sinon from 'sinon'; +import tmp from 'tmp'; +import { test, assert } from 'vitest'; +import generateMerkleTree from '../generateMerkleTree'; +const mockToken = 'test-token'; + +test('generateMerkleTree should return a valid Merkle tree JSON', async () => { + // Create a temporary directory for the dist/assets folder + const tmpDir = tmp.dirSync(); + const tmpDistAssetsPath = path.join(tmpDir.name, 'dist/assets'); + fs.mkdirSync(tmpDistAssetsPath, { recursive: true }); + + // Create some JS files in the temporary dist/assets folder + fs.writeFileSync( + path.join(tmpDistAssetsPath, 'test.js'), + 'console.log("Hello, world!");' + ); + fs.writeFileSync( + path.join(tmpDistAssetsPath, 'test2.js'), + 'console.log("Another file!");' + ); + + // Mock NFTStorage.storeBlob method + const fakeCid = 'bafybeih42y6g7zkr76j6ax7z6wjc5d56xazsrtxzp6f7j6fsk67djnppmq'; + sinon.stub(NFTStorage.prototype, 'storeBlob').resolves(fakeCid); + + const origin = 'https://example.com'; + + const merkleTreeJson = await generateMerkleTree( + origin, + mockToken, + tmpDistAssetsPath + ); + const merkleTreeData = JSON.parse(merkleTreeJson); + + // Cleanup and restore the actual file system and NFTStorage.storeBlob method + fs.rmdirSync(tmpDir.name, { recursive: true }); + sinon.restore(); + + // Assertions + assert( + merkleTreeData.hasOwnProperty('version'), + 'Merkle tree JSON should have a "version" property' + ); + assert( + merkleTreeData.version === fakeCid, + 'Merkle tree JSON "version" should match the fake CID' + ); + assert( + merkleTreeData.hasOwnProperty('root'), + 'Merkle tree JSON should have a "root" property' + ); + assert( + merkleTreeData.hasOwnProperty('leaves'), + 'Merkle tree JSON should have a "leaves" property' + ); + assert( + merkleTreeData.root.startsWith('0x'), + 'Merkle tree root hash should start with "0x"' + ); + assert( + merkleTreeData.leaves.length > 0, + 'Merkle tree leaves should not be empty' + ); + assert( + merkleTreeData.leaves.every((leaf) => leaf.startsWith('0x')), + 'Each Merkle tree leaf hash should start with "0x"' + ); +}); diff --git a/packages/apps/escrow-dashboard/scripts/generateMerkleTree.ts b/packages/apps/escrow-dashboard/scripts/generateMerkleTree.ts new file mode 100644 index 0000000000..473684243c --- /dev/null +++ b/packages/apps/escrow-dashboard/scripts/generateMerkleTree.ts @@ -0,0 +1,51 @@ +import * as fs from 'node:fs'; +import * as path from 'path'; +import { SHA256 } from 'crypto-js'; +import * as glob from 'glob'; +import { MerkleTree } from 'merkletreejs'; +import { NFTStorage } from 'nft.storage'; + +export default async function generateMerkleTree( + origin: string, + token: string, + buildPath?: string +): Promise { + if (!buildPath) { + buildPath = path.join(__dirname, '../dist/assets'); + } + + const allFiles = glob.sync('**/*.js', { cwd: buildPath }); + const NFT_STORAGE_CLIENT = new NFTStorage({ + token, + }); + const fileHashes = allFiles.map((file) => { + const filePath = path.join(buildPath, file); + const fileContent = fs.readFileSync(filePath, 'utf-8'); + return SHA256(fileContent).toString(); + }); + + const merkleTree = new MerkleTree(fileHashes, SHA256); + const merkleRoot = '0x' + merkleTree.getRoot().toString('hex'); + + // Add the '0x' prefix to each leaf + const leaves = merkleTree + .getLeaves() + .map((leaf) => '0x' + leaf.toString('hex')); + + const someData = new Blob([ + JSON.stringify({ + origin, + root_hash: merkleRoot, + published_date: Date.now(), + }) as string, + ]); + const cid = await NFT_STORAGE_CLIENT.storeBlob(someData); + + const merkleTreeJson = JSON.stringify({ + version: cid, + root: merkleRoot, + leaves: leaves, + }); + + return merkleTreeJson; +} diff --git a/packages/apps/escrow-dashboard/vite.config.ts b/packages/apps/escrow-dashboard/vite.config.ts index 42f282cecb..d75bd1a589 100644 --- a/packages/apps/escrow-dashboard/vite.config.ts +++ b/packages/apps/escrow-dashboard/vite.config.ts @@ -1,35 +1,60 @@ /// /// - +import * as fs from 'fs'; import path from 'path'; import react from '@vitejs/plugin-react'; +import dotenv from 'dotenv'; import { defineConfig } from 'vite'; import { nodePolyfills } from 'vite-plugin-node-polyfills'; +import generateMerkleTree from './scripts/generateMerkleTree'; +dotenv.config(); // https://vitejs.dev/config/ -export default defineConfig({ - plugins: [ - react({ fastRefresh: false }), - nodePolyfills({ - // Whether to polyfill `node:` protocol imports. - protocolImports: true, - }), - ], - worker: { - plugins: [react()], - }, - resolve: { - alias: [{ find: 'src', replacement: path.resolve(__dirname, 'src') }], - }, - test: { - globals: true, - environment: 'happy-dom', - setupFiles: './tests/setup.ts', - coverage: { - reporter: ['text', 'json', 'html'], +export default defineConfig(({ mode }) => { + return { + plugins: [ + react({ fastRefresh: false }), + nodePolyfills({ + // Whether to polyfill `node:` protocol imports. + protocolImports: true, + }), + { + name: 'generate-merkle-tree', + apply: 'build', + async writeBundle() { + const merkleTreeJson = await generateMerkleTree( + mode === 'development' + ? 'localhost' + : 'dashboard.humanprotocol.org', + process.env.VITE_APP_NFT_STORAGE_API as string + ); + + const indexPath = path.resolve(__dirname, './dist/index.html'); + const indexContent = fs.readFileSync(indexPath, 'utf-8'); + const newIndexContent = indexContent.replace( + '', + `` + ); + fs.writeFileSync(indexPath, newIndexContent); + }, + }, + ], + worker: { + plugins: [react()], + }, + resolve: { + alias: [{ find: 'src', replacement: path.resolve(__dirname, 'src') }], + }, + test: { + globals: true, + environment: 'happy-dom', + setupFiles: './tests/setup.ts', + coverage: { + reporter: ['text', 'json', 'html'], + }, + }, + server: { + port: 3002, }, - }, - server: { - port: 3002, - }, + }; }); diff --git a/packages/apps/meta-code-verify/.eslintrc.json b/packages/apps/meta-code-verify/.eslintrc.json new file mode 100644 index 0000000000..e0832ce8ef --- /dev/null +++ b/packages/apps/meta-code-verify/.eslintrc.json @@ -0,0 +1,21 @@ +{ + "root": true, + "env": { + "browser": true, + "es2021": true, + "jest": true, + "webextensions": true + }, + "parserOptions": { "project": ["./tsconfig.json"] }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended" + ], + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "rules": { + "@typescript-eslint/no-unused-vars": ["error", {"argsIgnorePattern": "^_"}], + "@typescript-eslint/no-empty-function": 0, + "@typescript-eslint/no-extra-semi": 0 + } +} diff --git a/packages/apps/meta-code-verify/.gitignore b/packages/apps/meta-code-verify/.gitignore new file mode 100644 index 0000000000..2063f12809 --- /dev/null +++ b/packages/apps/meta-code-verify/.gitignore @@ -0,0 +1,5 @@ +dist/chrome +dist/edge +dist/firefox +node_modules +.env diff --git a/packages/apps/meta-code-verify/.prettierrc b/packages/apps/meta-code-verify/.prettierrc new file mode 100644 index 0000000000..a34b4a5acf --- /dev/null +++ b/packages/apps/meta-code-verify/.prettierrc @@ -0,0 +1,12 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "trailingComma": "es5", + "bracketSpacing": true, + "jsxBracketSameLine": false, + "arrowParens": "avoid", + "proseWrap": "preserve" +} \ No newline at end of file diff --git a/packages/apps/meta-code-verify/README.md b/packages/apps/meta-code-verify/README.md new file mode 100644 index 0000000000..0e1dcc77fa --- /dev/null +++ b/packages/apps/meta-code-verify/README.md @@ -0,0 +1,95 @@ +# Video Demo + +[Video Demo](https://www.youtube.com/watch?v=BZfnLPGep-4) + +# Description + +This project is a modified version of [meta-code-verify](https://github.com/facebookincubator/meta-code-verify) by Facebook. In simple terms, it's a web extension for checking if the JavaScript hasn't been tampered with by creating a Merkle tree both on the client and server side. You can read more about this concept on the [Mozilla Wiki](https://wiki.mozilla.org/Security/Binary_Transparency). The code pushed to the repository includes a [script](https://github.com/spiritbroski/human-protocol/blob/24b39697a51096c9f982b00b44a469b0c11470de/packages/apps/escrow-dashboard/scripts/generateMerkleTree.ts) to generate a Merkle tree in Vite, and then push the root of the Merkle tree to IPFS. The design is inspired by the WhatsApp binary transparency manifest: + +![WhatsApp Binary Transparency Manifest](https://user-images.githubusercontent.com/62529025/228214669-6cc7446d-e2b1-455f-af94-ebd8f60aba80.png) + +Here's what it looks like in our apps: + +![image](https://user-images.githubusercontent.com/62529025/233022112-f4de94fd-ec48-4d4b-aa4e-e86a907bcec8.png) + + +The main difference is the removal of `hash_function`. While WhatsApp pushes their Merkle root to Cloudflare, our implementation is more resilient as it's decentralized in IPFS, in contrast to the centralized server solution used by Cloudflare. The following is a brief description of the project and how to use it. + +# How to Use + +As this is a web extension, you'll need to have either a Chrome-based browser or Firefox. In this demo, we use Brave browser. First, navigate to `packages/apps/meta-code-verify` and run this script: + +```bash +$ yarn +$ yarn build-local-dev +``` + +Then, go to your browser and open this URL: `brave://extensions/` Turn on developer mode if you haven't: + +![Developer mode](https://user-images.githubusercontent.com/62529025/228216854-1e85b3c3-3f13-441f-82c3-ed188dffeed6.png) + +Click "Load Unpacked": + +![Load unpacked](https://user-images.githubusercontent.com/62529025/228217073-da947a33-e591-48a4-b283-29b258c5128c.png) + +Navigate to the `dist/chrome` folder of meta-code-verify, then click "Select Folder": + +![Navigate](https://user-images.githubusercontent.com/62529025/228217002-c866ff59-2f32-4c7d-9596-af88e98e0e2b.png) + +If successful, it will show something like this: + +![Success](https://user-images.githubusercontent.com/62529025/228217415-034622c6-0cf6-46c2-9d58-237ca72d8bf5.png) + +Now, go to `packages/apps/escrow-dashboard` and then add the necessary environment variable: + +``` +VITE_APP_NFT_STORAGE_API= +``` + +And then run this command: + +``` +$ yarn +$ yarn build --mode development +``` + +Wait until it finishes building, then run: + +``` +$ yarn start-prod +``` + +Go to your browser and navigate to `http://localhost:3000` If you click on the web extension icon, you'll see a green checkmark, indicating that our code is not tampered with: + +![Not tampered](https://user-images.githubusercontent.com/62529025/228218083-ea324fe9-fb45-46be-80dc-3ed6a712d983.png) + +To test if our code is getting tampered with, first, stop the `yarn start-prod` command (use CTRL+C on Linux). Then, go to `index.html` in the `packages/apps/escrow-dashboard` and add ``: + +![Script added](https://user-images.githubusercontent.com/62529025/228218787-69c76cbe-fef1-42eb-b917-5fc5c2959048.png) + +Run `yarn build --mode development` again, followed by `yarn start-prod`. When you go to `http://localhost:3000` again, you'll see a red exclamation mark: + +![Red exclamation](https://user-images.githubusercontent.com/62529025/228222259-d144fd17-0f7d-4a2b-93ff-caf57ae31ced.png) + +This indicates that one or more scripts are not in the Merkle tree. If you download it, you'll get a list of all JavaScript files and their source code in gzip files, so you can check it yourself. + +# Allowlist + +Allowlist allowing you to allow some of the extension that you deemed safe to use for example you want to use [metamask](https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en) you will surely get an error like this: + +![Red exclamation](https://user-images.githubusercontent.com/62529025/228222259-d144fd17-0f7d-4a2b-93ff-caf57ae31ced.png) + +You can now open allowlist on the right sidebar and click allow + +![image](https://user-images.githubusercontent.com/62529025/233215157-4df40b3b-c9b1-49fb-a689-9e41784607e9.png) + + +![image](https://user-images.githubusercontent.com/62529025/233020636-032fd746-82f5-4974-b2e7-bab0c4f5c76b.png) + +And now your code is validated again + +![image](https://user-images.githubusercontent.com/62529025/233020950-76945a40-82fa-4f06-8dfa-4f4eeb8093d8.png) + + + + diff --git a/packages/apps/meta-code-verify/_locales/en/messages.json b/packages/apps/meta-code-verify/_locales/en/messages.json new file mode 100644 index 0000000000..1f64facf40 --- /dev/null +++ b/packages/apps/meta-code-verify/_locales/en/messages.json @@ -0,0 +1,116 @@ +{ + "about_code_verify_faq_url_msgr": { + "message": "https://www.messenger.com/help/799550494558955" + }, + "i18nAllowlist": { + "message": "Allowlist" + }, + "about_code_verify_faq_url_wa": { + "message": "https://faq.whatsapp.com/web/security-and-privacy/about-code-verify" + }, + "about_code_verify_faq_url_fb": { + "message": "https://www.facebook.com/help/728172628487328" + }, + "validation_failure_faq_url_msgr": { + "message": "https://www.messenger.com/help/799550494558955?ref=learn_more#validationfailure" + }, + "validation_failure_faq_url_wa": { + "message": "https://faq.whatsapp.com/web/security-and-privacy/why-am-i-seeing-a-validation-failure-warning" + }, + "validation_failure_faq_url_fb": { + "message": "https://www.facebook.com/help/728172628487328?ref=learn_more#validationfailure" + }, + "possible_risk_detected_faq_url_msgr": { + "message": "https://www.messenger.com/help/799550494558955?ref=learn_more#possibleriskdetected" + }, + "possible_risk_detected_faq_url_wa": { + "message": "https://faq.whatsapp.com/web/security-and-privacy/why-am-i-seeing-a-possible-risk-detected-warning" + }, + "possible_risk_detected_faq_url_fb": { + "message": "https://www.facebook.com/help/728172628487328?ref=learn_more#possibleriskdetected" + }, + "network_timeout_faq_url_msgr": { + "message": "https://www.messenger.com/help/799550494558955?ref=learn_more#networktimedout" + }, + "network_timeout_faq_url_wa": { + "message": "https://faq.whatsapp.com/web/security-and-privacy/why-am-i-seeing-a-network-timeout-error" + }, + "network_timeout_faq_url_fb": { + "message": "https://www.facebook.com/help/728172628487328?ref=learn_more#networktimedout" + }, + "i18nValidatedStatusHeader": { + "message": "Validated" + }, + "i18nValidatedStatusMessage": { + "message": "Web page code verified." + }, + "i18nCheckingStatusHeader": { + "message": "Checking..." + }, + "i18nRiskDetectedStatusHeader": { + "message": "Possible Risk Detected" + }, + "i18nRiskDetectedStatusMessage": { + "message": "Cannot validate the page due to another browser extension. Consider pausing the other extension(s) and re-trying." + }, + "i18nRiskDetectedLearnMoreButton": { + "message": "Learn More" + }, + "i18nRiskDetectedRetryButton": { + "message": "Retry" + }, + "i18nNetworkTimeoutStatusHeader": { + "message": "Network Timed Out" + }, + "i18nNetworkTimeoutStatusMessage": { + "message": "Unable to validate this page." + }, + "i18nTimeoutLearnMoreButton": { + "message": "Learn More" + }, + "i18nTimeoutRetryButton": { + "message": "Retry" + }, + "i18nValidationFailureStatusHeader": { + "message": "Validation Failure" + }, + "i18nValidationFailureStatusMessagePartOne": { + "message": "The source code on this page doesn't match what was sent to other users. " + }, + "i18nstatusValidationFailureMessageHighlighted": { + "message": "Download the source code" + }, + "i18nValidationFailureStatusMessagePartTwo": { + "message": "to examine why the page was not validated." + }, + "i18nAnomalyLearnMoreButton": { + "message": "Learn More" + }, + "i18nTopLevel": { + "message": "KV Store Code Verify" + }, + "i18nTopLevelLearnMore": { + "message": "Learn More" + }, + "i18ndownloadSourcePrompt": { + "message": "Download Source Code" + }, + "i18nReportBugStatusHeader": { + "message": "Report a Bug" + }, + "i18nReportBugStatusMessage": { + "message": "Having a problem? Click below to report the bug." + }, + "i18nReportBugButton": { + "message": "Report Bug" + }, + "i18nDownloadPrompt": { + "message": "Download" + }, + "i18ndownloadSourceDescription": { + "message": "Download a .zip file containing all running JavaScript on the page." + }, + "i18nDownloadSourceButton": { + "message": "Download" + } +} diff --git a/packages/apps/meta-code-verify/config/v2/manifest.json b/packages/apps/meta-code-verify/config/v2/manifest.json new file mode 100644 index 0000000000..138a8b60a6 --- /dev/null +++ b/packages/apps/meta-code-verify/config/v2/manifest.json @@ -0,0 +1,44 @@ +{ + "manifest_version": 2, + "name": "KV Store Code Verify", + "version": "2.0.1", + "default_locale": "en", + "description": "An extension to verify the code running in your browser matches what was published.", + "page_action": { + "default_title": "KV Store Code Verify", + "default_icon": { + "32": "temporary-extension-icon32.png", + "48": "temporary-extension-icon48.png", + "128": "temporary-extension-icon128.png" + } + }, + "icons": { + "32": "temporary-extension-icon32.png", + "48": "temporary-extension-icon48.png", + "128": "temporary-extension-icon128.png" + }, + "background": { + "persistent": true, + "scripts": ["background.js"] + }, + "content_scripts": [ + { + "matches": [ "*://localhost/*", + "https://dashboard.humanprotocol.org/*"], + "all_frames": true, + "match_about_blank": true, + "exclude_matches": [ + + ], + "js": ["contentKvstore.js"], + "run_at": "document_start" + } + ], + "permissions": [ + "management", + "storage", + "https://*.nftstorage.link/*", + "webRequest" + + ] +} diff --git a/packages/apps/meta-code-verify/config/v3/manifest.json b/packages/apps/meta-code-verify/config/v3/manifest.json new file mode 100644 index 0000000000..dc6f900bce --- /dev/null +++ b/packages/apps/meta-code-verify/config/v3/manifest.json @@ -0,0 +1,42 @@ +{ + "manifest_version": 3, + "name": "KV Store Code Verify", + "version": "2.0.1", + "default_locale": "en", + "description": "An extension to verify the code running in your browser matches what was published.", + "action": { + "default_title": "KV Store Code Verify", + "default_icon": { + "32": "default_32.png", + "64": "default_64.png", + "128": "default_64@2x.png" + } + }, + "icons": { + "32": "default_32.png", + "64": "default_64.png", + "128": "default_64@2x.png" + }, + "background": { + "service_worker": "background.js" + }, + "content_scripts": [ + { + "matches": [ "*://localhost/*", + "https://dashboard.humanprotocol.org/*"], + "all_frames": true, + "match_about_blank": true, + "exclude_matches": [ ], + "js": ["contentKvstore.js"], + "run_at": "document_start" + } + ], + "permissions": [ + "webRequest", + "storage", + "management" + ], + "host_permissions": [ + "https://*.nftstorage.link/*" + ] +} diff --git a/packages/apps/meta-code-verify/images/check.svg b/packages/apps/meta-code-verify/images/check.svg new file mode 100644 index 0000000000..925923dd81 --- /dev/null +++ b/packages/apps/meta-code-verify/images/check.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/packages/apps/meta-code-verify/images/chevron-right.svg b/packages/apps/meta-code-verify/images/chevron-right.svg new file mode 100644 index 0000000000..1c164aca51 --- /dev/null +++ b/packages/apps/meta-code-verify/images/chevron-right.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/circle-download-cta.svg b/packages/apps/meta-code-verify/images/circle-download-cta.svg new file mode 100644 index 0000000000..186eb0815d --- /dev/null +++ b/packages/apps/meta-code-verify/images/circle-download-cta.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/circle-exclamation-mark.svg b/packages/apps/meta-code-verify/images/circle-exclamation-mark.svg new file mode 100644 index 0000000000..54971d8840 --- /dev/null +++ b/packages/apps/meta-code-verify/images/circle-exclamation-mark.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/circle-info.svg b/packages/apps/meta-code-verify/images/circle-info.svg new file mode 100644 index 0000000000..347c514ff8 --- /dev/null +++ b/packages/apps/meta-code-verify/images/circle-info.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/default_32.png b/packages/apps/meta-code-verify/images/default_32.png new file mode 100755 index 0000000000000000000000000000000000000000..6f911396382c78bf4f042218bae9ba035d6f118d GIT binary patch literal 1186 zcmV;T1YP@yP)uN6UvsE`muiLHk= z(P={cwie-`RYrsssV=K3m8Q;jJF}Uc&dg3H{gS(PckbD9zWd#C@0{x)hv@3+@^QC} zTNbx8ZW1@2IvnPva0_vhx!v)2JYgq(J@E`Uu*6+{B+`~w|6cLQHP5K-)f;MR{zj3u zKf=bFG?-E*PoOCiCCW&hM*g{(cwEY@h>0k!2&gkIjQnoPzgBjSuHFhp1I9!0=#jKE zC!2B?XHoK)QN>JRXRipTv#z>!t6VyF`MTr4W<)lvSxLD$euaN#o2lV336AwGJAS5A zx>{CFeSy`>m(Z>)>lFUFoJoW%31~AfI&xYHR#s78B6qQ$3ioVP$e=`mE;!b_3Nv>T zTpB-)5)%_G$AgtJ!8c;4v0@1@3WF80E7|??GU>*JVmf(fzpWj7b3#jq6+-~h^R~)A z&k5%S3+K-keany5xV9pxd1tB19aSI@tgNOlU%yjtF6{h zA3t^sojn?$!v_j_kkI6pYo5}ASsB9S;>klIDXjn%8u(O2Y!L9*^3iGqI68mgpy*p# z!&Kj>M8}NsV+=M>3xw@R;7Dg=fk0|Q<44Qja0G{Nym@zkK7DD9jvM927;K!7sOz3| z8VE@BjUOBZS3Z4?vC+%l(eY1whm8{wP2Ec_fq>8KtlzV3gKcoV{1tLd%$Sh`d>Mf} zKww9wN5@fiT|ZMjSbH!B$31{%V%Lv$Hd1%(#5;WrTM~61p%5D9NKo z^)N77OKpG0%KtFtf3Q7%aIfw10V$It5e5Warl(FNGZ;zWtVgexzxLJJnBX9abHgq; zfa-}60s&c@O*|5ic4qo?OZhRTofme&fsEMy<2K82g7d& zjpDgce*7LWd>B1=QfC_+ONloq<4yvqS5Amat5z%_JHX+Un|H-=YbHMcHDF^G9N-cS zT`6K~+prjAli6-CBF8^Z^k&)b1X{t$D8h#zfD(ySDA~AnWn2fop~4a? zry4w4e`~TV%i}508|Y?kUzY1gNZeJSNJX9Krc?uv)W|DNaD|*+OmrlW69Im0?zqe4 zT6u-+m*??wXfe&!#jmgL+CH3c%P)F@x^pbCZ$Z2 z!d`FEB_1kveK|EDqFvAZ+)~NV!Z literal 0 HcmV?d00001 diff --git a/packages/apps/meta-code-verify/images/default_64.png b/packages/apps/meta-code-verify/images/default_64.png new file mode 100755 index 0000000000000000000000000000000000000000..2b5568702d722ed7b62bc9f215d4a7dc13da909a GIT binary patch literal 2563 zcmV+e3jFnnP)2S+nW7CQWUdR89ZuKd$|!o2H4{ zq#N6$THC}n>mw3tqvF;vy2e!z&pb?oFgH|$hB{>y3Dd&f@G5B!9s#~m;jh7rJK-(*n|l%1Lv zyCew~!~lXAlJucRc3m<`GISGQG$tMjO@mXCv0s(dBYFv8f)1?6duOL4%cqEn1vL3Y zj1qj$vP+t2Q}V(rXLIe{3Pg#hB*0d%$*Opi!~7B$1K_3MF}YVqBMl>#0Ks*y{4e6d zVvG?G7cH_TZ%ba3+1pfGd2J+pM?`>}^+o&WppAc3Dm^|i-FVW-~7N6rb00Wl5^1RL4WJufa^1&KzDfC+cLiCyY&=TRS#kSr|MQy%N?hj{)&DQkdl_QhXWhL0W+sh!^VO&C|qyH+&QyQ z_plK?y)GDxL|K-5$w_kfD*^;y?#mweAmZfau3TZm_IEcUD#r??tEU&|E`1gQogiqUvP zO+jK}pGDrXAy0U0`wku<-=G&p!DTkv722&aEY_brb2_$ec^mH(<_GGS>z`e}h0d<7 z0qxoR<=Nj1l&imZfX3#>=dX;TB`vO85`^1alS`*2_XvSF$C0gcVi z;Aa^DV!l--(Xv7(SnRiMDHJd0=a^en@gJJNU>wU|^WDJr&dx5}tF43ErHV55;l4}+ zRqd;rOk?*Ep-? zR5;HqH1u`0x8r}b{v$z;q8$qK-cE%KV7;Vs=Z6(kF9jV|{{nbI!}&$rM7?3mn#C;p?21!CDS{GKI0%aEABi*lJyW5ED~^W3IQvCz8B7ZYKEgoeKN>mHKx z(>P!(Zo46`zuP+;&vL{tp-lFgybc%yzvss5(+{3NA!U1+qoJYiruT9!EM_+Iz(S? zcj8Qm$R`*X3bO^^x%WBm9&a&esGTqntQa4E^$b%cPZEl*ySt}f=zFuG5>Hy5hVAQY zYsa7ddQ=dswXKcB{tS#qpX3VyP*`}1J`5!QbL-I26M=Fr1wO%{@7?MebVuMQr^Rnq z-V=YZ0w28OPa%)u1f~WjVu-i%UmVtGdD=?RUtO%WzlH>ff1Ur-X|OAN05QT$;=FCi zi$i7ACCAc2>%%5QRFnEatj*$Rf{ab8$K+lU?zgb{Bwi!4(=vN0 zdX39z5u-t3{+nCpPo53;Tf~G~^MlH3b5b*=ke8T?@eB=n$?1uB-f_^3Vsl;9**R$$ zsYY&}jV8$S{;l-FiQR*>d3g^@Yq&_9Uo%v*VP%DHmK@I}xAh3d37GT4nLK0IN%iIj zRi~2EG9{83JH{?Z;cEv<+IY$izN@aOpq3j z)@3T+#DDKm)pu|G_oM?lVBFQ&zN5DG7)pdDZj1td7gG+ecuZfOjs&4F-6osQo8x~2DNV065CJO^++N2uM{KXp Ze+`lsE%FHSp7a0!002ovPDHLkV1gf4^hp2! literal 0 HcmV?d00001 diff --git a/packages/apps/meta-code-verify/images/default_64@2x.png b/packages/apps/meta-code-verify/images/default_64@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..0bef927305eeca853a1664c4227471c8c385f990 GIT binary patch literal 4532 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 + + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/error-header.svg b/packages/apps/meta-code-verify/images/error-header.svg new file mode 100644 index 0000000000..cf5fd2373b --- /dev/null +++ b/packages/apps/meta-code-verify/images/error-header.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/failure_32.png b/packages/apps/meta-code-verify/images/failure_32.png new file mode 100755 index 0000000000000000000000000000000000000000..df4214cffeb1d8cc2f698fb5ed1e85cebfb878b1 GIT binary patch literal 945 zcmV;i15W&jP)QLjVO>Pf=@6;Ar6z0=l#1%GlfFrCi%dhVTj|1$uqN-Yjd zDi(_gcxc9G#Hhs(7ecdi4s3jpj0XwBhcSXN#BrQ#;`Z!72qNOa6%ER5GtXWKp*Ld? zo}7e;|J$PL@+!)qpt2H*>UKkM<3X?sB{%SN4}wW7dC~%@73qrj{jT8ke)#?P3B?;NU2IR>XmQZ7N@UXV+Jt-D?Qf%!kN<&{(Cr8wYU^8 zwF{xpy{U_xA`MS2#5dH#hRc^ETQT2)P(EM!-T4$`%uSdf`3$1o8X)Dw`Gy2?;>Lf(DXw`@KR?UQLEG|l z7{rG|i3!Ri%0cEI)uTPX2#72tnk^4Ov5E{D_G7ecK;e!m=I@c|$4h$3%R T-6?Z*00000NkvXXu0mjfTgj+K literal 0 HcmV?d00001 diff --git a/packages/apps/meta-code-verify/images/icon-badge.svg b/packages/apps/meta-code-verify/images/icon-badge.svg new file mode 100644 index 0000000000..aebf597b22 --- /dev/null +++ b/packages/apps/meta-code-verify/images/icon-badge.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/loading-header.svg b/packages/apps/meta-code-verify/images/loading-header.svg new file mode 100644 index 0000000000..154f304cef --- /dev/null +++ b/packages/apps/meta-code-verify/images/loading-header.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/menu-badge.svg b/packages/apps/meta-code-verify/images/menu-badge.svg new file mode 100644 index 0000000000..c27721774c --- /dev/null +++ b/packages/apps/meta-code-verify/images/menu-badge.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/risk_32.png b/packages/apps/meta-code-verify/images/risk_32.png new file mode 100755 index 0000000000000000000000000000000000000000..4f56b29ae2b80defe1544fd8cbf1dec3e241c7fe GIT binary patch literal 1274 zcmV%;%Xf!b~;tvxw!Agv;#2AS2 zr;mb(Z&81k_yW{uVvK?a#y7W0)LM}iTA@-}?-{1U^fkRB)n9(e&D^;&bIy0qIrpA( z2jC0jp#p^n1Oj?`DWk23wnD$JkMs4~aSSwCqf@O(C$!r_TN7=kRVtMe6o8o!CBo55 z#enmf+0}kZ?|$3>@1EU&!FOFD?!hYTYJ@?K)!0!VVsMH$JO_~eFKej+>c7C-$%=yuT&?*7{K;!F%?VO`=8#9q; z#Bz$)gP~*{QK^%Q<*cQWAyYWm_qN_vSI&7lu0SGyZZs`CO4O;kd6ZNOuo6Pc_`N-i zkN3>rsH-56NEetAxLnIkJx`|llC!7qT|79!K4wmzwAjD?~G*P~>V9c<% z2?JJNxB$|}7SO3BLH~6paciARK!`8T~DewQoG07k@ z#+QO=(Q!Eu5b${cbx~AE$3;TuPhamVv$N%ptRQrgcEay`-~ZkX&ySd)ty0T3?BiIF z6mE=iKwUn!!z_&@sfEg1Z71VeC+p|MV!!jm3SKDA78~|Ek1ZR1_m?HIvQSq~dwnn! zMG%^a!4?nw_ICd2A=jX%tv=$pG@w&+et>xBeRv)(MZtUNDl6!Fc_*#_`vnW%VnOL{ zF6b-_-b*dS4RqUJq>#o9%RVOPe{e${bg|pP-It zXEb%RkI;;GRN zcTe(_o|jgSn7@Ll0<$*mMVJmS>FOrWajH|aR{E$qVLuz95DV78Gik#_#KCZtfU_qs kl$$Qoc1r2*m@kNj503NSSVeHw9smFU07*qoM6N<$f~d4o)&Kwi literal 0 HcmV?d00001 diff --git a/packages/apps/meta-code-verify/images/temporary-extension-icon.svg b/packages/apps/meta-code-verify/images/temporary-extension-icon.svg new file mode 100644 index 0000000000..b2963c0999 --- /dev/null +++ b/packages/apps/meta-code-verify/images/temporary-extension-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/apps/meta-code-verify/images/temporary-extension-icon128.png b/packages/apps/meta-code-verify/images/temporary-extension-icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..2c33b949b6f1d5de064ee3ea4b88ff4013829f7e GIT binary patch literal 2176 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 Tvd*HD00000NkvXXu0mjf#jBw! literal 0 HcmV?d00001 diff --git a/packages/apps/meta-code-verify/images/validated-badge.svg b/packages/apps/meta-code-verify/images/validated-badge.svg new file mode 100644 index 0000000000..eee2144c50 --- /dev/null +++ b/packages/apps/meta-code-verify/images/validated-badge.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/validated-header.svg b/packages/apps/meta-code-verify/images/validated-header.svg new file mode 100644 index 0000000000..c38774c3d3 --- /dev/null +++ b/packages/apps/meta-code-verify/images/validated-header.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/validated_32.png b/packages/apps/meta-code-verify/images/validated_32.png new file mode 100755 index 0000000000000000000000000000000000000000..a8204f5b38bf8a827ba66b09e42feca495486772 GIT binary patch literal 1180 zcmV;N1Y`S&P)+Zi@2J4nniWVa@k+8x!-9e2p?gFlF|kisxCb}J0c z=Au&8bV{SBcBC&#d7g96xjUVEI`?)u`K#ad?%ea9bKmE8f6wzi&+}e@E@;C9?LSx}-LF>f_3zmSCIrf&B(0io|%`gh-Xf=4R`W%yjlhR=V3n)QIhyu@v@& zhI3vX-NLlgGHH-8SJl_1N2Hu)Gr5mo1ZJZf(^hQbe0%sTMN&3!mk=pa{kz^8a$!G< zt^y+wHs!Dl)GZ}{5wD|fd!^sfdl@&uo${7rWzg96mwFx2OC}xaulNz4l z4n6+t9!s{A&sw>RTvb?AUNrjb4&4FlF1$Ux;KQa9wEKq1U8hti{%~e`r;{NxG&KU* zLd3}D9fZiAWi`Cz+WY5V1jY^wfJ@;UgdlDUWa~$5wM8CFa)rWEbF&RmXX=oV@M`@* zSQ8uyk5=z)^F6Y48?!#xOOX?ynN$usipVjOAY*MT^zQC0+*c?{ixQ6t-_s>jjZl!S zjDwDnNr~EmnYo*A|GcCCrd*8E{EleTEZuv`p0UMz1sFvpHSaY<-#Y6u1Vo#xbnj58 zw7QCc|4c>#y45+TsQ|iT*t#ZG2wDjXM+A3>jMBElW&YS);YCv=$uRAl`B#s(n$t^$ zz<$UEoAi(&nC*$vrbZ}Z5ypcSNRb6sj|r}kKpjEUjYQ#@9#E?b_WoOd zqqtJ~#x!0uWmgB2qVXY2ntd9=Nsxk4@l*2JI_-L^_5y%he9+lpqFp*@^MpK zE<~=mk@FJHWk1$UhOlz{G$M0Z-e)WKdSZN7q`*8+A|)x?Sf`#^Yz5vfx^|L%fLpmUKu4oH(c3xv7_2-NIi+Xug|O?(HgocfY!qnC zD-jzxvY~cHQ>_;yBOO&9uG+;dbdd_$11deVrg#kERBdZ5AReEsr(WD=6Ef0t=Nii9 zN9U}7%^~wRuq(s0^{%@|>3D2!x5is1invqpJaTLXxN_(D#WB7cqWb@ uus2symq5Rs1AA@C#Bry+f5&ve75)L6XU;I_9obg^0000 + + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/warning-header.svg b/packages/apps/meta-code-verify/images/warning-header.svg new file mode 100644 index 0000000000..2895a87c24 --- /dev/null +++ b/packages/apps/meta-code-verify/images/warning-header.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/images/x.svg b/packages/apps/meta-code-verify/images/x.svg new file mode 100644 index 0000000000..6b4d85043c --- /dev/null +++ b/packages/apps/meta-code-verify/images/x.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/apps/meta-code-verify/package.json b/packages/apps/meta-code-verify/package.json new file mode 100644 index 0000000000..b3a43866d0 --- /dev/null +++ b/packages/apps/meta-code-verify/package.json @@ -0,0 +1,46 @@ +{ + "name": "@human-protocol/meta-code-verify", + "version": "0.1.0", + "description": "Browser extensions to verify code running in the browser against a published manifest", + "main": "none", + "repository": "https://github.com/humanprotocol/human-protocol", + "license": "MIT", + "type": "module", + "private": true, + "engines": { + "node": "^18.0.0" + }, + "scripts": { + "build-local-dev": "yarn makeBundle", + "watch": "yarn run rollup --config --watch", + "lint": "yarn makePrettier && yarn run eslint src/js/**", + "makeBundle": "yarn run rollup --config rollup.config.ts --configPlugin typescript", + "makePrettier": "yarn run prettier --write \"src/**/*.ts\" \"rollup_scripts/**/*.ts\"", + "test": "yarn lint && vitest -u" + }, + "devDependencies": { + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@rollup/plugin-commonjs": "^24.0.1", + "@rollup/plugin-eslint": "^9.0.3", + "@rollup/plugin-node-resolve": "^15.0.1", + "@rollup/plugin-replace": "^5.0.2", + "@rollup/plugin-typescript": "^11.0.0", + "@types/chrome": "^0.0.213", + "@types/jest": "^29.4.0", + "@typescript-eslint/eslint-plugin": "^5.52.0", + "@typescript-eslint/parser": "^5.52.0", + "assert": "^2.0.0", + "eslint": "^7.32.0", + "jest": "^27.1.0", + "jest-environment-jsdom": "^27.5.1", + "prettier": "^2.3.2", + "rollup": "^2.56.3", + "sinon-chrome": "^3.0.1", + "ts-jest": "^27.1.0", + "tslib": "^2.5.0", + "typescript": "^4.9.5", + "vite": "^4.3.0", + "vite-plugin-chrome-extension": "^0.0.7", + "vitest": "^0.30.1" + } +} diff --git a/packages/apps/meta-code-verify/rollup.config.ts b/packages/apps/meta-code-verify/rollup.config.ts new file mode 100644 index 0000000000..b17ca148a5 --- /dev/null +++ b/packages/apps/meta-code-verify/rollup.config.ts @@ -0,0 +1,70 @@ +import cleanOnce from "./rollup_scripts/rollup-plugin-clean-once"; +import eslintPlugin from "@rollup/plugin-eslint"; +import typescript from "@rollup/plugin-typescript"; +import prettierBuildStart from "./rollup_scripts/rollup-plugin-prettier-build-start"; +import staticFiles from "./rollup_scripts/rollup-plugin-static-files"; +import watch from "./rollup_scripts/rollup-plugin-watch-additional"; + +function eslint() { + return eslintPlugin({ throwOnError: true }); +} + +function prettierSrc() { + return prettierBuildStart("'src/**/*.{js,ts}'"); +} + +export default [ + { + input: "src/js/detectKvstoreMeta.ts", + output: [{ + file: "dist/chrome/contentKvstore.js", + format: "iife", + }, { + file: "dist/edge/contentKvstore.js", + format: "iife" + }, { + file: "dist/firefox/contentKvstore.js", + format: "iife" + }], + plugins: [cleanOnce(), typescript(), prettierSrc(), eslint()] + }, + + { + input: "src/js/background.ts", + output: [{ + file: "dist/chrome/background.js", + format: "iife" + }, { + file: "dist/edge/background.js", + format: "iife" + }, { + file: "dist/firefox/background.js", + format: "iife" + }], + plugins: [typescript(), prettierSrc(), eslint()] + }, + { + input: "src/js/popup.ts", + output: [{ + file: "dist/chrome/popup.js", + format: "iife", + plugins: [staticFiles("config/v3/")] + }, { + file: "dist/edge/popup.js", + format: "iife", + plugins: [staticFiles("config/v3/")] + }, { + file: "dist/firefox/popup.js", + format: "iife", + plugins: [staticFiles("config/v2/")] + }], + plugins: [ + typescript(), + prettierSrc(), + eslint(), + staticFiles(["images/", "src/css/", "src/html/"]), + staticFiles("_locales/", { keepDir: true }), + watch(["images/", "src/css/", "src/html/", "_locales/", "config/"]) + ] + } +]; diff --git a/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-clean-once.ts b/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-clean-once.ts new file mode 100644 index 0000000000..19be97eaf1 --- /dev/null +++ b/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-clean-once.ts @@ -0,0 +1,45 @@ +import * as fs from 'fs/promises'; +import * as path from 'path'; +import * as process from 'process'; + +async function genHasAccess(path) { + try { + await fs.access(path, fs.constants.R_OK | fs.constants.W_OK); + return true; + } catch (_err) { + return false; + } +} + +const deletedDirs = new Set(); + +/** + * A simple plugin that deletes output directories *once* (so we don't delete + * them over and over again when running `watch`, and to not mess up subsquent + * rollup entries that use the same directory and the same plugin). + */ +export default function rollupPluginCleanOnce() { + return { + name: 'rollup-plugin-clean', + + async generateBundle(options, _bundle, isWrite) { + // No point in cleaning if rollup isn't going to write the output + if (!isWrite) { + return; + } + const rootDir = process.cwd(); + const dirToDelete = options.dir + ? path.resolve(rootDir, options.dir) + : path.dirname(path.resolve(rootDir, options.file)); + // Only delete once. + if (deletedDirs.has(dirToDelete)) { + return; + } + deletedDirs.add(dirToDelete); + if (await genHasAccess(dirToDelete)) { + console.log('Deleting:', dirToDelete); + await fs.rm(dirToDelete, { recursive: true }); + } + }, + }; +} diff --git a/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-prettier-build-start.ts b/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-prettier-build-start.ts new file mode 100644 index 0000000000..5477028556 --- /dev/null +++ b/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-prettier-build-start.ts @@ -0,0 +1,49 @@ +import { exec } from 'child_process'; +class ExecError extends Error { + public stdout: string; + public stderr: string; + + constructor(message: string, stdout: string, stderr: string) { + super(message); + this.stdout = stdout; + this.stderr = stderr; + } +} +function genExec(command) { + return new Promise((resolve, reject) => { + exec(command, (error, stdout, stderr) => { + const customError = new ExecError(error?.message, stdout, stderr); + if (error) { + customError.stdout = stdout; + customError.stderr = stderr; + reject(error); + } else { + resolve({ stdout, stderr }); + } + }); + }); +} + +const filesToFormat = new Set(); + +export default function rollupPrettierBuildStartPlugin(files) { + filesToFormat.add(files); + return { + name: 'rollup-plugin-prettier-src-formatter', + + async buildStart(_options) { + if (filesToFormat.size === 0) { + return; + } + console.log('Running prettier for', Array.from(filesToFormat).join(' ')); + await genExec( + `yarn run prettier ${Array.from(filesToFormat).join(' ')} --write` + ); + filesToFormat.clear(); + }, + + watchChange(_id, _change) { + filesToFormat.add(files); + }, + }; +} diff --git a/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-static-files.ts b/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-static-files.ts new file mode 100644 index 0000000000..041f0a1f58 --- /dev/null +++ b/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-static-files.ts @@ -0,0 +1,52 @@ +import * as fs from 'fs/promises'; +import * as path from 'path'; +import * as process from 'process'; + +import { readDirRecursive } from './utils'; + +const DEFAULT_OPTIONS = { + keepDir: false, +}; + +/** + * A simple plugin that copies files from a source directory to output.dir + * + * @param {Array} dirs Directories to recursively copy files from + * @param {Object} options Plugin options + * @param {boolean} option.keepDir Include directory in output directory + * (e.g. if true, and your directory is `locales/`, output directory will + * have: `dist/locales/`, vs. just + * `dist/`) + * @returns Rollup.PluginImpl + */ +export default function rollupPluginStaticFiles( + dirs: Array | string = [], + options?: { keepDir?: boolean } +) { + const { keepDir }: { keepDir?: boolean } = { ...DEFAULT_OPTIONS, ...options }; + if (!Array.isArray(dirs)) { + dirs = [dirs]; + } + return { + name: 'rollup-plugin-static-files', + + async generateBundle(_options, _bundle, _isWrite) { + const rootDir = process.cwd(); + await Promise.all( + (dirs as Array).map(async dir => { + const dirPath = path.resolve(rootDir, dir); + const filePaths = await readDirRecursive(path.resolve(rootDir, dir)); + return await Promise.all( + filePaths.map(async filePath => { + this.emitFile({ + type: 'asset', + fileName: path.relative(keepDir ? rootDir : dirPath, filePath), + source: await fs.readFile(filePath), + }); + }) + ); + }) + ); + }, + }; +} diff --git a/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-watch-additional.ts b/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-watch-additional.ts new file mode 100644 index 0000000000..762945f7ec --- /dev/null +++ b/packages/apps/meta-code-verify/rollup_scripts/rollup-plugin-watch-additional.ts @@ -0,0 +1,24 @@ +import * as path from 'path'; +import * as process from 'process'; + +import { readDirRecursive } from './utils'; + +export default function rollupPluginWatch(dirs) { + return { + name: 'rollup-plugin-watch-additional', + + async buildStart(_options) { + const rootDir = process.cwd(); + await Promise.all( + dirs.map(async dir => { + const watchFilePaths = await readDirRecursive( + path.resolve(rootDir, dir) + ); + for (const filePath of watchFilePaths) { + this.addWatchFile(filePath); + } + }) + ); + }, + }; +} diff --git a/packages/apps/meta-code-verify/rollup_scripts/utils.ts b/packages/apps/meta-code-verify/rollup_scripts/utils.ts new file mode 100644 index 0000000000..7fa9ababe6 --- /dev/null +++ b/packages/apps/meta-code-verify/rollup_scripts/utils.ts @@ -0,0 +1,27 @@ +import * as fs from 'fs/promises'; +import * as path from 'path'; + +/** + * Recursively get all files inside a directory + * + * @param {string} dirPath path to directory + * @returns {Array} + */ +export async function readDirRecursive(dirPath) { + const fileNames = await fs.readdir(dirPath); + const files = []; + await Promise.all( + fileNames.map(async fileName => { + const stats = await fs.stat(path.resolve(dirPath, fileName)); + if (stats.isDirectory()) { + files.push( + ...(await readDirRecursive(path.resolve(dirPath, fileName))) + ); + } else { + files.push(path.resolve(dirPath, fileName)); + return Promise.resolve(); + } + }) + ); + return files; +} diff --git a/packages/apps/meta-code-verify/src/css/popup.css b/packages/apps/meta-code-verify/src/css/popup.css new file mode 100644 index 0000000000..cbba8cba4e --- /dev/null +++ b/packages/apps/meta-code-verify/src/css/popup.css @@ -0,0 +1,280 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +.action_bar { + flex-direction: row; + justify-content: space-between; + margin: 24px 13px 0 13px; +} + +.badge { + height: 20px; +} + +.content_body { + align-items: center; + display: flex; + justify-content: center; + flex-direction: column; +} + +.anomaly_learn_more_button, .report_issue_button { + border: 1px solid #CBD2D9; + box-sizing: border-box; + border-radius: 4px; + height: 36px; + width: 230px; + background: #1C2B33; + font-family: SF Pro Text; + font-style: normal; + font-weight: 500; + font-size: 15px; + line-height: 20px; + text-align: center; + letter-spacing: -0.23px; + color: #FFFFFF; +} + +.download_button, +.risk_learn_more_button, +.timeout_learn_more_button { + border: 1px solid #CBD2D9; + box-sizing: border-box; + border-radius: 4px; + height: 36px; + width: 111px; + background: #FFFFFF; + font-family: SF Pro Text; + font-style: normal; + font-weight: 500; + font-size: 15px; + line-height: 20px; + text-align: center; + letter-spacing: -0.23px; + color: #1C2B33; +} + +.download_header { + display: flex; +} + +.download_title { + font-family: Optimistic Display; + font-style: normal; + font-weight: bold; + font-size: 17px; + line-height: 22px; + letter-spacing: 0.24px; + color: #000000; + height: 22px; + width: 84px; + margin: 0px 0px 0px 12px; + padding-bottom: 21px; +} + +.error_body { + width: 262px; + height: 288px; + background: #FFFFFF; + margin: 0; +} + +header { + display: flex; + justify-content: space-between; + padding: 16px 16px 0 16px; +} + +.menu { + cursor: pointer; + height: 20px; +} + +.menu_body { + height: 227px; + width: 256px; + margin: 0px; +} + +.menu_right_sidebar { + display: flex; + flex-direction: column; + background: #F1F4F7; + box-shadow: 0px 0px 16px rgba(52, 72, 84, 0.05); + height: 227px; + width: 209px; +} + +.menu_row { + display: flex; + flex-direction: row; + align-items: center; + padding: 8px 16px; +} + +.menu_row > p { + font-family: SF Pro Text; + font-style: normal; + font-weight: 500; + font-size: 15px; + line-height: 20px; + letter-spacing: -0.23px; + color: #1C2B33; + flex: none; + order: 1; + flex-grow: 1; + margin: 0px 12px; + width: 113px; +} + +.menu_title { + display: flex; + flex-direction: row; + justify-content: space-between; + font-family: Optimistic Display; + font-style: normal; + font-weight: bold; + font-size: 17px; + line-height: 22px; + letter-spacing: 0.24px; + color: #000000; + flex: none; + order: 0; + flex-grow: 0; + margin: 0px 16px; +} + +.menu_title > p { + width: 138px; +} + +.menu_title > button { + border: none; + cursor: pointer; + width: 24px; + height: 24px; + margin: 16px 0 0; +} + +.menu_top_level { + display: flex; + flex-direction: row; +} + +.menu_top_level > .badge { + margin: 13px 12px 0 15px; +} + +.loading_body { + width: 257px; + height: 154px; + background: #FFFFFF; + margin: 0; +} + +.loading_body_image { + height: 32px; + margin-top: 24px; + width: 158px; +} + +.retry_button { + border: 1px solid #CBD2D9; + box-sizing: border-box; + border-radius: 4px; + height: 36px; + width: 111px; + background: #1C2B33; + font-family: SF Pro Text; + font-style: normal; + font-weight: 500; + font-size: 15px; + line-height: 20px; + text-align: center; + letter-spacing: -0.23px; + color: #FFFFFF; +} + +.row_image { + flex: none; + order: 0; + flex-grow: 0; +} + +.row_nav { + flex: none; + order: 2; + flex-grow: 0; + margin: 0px 12px; +} + +.state_boundary { + flex-direction: column; +} + +.status_header { + font-family: SF Pro Text; + font-style: normal; + font-weight: 600; + font-size: 13px; + line-height: 18px; + + text-align: center; + letter-spacing: -0.08px; + + color: #1C2B33; + margin-top: 12px; +} + +.status_message { + font-family: SF Pro Text; + font-style: normal; + font-weight: normal; + font-size: 13px; + line-height: 18px; + text-align: center; + letter-spacing: -0.08px; + color: #63788A; + margin: 0 36px; +} + +.status_message_highlight { + color: #1C2B33; +} + +.valid_body { + width: 262px; + height: 164px; + background: #FFFFFF; + margin: 0; +} + +.validated_body_image { + height: 32px; + margin-top: 24px; + width: 158px; +} + +.warning_risk_body { + width: 262px; + height: 270px; + background: #FFFFFF; + margin: 0; +} + +.warning_timeout_body { + width: 262px; + height: 216px; + background: #FFFFFF; + margin: 0; +} + +.warning_body_image { + height: 32px; + margin-top: 24px; + width: 158px; +} diff --git a/packages/apps/meta-code-verify/src/html/popup.html b/packages/apps/meta-code-verify/src/html/popup.html new file mode 100644 index 0000000000..75bc63e1ee --- /dev/null +++ b/packages/apps/meta-code-verify/src/html/popup.html @@ -0,0 +1,147 @@ + + + + + + +
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+ + +
+
+ +
+
+
+ + +
+
+
+
+
+ + +
+
+ +
+
+
+ + +
+
+
+
+
+ + +
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+ + +
+
+
Allowlist
+
+
Disallow
+
+
+
+
+
+ + +
+
+
+
+
+ +
+
+
+
+
+ + +

+
+ +
+
+
+
+ +
+
+
+ + + diff --git a/packages/apps/meta-code-verify/src/js/__tests__/background.test.ts b/packages/apps/meta-code-verify/src/js/__tests__/background.test.ts new file mode 100644 index 0000000000..372be7a101 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/__tests__/background.test.ts @@ -0,0 +1,299 @@ +import { MESSAGE_TYPE, ORIGIN_TYPE } from '../config'; +import { handleMessages } from '../background'; +import { vi, Mock } from 'vitest'; + +describe('background', () => { + describe('LOAD_MANIFEST', () => { + it('should load manifest when origin is missing', async () => { + window.fetch = vi.fn(); + (window.fetch as Mock).mockReturnValueOnce( + Promise.resolve({ + clone: () => { + return { + json: () => { + return { + 1: { '/somepath': 'somehash' }, + root_hash: '0x7', + }; + }, + }; + }, + json: () => + Promise.resolve({ + 1: { '/somepath': 'somehash' }, + root_hash: '0x7', + }), + }) + ); + (window.Uint8Array as unknown) = function () { + return { + reduce: () => '7', + }; + }; + const mockSendResponse = vi.fn(); + const handleMessagesReturnValue = handleMessages( + { + origin: ORIGIN_TYPE.WHATSAPP, + type: MESSAGE_TYPE.LOAD_MANIFEST, + version: '1', + rootHash: '0x7', + leaves: ['0x7'], + }, + { tab: { id: '' } }, + mockSendResponse + ); + await (() => new Promise(res => setTimeout(res, 10)))(); + expect((window.fetch as Mock).mock.calls.length).toBe(1); + expect(handleMessagesReturnValue).toBe(true); + expect(mockSendResponse.mock.calls.length).toBe(1); + expect(mockSendResponse.mock.calls[0][0].valid).toBe(true); + }); + it('should load manifest when manifest is missing', async () => { + (window.fetch as Mock) = vi.fn(); + (window.fetch as Mock).mockReturnValueOnce( + Promise.resolve({ + clone: () => { + return { + json: () => { + return { + 1: { '/somepath': 'somehash' }, + root_hash: '0x7', + }; + }, + }; + }, + json: () => + Promise.resolve({ + 1: { '/somepath': 'somehash' }, + root_hash: '0x7', + }), + }) + ); + const mockSendResponse = vi.fn(); + const handleMessagesReturnValue = handleMessages( + { + origin: ORIGIN_TYPE.WHATSAPP, + type: MESSAGE_TYPE.LOAD_MANIFEST, + version: '2', + rootHash: '0x7', + leaves: ['0xsomeotherhash'], + }, + { tab: { id: null } }, + mockSendResponse + ); + await (() => new Promise(res => setTimeout(res, 10)))(); + expect((window.fetch as Mock).mock.calls.length).toBe(1); + expect(handleMessagesReturnValue).toBe(true); + expect(mockSendResponse.mock.calls.length).toBe(1); + expect(mockSendResponse.mock.calls[0][0].valid).toBe(true); + }); + it('return valid when manifest and origin are found in cache', async () => { + const encodeMock: Mock = vi.fn(); + (window.TextEncoder as unknown) = function () { + return { + encode: encodeMock, + }; + }; + (window.Uint8Array as unknown) = function () { + return { + reduce: () => '7', + }; + }; + (window.fetch as Mock) = vi.fn(); + (window.fetch as Mock).mockReturnValueOnce( + Promise.resolve({ + clone: () => { + return { + json: () => { + return { + 1: { '/somepath': 'somehash' }, + root_hash: '0x7', + }; + }, + }; + }, + json: () => + Promise.resolve({ + 1: { '/somepath': 'somehash' }, + root_hash: '0x7', + }), + }) + ); + const mockSendResponse = vi.fn(); + const handleMessagesReturnValue = handleMessages( + { + origin: ORIGIN_TYPE.WHATSAPP, + type: MESSAGE_TYPE.LOAD_MANIFEST, + version: '1', + rootHash: '0x7', + leaves: ['0xsomeotherhash'], + }, + { tab: { id: null } }, + mockSendResponse + ); + await (() => new Promise(res => setTimeout(res, 10)))(); + expect((fetch as Mock).mock.calls.length).toBe(1); + expect(handleMessagesReturnValue).toBe(true); + expect(mockSendResponse.mock.calls.length).toBe(1); + expect(mockSendResponse.mock.calls[0][0].valid).toBe(true); + }); + }); + + describe('RAW_JS', () => { + it('should return false when no matching origin', () => { + const mockSendResponse = vi.fn(); + handleMessages( + { + origin: 'NOT_AN_ORIGIN', + type: MESSAGE_TYPE.RAW_JS, + version: '1', + leaves: ['someotherhash'], + }, + { tab: { id: '' } }, + mockSendResponse + ); + expect(mockSendResponse.mock.calls.length).toBe(1); + expect(mockSendResponse.mock.calls[0][0].valid).toBe(false); + expect(mockSendResponse.mock.calls[0][0].reason).toBe( + 'no matching origin' + ); + }); + it('should return false when no matching manifest', () => { + const mockSendResponse = vi.fn(); + handleMessages( + { + origin: ORIGIN_TYPE.WHATSAPP, + type: MESSAGE_TYPE.RAW_JS, + version: 'NOT_A_VALID_VERSION', + leaves: ['someotherhash'], + }, + { tab: { id: '' } }, + mockSendResponse + ); + expect(mockSendResponse.mock.calls.length).toBe(1); + expect(mockSendResponse.mock.calls[0][0].valid).toBe(false); + expect(mockSendResponse.mock.calls[0][0].reason).toBe( + 'no matching manifest' + ); + }); + it('should return false when no matching hash', async () => { + const mockSendResponse = vi.fn(); + const encodeMock: Mock = vi.fn(); + (window.TextEncoder as unknown) = function () { + return { + encode: encodeMock, + }; + }; + encodeMock.mockReturnValueOnce('abc'); + window.crypto.subtle.digest = vi + .fn() + .mockReturnValueOnce(Promise.resolve('def')); + (window.Uint8Array as unknown as Mock) = vi + .fn() + .mockReturnValueOnce(['somefakehash']); + handleMessages( + { + origin: ORIGIN_TYPE.WHATSAPP, + type: MESSAGE_TYPE.RAW_JS, + src: 'https://www.notavalidurl.com/nottherightpath', + version: '1', + rawjs: '', + }, + { tab: { id: null } }, + mockSendResponse + ); + await (() => new Promise(res => setTimeout(res, 10)))(); + expect(mockSendResponse.mock.calls.length).toBe(1); + expect(mockSendResponse.mock.calls[0][0].valid).toBe(false); + }); + it('should return false if the hashes do not match', async () => { + const encodeMock: Mock = vi.fn(); + (window.TextEncoder as unknown) = function () { + return { + encode: encodeMock, + }; + }; + encodeMock.mockReturnValueOnce('abc'); + window.crypto.subtle.digest = vi + .fn() + .mockReturnValueOnce(Promise.resolve('def')); + (window.Uint8Array as unknown as Mock) = vi + .fn() + .mockReturnValueOnce(['somefakehash']); + const mockSendResponse = vi.fn(); + handleMessages( + { + origin: ORIGIN_TYPE.WHATSAPP, + type: MESSAGE_TYPE.RAW_JS, + rawjs: 'console.log("all the JavaScript goes here");', + version: '2', + }, + { tab: { id: null } }, + mockSendResponse + ); + await (() => new Promise(res => setTimeout(res, 10)))(); + expect(mockSendResponse.mock.calls.length).toBe(1); + expect(mockSendResponse.mock.calls[0][0].valid).toBe(false); + }); + it('should return false if the hashes do not match', async () => { + const encodeMock: Mock = vi.fn(); + (window.TextEncoder as unknown) = function () { + return { + encode: encodeMock, + }; + }; + encodeMock.mockReturnValueOnce('abc'); + window.crypto.subtle.digest = vi + .fn() + .mockReturnValueOnce(Promise.resolve('def')); + (window.Uint8Array as unknown as Mock) = vi + .fn() + .mockReturnValueOnce(['somefakehash']); + const mockSendResponse = vi.fn(); + handleMessages( + { + origin: ORIGIN_TYPE.WHATSAPP, + type: MESSAGE_TYPE.RAW_JS, + rawjs: 'console.log("all the JavaScript goes here");', + version: '2', + leaves: ['someotherhash'], + }, + { tab: { id: '' } }, + mockSendResponse + ); + await (() => new Promise(res => setTimeout(res, 10)))(); + expect(mockSendResponse.mock.calls.length).toBe(1); + expect(mockSendResponse.mock.calls[0][0].valid).toBe(false); + }); + it('should return true if the hashes match', async () => { + const encodeMock: Mock = vi.fn(); + (window.TextEncoder as unknown) = function () { + return { + encode: encodeMock, + }; + }; + encodeMock.mockReturnValueOnce('abc'); + window.crypto.subtle.digest = vi + .fn() + .mockReturnValueOnce(Promise.resolve('def')); + (window.Uint8Array as unknown as Mock) = vi + .fn() + .mockReturnValueOnce(['someotherhash']); + const mockSendResponse = vi.fn(); + handleMessages( + { + origin: ORIGIN_TYPE.WHATSAPP, + lookupKey: '/someotherpath', + type: MESSAGE_TYPE.RAW_JS, + rawjs: 'console.log("all the JavaScript goes here");', + version: '2', + }, + { tab: { id: '' } }, + mockSendResponse + ); + await (() => new Promise(res => setTimeout(res, 10)))(); + expect(mockSendResponse.mock.calls.length).toBe(1); + expect(mockSendResponse.mock.calls[0][0].valid).toBe(true); + }); + }); +}); diff --git a/packages/apps/meta-code-verify/src/js/__tests__/contentUtils.test.ts b/packages/apps/meta-code-verify/src/js/__tests__/contentUtils.test.ts new file mode 100644 index 0000000000..160c001763 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/__tests__/contentUtils.test.ts @@ -0,0 +1,412 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +import { describe, vi, Mock } from 'vitest'; +import { MESSAGE_TYPE, ORIGIN_TYPE, STATES } from '../config'; +import { + hasInvalidAttributes, + hasInvalidScripts, + processFoundJS, + scanForScripts, + storeFoundJS, +} from '../contentUtils'; + +describe('contentUtils', () => { + beforeEach(() => { + (window.chrome.runtime.sendMessage as unknown as Mock) = vi.fn(() => {}); + }); + describe('storeFoundJS', () => { + it('should handle scripts with src correctly', () => { + const scriptMap = new Map([['version', []]]); + const fakeUrl = 'https://fancytestingyouhere.com/'; + const fakeScriptNode = { + src: fakeUrl, + getAttribute: () => {}, + }; + storeFoundJS(fakeScriptNode, scriptMap); + expect(scriptMap.get('version').length).toEqual(1); + expect(scriptMap.get('version')[0].src).toEqual(fakeUrl); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(1); + }); + it('should handle inline scripts correctly', () => { + const scriptMap = new Map([['version', []]]); + const fakeInnerHtml = 'console.log'; + const fakeLookupKey = 'somelonghashkey'; + const fakeScriptNode = { + attributes: { + 'data-binary-transparency-hash-key': { value: fakeLookupKey }, + }, + getAttribute: () => {}, + innerHTML: fakeInnerHtml, + }; + storeFoundJS(fakeScriptNode, scriptMap); + expect(scriptMap.get('version').length).toEqual(1); + expect(scriptMap.get('version')[0].rawjs).toEqual(fakeInnerHtml); + expect(scriptMap.get('version')[0].lookupKey).toEqual(fakeLookupKey); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(1); + }); + it('should send update icon message if valid', () => { + const scriptMap = new Map([['version', []]]); + const fakeUrl = 'https://fancytestingyouhere.com/'; + const fakeScriptNode = { + src: fakeUrl, + getAttribute: () => {}, + }; + storeFoundJS(fakeScriptNode, scriptMap); + const sentMessage = (window.chrome.runtime.sendMessage as unknown as Mock) + .mock.calls[0][0]; + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(1); + expect(sentMessage.type).toEqual(MESSAGE_TYPE.UPDATE_STATE); + }); + it.skip('storeFoundJS keeps existing icon if not valid', () => { + // TODO: come back to this after testing processFoundJS + }); + }); + describe('hasInvalidAttributes', () => { + it('should not execute if element has no attributes', () => { + // no hasAttribute function + let fakeElement = { + childNodes: [], + }; + hasInvalidAttributes(fakeElement); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(0); + + // hasAttribute is a function, but has no attributes + fakeElement = { + hasAttribute: () => { + return false; + }, + childNodes: [], + } as { + hasAttribute: () => boolean; + childNodes: []; + }; + hasInvalidAttributes(fakeElement); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(0); + }); + it('should not update the icon if no violating attributes are found', () => { + const fakeElement = { + attributes: [ + { localName: 'background' }, + { localName: 'height' }, + { localName: 'width' }, + ], + hasAttribute: () => { + return true; + }, + childNodes: [], + }; + hasInvalidAttributes(fakeElement); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(0); + }); + it('should update the icon if violating attributes are found', () => { + const fakeElement = { + attributes: [ + { localName: 'onclick' }, + { localName: 'height' }, + { localName: 'width' }, + ], + hasAttributes: () => { + return true; + }, + childNodes: [], + }; + hasInvalidAttributes(fakeElement); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(2); + }); + }); + describe('hasInvalidScripts', () => { + it('should not check for non-HTMLElements', () => { + const fakeElement = { + attributes: [ + { localName: 'onclick' }, + { localName: 'height' }, + { localName: 'width' }, + ], + hasAttribute: () => { + return true; + }, + nodeType: 2, + }; + hasInvalidScripts(fakeElement, []); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(0); + }); + it('should store any script elements we find', () => { + const fakeElement = { + attributes: { 'data-binary-transparency-hash-key': { value: 'green' } }, + getAttribute: () => {}, + hasAttribute: () => { + return false; + }, + childNodes: [], + nodeName: 'SCRIPT', + nodeType: 1, + }; + const scriptMap = new Map([['version', []]]); + hasInvalidScripts(fakeElement, scriptMap); + expect(scriptMap.get('version').length).toBe(1); + expect(scriptMap.get('version')[0].type).toBe(MESSAGE_TYPE.RAW_JS); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(1); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls[0][0] + .type + ).toBe(MESSAGE_TYPE.UPDATE_STATE); + }); + it('should check all child nodes for non script elements', () => { + const fakeElement = { + childNodes: [ + { + attributes: [ + { localName: 'onclick' }, + { localName: 'height' }, + { localName: 'width' }, + ], + hasAttribute: () => { + return true; + }, + nodeType: 2, + nodeName: 'nodename', + }, + { + attributes: [ + { localName: 'onclick' }, + { localName: 'height' }, + { localName: 'width' }, + ], + hasAttribute: () => { + return true; + }, + nodeType: 3, + nodeName: 'nodename', + }, + ], + hasAttribute: () => { + return false; + }, + nodeType: 1, + nodeName: 'nodename', + tagName: 'tagName', + }; + const foundScripts = []; + hasInvalidScripts(fakeElement, foundScripts); + expect(foundScripts.length).toBe(0); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(0); + }); + it('should store any script element direct children', () => { + const fakeElement = { + childNodes: [ + { + attributes: [ + { localName: 'onclick' }, + { localName: 'height' }, + { localName: 'width' }, + ], + hasAttribute: () => { + return true; + }, + nodeType: 2, + nodeName: 'nodename', + childNodes: [], + }, + { + attributes: { + 'data-binary-transparency-hash-key': { value: 'green' }, + }, + getAttribute: () => {}, + hasAttribute: () => { + return false; + }, + nodeName: 'SCRIPT', + nodeType: 1, + childNodes: [], + }, + ], + hasAttribute: () => { + return false; + }, + nodeType: 1, + nodeName: 'nodename', + tagName: 'tagName', + }; + const scriptMap = new Map([['version', []]]); + hasInvalidScripts(fakeElement, scriptMap); + expect(scriptMap.get('version').length).toBe(1); + expect(scriptMap.get('version')[0].type).toBe(MESSAGE_TYPE.RAW_JS); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(1); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls[0][0] + .type + ).toBe(MESSAGE_TYPE.UPDATE_STATE); + }); + it('should check for any grandchildren script elements', () => { + const fakeElement = { + childNodes: [ + { + attributes: [ + { localName: 'onclick' }, + { localName: 'height' }, + { localName: 'width' }, + ], + hasAttribute: () => { + return true; + }, + nodeType: 2, + nodeName: 'nodename', + childNodes: [], + }, + { + attributes: { + 'data-binary-transparency-hash-key': { value: 'green' }, + getAttribute: () => {}, + }, + getElementsByTagName: () => { + return [ + { + attributes: { + 'data-binary-transparency-hash-key': { value: 'green1' }, + }, + getAttribute: () => {}, + }, + { + attributes: { + 'data-binary-transparency-hash-key': { value: 'green2' }, + }, + getAttribute: () => {}, + }, + ]; + }, + hasAttribute: () => { + return false; + }, + nodeType: 1, + nodeName: 'nodename', + childNodes: [], + }, + ], + hasAttribute: () => { + return false; + }, + nodeType: 1, + nodeName: 'nodename', + tagName: 'tagName', + }; + const scriptMap = new Map([['version', []]]); + hasInvalidScripts(fakeElement, scriptMap); + expect(scriptMap.get('version').length).toBe(2); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(2); + }); + }); + describe('scanForScripts', () => { + it('should find existing script tags in the DOM and check them', () => { + vi.resetModules(); + document.body.innerHTML = + '
' + + ' ' + + ' ' + + '
'; + scanForScripts(); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(2); + }); + }); + describe('processFoundJS', () => { + // these are flaky because vi.resestModules doesn't work for esm + // while the above may be true, redo these as async and flush promises and they should work. + it('should send valid icon update when no src based scripts are invalid', async () => { + document.body.innerHTML = + '
' + + ' ' + + ' ' + + '
'; + scanForScripts(); + (window.chrome.runtime.sendMessage as unknown as Mock).mockImplementation( + (message, response) => { + response && response({ valid: true }); + } + ); + processFoundJS(ORIGIN_TYPE.WHATSAPP, ''); + await (() => new Promise(res => setTimeout(res, 10)))(); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(6); + }); + it('should send valid icon update when no inline based scripts are invalid', async () => { + document.body.innerHTML = + '
' + + ' ' + + ' ' + + '
'; + scanForScripts(); + (window.chrome.runtime.sendMessage as unknown as Mock).mockImplementation( + (message, response) => { + response && response({ valid: true }); + } + ); + processFoundJS(ORIGIN_TYPE.WHATSAPP, ''); + await (() => new Promise(res => setTimeout(res, 10)))(); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(6); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls[4][0] + .state + ).toEqual(STATES.PROCESSING); + }); + it('should send invalid icon update when invalid response received with src', async () => { + document.body.innerHTML = + '
' + + ' ' + + ' ' + + '
'; + scanForScripts(); + (window.chrome.runtime.sendMessage as unknown as Mock).mockImplementation( + (message, response) => { + response && response({ valid: false }); + } + ); + processFoundJS(ORIGIN_TYPE.WHATSAPP, ''); + await (() => new Promise(res => setTimeout(res, 10)))(); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls.length + ).toBe(11); + expect( + (window.chrome.runtime.sendMessage as unknown as Mock).mock.calls[9][0] + .state + ).toEqual(STATES.INVALID); + }); + it.todo( + 'should send invalid icon update when invalid inline response received' + ); + }); +}); diff --git a/packages/apps/meta-code-verify/src/js/__tests__/detectKvstoreMeta.test.ts b/packages/apps/meta-code-verify/src/js/__tests__/detectKvstoreMeta.test.ts new file mode 100644 index 0000000000..f74d323df9 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/__tests__/detectKvstoreMeta.test.ts @@ -0,0 +1,14 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; +import { describe, it } from 'vitest'; +describe('detectKVstoreMeta', () => { + it.todo('test extractMetaAndLoad'); + it.todo('ensure extraMetaAndLoad is called statically'); + it.todo('ensure extractMetaAndLoad is called after DOMContentReady'); +}); diff --git a/packages/apps/meta-code-verify/src/js/background.ts b/packages/apps/meta-code-verify/src/js/background.ts new file mode 100644 index 0000000000..9dd46a7f32 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/background.ts @@ -0,0 +1,434 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { + MESSAGE_TYPE, + ORIGIN_HOST, + ORIGIN_TIMEOUT, + ORIGIN_TYPE, +} from './config'; + +import { + recordContentScriptStart, + updateContentScriptState, +} from './tab_state_tracker/tabStateTracker'; + +const manifestCache = new Map(); +const debugCache = new Map(); +const cspHeaders = new Map(); +const cspReportHeaders = new Map(); + +// Emulate PageActions +chrome.runtime.onInstalled.addListener(() => { + if (chrome.runtime.getManifest().manifest_version >= 3) { + chrome.action.disable(); + } +}); + +function addDebugLog(tabId, debugMessage) { + let tabDebugList = debugCache.get(tabId); + if (tabDebugList == null) { + tabDebugList = []; + debugCache.set(tabId, tabDebugList); + } + + tabDebugList.push(debugMessage); +} + +const fromHexString = hexString => + new Uint8Array(hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))); +const toHexString = bytes => + bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), ''); + +function getCFHashWorkaroundFunction(host, version): Promise { + return new Promise((resolve, reject) => { + fetch('https://nftstorage.link/ipfs/' + encodeURIComponent(version), { + method: 'GET', + }) + .then(response => response.clone()) + .then(response => response.json()) + .then(responseData => resolve(responseData)) + .catch(error => reject(error)); + }); +} + +async function validateManifest(rootHash, leaves, host, version, workaround) { + // does rootHash match what was published? + + const cfResponse = await getCFHashWorkaroundFunction(host, version).catch( + cfError => { + console.log('error fetching hash from CF', cfError); + return { + valid: false, + reason: 'ENDPOINT_FAILURE', + error: cfError, + }; + } + ); + + if (cfResponse == null) { + return { + valid: false, + reason: 'UNKNOWN_ENDPOINT_ISSUE', + }; + } + + const cfPayload = cfResponse as { root_hash?: string }; + let cfRootHash = cfPayload.root_hash; + if (cfPayload.root_hash.startsWith('0x')) { + cfRootHash = cfPayload.root_hash.slice(2); + } + // validate + if (rootHash !== cfRootHash) { + console.log('hash mismatch with CF ', rootHash, cfRootHash); + + // secondary hash to mitigate accidental build issue. + const encoder = new TextEncoder(); + const backupHashEncoded = encoder.encode(workaround); + const backupHashArray = Array.from( + new Uint8Array(await crypto.subtle.digest('SHA-256', backupHashEncoded)) + ); + const backupHash = backupHashArray + .map(b => b.toString(16).padStart(2, '0')) + .join(''); + console.log( + 'secondary hashing of CF value fails too ', + rootHash, + backupHash + ); + if (backupHash !== cfRootHash) { + return { + valid: false, + reason: 'ROOT_HASH_VERFIY_FAIL_3RD_PARTY', + }; + } + } + + let oldhashes = leaves.map( + leaf => fromHexString(leaf.replace('0x', '')).buffer + ); + let newhashes = []; + let bonus = ''; + + while (oldhashes.length > 1) { + for (let index = 0; index < oldhashes.length; index += 2) { + const validSecondValue = index + 1 < oldhashes.length; + if (validSecondValue) { + const hashValue = new Uint8Array( + oldhashes[index].byteLength + oldhashes[index + 1].byteLength + ); + hashValue.set(new Uint8Array(oldhashes[index]), 0); + hashValue.set( + new Uint8Array(oldhashes[index + 1]), + oldhashes[index].byteLength + ); + newhashes.push(await crypto.subtle.digest('SHA-256', hashValue.buffer)); + } else { + bonus = oldhashes[index]; + } + } + oldhashes = newhashes; + if (bonus !== '') { + oldhashes.push(bonus); + } + console.log( + 'layer hex is ', + oldhashes.map(hash => { + return Array.from(new Uint8Array(hash)) + .map(b => b.toString(16).padStart(2, '')) + .join(''); + }) + ); + newhashes = []; + bonus = ''; + console.log( + 'in loop hashes.length is', + oldhashes.length, + rootHash, + oldhashes + ); + } + const lastHash = toHexString(new Uint8Array(oldhashes[0])); + console.log('before return comparison', rootHash, lastHash); + if (lastHash === rootHash) { + return { + valid: true, + }; + } + return { + valid: false, + reason: 'ROOT_HASH_VERFIY_FAIL_IN_PAGE', + }; +} + +async function validateMetaCompanyManifest(rootHash, otherHashes, leaves) { + // merge all the hashes into one + const megaHash = JSON.stringify(leaves); + // hash it + const encoder = new TextEncoder(); + const encodedMegaHash = encoder.encode(megaHash); + const jsHashArray = Array.from( + new Uint8Array(await crypto.subtle.digest('SHA-256', encodedMegaHash)) + ); + const jsHash = jsHashArray.map(b => b.toString(16).padStart(2, '0')).join(''); + // compare to main and long tail, it should match one + // then hash it with the other + let combinedHash = ''; + if (jsHash === otherHashes.main || jsHash === otherHashes.longtail) { + const combinedHashArray = Array.from( + new Uint8Array( + await crypto.subtle.digest( + 'SHA-256', + encoder.encode(otherHashes.longtail + otherHashes.main) + ) + ) + ); + combinedHash = combinedHashArray + .map(b => b.toString(16).padStart(2, '0')) + .join(''); + } else { + return false; + } + + // ensure result matches root, return. + console.log('combined hash is ', combinedHash, rootHash); + return combinedHash === rootHash; +} + +function getDebugLog(tabId) { + const tabDebugList = debugCache.get(tabId); + return tabDebugList == null ? [] : tabDebugList; +} + +export function handleMessages(message, sender, sendResponse) { + console.log('in handle messages ', message); + + if (message.type == MESSAGE_TYPE.LOAD_MANIFEST) { + // validate manifest + if ( + [ORIGIN_TYPE.FACEBOOK, ORIGIN_TYPE.MESSENGER].includes(message.origin) + ) { + validateMetaCompanyManifest( + message.rootHash, + message.otherHashes, + message.leaves + ).then(valid => { + console.log('result is ', valid); + if (valid) { + let origin = manifestCache.get(message.origin); + if (origin == null) { + origin = new Map(); + manifestCache.set(message.origin, origin); + } + // roll through the existing manifests and remove expired ones + if (ORIGIN_TIMEOUT[message.origin] > 0) { + for (const [key, manif] of origin.entries()) { + if (manif.start + ORIGIN_TIMEOUT[message.origin] < Date.now()) { + origin.delete(key); + } + } + } + + let manifest = origin.get(message.version); + if (!manifest) { + manifest = { + leaves: [], + root: message.rootHash, + start: Date.now(), + }; + origin.set(message.version, manifest); + } + message.leaves.forEach(leaf => { + if (!manifest.leaves.includes(leaf)) { + manifest.leaves.push(leaf); + } + }); + sendResponse({ valid: true }); + } else { + sendResponse({ valid: false }); + } + }); + } else { + const slicedHash = message.rootHash.slice(2); + const slicedLeaves = message.leaves.map(leaf => { + return leaf.slice(2); + }); + validateManifest( + slicedHash, + slicedLeaves, + ORIGIN_HOST[message.origin], + message.version, + message.workaround + ).then(validationResult => { + if (validationResult.valid) { + // store manifest to subsequently validate JS + let origin = manifestCache.get(message.origin); + if (origin == null) { + origin = new Map(); + manifestCache.set(message.origin, origin); + } + // roll through the existing manifests and remove expired ones + if (ORIGIN_TIMEOUT[message.origin] > 0) { + for (const [key, manif] of origin.entries()) { + if (manif.start + ORIGIN_TIMEOUT[message.origin] < Date.now()) { + origin.delete(key); + } + } + } + console.log('result is ', validationResult.valid); + origin.set(message.version, { + leaves: slicedLeaves, + root: slicedHash, + start: Date.now(), + }); + sendResponse({ valid: true }); + } else { + sendResponse(validationResult); + } + }); + } + return true; + } + + if (message.type == MESSAGE_TYPE.RAW_JS) { + const origin = manifestCache.get(message.origin); + if (!origin) { + addDebugLog( + sender.tab.id, + 'Error: RAW_JS had no matching origin ' + message.origin + ); + sendResponse({ valid: false, reason: 'no matching origin' }); + return; + } + const manifestObj = origin.get(message.version); + const manifest = manifestObj && manifestObj.leaves; + if (!manifest) { + addDebugLog( + sender.tab.id, + 'Error: JS with SRC had no matching manifest. origin: ' + + message.origin + + ' version: ' + + message.version + ); + sendResponse({ valid: false, reason: 'no matching manifest' }); + return; + } + + // fetch the src + const encoder = new TextEncoder(); + const encodedJS = encoder.encode(message.rawjs); + // hash the src + crypto.subtle.digest('SHA-256', encodedJS).then(jsHashBuffer => { + const jsHashArray = Array.from(new Uint8Array(jsHashBuffer)); + const jsHash = jsHashArray + .map(b => b.toString(16).padStart(2, '0')) + .join(''); + + if (manifestObj.leaves.includes(jsHash)) { + sendResponse({ valid: true }); + } else { + console.log('generate hash is ', jsHash); + addDebugLog( + sender.tab.id, + 'Error: hash does not match ' + + message.origin + + ', ' + + message.version + + ', unmatched JS is ' + + message.rawjs.substring(0, 500) + ); + sendResponse({ + valid: false, + hash: jsHash, + reason: + 'Error: hash does not match ' + + message.origin + + ', ' + + message.version + + ', unmatched JS is ' + + message.rawjs, + }); + } + }); + return true; + } + + if (message.type == MESSAGE_TYPE.DEBUG) { + addDebugLog(sender.tab.id, message.log); + return; + } + + if (message.type == MESSAGE_TYPE.GET_DEBUG) { + const debuglist = getDebugLog(message.tabId); + console.log('debug list is ', message.tabId, debuglist); + sendResponse({ valid: true, debugList: debuglist }); + return; + } + + if (message.type === MESSAGE_TYPE.UPDATE_STATE) { + updateContentScriptState(sender, message.state, message.origin); + sendResponse({ success: true }); + return; + } + + if (message.type === MESSAGE_TYPE.CONTENT_SCRIPT_START) { + recordContentScriptStart(sender, message.origin); + sendResponse({ + success: true, + cspHeader: cspHeaders.get(sender.tab.id), + cspReportHeader: cspReportHeaders.get(sender.tab.id), + }); + return; + } +} + +chrome.runtime.onMessage.addListener(handleMessages); + +chrome.webRequest.onResponseStarted.addListener( + src => { + if ( + src.type === 'script' && + !src.fromCache && + src.url.indexOf('chrome-extension://') === 0 && + src.url.indexOf('moz-extension://') === 0 + ) { + chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { + chrome.tabs.sendMessage(tabs[0].id, { + greeting: 'nocacheHeaderFound', + }); + }); + } + }, + { urls: [''] }, + [] +); + +chrome.webRequest.onHeadersReceived.addListener( + details => { + if (details.frameId === 0 && details.responseHeaders) { + const cspHeader = details.responseHeaders.find( + header => header.name === 'content-security-policy' + ); + const cspReportHeader = details.responseHeaders.find( + header => header.name === 'content-security-policy-report-only' + ); + cspHeaders.set(details.tabId, cspHeader?.value); + cspReportHeaders.set(details.tabId, cspReportHeader?.value); + } + }, + { + types: ['main_frame'], + urls: ['*://*.facebook.com/*', '*://*.messenger.com/*'], + }, + ['responseHeaders'] +); + +chrome.tabs.onRemoved.addListener(tabId => { + if (debugCache.has(tabId)) { + debugCache.delete(tabId); + } +}); diff --git a/packages/apps/meta-code-verify/src/js/config.ts b/packages/apps/meta-code-verify/src/js/config.ts new file mode 100644 index 0000000000..268e561815 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/config.ts @@ -0,0 +1,148 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +export const STATES = Object.freeze({ + // Starting state for all frames/tabs + START: 'START', + // Tab is processing scripts + PROCESSING: 'PROCESSING', + // Disable the extension (it shouldn't be running on this tab) + IGNORE: 'IGNORE', + // Script verification against the manifest failed. + INVALID: 'INVALID', + // Unknown inline script from an extension was found + RISK: 'RISK', + // All script verifications succeeded + VALID: 'VALID', + // Timed out waiting for the manifest to be available on the page + TIMEOUT: 'TIMEOUT', +}); + +export type State = keyof typeof STATES; + +const ICONS = { + DEFAULT: { + 32: 'default_32.png', + 64: 'default_64.png', + 128: 'default_64@2x.png', + }, + FAILURE: { + 32: 'failure_32.png', + }, + RISK: { + 32: 'risk_32.png', + }, + VALID: { + 32: 'validated_32.png', + }, +}; + +export const STATES_TO_ICONS = { + [STATES.START]: ICONS.DEFAULT, + [STATES.PROCESSING]: ICONS.DEFAULT, + [STATES.IGNORE]: ICONS.DEFAULT, + [STATES.INVALID]: ICONS.FAILURE, + [STATES.RISK]: ICONS.RISK, + [STATES.VALID]: ICONS.VALID, + [STATES.TIMEOUT]: ICONS.RISK, +}; + +export const KNOWN_EXTENSION_HASHES = [ + '', // Chrome - Dynamic: StopAll Ads + '727bfede71f473991faeb7f4b65632c93e7f7d17189f1b3d952cd990cd150808', // Chrome and Edge: Avast Online Security & Privacy v21.0.101 + 'c09a2e7b2fa97705c9afe890498e1f620ede4bd2968cfef7421080a8f9f0d8f9', // Chrome: Privacy Badger v2021.11.23.1 + '04c354b90b330f4cac2678ccd311e5d2a6e8b57815510b176ddbed8d52595726', // Chrome: LastPass v4.88.0 + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', // Chrome: AdLock - adblocker & privacy protection v0.1.30 + '', // Chrome - Dynamic: AdBlocker Ultimate v3.7.15 + '', // Chrome - Dynamic: DuckDuckGo Privacy Essentials v2022.2.22 + '', // Chrome - Dynamic: Crystal Ad block v1.3.9 + '', // Chrome - Dynamic: AdBlock — best ad blocker v4.43.0 + '4ae6b4dcefb37952cef704c39fe3e8d675bd32c54302984e747ba6768541862a', // Chrome: Vue.js devtools v6.0.12 + '91fecf0ca4c2260f8a18d1c371d717e656e98a0015f0206379afe662746d6009', // Chrome: Vue.js devtools v6.0.12 + 'e64b3a9472f559611158a628da06e770ce8cc3d0f8395849072a0199bae705f9', // FF: Total Adblock-Ad Blocker v2.10.0 *and* FF/Edge BitGuard v1.0 + 'c924b9ed122066e5420b125a1accb787c3856c4a422fe9bde47d1f40660271a6', // FF: Smart Blocker v1.0.2 + '', // FF: Popup Blocker(strict) + '', // FF - Dynamic: Privacy Tweaks + '', // FF: Privacy Possum + '', // FF - Dynamic: Adblocker X v2.0.5 + '', // FF - Dynamic: AdBlocker Ultimate v3.7.15 + '', // FF - Dynamic: Cloudopt AdBlocker v2.3.0 + '', // Edge - Dynamic: Epsilon Ad blocker v1.4.6 + '7a69d1fb29471a9962307f7882adade784141d02617e233eb366ae5f63fd9dd8', // Edge and FF: Minimal Consent v1.0.9 + 'd768396bbfda57a3defb0aeba5d9b9aefef562d8204520668f9e275c68455a0c', // Edge: Writer from Writer.com v1.63.2 + '', // Edge - Dynamic: AdBlock --- best ad blocker v4.43.0 + '855e2fd1368fc12a14159e26ed3132e6567e8443f8b75081265b93845b865103', // Edge and FF: AdGuard AdBlocker v3.6.17 + 'deda33bced5f2014562e03f8c82a2a16df074a2bc6be6eceba78274056e41372', // Edge: Netcraft Extension v1.16.8 + '', // Edge - Dynamic: Hola ad remover v1.194.444 + '', // Edge - Dynamic: Tau adblock v1.4.1 +]; + +export const KNOWN_EXTENSION_HASHES_MAP = new Map( + Object.entries({ + '727bfede71f473991faeb7f4b65632c93e7f7d17189f1b3d952cd990cd150808': + 'Avast Online Security & Privacy v21.0.101', + c09a2e7b2fa97705c9afe890498e1f620ede4bd2968cfef7421080a8f9f0d8f9: + 'Privacy Badger v2021.11.23.1', + '04c354b90b330f4cac2678ccd311e5d2a6e8b57815510b176ddbed8d52595726': + 'LastPass v4.88.0', + e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855: + 'AdLock - adblocker & privacy protection v0.1.30', + '4ae6b4dcefb37952cef704c39fe3e8d675bd32c54302984e747ba6768541862a': + 'Vue.js devtools v6.0.12', + '91fecf0ca4c2260f8a18d1c371d717e656e98a0015f0206379afe662746d6009': + 'Vue.js devtools v6.0.12', + e64b3a9472f559611158a628da06e770ce8cc3d0f8395849072a0199bae705f9: + 'Total Adblock-Ad Blocker v2.10.0 *and* FF/Edge BitGuard v1.0', + c924b9ed122066e5420b125a1accb787c3856c4a422fe9bde47d1f40660271a6: + 'Smart Blocker v1.0.2', + '7a69d1fb29471a9962307f7882adade784141d02617e233eb366ae5f63fd9dd8': + 'Minimal Consent v1.0.9', + d768396bbfda57a3defb0aeba5d9b9aefef562d8204520668f9e275c68455a0c: + 'Writer from Writer.com v1.63.2', + '855e2fd1368fc12a14159e26ed3132e6567e8443f8b75081265b93845b865103': + 'AdGuard AdBlocker v3.6.17', + deda33bced5f2014562e03f8c82a2a16df074a2bc6be6eceba78274056e41372: + 'Netcraft Extension v1.16.8', + }) +); + +export const MESSAGE_TYPE = { + DEBUG: 'DEBUG', + GET_DEBUG: 'GET_DEBUG', + LOAD_MANIFEST: 'LOAD_MANIFEST', + POPUP_STATE: 'POPUP_STATE', + RAW_JS: 'RAW_JS', + UPDATE_STATE: 'UPDATE_STATE', + STATE_UPDATED: 'STATE_UPDATED', + CONTENT_SCRIPT_START: 'CONTENT_SCRIPT_START', +}; + +export const ORIGIN_HOST = { + FACEBOOK: 'facebook.com', + WHATSAPP: 'whatsapp.com', + MESSENGER: 'messenger.com', + KVSTORE: 'dashboard.humanprotocol.org', +}; + +export const ORIGIN_TIMEOUT = { + FACEBOOK: 176400000, + WHATSAPP: 0, + MESSENGER: 0, +}; + +export const ORIGIN_TYPE = Object.freeze({ + FACEBOOK: 'FACEBOOK', + WHATSAPP: 'WHATSAPP', + MESSENGER: 'MESSENGER', + KVSTORE: 'KVSTORE', +}); + +export type Origin = keyof typeof ORIGIN_TYPE; + +// Firefox and Safari currently do not support CompressionStream +export const DOWNLOAD_JS_ENABLED = + typeof window !== 'undefined' && 'CompressionStream' in window; diff --git a/packages/apps/meta-code-verify/src/js/contentUtils.ts b/packages/apps/meta-code-verify/src/js/contentUtils.ts new file mode 100644 index 0000000000..b8a71bd2b5 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/contentUtils.ts @@ -0,0 +1,1115 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { + KNOWN_EXTENSION_HASHES, + MESSAGE_TYPE, + ORIGIN_TYPE, + DOWNLOAD_JS_ENABLED, + STATES, +} from './config'; + +const DOM_EVENTS = [ + 'onabort', + 'onactivate', + 'onattribute', + 'onafterprint', + 'onafterscriptexecute', + 'onafterupdate', + 'onanimationcancel', + 'onanimationend', + 'onanimationiteration', + 'onanimationstart', + 'onappinstalled', + 'onariarequest', + 'onautocomplete', + 'onautocompleteerror', + 'onauxclick', + 'onbeforeactivate', + 'onbeforecopy', + 'onbeforecut', + 'onbeforedeactivate', + 'onbeforeeditfocus', + 'onbeforeinstallprompt', + 'onbeforepaste', + 'onbeforeprint', + 'onbeforescriptexecute', + 'onbeforeunload', + 'onbeforeupdate', + 'onbeforexrselect', + 'onbegin', + 'onblur', + 'onbounce', + 'oncancel', + 'oncanplay', + 'oncanplaythrough', + 'oncellchange', + 'onchange', + 'onclick', + 'onclose', + 'oncommand', + 'oncompassneedscalibration', + 'oncontextmenu', + 'oncontrolselect', + 'oncopy', + 'oncuechange', + 'oncut', + 'ondataavailable', + 'ondatasetchanged', + 'ondatasetcomplete', + 'ondblclick', + 'ondeactivate', + 'ondevicelight', + 'ondevicemotion', + 'ondeviceorientation', + 'ondeviceorientationabsolute', + 'ondeviceproximity', + 'ondrag', + 'ondragdrop', + 'ondragend', + 'ondragenter', + 'ondragleave', + 'ondragover', + 'ondragstart', + 'ondrop', + 'ondurationchange', + 'onemptied', + 'onend', + 'onended', + 'onerror', + 'onerrorupdate', + 'onexit', + 'onfilterchange', + 'onfinish', + 'onfocus', + 'onfocusin', + 'onfocusout', + 'onformchange', + 'onformdata', + 'onforminput', + 'onfullscreenchange', + 'onfullscreenerror', + 'ongotpointercapture', + 'onhashchange', + 'onhelp', + 'oninput', + 'oninvalid', + 'onkeydown', + 'onkeypress', + 'onkeyup', + 'onlanguagechange', + 'onlayoutcomplete', + 'onload', + 'onloadeddata', + 'onloadedmetadata', + 'onloadend', + 'onloadstart', + 'onlosecapture', + 'onlostpointercapture', + 'onmediacomplete', + 'onmediaerror', + 'onmessage', + 'onmessageerror', + 'onmousedown', + 'onmouseenter', + 'onmouseleave', + 'onmousemove', + 'onmouseout', + 'onmouseover', + 'onmouseup', + 'onmousewheel', + 'onmove', + 'onmoveend', + 'onmovestart', + 'onmozfullscreenchange', + 'onmozfullscreenerror', + 'onmozpointerlockchange', + 'onmozpointerlockerror', + 'onmscontentzoom', + 'onmsfullscreenchange', + 'onmsfullscreenerror', + 'onmsgesturechange', + 'onmsgesturedoubletap', + 'onmsgestureend', + 'onmsgesturehold', + 'onmsgesturestart', + 'onmsgesturetap', + 'onmsgotpointercapture', + 'onmsinertiastart', + 'onmslostpointercapture', + 'onmsmanipulationstatechanged', + 'onmspointercancel', + 'onmspointerdown', + 'onmspointerenter', + 'onmspointerleave', + 'onmspointermove', + 'onmspointerout', + 'onmspointerover', + 'onmspointerup', + 'onmssitemodejumplistitemremoved', + 'onmsthumbnailclick', + 'onoffline', + 'ononline', + 'onoutofsync', + 'onpage', + 'onpagehide', + 'onpageshow', + 'onpaste', + 'onpause', + 'onplay', + 'onplaying', + 'onpointercancel', + 'onpointerdown', + 'onpointerenter', + 'onpointerleave', + 'onpointerlockchange', + 'onpointerlockerror', + 'onpointermove', + 'onpointerout', + 'onpointerover', + 'onpointerrawupdate', + 'onpointerup', + 'onpopstate', + 'onprogress', + 'onpropertychange', + 'onratechange', + 'onreadystatechange', + 'onreceived', + 'onrejectionhandled', + 'onrepeat', + 'onreset', + 'onresize', + 'onresizeend', + 'onresizestart', + 'onresume', + 'onreverse', + 'onrowdelete', + 'onrowenter', + 'onrowexit', + 'onrowinserted', + 'onrowsdelete', + 'onrowsenter', + 'onrowsexit', + 'onrowsinserted', + 'onscroll', + 'onsearch', + 'onsecuritypolicyviolation', + 'onseek', + 'onseeked', + 'onseeking', + 'onselect', + 'onselectionchange', + 'onselectstart', + 'onslotchange', + 'onstalled', + 'onstorage', + 'onstoragecommit', + 'onstart', + 'onstop', + 'onshow', + 'onsyncrestored', + 'onsubmit', + 'onsuspend', + 'onsynchrestored', + 'ontimeerror', + 'ontimeupdate', + 'ontoggle', + 'ontouchend', + 'ontouchmove', + 'ontouchstart', + 'ontrackchange', + 'ontransitioncancel', + 'ontransitionend', + 'ontransitionrun', + 'ontransitionstart', + 'onunhandledrejection', + 'onunload', + 'onurlflip', + 'onuserproximity', + 'onvolumechange', + 'onwaiting', + 'onwebkitanimationend', + 'onwebkitanimationiteration', + 'onwebkitanimationstart', + 'onwebkitfullscreenchange', + 'onwebkitfullscreenerror', + 'onwebkittransitionend', + 'onwheel', +]; + +const sourceScripts = new Map(); +const inlineScripts = []; +const foundScripts = new Map(); +foundScripts.set('', []); +let currentOrigin = ''; +let currentFilterType = ''; +let manifestTimeoutID = ''; + +function updateCurrentState(state) { + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.UPDATE_STATE, + state, + origin: currentOrigin, + }); +} + +export function storeFoundJS(scriptNodeMaybe, scriptList) { + if (window != window.top) { + // this means that content utils is running in an iframe - disable timer and call processFoundJS on manifest processed in top level frame + clearTimeout(manifestTimeoutID); + manifestTimeoutID = ''; + window.setTimeout( + () => processFoundJS(currentOrigin, foundScripts.keys().next().value), + 0 + ); + } + // check if it's the manifest node + if ( + window == window.top && + (scriptNodeMaybe.id === 'binary-transparency-manifest' || + scriptNodeMaybe.getAttribute('name') === 'binary-transparency-manifest') + ) { + let rawManifest: { + leaves?: Array; + root?: string; + version?: string; + manifest?: Array; + manifest_hashes?: string & { combined_hash?: string }; + } = {}; + try { + rawManifest = JSON.parse(scriptNodeMaybe.textContent); + } catch (manifestParseError) { + setTimeout( + () => parseFailedJson({ node: scriptNodeMaybe, retry: 5000 }), + 20 + ); + return; + } + + let leaves = rawManifest.leaves; + let otherHashes = ''; + let otherType = ''; + let roothash = rawManifest.root; + let version = rawManifest.version; + + if ( + [ORIGIN_TYPE.FACEBOOK, ORIGIN_TYPE.MESSENGER].includes( + currentOrigin as 'FACEBOOK' | 'MESSENGER' + ) + ) { + leaves = rawManifest.manifest; + otherHashes = rawManifest.manifest_hashes; + otherType = scriptNodeMaybe.getAttribute('data-manifest-type'); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + roothash = otherHashes.combined_hash; + version = scriptNodeMaybe.getAttribute('data-manifest-rev'); + + if (currentFilterType != '') { + currentFilterType = 'BOTH'; + } + if (currentFilterType === '') { + currentFilterType = otherType; + } + } + // for whatsapp + else { + currentFilterType = 'BOTH'; + } + // now that we know the actual version of the scripts, transfer the ones we know about. + if (foundScripts.has('')) { + foundScripts.set(version, foundScripts.get('')); + foundScripts.delete(''); + } + + chrome.runtime.sendMessage( + { + type: MESSAGE_TYPE.LOAD_MANIFEST, + leaves: leaves, + origin: currentOrigin, + otherHashes: otherHashes, + otherType: otherType, + rootHash: roothash, + workaround: scriptNodeMaybe.innerHTML, + version: version, + }, + response => { + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.DEBUG, + log: + 'manifest load response is ' + response + ? JSON.stringify(response).substring(0, 500) + : '', + }); + // then start processing of it's JS + if (response.valid) { + if (manifestTimeoutID !== '') { + clearTimeout(manifestTimeoutID); + manifestTimeoutID = ''; + } + window.setTimeout(() => processFoundJS(currentOrigin, version), 0); + } else { + if ( + ['ENDPOINT_FAILURE', 'UNKNOWN_ENDPOINT_ISSUE'].includes( + response.reason + ) + ) { + updateCurrentState(STATES.TIMEOUT); + return; + } + updateCurrentState(STATES.INVALID); + } + } + ); + } + + if (scriptNodeMaybe.getAttribute('type') === 'application/json') { + try { + JSON.parse(scriptNodeMaybe.textContent); + } catch (parseError) { + setTimeout( + () => parseFailedJson({ node: scriptNodeMaybe, retry: 1500 }), + 20 + ); + } + return; + } + if ( + scriptNodeMaybe.src != null && + scriptNodeMaybe.src !== '' && + scriptNodeMaybe.src.indexOf('blob:') === 0 + ) { + // TODO: try to process the blob. For now, flag as warning. + updateCurrentState(STATES.INVALID); + return; + } + + const dataBtManifest = scriptNodeMaybe.getAttribute('data-btmanifest'); + const otherType = dataBtManifest == null ? '' : dataBtManifest.split('_')[1]; + // need to get the src of the JS + if (scriptNodeMaybe.src != null && scriptNodeMaybe.src !== '') { + if (scriptList.size === 1) { + scriptList.get(scriptList.keys().next().value).push({ + src: scriptNodeMaybe.src, + otherType: otherType, // TODO: read from DOM when available + }); + } + } else { + // no src, access innerHTML for the code + const hashLookupAttribute = + scriptNodeMaybe.attributes['data-binary-transparency-hash-key']; + const hashLookupKey = hashLookupAttribute && hashLookupAttribute.value; + if (scriptList.size === 1) { + scriptList.get(scriptList.keys().next().value).push({ + type: MESSAGE_TYPE.RAW_JS, + rawjs: scriptNodeMaybe.innerHTML, + lookupKey: hashLookupKey, + otherType: otherType, // TODO: read from DOM when available + }); + } + } + updateCurrentState(STATES.PROCESSING); +} + +function getAttributeValue( + nodeName, + checkNode, + htmlElement, + attributeName, + currentAttributeValue +) { + if ( + nodeName.toLowerCase() === checkNode && + htmlElement.hasAttribute(attributeName) + ) { + return htmlElement.getAttribute(attributeName).toLowerCase(); + } + return currentAttributeValue; +} + +const AttributeCheckPairs = [ + { nodeName: 'a', attributeName: 'href' }, + { nodeName: 'iframe', attributeName: 'src' }, + { nodeName: 'iframe', attributeName: 'srcdoc' }, + { nodeName: 'form', attributeName: 'action' }, + { nodeName: 'input', attributeName: 'formaction' }, + { nodeName: 'button', attributeName: 'formaction' }, + { nodeName: 'a', attributeName: 'xlink:href' }, + { nodeName: 'ncc', attributeName: 'href' }, + { nodeName: 'embed', attributeName: 'src' }, + { nodeName: 'object', attributeName: 'data' }, + { nodeName: 'animate', attributeName: 'xlink:href' }, + { nodeName: 'script', attributeName: 'xlink:href' }, + { nodeName: 'use', attributeName: 'href' }, + { nodeName: 'use', attributeName: 'xlink:href' }, + { nodeName: 'x', attributeName: 'href' }, + { nodeName: 'x', attributeName: 'xlink:href' }, +]; + +export function hasViolatingJavaScriptURI(htmlElement) { + let checkURL = ''; + const lowerCaseNodeName = htmlElement.nodeName.toLowerCase(); + AttributeCheckPairs.forEach(checkPair => { + checkURL = getAttributeValue( + lowerCaseNodeName, + checkPair.nodeName, + htmlElement, + checkPair.attributeName, + checkURL + ); + }); + if (checkURL !== '') { + // make sure anchor tags and object tags don't have javascript urls + if (checkURL.indexOf('javascript') >= 0) { + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.DEBUG, + log: 'violating attribute: javascript url', + }); + updateCurrentState(STATES.INVALID); + } + } + + if (typeof htmlElement.childNodes !== 'undefined') { + htmlElement.childNodes.forEach(element => { + hasViolatingJavaScriptURI(element); + }); + } +} + +export function hasInvalidAttributes(htmlElement) { + if ( + typeof htmlElement.attributes === 'object' && + Object.keys(htmlElement.attributes).length >= 1 + ) { + Array.from(htmlElement.attributes).forEach(elementAttribute => { + // check first for violating attributes + if (DOM_EVENTS.indexOf((elementAttribute as Attr).localName) >= 0) { + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.DEBUG, + log: + 'violating attribute ' + + (elementAttribute as Attr).localName + + ' from element ' + + htmlElement.outerHTML, + }); + updateCurrentState(STATES.INVALID); + } + }); + } + // check child nodes as well, since a malicious attacker could try to inject an invalid attribute via an image node in a svg tag using a use element + if (htmlElement.childNodes.length > 0) { + htmlElement.childNodes.forEach(childNode => { + if (childNode.nodeType === 1) { + hasInvalidAttributes(childNode); + } + // if the element is a math element, check all the attributes of the child node to ensure that there are on href or xlink:href attributes with javascript urls + if ( + htmlElement.tagName.toLowerCase() === 'math' && + Object.keys(childNode.attributes).length >= 1 + ) { + Array.from(childNode.attributes).forEach(elementAttribute => { + if ( + ((elementAttribute as Attr).localName === 'href' || + (elementAttribute as Attr).localName === 'xlink:href') && + childNode + .getAttribute((elementAttribute as Attr).localName) + .toLowerCase() + .startsWith('javascript') + ) { + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.DEBUG, + log: + 'violating attribute ' + + (elementAttribute as Attr).localName + + ' from element ' + + htmlElement.outerHTML, + }); + updateCurrentState(STATES.INVALID); + } + }); + } + }); + } +} + +function checkNodesForViolations(element) { + hasViolatingJavaScriptURI(element); + hasInvalidAttributes(element); +} + +export function hasInvalidScripts(scriptNodeMaybe, scriptList) { + // if not an HTMLElement ignore it! + if (scriptNodeMaybe.nodeType !== 1) { + return false; + } + checkNodesForViolations(scriptNodeMaybe); + + if (scriptNodeMaybe.nodeName.toLowerCase() === 'script') { + return storeFoundJS(scriptNodeMaybe, scriptList); + } else if (scriptNodeMaybe.childNodes.length > 0) { + scriptNodeMaybe.childNodes.forEach(childNode => { + // if not an HTMLElement ignore it! + if (childNode.nodeType !== 1) { + return; + } + checkNodesForViolations(childNode); + if (childNode.nodeName.toLowerCase() === 'script') { + storeFoundJS(childNode, scriptList); + return; + } + + Array.from(childNode.getElementsByTagName('script')).forEach( + childScript => { + storeFoundJS(childScript, scriptList); + } + ); + }); + } + + return; +} + +const parseCSPString = csp => { + const directiveStrings = csp.split(';'); + return directiveStrings.reduce((map, directiveString) => { + const [directive, ...values] = directiveString.split(' '); + return map.set(directive, new Set(values)); + }, new Map()); +}; + +const checkCSPHeaders = (cspHeader, cspReportHeader) => { + // If CSP is enforcing on evals we don't need to do extra checks + if (cspHeader != null) { + const cspMap = parseCSPString(cspHeader); + if (cspMap.has('script-src')) { + if (!cspMap.get('script-src').has("'unsafe-eval'")) { + return; + } + } + if (!cspMap.has('script-src') && cspMap.has('default-src')) { + if (!cspMap.get('default-src').has("'unsafe-eval'")) { + return; + } + } + } + + // If CSP is not reporting on evals we cannot catch them + if (cspReportHeader != null) { + const cspReportMap = parseCSPString(cspReportHeader); + if (cspReportMap.has('script-src')) { + if (cspReportMap.get('script-src').has("'unsafe-eval'")) { + updateCurrentState(STATES.INVALID); + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.DEBUG, + log: 'Missing unsafe-eval from CSP report-only header', + }); + return; + } + } + if (!cspReportMap.has('script-src') && cspReportMap.has('default-src')) { + if (cspReportMap.get('default-src').has("'unsafe-eval'")) { + updateCurrentState(STATES.INVALID); + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.DEBUG, + log: 'Missing unsafe-eval from CSP report-only header', + }); + return; + } + } + } else { + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.DEBUG, + log: 'Missing CSP report-only header', + }); + updateCurrentState(STATES.INVALID); + return; + } + + // Check for evals + scanForCSPEvalReportViolations(); +}; + +const scanForCSPEvalReportViolations = () => { + document.addEventListener('securitypolicyviolation', e => { + if (e.blockedURI !== 'eval') { + return; + } + + if (e.disposition === 'enforce') { + return; + } + + fetch(e.sourceFile, { cache: 'only-if-cached', mode: 'same-origin' }) + .then(response => { + if (response.status === 504) { + updateCurrentState(STATES.INVALID); + } + + return response.text(); + }) + .then(code => { + const violatingLine = code.split(/\r?\n/)[e.lineNumber - 1]; + if ( + violatingLine.includes('WebAssembly') && + !violatingLine.includes('eval(') && + !violatingLine.includes('Function(') && + !violatingLine.includes("setTimeout('") && + !violatingLine.includes("setInterval('") && + !violatingLine.includes('setTimeout("') && + !violatingLine.includes('setInterval("') + ) { + return; + } + updateCurrentState(STATES.INVALID); + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.DEBUG, + log: `Caught eval in ${e.sourceFile}`, + }); + }); + }); +}; + +export const scanForScripts = () => { + const allElements = document.getElementsByTagName('*'); + + Array.from(allElements).forEach(allElement => { + checkNodesForViolations(allElement); + // next check for existing script elements and if they're violating + if (allElement.nodeName.toLowerCase() === 'script') { + storeFoundJS(allElement, foundScripts); + } + }); + + try { + // track any new scripts that get loaded in + const scriptMutationObserver = new MutationObserver(mutationsList => { + mutationsList.forEach(mutation => { + if (mutation.type === 'childList') { + Array.from(mutation.addedNodes).forEach(checkScript => { + hasInvalidScripts(checkScript, foundScripts); + }); + } else if (mutation.type === 'attributes') { + updateCurrentState(STATES.INVALID); + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.DEBUG, + log: + 'Processed DOM mutation and invalid attribute added or changed ' + + mutation.target, + }); + } + }); + }); + + scriptMutationObserver.observe(document, { + attributeFilter: DOM_EVENTS, + childList: true, + subtree: true, + }); + } catch (_UnknownError) { + updateCurrentState(STATES.INVALID); + } +}; + +/** + * Return text from the response object. The main purpose of this method is to + * extract and parse sourceURL and sourceMappingURL comments from inlined data + * scripts. + * Note that this function consumes the response body! + * + * @param {Response} response Response will be consumed! + * @returns string Response text if the sourceURL is valid + */ +async function genSourceText(response) { + const sourceText = await response.text(); + // Just a normal script tag with a source url + if (!response.url.startsWith('data:application/x-javascript')) { + return sourceText; + } + + // Inlined data-script. We need to extract with optional `//# sourceURL=` and + // `//# sourceMappingURL=` comments before sending it over to be hashed... + const sourceTextParts = sourceText.trimEnd().split('\n'); + + // NOTE: For security reasons, we expect inlined data scripts to *end* with + // sourceURL comments. This is because a man-in-the-middle can insert code + // after the sourceURL comment, which would execute on the browser but get + // stripped away by the extension before getting hashed + verified. + // As a result, we're always starting our search from the bottom. + if ( + sourceTextParts[sourceTextParts.length - 1].startsWith('//# sourceURL=') + ) { + const sourceURL = sourceTextParts.pop().split('//# sourceURL=')[1] ?? ''; + if (!sourceURL.startsWith('http')) { + throw new Error(`Invalid sourceUrl in inlined data script: ${sourceURL}`); + } + } + while ( + sourceTextParts[sourceTextParts.length - 1] === '\n' || + sourceTextParts[sourceTextParts.length - 1].startsWith( + '//# sourceMappingURL=' + ) + ) { + sourceTextParts.pop(); + } + return sourceTextParts.join('\n').trim(); +} + +async function processJSWithSrc(script, origin, version) { + // fetch the script from page context, not the extension context. + try { + const sourceResponse = await fetch(script.src, { method: 'GET' }); + if (DOWNLOAD_JS_ENABLED) { + const fileNameArr = script.src.split('/'); + const fileName = fileNameArr[fileNameArr.length - 1].split('?')[0]; + + sourceScripts.set( + fileName, + sourceResponse + .clone() + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + .body.pipeThrough(new window.CompressionStream('gzip')) + ); + } + const sourceText = await genSourceText(sourceResponse.clone()); + // split package up if necessary + const packages = sourceText.split('/*FB_PKG_DELIM*/\n'); + const packagePromises = packages.map(jsPackage => { + return new Promise((resolve, reject) => { + chrome.runtime.sendMessage( + { + type: MESSAGE_TYPE.RAW_JS, + rawjs: jsPackage.trimStart(), + origin: origin, + version: version, + }, + response => { + if (response.valid) { + resolve(response.valid); + } else { + reject(response.type); + } + } + ); + }); + }); + await Promise.all(packagePromises); + return { valid: true }; + } catch (scriptProcessingError) { + return { + valid: false, + type: scriptProcessingError, + }; + } +} +async function allowDisallow(scriptOrHash, script) { + const disallowList = await chrome.storage.local.get(['disallow']); + const allowList = await chrome.storage.local.get(['allowlist']); + + const disallowMap = new Map(Object.entries(disallowList?.disallow || {})); + const allowMap = new Map(Object.entries(allowList?.allowlist || {})); + if ( + !disallowMap.size && + !allowMap.has(scriptOrHash?.src) && + !allowMap.has(scriptOrHash) + ) { + if (scriptOrHash?.src) { + disallowMap.set(scriptOrHash.src, script); + await chrome.storage.local.set({ + disallow: Object.fromEntries(disallowMap), + }); + } else { + disallowMap.set(scriptOrHash, script); + await chrome.storage.local.set({ + disallow: Object.fromEntries(disallowMap), + }); + } + } else { + if (scriptOrHash.src) { + if ( + !disallowMap.has(scriptOrHash.src) && + !allowMap.has(scriptOrHash.src) + ) { + const map2 = disallowMap.set(scriptOrHash.src, script); + await chrome.storage.local.set({ disallow: Object.fromEntries(map2) }); + } + } else { + if (!disallowMap.has(scriptOrHash) && !allowMap.has(scriptOrHash)) { + const map2 = disallowMap.set(scriptOrHash, script); + await chrome.storage.local.set({ disallow: Object.fromEntries(map2) }); + } + } + } +} + +export const processFoundJS = async (origin, version) => { + // foundScripts + const fullscripts = foundScripts.get(version).splice(0); + const scripts = fullscripts.filter(script => { + if ( + script.otherType === currentFilterType || + ['BOTH', ''].includes(currentFilterType) + ) { + return true; + } else { + foundScripts.get(version).push(script); + } + }); + const allowList = await chrome.storage.local.get(['allowlist']); + const allowMap = new Map(Object.entries(allowList?.allowlist || {})); + const disallowList = await chrome.storage.local.get(['disallow']); + const disallowMap = new Map(Object.entries(disallowList?.disallow || {})); + let pendingScriptCount = scripts.length; + for (const script of scripts) { + if (script.src) { + await processJSWithSrc(script, origin, version).then(response => { + pendingScriptCount--; + if (response.valid) { + if (pendingScriptCount == 0) { + updateCurrentState(STATES.VALID); + } + } else { + allowDisallow(script, script); + + if (response.type === 'EXTENSION') { + updateCurrentState(STATES.RISK); + } else if (allowMap.has(script.src)) { + if (disallowMap.size === 0) { + updateCurrentState(STATES.VALID); + } else { + updateCurrentState(STATES.RISK); + } + } else { + updateCurrentState(STATES.INVALID); + } + } + + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.DEBUG, + log: + 'processed JS with SRC, ' + + script.src + + ',response is ' + + JSON.stringify(response).substring(0, 500), + }); + }); + } else { + chrome.runtime.sendMessage( + { + type: script.type, + rawjs: script.rawjs.trimStart(), + lookupKey: script.lookupKey, + origin: origin, + version: version, + }, + async response => { + pendingScriptCount--; + const inlineScriptMap = new Map(); + if (response.valid) { + inlineScriptMap.set(response.hash, script.rawjs); + inlineScripts.push(inlineScriptMap); + if (pendingScriptCount == 0) { + updateCurrentState(STATES.VALID); + } + } else { + allowDisallow(response.hash, script); + // using an array of maps, as we're using the same key for inline scripts - this will eventually be removed, once inline scripts are removed from the page load + inlineScriptMap.set('hash not in manifest', script.rawjs); + inlineScripts.push(inlineScriptMap); + + if ( + KNOWN_EXTENSION_HASHES.includes(response.hash) && + !allowMap.has(response.hash) + ) { + updateCurrentState(STATES.RISK); + } else if (allowMap.has(response.hash)) { + if (disallowMap.size === 0) { + updateCurrentState(STATES.VALID); + } else { + updateCurrentState(STATES.RISK); + } + } else { + updateCurrentState(STATES.INVALID); + } + } + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.DEBUG, + log: + 'processed the RAW_JS, response is ' + + response.hash + + ' ' + + JSON.stringify(response).substring(0, 500), + }); + } + ); + } + } + window.setTimeout(() => processFoundJS(origin, version), 3000); +}; + +async function downloadJSToZip(downloadType) { + try { + if (downloadType === 'downloadSource') { + const chunks = []; + const delimPrefix = '\n********** new file: '; + const delimSuffix = ' **********\n'; + const enc = new TextEncoder(); + + for (const [fileName, compressedStream] of sourceScripts.entries()) { + try { + const delim = delimPrefix + fileName + delimSuffix; + const encodedDelim = enc.encode(delim); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const delimStream = new window.CompressionStream('gzip'); + const writer = delimStream.writable.getWriter(); + writer.write(encodedDelim); + writer.close(); + const delimBuffer = await new Response( + delimStream.readable + ).arrayBuffer(); + chunks.push(delimBuffer); + + const fileBuffer = await new Response(compressedStream).arrayBuffer(); + chunks.push(fileBuffer); + } catch (err) { + console.error(`Error processing file ${fileName}: `, err); + } + } + + for (const inlineSrcMap of inlineScripts) { + try { + const inlineHash = inlineSrcMap.keys().next().value; + const inlineSrc = inlineSrcMap.values().next().value; + const delim = + delimPrefix + 'Inline Script ' + inlineHash + delimSuffix; + const encodedDelim = enc.encode(delim); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const delimStream = new window.CompressionStream('gzip'); + const delimWriter = delimStream.writable.getWriter(); + delimWriter.write(encodedDelim); + delimWriter.close(); + const delimBuffer = await new Response( + delimStream.readable + ).arrayBuffer(); + chunks.push(delimBuffer); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const inlineStream = new window.CompressionStream('gzip'); + const writer = inlineStream.writable.getWriter(); + writer.write(enc.encode(inlineSrc)); + writer.close(); + const inlineBuffer = await new Response( + inlineStream.readable + ).arrayBuffer(); + chunks.push(inlineBuffer); + } catch (err) { + console.error(`Error processing inline script: `, err); + } + } + + const combinedBuffer = new Blob(chunks, { type: 'application/gzip' }); + + const url = URL.createObjectURL(combinedBuffer); + const link = document.createElement('a'); + link.href = url; + link.download = 'meta_source_files.gz'; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + URL.revokeObjectURL(url); + } + } catch (err) { + console.error('Error in downloadJSToZip: ', err); + } +} + +chrome.runtime.onMessage.addListener(function (request) { + if (request.greeting === 'downloadSource' && DOWNLOAD_JS_ENABLED) { + downloadJSToZip(request.greeting); + } else if (request.greeting === 'nocacheHeaderFound') { + updateCurrentState(STATES.INVALID); + } +}); + +function parseFailedJson(queuedJsonToParse) { + try { + JSON.parse(queuedJsonToParse.node.textContent); + } catch (parseError) { + if (queuedJsonToParse.retry > 0) { + queuedJsonToParse.retry--; + setTimeout(() => parseFailedJson(queuedJsonToParse), 20); + } else { + updateCurrentState(STATES.INVALID); + } + } +} + +function isPathnameExcluded(excludedPathnames) { + let pathname = location.pathname; + if (!pathname.endsWith('/')) { + pathname = pathname + '/'; + } + return excludedPathnames.some(rule => { + if (typeof rule === 'string') { + return pathname === rule; + } else { + const match = pathname.match(rule); + return match != null && match[0] === pathname; + } + }); +} + +export function startFor(origin, excludedPathnames = []) { + chrome.runtime + .sendMessage({ + type: MESSAGE_TYPE.CONTENT_SCRIPT_START, + origin, + }) + .then(resp => { + if ( + [ORIGIN_TYPE.FACEBOOK, ORIGIN_TYPE.MESSENGER].includes( + currentOrigin as 'FACEBOOK' | 'MESSENGER' + ) + ) { + checkCSPHeaders(resp.cspHeader, resp.cspReportHeader); + } + }); + if (isPathnameExcluded(excludedPathnames)) { + updateCurrentState(STATES.IGNORE); + return; + } + let isUserLoggedIn = false; + if ([ORIGIN_TYPE.FACEBOOK, ORIGIN_TYPE.MESSENGER].includes(origin)) { + const cookies = document.cookie.split(';'); + cookies.forEach(cookie => { + const pair = cookie.split('='); + // c_user contains the user id of the user logged in + if (pair[0].indexOf('c_user') >= 0) { + isUserLoggedIn = true; + } + }); + } else { + // only doing this check for FB and MSGR + isUserLoggedIn = true; + } + if (isUserLoggedIn) { + updateCurrentState(STATES.PROCESSING); + currentOrigin = origin; + scanForScripts(); + // set the timeout once, in case there's an iframe and contentUtils sets another manifest timer + if (manifestTimeoutID === '') { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + manifestTimeoutID = setTimeout(() => { + // Manifest failed to load, flag a warning to the user. + updateCurrentState(STATES.TIMEOUT); + }, 45000); + } + } +} diff --git a/packages/apps/meta-code-verify/src/js/detectKvstoreMeta.ts b/packages/apps/meta-code-verify/src/js/detectKvstoreMeta.ts new file mode 100644 index 0000000000..8e6e5b0b41 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/detectKvstoreMeta.ts @@ -0,0 +1,11 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { ORIGIN_TYPE } from './config'; +import { startFor } from './contentUtils.js'; + +startFor(ORIGIN_TYPE.KVSTORE); diff --git a/packages/apps/meta-code-verify/src/js/popup.ts b/packages/apps/meta-code-verify/src/js/popup.ts new file mode 100644 index 0000000000..fc57b75d25 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/popup.ts @@ -0,0 +1,355 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { + DOWNLOAD_JS_ENABLED, + MESSAGE_TYPE, + ORIGIN_TYPE, + STATES, + KNOWN_EXTENSION_HASHES_MAP, +} from './config.js'; + +const STATE_TO_POPUP_STATE = { + [STATES.START]: 'loading', + [STATES.PROCESSING]: 'loading', + [STATES.IGNORE]: 'loading', + [STATES.INVALID]: 'error', + [STATES.RISK]: 'warning_risk', + [STATES.VALID]: 'valid', + [STATES.TIMEOUT]: 'warning_timeout', +}; + +const ORIGIN_TO_LEARN_MORE_PAGES = { + [ORIGIN_TYPE.FACEBOOK]: { + about: chrome.i18n.getMessage('about_code_verify_faq_url_fb'), + failure: chrome.i18n.getMessage('validation_failure_faq_url_fb'), + risk: chrome.i18n.getMessage('possible_risk_detected_faq_url_fb'), + timeout: chrome.i18n.getMessage('network_timeout_faq_url_fb'), + }, + [ORIGIN_TYPE.MESSENGER]: { + about: chrome.i18n.getMessage('about_code_verify_faq_url_msgr'), + failure: chrome.i18n.getMessage('validation_failure_faq_url_msgr'), + risk: chrome.i18n.getMessage('possible_risk_detected_faq_url_msgr'), + timeout: chrome.i18n.getMessage('network_timeout_faq_url_msgr'), + }, + [ORIGIN_TYPE.WHATSAPP]: { + about: chrome.i18n.getMessage('about_code_verify_faq_url_wa'), + failure: chrome.i18n.getMessage('validation_failure_faq_url_wa'), + risk: chrome.i18n.getMessage('possible_risk_detected_faq_url_wa'), + timeout: chrome.i18n.getMessage('network_timeout_faq_url_wa'), + }, + [ORIGIN_TYPE.KVSTORE]: { + about: chrome.i18n.getMessage('about_code_verify_faq_url_wa'), + failure: chrome.i18n.getMessage('validation_failure_faq_url_wa'), + risk: chrome.i18n.getMessage('possible_risk_detected_faq_url_wa'), + timeout: chrome.i18n.getMessage('network_timeout_faq_url_wa'), + }, +}; + +// doing this so we can add support for i18n using messages.json +function attachTextToHtml() { + const i18nElements = document.querySelectorAll(`[id^="i18n"]`); + Array.from(i18nElements).forEach(element => { + element.innerHTML = chrome.i18n.getMessage(element.id); + }); +} +function shortenString(str, startLength, endLength) { + return str.substr(0, startLength) + '...' + str.substr(-endLength); +} +async function handleBoth(what, key) { + const { disallow } = await chrome.storage.local.get('disallow'); + const { allowlist } = await chrome.storage.local.get('allowlist'); + const disallowMap = new Map(Object.entries(disallow || {})); + const allowMap = new Map(Object.entries(allowlist || {})); + if (what === 'disallow') { + allowMap.set(key, disallowMap.get(key)); + disallowMap.delete(key); + await chrome.storage.local.set({ + disallow: Object.fromEntries(disallowMap), + }); + await chrome.storage.local.set({ + allowlist: Object.fromEntries(allowMap), + }); + chrome.tabs.query({ active: true, currentWindow: true }, tabs => { + const activeTab = tabs[0]; + chrome.tabs.reload(activeTab.id); + }); + } else { + console.log(disallowMap.entries()); + disallowMap.set(key, allowMap.get(key)); + allowMap.delete(key); + await chrome.storage.local.set({ + disallow: Object.fromEntries(disallowMap), + }); + await chrome.storage.local.set({ + allowlist: Object.fromEntries(allowMap), + }); + chrome.tabs.query({ active: true, currentWindow: true }, tabs => { + const activeTab = tabs[0]; + chrome.tabs.reload(activeTab.id); + }); + } + + await whatTable(); +} +function getExtensionName(extensionId) { + return new Promise((resolve, reject) => { + chrome.management.get(extensionId, extensionInfo => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError.message); + } else { + resolve(extensionInfo.name); + } + }); + }); +} +async function attachTable(data, what) { + // Create the table element + const table = document.createElement('table'); + table.style.border = '1px solid black'; + table.style.borderCollapse = 'collapse'; + + // Create the header row + const headerRow = document.createElement('tr'); + + const headers = ['link/hash', 'src', 'extension name', 'source code', what]; + headers.forEach(headerText => { + const th = document.createElement('th'); + th.style.border = '1px solid black'; + th.style.padding = '5px'; + th.textContent = headerText; + headerRow.appendChild(th); + }); + + table.appendChild(headerRow); + + // Create table rows + for (const key in data) { + const row = document.createElement('tr'); + const { type, src, rawjs } = data[key]; + + // Key cell + const keyCell = document.createElement('td'); + keyCell.style.border = '1px solid black'; + keyCell.style.padding = '5px'; + keyCell.textContent = shortenString(key, 3, 3); + row.appendChild(keyCell); + + // Src cell + const srcCell = document.createElement('td'); + srcCell.style.border = '1px solid black'; + srcCell.style.padding = '5px'; + const regex = /# sourceURL=(.*\.js)\b/; + const result = rawjs ? rawjs.match(regex) : ''; + srcCell.textContent = + type !== 'raw_js' && src ? src : result && result[1] ? result[1] : ''; + row.appendChild(srcCell); + + const extensionCell = document.createElement('td'); + extensionCell.style.border = '1px solid black'; + extensionCell.style.padding = '5px'; + const regex1 = /chrome-extension:\/\/([^/]+)\//; + const result1 = result ? result[1].match(regex1) : ''; + extensionCell.textContent = + result1.length > 1 + ? ((await getExtensionName(result1[1])) as string) + : KNOWN_EXTENSION_HASHES_MAP.has(key) + ? KNOWN_EXTENSION_HASHES_MAP.get(key) + : ''; + row.appendChild(extensionCell); + + // Source code cell + const sourceCodeCell = document.createElement('td'); + sourceCodeCell.style.border = '1px solid black'; + sourceCodeCell.style.padding = '5px'; + const aCell = document.createElement('a'); + const textBlob = new Blob([rawjs ? rawjs : ''], { + type: 'text/plain', + }); + const textUrl = URL.createObjectURL(textBlob); + aCell.href = textUrl; + aCell.textContent = + type.toLowerCase() === 'raw_js' && rawjs ? 'source code' : ''; + aCell.target = '_blank'; + sourceCodeCell.appendChild(aCell); + row.appendChild(sourceCodeCell); + const allowDisallowCell = document.createElement('td'); + allowDisallowCell.style.border = '1px solid black'; + allowDisallowCell.style.padding = '5px'; + const allowACell = document.createElement('a'); + allowACell.href = '#'; + allowACell.textContent = what; + allowACell.addEventListener('click', () => + handleBoth(what === 'allow' ? 'disallow' : 'allow', key) + ); + allowDisallowCell.appendChild(allowACell); + row.appendChild(allowDisallowCell); + table.appendChild(row); + } + + // Add table to the document + const disallowDiv = document.getElementById( + what === 'allow' ? 'disallow' : 'allow' + ); + disallowDiv.innerHTML = ''; + disallowDiv.appendChild(table); +} +async function whatTable() { + const { disallow } = await chrome.storage.local.get('disallow'); + const { allowlist } = await chrome.storage.local.get('allowlist'); + attachTable(disallow, 'allow'); + attachTable(allowlist, 'disallow'); +} +function attachListeners(origin) { + if (!(origin in ORIGIN_TO_LEARN_MORE_PAGES)) { + throw new Error( + `Learn more pages for origin type: ${origin} do not exist!` + ); + } + const learnMoreUrls = ORIGIN_TO_LEARN_MORE_PAGES[origin]; + + const menuButtonList = document.getElementsByClassName('menu'); + Array.from(menuButtonList).forEach(menuButton => { + menuButton.addEventListener('click', () => updateDisplay('menu')); + }); + + const closeMenuButton = document.getElementById('close_menu'); + closeMenuButton.addEventListener('click', () => window.close()); + + const menuRowList = document.getElementsByClassName('menu_row'); + menuRowList[0].addEventListener('click', async _evt => { + whatTable(); + updateDisplay('allowlist'); + }); + (menuRowList[0] as HTMLElement).style.cursor = 'pointer'; + menuRowList[1].addEventListener('click', _evt => { + chrome.tabs.create({ url: learnMoreUrls.about }); + }); + (menuRowList[1] as HTMLElement).style.cursor = 'pointer'; + + const downloadTextList = document.getElementsByClassName( + 'status_message_highlight' + ); + const downloadSrcButton = document.getElementById('i18nDownloadSourceButton'); + + if (DOWNLOAD_JS_ENABLED) { + menuRowList[2].addEventListener('click', () => updateDisplay('download')); + (menuRowList[2] as HTMLElement).style.cursor = 'pointer'; + + downloadTextList[0].addEventListener('click', () => { + chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { + chrome.tabs.sendMessage( + tabs[0].id, + { greeting: 'downloadMove' }, + () => {} + ); + }); + }); + (downloadTextList[0] as HTMLElement).style.cursor = 'pointer'; + + downloadSrcButton.onclick = () => { + chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { + chrome.tabs.sendMessage( + tabs[0].id, + { greeting: 'downloadSource' }, + () => {} + ); + }); + }; + + downloadSrcButton.style.cursor = 'pointer'; + + downloadTextList[0].addEventListener('click', () => + updateDisplay('download') + ); + (downloadTextList[0] as HTMLElement).style.cursor = 'pointer'; + } else { + menuRowList[1].remove(); + downloadTextList[0].remove(); + const downloadMessagePartTwo = document.getElementById( + 'i18nValidationFailureStatusMessagePartTwo' + ); + if (downloadMessagePartTwo != null) { + downloadMessagePartTwo.remove(); + } + downloadSrcButton.remove(); + } + + const learnMoreList = document.getElementsByClassName( + 'anomaly_learn_more_button' + ); + learnMoreList[0].addEventListener('click', () => { + chrome.tabs.create({ url: learnMoreUrls.failure }); + }); + (learnMoreList[0] as HTMLElement).style.cursor = 'pointer'; + + const riskLearnMoreList = document.getElementsByClassName( + 'risk_learn_more_button' + ); + riskLearnMoreList[0].addEventListener('click', () => { + chrome.tabs.create({ url: learnMoreUrls.risk }); + }); + (riskLearnMoreList[0] as HTMLElement).style.cursor = 'pointer'; + + const retryButtonList = document.getElementsByClassName('retry_button'); + Array.from(retryButtonList).forEach(retryButton => { + retryButton.addEventListener('click', () => { + chrome.tabs.reload(); + }); + (retryButton as HTMLElement).style.cursor = 'pointer'; + }); + + const timeoutLearnMoreList = document.getElementsByClassName( + 'timeout_learn_more_button' + ); + timeoutLearnMoreList[0].addEventListener('click', () => { + chrome.tabs.create({ url: learnMoreUrls.timeout }); + }); + (timeoutLearnMoreList[0] as HTMLElement).style.cursor = 'pointer'; +} + +function updateDisplay(state) { + const popupState = STATE_TO_POPUP_STATE[state] || state; + Array.from(document.getElementsByClassName('state_boundary')).forEach( + element => { + if (element.id == popupState) { + (element as HTMLElement).style.display = 'flex'; + document.body.className = popupState + '_body'; + } else { + (element as HTMLElement).style.display = 'none'; + } + } + ); +} + +function setUpBackgroundMessageHandler(tabId) { + if (tabId == null || tabId.trim() === '') { + console.error('[Popup] No tab_id query param', document.location); + return; + } + chrome.runtime.onMessage.addListener(message => { + if (!('type' in message)) { + return; + } + if ( + message.type === MESSAGE_TYPE.STATE_UPDATED && + message.tabId.toString() === tabId + ) { + updateDisplay(message.state); + } + }); +} + +function loadUp() { + const params = new URL(document.location.href).searchParams; + setUpBackgroundMessageHandler(params.get('tab_id')); + updateDisplay(params.get('state')); + attachTextToHtml(); + attachListeners(params.get('origin')); +} + +loadUp(); diff --git a/packages/apps/meta-code-verify/src/js/tab_state_tracker/FrameStateMachine.ts b/packages/apps/meta-code-verify/src/js/tab_state_tracker/FrameStateMachine.ts new file mode 100644 index 0000000000..468e1ffd93 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/tab_state_tracker/FrameStateMachine.ts @@ -0,0 +1,21 @@ +import StateMachine from './StateMachine'; +import TabStateMachine from './TabStateMachine'; + +/** + * Tracks the extension's state for each frame. It'll notify the overall tab's + * state machine of any changes. The tab may or may not choose to apply those + * changes based on the current states of the rest of its frames + * (see TabStateMachine.ts). + */ +export default class FrameStateMachine extends StateMachine { + private _tabStateMachine: TabStateMachine; + + constructor(tabStateMachine: TabStateMachine) { + super(); + this._tabStateMachine = tabStateMachine; + } + + onStateUpdated() { + this._tabStateMachine.updateStateIfValid(this.getState()); + } +} diff --git a/packages/apps/meta-code-verify/src/js/tab_state_tracker/StateMachine.ts b/packages/apps/meta-code-verify/src/js/tab_state_tracker/StateMachine.ts new file mode 100644 index 0000000000..62120c3c85 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/tab_state_tracker/StateMachine.ts @@ -0,0 +1,101 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { State, STATES } from '../config'; + +// Table of possible transitions from one state to another. The entries for +// each transition can be: +// (a) a boolean indicating if the transition to that state is valid +// (b) another state to transition to should a transition to the 'from' state +// is attempted. +const STATE_TRANSITIONS: Partial<{ + [key in State]: Partial<{ [key in State]: boolean | State }>; +}> = { + [STATES.START]: { + [STATES.START]: true, + [STATES.PROCESSING]: true, + [STATES.IGNORE]: true, + }, + [STATES.PROCESSING]: { + [STATES.PROCESSING]: true, + [STATES.INVALID]: true, + [STATES.RISK]: true, + [STATES.VALID]: true, + [STATES.TIMEOUT]: true, + }, + [STATES.IGNORE]: { + [STATES.IGNORE]: true, + [STATES.INVALID]: true, + // Attempting to go from IGNORE to anything other than INVALID is bad and + // should send you to an INVALID state. Either all frames in the tab are + // being checked to some extent, or all should be ignored by the extension. + // Nothing in between. + [STATES.START]: STATES.INVALID, + [STATES.PROCESSING]: STATES.INVALID, + [STATES.RISK]: STATES.INVALID, + [STATES.VALID]: STATES.INVALID, + [STATES.TIMEOUT]: STATES.INVALID, + }, + [STATES.INVALID]: { + [STATES.INVALID]: true, + }, + [STATES.RISK]: { + [STATES.RISK]: true, + }, + [STATES.VALID]: { + [STATES.VALID]: true, + [STATES.PROCESSING]: true, + [STATES.INVALID]: true, + [STATES.IGNORE]: STATES.INVALID, + }, + [STATES.TIMEOUT]: { + [STATES.TIMEOUT]: true, + }, +}; + +/** + * State machine that transitions through the states listed above. This is used + * to track the extension's state of the overall tab, and for individual frames + * within that tab. + */ +export default class StateMachine { + private _state: State; + constructor() { + this._state = STATES.START; + } + + getState() { + return this._state; + } + + updateStateIfValid(newState: State) { + // You messed up. + if (!(newState in STATES)) { + console.error('State', newState, 'does not exist!'); + this._setState(STATES.INVALID); + return; + } + + const skipState = STATE_TRANSITIONS[this._state][newState]; + if (typeof skipState === 'string') { + this.updateStateIfValid(skipState); + return; + } else if (skipState) { + this._setState(newState); + } + } + + _setState(newState: State) { + const oldState = this._state; + this._state = newState; + if (oldState !== newState) { + this.onStateUpdated(); + } + } + + onStateUpdated() {} +} diff --git a/packages/apps/meta-code-verify/src/js/tab_state_tracker/TabStateMachine.ts b/packages/apps/meta-code-verify/src/js/tab_state_tracker/TabStateMachine.ts new file mode 100644 index 0000000000..867cf4f9d2 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/tab_state_tracker/TabStateMachine.ts @@ -0,0 +1,90 @@ +import { + MESSAGE_TYPE, + Origin, + State, + STATES, + STATES_TO_ICONS, +} from '../config'; + +import StateMachine from './StateMachine'; +import FrameStateMachine from './FrameStateMachine'; + +function getChromeV3Action() { + if (self.chrome.runtime.getManifest().manifest_version >= 3) { + return self.chrome.action; + } else { + return { + setIcon: self.chrome.pageAction.setIcon, + enable: self.chrome.pageAction.show, + disable: self.chrome.pageAction.hide, + setPopup: self.chrome.pageAction.setPopup, + }; + } +} + +/** + * Tracks the extension's state based on the states of the individual frames + * in it. + */ +export default class TabStateMachine extends StateMachine { + private _tabId: number; + private _origin: Origin; + private _frameStates: { [key: number]: FrameStateMachine }; + + constructor(tabId: number, origin: Origin) { + super(); + this._tabId = tabId; + this._origin = origin; + this._frameStates = {}; + } + + addFrameStateMachine(frameId: number) { + this._frameStates[frameId] = new FrameStateMachine(this); + } + + updateStateForFrame(frameId: number, newState: State): void { + if (!(frameId in this._frameStates)) { + throw new Error( + `State machine for frame: ${frameId} does not exist for tab: ${this._tabId}` + ); + } + this._frameStates[frameId].updateStateIfValid(newState); + } + + updateStateIfValid(newState: State) { + // Only update the tab's state to VALID if all of it's frames are VALID + if ( + newState === STATES.VALID && + !Object.values(this._frameStates).every( + fsm => fsm.getState() === STATES.VALID + ) + ) { + return; + } + super.updateStateIfValid(newState); + } + + onStateUpdated() { + const state = this.getState(); + const chromeAction = getChromeV3Action(); + chromeAction.setIcon({ + tabId: this._tabId, + path: STATES_TO_ICONS[state], + }); + if (state === STATES.IGNORE || state === STATES.START) { + chromeAction.disable(this._tabId); + } else { + chromeAction.enable(this._tabId); + chromeAction.setPopup({ + tabId: this._tabId, + popup: `popup.html?tab_id=${this._tabId}&state=${state}&origin=${this._origin}`, + }); + // Broadcast state update for relevant popup to update its contents. + chrome.runtime.sendMessage({ + type: MESSAGE_TYPE.STATE_UPDATED, + tabId: this._tabId, + state, + }); + } + } +} diff --git a/packages/apps/meta-code-verify/src/js/tab_state_tracker/tabStateTracker.ts b/packages/apps/meta-code-verify/src/js/tab_state_tracker/tabStateTracker.ts new file mode 100644 index 0000000000..e7594132a2 --- /dev/null +++ b/packages/apps/meta-code-verify/src/js/tab_state_tracker/tabStateTracker.ts @@ -0,0 +1,50 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { Origin, State } from '../config'; +import TabStateMachine from './TabStateMachine'; + +const tabStateTracker = new Map(); +if (typeof chrome !== 'undefined') { + chrome.tabs.onRemoved.addListener((tabId: number, _removeInfo) => { + tabStateTracker.delete(tabId); + }); + chrome.tabs.onReplaced.addListener((_addedTabId, removedTabId: number) => { + tabStateTracker.delete(removedTabId); + }); +} + +function getOrCreateTabStateMachine(tabId: number, origin: Origin) { + if (!tabStateTracker.has(tabId)) { + tabStateTracker.set(tabId, new TabStateMachine(tabId, origin)); + } + return tabStateTracker.get(tabId); +} + +export function recordContentScriptStart( + sender: chrome.runtime.MessageSender, + origin: Origin +) { + // This is a top-level frame initializing + if (sender.frameId === 0) { + tabStateTracker.delete(sender.tab.id); + } + getOrCreateTabStateMachine(sender.tab.id, origin).addFrameStateMachine( + sender.frameId + ); +} + +export function updateContentScriptState( + sender: chrome.runtime.MessageSender, + newState: State, + origin: Origin +) { + getOrCreateTabStateMachine(sender.tab.id, origin).updateStateForFrame( + sender.frameId, + newState + ); +} diff --git a/packages/apps/meta-code-verify/tsconfig.json b/packages/apps/meta-code-verify/tsconfig.json new file mode 100644 index 0000000000..dabba1e8b0 --- /dev/null +++ b/packages/apps/meta-code-verify/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "esModuleInterop": true + } +} \ No newline at end of file diff --git a/packages/apps/meta-code-verify/vitest.config.ts b/packages/apps/meta-code-verify/vitest.config.ts new file mode 100644 index 0000000000..b64dcfbaa9 --- /dev/null +++ b/packages/apps/meta-code-verify/vitest.config.ts @@ -0,0 +1,14 @@ +// vite.config.ts + +import {defineConfig, UserConfigExport} from "vite"; + +export default defineConfig({ + test: { + globals: true, + environment: 'happy-dom', + setupFiles: './vitest.setup.ts', + coverage: { + reporter: ['text', 'json', 'html'], + }, + } , +} as UserConfigExport ) \ No newline at end of file diff --git a/packages/apps/meta-code-verify/vitest.setup.ts b/packages/apps/meta-code-verify/vitest.setup.ts new file mode 100644 index 0000000000..5649d61627 --- /dev/null +++ b/packages/apps/meta-code-verify/vitest.setup.ts @@ -0,0 +1,103 @@ +// vitest.setup.ts + +import { vi } from 'vitest'; + +declare global { + interface Window { + crypto: { + subtle: SubtleCrypto & { + digest: (algorithm: AlgorithmIdentifier, data: BufferSource) => Promise; + }; + getRandomValues: Crypto['getRandomValues']; + randomUUID: Crypto['randomUUID']; + }; + } + + // ... (the rest of the global declarations) +} + +window.chrome = { + browserAction: { + setIcon: vi.fn(), + setPopup: vi.fn(), + } as any, + storage: { + local: { + get: vi.fn(), + set: vi.fn(), + } as any, + } as any, + tabs: { + onRemoved: { + addListener: vi.fn(), + hasListener: vi.fn(), + removeListener: vi.fn(), + addRules: vi.fn(), + getRules: vi.fn(), + removeRules: vi.fn(), + } as any, + onReplaced: { + addListener: vi.fn(), + hasListener: vi.fn(), + removeListener: vi.fn(), + addRules: vi.fn(), + getRules: vi.fn(), + removeRules: vi.fn(), + } as any, + } as any, + webRequest: { + onResponseStarted: { + addListener: vi.fn(), + hasListener: vi.fn(), + removeListener: vi.fn(), + addRules: vi.fn(), + getRules: vi.fn(), + removeRules: vi.fn(), + } as any, + onHeadersReceived: { + addListener: vi.fn(), + hasListener: vi.fn(), + removeListener: vi.fn(), + addRules: vi.fn(), + getRules: vi.fn(), + removeRules: vi.fn(), + } as any, + } as any, + runtime: { + onMessage: { + addListener: vi.fn(), + hasListener: vi.fn(), + removeListener: vi.fn(), + addRules: vi.fn(), + getRules: vi.fn(), + removeRules: vi.fn(), + } as any, + onInstalled: { + addListener: vi.fn(), + hasListener: vi.fn(), + removeListener: vi.fn(), + addRules: vi.fn(), + getRules: vi.fn(), + removeRules: vi.fn(), + } as any, + sendMessage: vi.fn(), + } as any, +} as any; + +globalThis.crypto = { + subtle: { + digest: (algorithm: AlgorithmIdentifier, data: BufferSource) => Promise, + }, + getRandomValues: (array: T): T => { + // Provide an implementation for getRandomValues + return array; // For now, return the input array (you should replace it with the actual implementation) + }, + randomUUID: (): string => { + // Provide an implementation for randomUUID + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { + const r = Math.random() * 16 | 0, + v = c === 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + }, +} as unknown as Window['crypto']; diff --git a/yarn.lock b/yarn.lock index 2eacc5d92c..666cf09bfe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34,6 +34,13 @@ dependencies: tslib "^2.3.1" +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" @@ -41,11 +48,44 @@ dependencies: "@babel/highlight" "^7.18.6" +"@babel/code-frame@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298" integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== +"@babel/compat-data@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" + integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== + +"@babel/core@^7.1.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" + integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" + "@babel/helper-compilation-targets" "^7.21.4" + "@babel/helper-module-transforms" "^7.21.2" + "@babel/helpers" "^7.21.0" + "@babel/parser" "^7.21.4" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.4" + "@babel/types" "^7.21.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.20.12", "@babel/core@^7.20.2": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13" @@ -86,6 +126,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" + integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== + dependencies: + "@babel/types" "^7.21.4" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" @@ -112,6 +162,17 @@ lru-cache "^5.1.1" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" + integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== + dependencies: + "@babel/compat-data" "^7.21.4" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz#64f49ecb0020532f19b1d014b03bccaa1ab85fb9" @@ -290,7 +351,7 @@ "@babel/traverse" "^7.21.0" "@babel/types" "^7.21.0" -"@babel/highlight@^7.18.6": +"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== @@ -304,6 +365,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== +"@babel/parser@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" + integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" @@ -736,7 +802,7 @@ "@babel/helper-module-transforms" "^7.20.11" "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-modules-commonjs@^7.19.6": +"@babel/plugin-transform-modules-commonjs@^7.19.6", "@babel/plugin-transform-modules-commonjs@^7.21.2": version "7.21.2" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7" integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== @@ -1084,6 +1150,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" + integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.21.4" + "@babel/types" "^7.21.4" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.16.8", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.21.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" @@ -1093,6 +1175,15 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" +"@babel/types@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" + integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + "@bcherny/json-schema-ref-parser@10.0.5-fork": version "10.0.5-fork" resolved "https://registry.yarnpkg.com/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-10.0.5-fork.tgz#9b5e1e7e07964ea61840174098e634edbe8197bc" @@ -1293,6 +1384,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.11.tgz#52c3e6cabc19c5e4c1c0c01cb58f0442338e1c14" integrity sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg== +"@esbuild/android-arm64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.17.tgz#164b054d58551f8856285f386e1a8f45d9ba3a31" + integrity sha512-jaJ5IlmaDLFPNttv0ofcwy/cfeY4bh/n705Tgh+eLObbGtQBK3EPAu+CzL95JVE4nFAliyrnEu0d32Q5foavqg== + "@esbuild/android-arm@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" @@ -1303,6 +1399,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.11.tgz#f3fc768235aecbeb840d0049fdf13cd28592105f" integrity sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw== +"@esbuild/android-arm@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.17.tgz#1b3b5a702a69b88deef342a7a80df4c894e4f065" + integrity sha512-E6VAZwN7diCa3labs0GYvhEPL2M94WLF8A+czO8hfjREXxba8Ng7nM5VxV+9ihNXIY1iQO1XxUU4P7hbqbICxg== + "@esbuild/android-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" @@ -1313,6 +1414,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.11.tgz#443ed47771a7e917e4282469ba350d117473550c" integrity sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ== +"@esbuild/android-x64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.17.tgz#6781527e3c4ea4de532b149d18a2167f06783e7f" + integrity sha512-446zpfJ3nioMC7ASvJB1pszHVskkw4u/9Eu8s5yvvsSDTzYh4p4ZIRj0DznSl3FBF0Z/mZfrKXTtt0QCoFmoHA== + "@esbuild/darwin-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" @@ -1323,6 +1429,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.11.tgz#0e8c78d94d5759a48521dbfd83189d2ed3499a16" integrity sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw== +"@esbuild/darwin-arm64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.17.tgz#c5961ef4d3c1cc80dafe905cc145b5a71d2ac196" + integrity sha512-m/gwyiBwH3jqfUabtq3GH31otL/0sE0l34XKpSIqR7NjQ/XHQ3lpmQHLHbG8AHTGCw8Ao059GvV08MS0bhFIJQ== + "@esbuild/darwin-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" @@ -1333,6 +1444,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.11.tgz#2405cfdf70eb961c7cf973463ca7263dc2004c88" integrity sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw== +"@esbuild/darwin-x64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.17.tgz#b81f3259cc349691f67ae30f7b333a53899b3c20" + integrity sha512-4utIrsX9IykrqYaXR8ob9Ha2hAY2qLc6ohJ8c0CN1DR8yWeMrTgYFjgdeQ9LIoTOfLetXjuCu5TRPHT9yKYJVg== + "@esbuild/freebsd-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" @@ -1343,6 +1459,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.11.tgz#d5138e873e15f87bd4564c024dfa00ef37e623fd" integrity sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q== +"@esbuild/freebsd-arm64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.17.tgz#db846ad16cf916fd3acdda79b85ea867cb100e87" + integrity sha512-4PxjQII/9ppOrpEwzQ1b0pXCsFLqy77i0GaHodrmzH9zq2/NEhHMAMJkJ635Ns4fyJPFOlHMz4AsklIyRqFZWA== + "@esbuild/freebsd-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" @@ -1353,6 +1474,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.11.tgz#e850b58b8fabf8e9ef0e125af3c25229ad2d6c38" integrity sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g== +"@esbuild/freebsd-x64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.17.tgz#4dd99acbaaba00949d509e7c144b1b6ef9e1815b" + integrity sha512-lQRS+4sW5S3P1sv0z2Ym807qMDfkmdhUYX30GRBURtLTrJOPDpoU0kI6pVz1hz3U0+YQ0tXGS9YWveQjUewAJw== + "@esbuild/linux-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" @@ -1363,6 +1489,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.11.tgz#2bfb93d0809ec2357c12ebb27736b750c9ae0aa5" integrity sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg== +"@esbuild/linux-arm64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.17.tgz#7f9274140b2bb9f4230dbbfdf5dc2761215e30f6" + integrity sha512-2+pwLx0whKY1/Vqt8lyzStyda1v0qjJ5INWIe+d8+1onqQxHLLi3yr5bAa4gvbzhZqBztifYEu8hh1La5+7sUw== + "@esbuild/linux-arm@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" @@ -1373,6 +1504,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.11.tgz#e56fb3b76828317a704f4a167c5bd790fe5314e7" integrity sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg== +"@esbuild/linux-arm@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.17.tgz#5c8e44c2af056bb2147cf9ad13840220bcb8948b" + integrity sha512-biDs7bjGdOdcmIk6xU426VgdRUpGg39Yz6sT9Xp23aq+IEHDb/u5cbmu/pAANpDB4rZpY/2USPhCA+w9t3roQg== + "@esbuild/linux-ia32@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" @@ -1383,6 +1519,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.11.tgz#59fa1c49b271793d14eb5effc757e8c0d0cb2cab" integrity sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA== +"@esbuild/linux-ia32@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.17.tgz#18a6b3798658be7f46e9873fa0c8d4bec54c9212" + integrity sha512-IBTTv8X60dYo6P2t23sSUYym8fGfMAiuv7PzJ+0LcdAndZRzvke+wTVxJeCq4WgjppkOpndL04gMZIFvwoU34Q== + "@esbuild/linux-loong64@0.14.54": version "0.14.54" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" @@ -1398,6 +1539,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.11.tgz#89575bc189099c03a36daa54f3f481780c7fd502" integrity sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g== +"@esbuild/linux-loong64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.17.tgz#a8d93514a47f7b4232716c9f02aeb630bae24c40" + integrity sha512-WVMBtcDpATjaGfWfp6u9dANIqmU9r37SY8wgAivuKmgKHE+bWSuv0qXEFt/p3qXQYxJIGXQQv6hHcm7iWhWjiw== + "@esbuild/linux-mips64el@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" @@ -1408,6 +1554,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.11.tgz#0e18ca039dc7e4645efd8edc1b10952933eb6b1b" integrity sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw== +"@esbuild/linux-mips64el@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.17.tgz#4784efb1c3f0eac8133695fa89253d558149ee1b" + integrity sha512-2kYCGh8589ZYnY031FgMLy0kmE4VoGdvfJkxLdxP4HJvWNXpyLhjOvxVsYjYZ6awqY4bgLR9tpdYyStgZZhi2A== + "@esbuild/linux-ppc64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" @@ -1418,6 +1569,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.11.tgz#2d152cb3a253afb8c100a165ad132dc96f36cb11" integrity sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA== +"@esbuild/linux-ppc64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.17.tgz#ef6558ec5e5dd9dc16886343e0ccdb0699d70d3c" + integrity sha512-KIdG5jdAEeAKogfyMTcszRxy3OPbZhq0PPsW4iKKcdlbk3YE4miKznxV2YOSmiK/hfOZ+lqHri3v8eecT2ATwQ== + "@esbuild/linux-riscv64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" @@ -1428,6 +1584,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.11.tgz#c6ac494a81221d53d65b33e665c7df1747952d3c" integrity sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA== +"@esbuild/linux-riscv64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.17.tgz#13a87fdbcb462c46809c9d16bcf79817ecf9ce6f" + integrity sha512-Cj6uWLBR5LWhcD/2Lkfg2NrkVsNb2sFM5aVEfumKB2vYetkA/9Uyc1jVoxLZ0a38sUhFk4JOVKH0aVdPbjZQeA== + "@esbuild/linux-s390x@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" @@ -1438,6 +1599,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.11.tgz#4bad33894bc7415cea4be8fa90fe456226a424ad" integrity sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ== +"@esbuild/linux-s390x@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.17.tgz#83cb16d1d3ac0dca803b3f031ba3dc13f1ec7ade" + integrity sha512-lK+SffWIr0XsFf7E0srBjhpkdFVJf3HEgXCwzkm69kNbRar8MhezFpkIwpk0qo2IOQL4JE4mJPJI8AbRPLbuOQ== + "@esbuild/linux-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" @@ -1448,6 +1614,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.11.tgz#903fda743459f530a16a6c6ee8d2c0f6c1a12fc7" integrity sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw== +"@esbuild/linux-x64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.17.tgz#7bc400568690b688e20a0c94b2faabdd89ae1a79" + integrity sha512-XcSGTQcWFQS2jx3lZtQi7cQmDYLrpLRyz1Ns1DzZCtn898cWfm5Icx/DEWNcTU+T+tyPV89RQtDnI7qL2PObPg== + "@esbuild/netbsd-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" @@ -1458,6 +1629,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.11.tgz#b589239fe7d9b16ee03c5e191f3f5b640f1518a1" integrity sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag== +"@esbuild/netbsd-x64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.17.tgz#1b5dcfbc4bfba80e67a11e9148de836af5b58b6c" + integrity sha512-RNLCDmLP5kCWAJR+ItLM3cHxzXRTe4N00TQyQiimq+lyqVqZWGPAvcyfUBM0isE79eEZhIuGN09rAz8EL5KdLA== + "@esbuild/openbsd-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" @@ -1468,6 +1644,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.11.tgz#b355019754116bef39ec688f8fd2fe6471b9779b" integrity sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w== +"@esbuild/openbsd-x64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.17.tgz#e275098902291149a5dcd012c9ea0796d6b7adff" + integrity sha512-PAXswI5+cQq3Pann7FNdcpSUrhrql3wKjj3gVkmuz6OHhqqYxKvi6GgRBoaHjaG22HV/ZZEgF9TlS+9ftHVigA== + "@esbuild/sunos-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" @@ -1478,6 +1659,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.11.tgz#2ea47fb592e68406e5025a7696dc714fc6a115dc" integrity sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg== +"@esbuild/sunos-x64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.17.tgz#10603474866f64986c0370a2d4fe5a2bb7fee4f5" + integrity sha512-V63egsWKnx/4V0FMYkr9NXWrKTB5qFftKGKuZKFIrAkO/7EWLFnbBZNM1CvJ6Sis+XBdPws2YQSHF1Gqf1oj/Q== + "@esbuild/win32-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" @@ -1488,6 +1674,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.11.tgz#47e6fdab17c4c52e6e0d606dd9cb843b29826325" integrity sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ== +"@esbuild/win32-arm64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.17.tgz#521a6d97ee0f96b7c435930353cc4e93078f0b54" + integrity sha512-YtUXLdVnd6YBSYlZODjWzH+KzbaubV0YVd6UxSfoFfa5PtNJNaW+1i+Hcmjpg2nEe0YXUCNF5bkKy1NnBv1y7Q== + "@esbuild/win32-ia32@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" @@ -1498,6 +1689,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.11.tgz#a97273aa3164c8d8f501899f55cc75a4a79599a3" integrity sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw== +"@esbuild/win32-ia32@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.17.tgz#56f88462ebe82dad829dc2303175c0e0ccd8e38e" + integrity sha512-yczSLRbDdReCO74Yfc5tKG0izzm+lPMYyO1fFTcn0QNwnKmc3K+HdxZWLGKg4pZVte7XVgcFku7TIZNbWEJdeQ== + "@esbuild/win32-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" @@ -1508,6 +1704,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.11.tgz#9be796d93ae27b636da32d960899a4912bca27a1" integrity sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ== +"@esbuild/win32-x64@0.17.17": + version "0.17.17" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.17.tgz#2b577b976e6844106715bbe0cdc57cd1528063f9" + integrity sha512-FNZw7H3aqhF9OyRQbDDnzUApDXfC1N6fgBhkqEO2jvYCJ+DxMTfZVqg3AX0R1khg1wHTBRD5SdcibSJ+XF6bFg== + "@eslint-community/eslint-utils@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz#a831e6e468b4b2b5ae42bf658bea015bf10bc518" @@ -1520,6 +1721,21 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.4.0.tgz#3e61c564fcd6b921cb789838631c5ee44df09403" integrity sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ== +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@eslint/eslintrc@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.1.tgz#7888fe7ec8f21bc26d646dbd2c11cd776e21192d" @@ -1535,11 +1751,31 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" + integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.5.1" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + "@eslint/js@8.36.0": version "8.36.0" resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.36.0.tgz#9837f768c03a1e4a30bd304a64fb8844f0e72efe" integrity sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg== +"@eslint/js@8.38.0": + version "8.38.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.38.0.tgz#73a8a0d8aa8a8e6fe270431c5e72ae91b5337892" + integrity sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g== + "@ethereumjs/common@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" @@ -2231,12 +2467,21 @@ debug "^4.1.1" minimatch "^3.0.5" +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": +"@humanwhocodes/object-schema@^1.2.0", "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== @@ -2289,6 +2534,18 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + "@jest/console@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.5.0.tgz#593a6c5c0d3f75689835f1b3b4688c4f8544cb57" @@ -2301,6 +2558,40 @@ jest-util "^29.5.0" slash "^3.0.0" +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" + micromatch "^4.0.4" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + "@jest/core@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.5.0.tgz#76674b96904484e8214614d17261cc491e5f1f03" @@ -2335,6 +2626,16 @@ slash "^3.0.0" strip-ansi "^6.0.0" +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== + dependencies: + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + "@jest/environment@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.5.0.tgz#9152d56317c1fdb1af389c46640ba74ef0bb4c65" @@ -2360,6 +2661,18 @@ expect "^29.5.0" jest-snapshot "^29.5.0" +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== + dependencies: + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + "@jest/fake-timers@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.5.0.tgz#d4d09ec3286b3d90c60bdcd66ed28d35f1b4dc2c" @@ -2372,6 +2685,15 @@ jest-mock "^29.5.0" jest-util "^29.5.0" +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" + "@jest/globals@^29.3.1", "@jest/globals@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.5.0.tgz#6166c0bfc374c58268677539d0c181f9c1833298" @@ -2382,6 +2704,37 @@ "@jest/types" "^29.5.0" jest-mock "^29.5.0" +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.1.0" + "@jest/reporters@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.5.0.tgz#985dfd91290cd78ddae4914ba7921bcbabe8ac9b" @@ -2419,6 +2772,15 @@ dependencies: "@sinclair/typebox" "^0.25.16" +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.9" + source-map "^0.6.0" + "@jest/source-map@^29.4.3": version "29.4.3" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" @@ -2428,6 +2790,16 @@ callsites "^3.0.0" graceful-fs "^4.2.9" +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== + dependencies: + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + "@jest/test-result@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.5.0.tgz#7c856a6ca84f45cc36926a4e9c6b57f1973f1408" @@ -2438,6 +2810,16 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== + dependencies: + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" + "@jest/test-sequencer@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz#34d7d82d3081abd523dbddc038a3ddcb9f6d3cc4" @@ -2448,6 +2830,27 @@ jest-haste-map "^29.5.0" slash "^3.0.0" +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^27.5.1" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + "@jest/transform@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.5.0.tgz#cf9c872d0965f0cbd32f1458aa44a2b1988b00f9" @@ -2469,6 +2872,17 @@ slash "^3.0.0" write-file-atomic "^4.0.2" +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + "@jest/types@^29.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" @@ -3215,6 +3629,26 @@ resolved "https://registry.yarnpkg.com/@rescript/std/-/std-9.0.0.tgz#df53f3fa5911cb4e85bd66b92e9e58ddf3e4a7e1" integrity sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ== +"@rollup/plugin-commonjs@^24.0.1": + version "24.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-24.1.0.tgz#79e54bd83bb64396761431eee6c44152ef322100" + integrity sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + commondir "^1.0.1" + estree-walker "^2.0.2" + glob "^8.0.3" + is-reference "1.2.1" + magic-string "^0.27.0" + +"@rollup/plugin-eslint@^9.0.3": + version "9.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-eslint/-/plugin-eslint-9.0.3.tgz#f5e8c22d557bef02570e4f1770fb085568ea4b37" + integrity sha512-iV2m9BhPdsjQzmRVe3Nzovrjxbdq5Slva8bvUSzbM4gSBUaGXAFnFXcHcvO4N4tSuirZoY61mkn8KtV3G6o0iQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + eslint "^8.24.0" + "@rollup/plugin-inject@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-5.0.3.tgz#0783711efd93a9547d52971db73b2fb6140a67b1" @@ -3224,6 +3658,34 @@ estree-walker "^2.0.2" magic-string "^0.27.0" +"@rollup/plugin-node-resolve@^15.0.1": + version "15.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.2.tgz#8183a80c2cbf7b471f5ac86b16747997f3b5d185" + integrity sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-builtin-module "^3.2.1" + is-module "^1.0.0" + resolve "^1.22.1" + +"@rollup/plugin-replace@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz#45f53501b16311feded2485e98419acb8448c61d" + integrity sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA== + dependencies: + "@rollup/pluginutils" "^5.0.1" + magic-string "^0.27.0" + +"@rollup/plugin-typescript@^11.0.0": + version "11.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.0.tgz#4dd2a98475a791200d3e4dd1b8234073ad96c535" + integrity sha512-86flrfE+bSHB69znnTV6kVjkncs2LBMhcTCyxWgRxLyfXfQrxg4UwlAqENnjrrxnSNS/XKCDJCl8EkdFJVHOxw== + dependencies: + "@rollup/pluginutils" "^5.0.1" + resolve "^1.22.1" + "@rollup/pluginutils@^5.0.1": version "5.0.2" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" @@ -3374,6 +3836,13 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== +"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.7.0": + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== + dependencies: + type-detect "4.0.8" + "@sinonjs/commons@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" @@ -3381,6 +3850,13 @@ dependencies: type-detect "4.0.8" +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + dependencies: + type-detect "4.0.8" + "@sinonjs/fake-timers@^10.0.2": version "10.0.2" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" @@ -3388,6 +3864,44 @@ dependencies: "@sinonjs/commons" "^2.0.0" +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@sinonjs/formatio@^3.2.1": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.2.tgz#771c60dfa75ea7f2d68e3b94c7e888a78781372c" + integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ== + dependencies: + "@sinonjs/commons" "^1" + "@sinonjs/samsam" "^3.1.0" + +"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" + integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== + dependencies: + "@sinonjs/commons" "^1.3.0" + array-from "^2.1.1" + lodash "^4.17.15" + +"@sinonjs/samsam@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-8.0.0.tgz#0d488c91efb3fa1442e26abea81759dfc8b5ac60" + integrity sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew== + dependencies: + "@sinonjs/commons" "^2.0.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" + +"@sinonjs/text-encoding@^0.7.1": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" + integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== + "@skaleproject/pow-ethers@^0.2.4": version "0.2.4" resolved "https://registry.yarnpkg.com/@skaleproject/pow-ethers/-/pow-ethers-0.2.4.tgz#8fcdd7ee4d2e389916804d7c6d077511f086a77d" @@ -3721,6 +4235,11 @@ resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591" integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q== +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" @@ -3771,7 +4290,7 @@ resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== -"@types/babel__core@^7.1.14": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.20.0" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== @@ -3797,7 +4316,7 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": version "7.18.3" resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== @@ -3855,6 +4374,14 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== +"@types/chrome@^0.0.213": + version "0.0.213" + resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.213.tgz#f1e421f76ce7986d2886bafc6c359575e599471e" + integrity sha512-oDF+AGr2gcHzxX5xq8TjmLtnMnV3nL1ci4Y6CjhDqIKI8Ar36JOWnmQx6eGVBBYEX824OIN0NQwDo2cevEBbQQ== + dependencies: + "@types/filesystem" "*" + "@types/har-format" "*" + "@types/concat-stream@^1.6.0": version "1.6.1" resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" @@ -3876,6 +4403,11 @@ dependencies: "@types/node" "*" +"@types/crypto-js@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@types/crypto-js/-/crypto-js-4.1.1.tgz#602859584cecc91894eb23a4892f38cfa927890d" + integrity sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA== + "@types/d3-array@^3.0.3": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.0.4.tgz#44eebe40be57476cad6a0cd6a85b0f57d54185a2" @@ -3927,6 +4459,11 @@ resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.0.tgz#e2505f1c21ec08bda8915238e397fb71d2fc54ce" integrity sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g== +"@types/estree@*": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + "@types/estree@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" @@ -3951,6 +4488,18 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/filesystem@*": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.32.tgz#307df7cc084a2293c3c1a31151b178063e0a8edf" + integrity sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ== + dependencies: + "@types/filewriter" "*" + +"@types/filewriter@*": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.29.tgz#a48795ecadf957f6c0d10e0c34af86c098fa5bee" + integrity sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ== + "@types/form-data@0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" @@ -3966,13 +4515,26 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.3": +"@types/glob@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" + integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== + dependencies: + "@types/minimatch" "^5.1.2" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": version "4.1.6" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" +"@types/har-format@*": + version "1.2.10" + resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.10.tgz#7b4e1e0ada4d17684ac3b05d601a4871cfab11fc" + integrity sha512-o0J30wqycjF5miWDKYKKzzOU1ZTLuA42HZ4HE7/zqTOc/jTLdQ5NhYWvsRQo45Nfi1KHoRdNhteSI4BAxTF1Pg== + "@types/hoist-non-react-statics@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" @@ -4013,6 +4575,14 @@ expect "^29.0.0" pretty-format "^29.0.0" +"@types/jest@^29.4.0": + version "29.5.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.1.tgz#83c818aa9a87da27d6da85d3378e5a34d2f31a47" + integrity sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + "@types/jsdom@^20.0.0": version "20.0.1" resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" @@ -4059,7 +4629,7 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== -"@types/minimatch@*": +"@types/minimatch@*", "@types/minimatch@^5.1.2": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== @@ -4185,6 +4755,11 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + "@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" @@ -4278,6 +4853,13 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== +"@types/yargs@^16.0.0": + version "16.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" + integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== + dependencies: + "@types/yargs-parser" "*" + "@types/yargs@^17.0.8": version "17.0.22" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" @@ -4301,6 +4883,22 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/eslint-plugin@^5.52.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz#c0e10eeb936debe5d1c3433cf36206a95befefd0" + integrity sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.59.0" + "@typescript-eslint/type-utils" "5.59.0" + "@typescript-eslint/utils" "5.59.0" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/experimental-utils@^5.0.0": version "5.54.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.54.1.tgz#a45609ce43fc6b24b4c4dde215446eaad7805223" @@ -4318,6 +4916,16 @@ "@typescript-eslint/typescript-estree" "5.54.1" debug "^4.3.4" +"@typescript-eslint/parser@^5.52.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.0.tgz#0ad7cd019346cc5d150363f64869eca10ca9977c" + integrity sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w== + dependencies: + "@typescript-eslint/scope-manager" "5.59.0" + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/typescript-estree" "5.59.0" + debug "^4.3.4" + "@typescript-eslint/scope-manager@5.54.1": version "5.54.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.54.1.tgz#6d864b4915741c608a58ce9912edf5a02bb58735" @@ -4326,6 +4934,14 @@ "@typescript-eslint/types" "5.54.1" "@typescript-eslint/visitor-keys" "5.54.1" +"@typescript-eslint/scope-manager@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz#86501d7a17885710b6716a23be2e93fc54a4fe8c" + integrity sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ== + dependencies: + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/visitor-keys" "5.59.0" + "@typescript-eslint/type-utils@5.54.1": version "5.54.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.54.1.tgz#4825918ec27e55da8bb99cd07ec2a8e5f50ab748" @@ -4336,11 +4952,26 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.54.1": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.54.1.tgz#29fbac29a716d0f08c62fe5de70c9b6735de215c" +"@typescript-eslint/type-utils@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.0.tgz#8e8d1420fc2265989fa3a0d897bde37f3851e8c9" + integrity sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA== + dependencies: + "@typescript-eslint/typescript-estree" "5.59.0" + "@typescript-eslint/utils" "5.59.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.54.1": + version "5.54.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.54.1.tgz#29fbac29a716d0f08c62fe5de70c9b6735de215c" integrity sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw== +"@typescript-eslint/types@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.0.tgz#3fcdac7dbf923ec5251545acdd9f1d42d7c4fe32" + integrity sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA== + "@typescript-eslint/typescript-estree@5.54.1": version "5.54.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz#df7b6ae05fd8fef724a87afa7e2f57fa4a599be1" @@ -4354,6 +4985,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz#8869156ee1dcfc5a95be3ed0e2809969ea28e965" + integrity sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg== + dependencies: + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/visitor-keys" "5.59.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.54.1", "@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.42.1", "@typescript-eslint/utils@^5.43.0": version "5.54.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.54.1.tgz#7a3ee47409285387b9d4609ea7e1020d1797ec34" @@ -4368,6 +5012,20 @@ eslint-utils "^3.0.0" semver "^7.3.7" +"@typescript-eslint/utils@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.0.tgz#063d066b3bc4850c18872649ed0da9ee72d833d5" + integrity sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.0" + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/typescript-estree" "5.59.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@5.54.1": version "5.54.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz#d7a8a0f7181d6ac748f4d47b2306e0513b98bf8b" @@ -4376,6 +5034,14 @@ "@typescript-eslint/types" "5.54.1" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz#a59913f2bf0baeb61b5cfcb6135d3926c3854365" + integrity sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA== + dependencies: + "@typescript-eslint/types" "5.59.0" + eslint-visitor-keys "^3.3.0" + "@vitejs/plugin-react@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz#d1091f535eab8b83d6e74034d01e27d73c773240" @@ -4405,6 +5071,15 @@ "@vitest/utils" "0.29.2" chai "^4.3.7" +"@vitest/expect@0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.30.1.tgz#3c92a3fc23a198315ce8cd16689dc2d5aeac40b8" + integrity sha512-c3kbEtN8XXJSeN81iDGq29bUzSjQhjES2WR3aColsS4lPGbivwLtas4DNUe0jD9gg/FYGIteqOenfU95EFituw== + dependencies: + "@vitest/spy" "0.30.1" + "@vitest/utils" "0.30.1" + chai "^4.3.7" + "@vitest/runner@0.28.5": version "0.28.5" resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.28.5.tgz#4a18fe0e40b25569763f9f1f64b799d1629b3026" @@ -4423,6 +5098,25 @@ p-limit "^4.0.0" pathe "^1.1.0" +"@vitest/runner@0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.30.1.tgz#534db590091e5d40682f47b9478f64b776073c50" + integrity sha512-W62kT/8i0TF1UBCNMRtRMOBWJKRnNyv9RrjIgdUryEe0wNpGZvvwPDLuzYdxvgSckzjp54DSpv1xUbv4BQ0qVA== + dependencies: + "@vitest/utils" "0.30.1" + concordance "^5.0.4" + p-limit "^4.0.0" + pathe "^1.1.0" + +"@vitest/snapshot@0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.30.1.tgz#25e912557b357ecb89d5ee35e8d7c4c7a5ecfe32" + integrity sha512-fJZqKrE99zo27uoZA/azgWyWbFvM1rw2APS05yB0JaLwUIg9aUtvvnBf4q7JWhEcAHmSwbrxKFgyBUga6tq9Tw== + dependencies: + magic-string "^0.30.0" + pathe "^1.1.0" + pretty-format "^27.5.1" + "@vitest/spy@0.28.5": version "0.28.5" resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.28.5.tgz#b69affa0786200251b9e5aac5c58bbfb1b3273c9" @@ -4437,6 +5131,13 @@ dependencies: tinyspy "^1.0.2" +"@vitest/spy@0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.30.1.tgz#e3344d4513407afd922963737fb9733a7787a2bf" + integrity sha512-YfJeIf37GvTZe04ZKxzJfnNNuNSmTEGnla2OdL60C8od16f3zOfv9q9K0nNii0NfjDJRt/CVN/POuY5/zTS+BA== + dependencies: + tinyspy "^2.1.0" + "@vitest/utils@0.28.5": version "0.28.5" resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.28.5.tgz#7b82b528df86adfbd4a1f6a3b72c39790e81de0d" @@ -4459,6 +5160,15 @@ picocolors "^1.0.0" pretty-format "^27.5.1" +"@vitest/utils@0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.30.1.tgz#0e5bf8c1b81a6dfa2b70120c2aa092a651440cda" + integrity sha512-/c8Xv2zUVc+rnNt84QF0Y0zkfxnaGhp87K2dYJMLtLOIckPzuxLVzAtFCicGFdB4NeBHNzTRr1tNn7rCtQcWFA== + dependencies: + concordance "^5.0.4" + loupe "^2.3.6" + pretty-format "^27.5.1" + "@wagmi/chains@0.2.13": version "0.2.13" resolved "https://registry.yarnpkg.com/@wagmi/chains/-/chains-0.2.13.tgz#c20979cffb2fbb14c013f06fa140fffa53b65d68" @@ -4986,7 +5696,7 @@ JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.6: +abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== @@ -5044,6 +5754,14 @@ accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + acorn-globals@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" @@ -5052,17 +5770,27 @@ acorn-globals@^7.0.0: acorn "^8.1.0" acorn-walk "^8.0.2" -acorn-jsx@^5.3.2: +acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + acorn-walk@^8.0.2, acorn-walk@^8.1.1, acorn-walk@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.1.0, acorn@^8.4.1, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2: +acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.1.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2: version "8.8.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== @@ -5128,7 +5856,7 @@ ajv@8.11.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.11.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -5313,11 +6041,21 @@ array-back@^4.0.1, array-back@^4.0.2: resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== +array-flat-polyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz#1e3a4255be619dfbffbfd1d635c1cf357cd034e7" + integrity sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw== + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +array-from@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" + integrity sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg== + array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" @@ -5593,6 +6331,20 @@ axobject-query@^3.1.1: dependencies: deep-equal "^2.0.5" +babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + dependencies: + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-jest@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5" @@ -5617,6 +6369,16 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + babel-plugin-jest-hoist@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a" @@ -5683,6 +6445,14 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== + dependencies: + babel-plugin-jest-hoist "^27.5.1" + babel-preset-current-node-syntax "^1.0.0" + babel-preset-jest@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2" @@ -5761,7 +6531,7 @@ bigint-mod-arith@^3.1.0: resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz#658e416bc593a463d97b59766226d0a3021a76b1" integrity sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ== -bignumber.js@^9.0.0, bignumber.js@^9.1.0: +bignumber.js@^9.0.0, bignumber.js@^9.0.1, bignumber.js@^9.1.0: version "9.1.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== @@ -5885,6 +6655,11 @@ bluebird@^3.5.0: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +blueimp-md5@^2.10.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0" + integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== + bn.js@4.11.6: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" @@ -5936,6 +6711,11 @@ body-parser@^1.16.0, body-parser@^1.20.0: type-is "~1.6.18" unpipe "1.0.0" +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + borc@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/borc/-/borc-2.1.2.tgz#6ce75e7da5ce711b963755117dd1b187f6f8cf19" @@ -6014,6 +6794,11 @@ browser-or-node@^1.3.0: resolved "https://registry.yarnpkg.com/browser-or-node/-/browser-or-node-1.3.0.tgz#f2a4e8568f60263050a6714b2cc236bb976647a7" integrity sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg== +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + browser-readablestream-to-it@^1.0.0, browser-readablestream-to-it@^1.0.1, browser-readablestream-to-it@^1.0.2, browser-readablestream-to-it@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.3.tgz#ac3e406c7ee6cdf0a502dd55db33bab97f7fba76" @@ -6160,6 +6945,11 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer-reverse@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" + integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== + buffer-to-arraybuffer@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" @@ -6210,6 +7000,11 @@ bufferutil@^4.0.1: dependencies: node-gyp-build "^4.3.0" +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -6393,7 +7188,7 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -6416,6 +7211,31 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.3: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + chokidar@3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -6778,6 +7598,11 @@ commander@^9.4.0: resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + compare-versions@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-5.0.3.tgz#a9b34fea217472650ef4a2651d905f42c28ebfd7" @@ -6825,6 +7650,20 @@ concat-stream@^1.6.0, concat-stream@^1.6.2, concat-stream@~1.6.2: inherits "^2.0.3" readable-stream "^3.0.2" +concordance@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/concordance/-/concordance-5.0.4.tgz#9896073261adced72f88d60e4d56f8efc4bbbbd2" + integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== + dependencies: + date-time "^3.1.0" + esutils "^2.0.3" + fast-diff "^1.2.0" + js-string-escape "^1.0.1" + lodash "^4.17.15" + md5-hex "^3.0.1" + semver "^7.3.2" + well-known-symbols "^2.0.0" + concurrently@^7.5.0: version "7.6.0" resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.6.0.tgz#531a6f5f30cf616f355a4afb8f8fcb2bba65a49a" @@ -6881,7 +7720,7 @@ content-type@~1.0.4, content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -6959,6 +7798,17 @@ cosmiconfig@8.0.0: parse-json "^5.0.0" path-type "^4.0.0" +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + cosmiconfig@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" @@ -7049,21 +7899,52 @@ crypto-browserify@^3.11.0, crypto-browserify@^3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" +crypto-js@^3.1.9-1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" + integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== + +crypto-js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" + integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== + crypto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + css-unit-converter@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + cssom@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" @@ -7182,6 +8063,15 @@ data-uri-to-buffer@^3.0.1: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" @@ -7201,6 +8091,13 @@ date-fns@^2.29.1: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== +date-time@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/date-time/-/date-time-3.1.0.tgz#0d1e934d170579f481ed8df1e2b8ff70ee845e1e" + integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== + dependencies: + time-zone "^1.0.0" + dateformat@^4.6.3: version "4.6.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" @@ -7223,7 +8120,7 @@ debug@2.6.9, debug@^2.2.0: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -7267,7 +8164,7 @@ decimal.js-light@^2.4.1: resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== -decimal.js@^10.4.2: +decimal.js@^10.2.1, decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== @@ -7432,6 +8329,11 @@ detect-port@^1.3.0: address "^1.0.1" debug "4" +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + diff-sequences@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" @@ -7442,6 +8344,11 @@ diff@5.0.0: resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +diff@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -7547,6 +8454,15 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" @@ -7557,6 +8473,18 @@ domain-browser@^4.22.0: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.22.0.tgz#6ddd34220ec281f9a65d3386d267ddd35c491f9f" integrity sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw== +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + domexception@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" @@ -7564,6 +8492,22 @@ domexception@^4.0.0: dependencies: webidl-conversions "^7.0.0" +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + dotenv-cli@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/dotenv-cli/-/dotenv-cli-6.0.0.tgz#8a30cbc59d0a8aaa166b2fee0a9a55e23a1223ab" @@ -7675,6 +8619,11 @@ emittery@^0.13.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -7722,13 +8671,18 @@ enhanced-resolve@^5.10.0, enhanced-resolve@^5.12.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@2.3.6, enquirer@^2.3.0, enquirer@^2.3.6: +enquirer@2.3.6, enquirer@^2.3.0, enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" +entities@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + entities@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" @@ -8007,7 +8961,7 @@ esbuild-windows-arm64@0.14.54: resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== -esbuild@^0.14.54: +esbuild@^0.14.27, esbuild@^0.14.54: version "0.14.54" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== @@ -8062,6 +9016,34 @@ esbuild@^0.16.14: "@esbuild/win32-ia32" "0.16.17" "@esbuild/win32-x64" "0.16.17" +esbuild@^0.17.5: + version "0.17.17" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.17.tgz#fa906ab11b11d2ed4700f494f4f764229b25c916" + integrity sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA== + optionalDependencies: + "@esbuild/android-arm" "0.17.17" + "@esbuild/android-arm64" "0.17.17" + "@esbuild/android-x64" "0.17.17" + "@esbuild/darwin-arm64" "0.17.17" + "@esbuild/darwin-x64" "0.17.17" + "@esbuild/freebsd-arm64" "0.17.17" + "@esbuild/freebsd-x64" "0.17.17" + "@esbuild/linux-arm" "0.17.17" + "@esbuild/linux-arm64" "0.17.17" + "@esbuild/linux-ia32" "0.17.17" + "@esbuild/linux-loong64" "0.17.17" + "@esbuild/linux-mips64el" "0.17.17" + "@esbuild/linux-ppc64" "0.17.17" + "@esbuild/linux-riscv64" "0.17.17" + "@esbuild/linux-s390x" "0.17.17" + "@esbuild/linux-x64" "0.17.17" + "@esbuild/netbsd-x64" "0.17.17" + "@esbuild/openbsd-x64" "0.17.17" + "@esbuild/sunos-x64" "0.17.17" + "@esbuild/win32-arm64" "0.17.17" + "@esbuild/win32-ia32" "0.17.17" + "@esbuild/win32-x64" "0.17.17" + esbuild@~0.17.6: version "0.17.11" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.11.tgz#9f3122643b21d7e7731e42f18576c10bfa28152b" @@ -8327,6 +9309,13 @@ eslint-scope@^7.1.1: esrecurse "^4.3.0" estraverse "^5.2.0" +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-utils@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" @@ -8334,6 +9323,11 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" @@ -8344,6 +9338,103 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== + +eslint@^7.32.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +eslint@^8.24.0: + version "8.38.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.38.0.tgz#a62c6f36e548a5574dd35728ac3c6209bd1e2f1a" + integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.2" + "@eslint/js" "8.38.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.4.0" + espree "^9.5.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + eslint@^8.27.0: version "8.36.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.36.0.tgz#1bd72202200a5492f91803b113fb8a83b11285cf" @@ -8390,6 +9481,15 @@ eslint@^8.27.0: strip-json-comments "^3.1.0" text-table "^0.2.0" +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + espree@^9.5.0: version "9.5.0" resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.0.tgz#3646d4e3f58907464edba852fa047e6a27bdf113" @@ -8399,6 +9499,15 @@ espree@^9.5.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" +espree@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" + integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.0" + esprima@2.7.x, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -8409,7 +9518,7 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.2: +esquery@^1.4.0, esquery@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -8443,7 +9552,7 @@ estree-walker@^2.0.2: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -esutils@^2.0.2: +esutils@^2.0.2, esutils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== @@ -8761,6 +9870,16 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + dependencies: + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + expect@^29.0.0, expect@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" @@ -8876,7 +9995,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: +fast-diff@^1.1.2, fast-diff@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== @@ -9174,6 +10293,15 @@ form-data@^2.2.0: combined-stream "^1.0.6" mime-types "^2.1.12" +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -9503,7 +10631,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -9515,7 +10643,7 @@ glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.0: +glob@^8.0.0, glob@^8.0.3: version "8.1.0" resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== @@ -9555,7 +10683,7 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.19.0: +globals@^13.19.0, globals@^13.6.0, globals@^13.9.0: version "13.20.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== @@ -10043,6 +11171,13 @@ hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + html-encoding-sniffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" @@ -10055,6 +11190,16 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + http-basic@^8.1.1: version "8.1.3" resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" @@ -10086,6 +11231,15 @@ http-https@^1.0.0: resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" @@ -10212,6 +11366,11 @@ ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + ignore@^5.1.1, ignore@^5.2.0: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -10237,7 +11396,7 @@ immutable@^4.0.0-rc.12: resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -10653,6 +11812,13 @@ is-buffer@^2.0.3, is-buffer@^2.0.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -10772,6 +11938,11 @@ is-map@^2.0.1, is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + is-nan@^1.2.1: version "1.3.2" resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" @@ -10837,6 +12008,13 @@ is-pull-stream@0.0.0: resolved "https://registry.yarnpkg.com/is-pull-stream/-/is-pull-stream-0.0.0.tgz#a3bc3d1c6d3055151c46bde6f399efed21440ca9" integrity sha512-NWLwqCc95I6m8FZDYLAmVJc9Xgk8O+8pPOoDKFTC293FH4S7FBcbLCw3WWPCdiT8uUSdzPy47VM08WPDMJJrag== +is-reference@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -11172,6 +12350,15 @@ jayson@^3.4.4: uuid "^8.3.2" ws "^7.4.5" +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== + dependencies: + "@jest/types" "^27.5.1" + execa "^5.0.0" + throat "^6.0.1" + jest-changed-files@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" @@ -11180,6 +12367,31 @@ jest-changed-files@^29.5.0: execa "^5.0.0" p-limit "^3.1.0" +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + jest-circus@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.5.0.tgz#b5926989449e75bff0d59944bae083c9d7fb7317" @@ -11206,6 +12418,24 @@ jest-circus@^29.5.0: slash "^3.0.0" stack-utils "^2.0.3" +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== + dependencies: + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + prompts "^2.0.1" + yargs "^16.2.0" + jest-cli@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.5.0.tgz#b34c20a6d35968f3ee47a7437ff8e53e086b4a67" @@ -11224,6 +12454,36 @@ jest-cli@^29.5.0: prompts "^2.0.1" yargs "^17.3.1" +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== + dependencies: + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + jest-config@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.5.0.tgz#3cc972faec8c8aaea9ae158c694541b79f3748da" @@ -11252,6 +12512,16 @@ jest-config@^29.5.0: slash "^3.0.0" strip-json-comments "^3.1.1" +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + jest-diff@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" @@ -11262,6 +12532,13 @@ jest-diff@^29.5.0: jest-get-type "^29.4.3" pretty-format "^29.5.0" +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== + dependencies: + detect-newline "^3.0.0" + jest-docblock@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" @@ -11269,6 +12546,17 @@ jest-docblock@^29.4.3: dependencies: detect-newline "^3.0.0" +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + jest-each@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.5.0.tgz#fc6e7014f83eac68e22b7195598de8554c2e5c06" @@ -11280,6 +12568,19 @@ jest-each@^29.5.0: jest-util "^29.5.0" pretty-format "^29.5.0" +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + jest-environment-jsdom@^29.3.1: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz#cfe86ebaf1453f3297b5ff3470fbe94739c960cb" @@ -11294,6 +12595,18 @@ jest-environment-jsdom@^29.3.1: jest-util "^29.5.0" jsdom "^20.0.0" +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jest-environment-node@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.5.0.tgz#f17219d0f0cc0e68e0727c58b792c040e332c967" @@ -11306,11 +12619,36 @@ jest-environment-node@^29.5.0: jest-mock "^29.5.0" jest-util "^29.5.0" +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + jest-get-type@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== + dependencies: + "@jest/types" "^27.5.1" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + jest-haste-map@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.5.0.tgz#69bd67dc9012d6e2723f20a945099e972b2e94de" @@ -11330,6 +12668,37 @@ jest-haste-map@^29.5.0: optionalDependencies: fsevents "^2.3.2" +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" + +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + jest-leak-detector@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c" @@ -11338,6 +12707,16 @@ jest-leak-detector@^29.5.0: jest-get-type "^29.4.3" pretty-format "^29.5.0" +jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + dependencies: + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + jest-matcher-utils@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" @@ -11348,6 +12727,21 @@ jest-matcher-utils@^29.5.0: jest-get-type "^29.4.3" pretty-format "^29.5.0" +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + jest-message-util@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" @@ -11363,6 +12757,14 @@ jest-message-util@^29.5.0: slash "^3.0.0" stack-utils "^2.0.3" +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.5.0.tgz#26e2172bcc71d8b0195081ff1f146ac7e1518aed" @@ -11377,11 +12779,25 @@ jest-pnp-resolver@^1.2.2: resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + jest-regex-util@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== + dependencies: + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" + jest-resolve-dependencies@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4" @@ -11390,6 +12806,22 @@ jest-resolve-dependencies@^29.5.0: jest-regex-util "^29.4.3" jest-snapshot "^29.5.0" +jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-pnp-resolver "^1.2.2" + jest-util "^27.5.1" + jest-validate "^27.5.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + jest-resolve@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.5.0.tgz#b053cc95ad1d5f6327f0ac8aae9f98795475ecdc" @@ -11405,6 +12837,33 @@ jest-resolve@^29.5.0: resolve.exports "^2.0.0" slash "^3.0.0" +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + source-map-support "^0.5.6" + throat "^6.0.1" + jest-runner@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.5.0.tgz#6a57c282eb0ef749778d444c1d758c6a7693b6f8" @@ -11432,6 +12891,34 @@ jest-runner@^29.5.0: p-limit "^3.1.0" source-map-support "0.5.13" +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + strip-bom "^4.0.0" + jest-runtime@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.5.0.tgz#c83f943ee0c1da7eb91fa181b0811ebd59b03420" @@ -11460,6 +12947,42 @@ jest-runtime@^29.5.0: slash "^3.0.0" strip-bom "^4.0.0" +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.9" + +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== + dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + natural-compare "^1.4.0" + pretty-format "^27.5.1" + semver "^7.3.2" + jest-snapshot@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.5.0.tgz#c9c1ce0331e5b63cd444e2f95a55a73b84b1e8ce" @@ -11489,6 +13012,18 @@ jest-snapshot@^29.5.0: pretty-format "^29.5.0" semver "^7.3.5" +jest-util@^27.0.0, jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-util@^29.0.0, jest-util@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" @@ -11501,6 +13036,18 @@ jest-util@^29.0.0, jest-util@^29.5.0: graceful-fs "^4.2.9" picomatch "^2.2.3" +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== + dependencies: + "@jest/types" "^27.5.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.5.1" + leven "^3.1.0" + pretty-format "^27.5.1" + jest-validate@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" @@ -11513,6 +13060,19 @@ jest-validate@^29.5.0: leven "^3.1.0" pretty-format "^29.5.0" +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + jest-watcher@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.5.0.tgz#cf7f0f949828ba65ddbbb45c743a382a4d911363" @@ -11527,6 +13087,15 @@ jest-watcher@^29.5.0: jest-util "^29.5.0" string-length "^4.0.1" +jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest-worker@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" @@ -11537,6 +13106,15 @@ jest-worker@^29.5.0: merge-stream "^2.0.0" supports-color "^8.0.0" +jest@^27.1.0: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== + dependencies: + "@jest/core" "^27.5.1" + import-local "^3.0.2" + jest-cli "^27.5.1" + jest@^29.3.1: version "29.5.0" resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" @@ -11577,6 +13155,11 @@ js-sha3@0.8.0, js-sha3@^0.8.0, js-sha3@~0.8.0: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== +js-string-escape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -11610,6 +13193,39 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + jsdom@^20.0.0: version "20.0.3" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" @@ -11764,6 +13380,11 @@ json-text-sequence@~0.1.0: dependencies: delimit-stream "0.1.0" +json5@2.x, json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -11771,11 +13392,6 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.2.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - jsonc-parser@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" @@ -11809,6 +13425,11 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== +jsonpath-plus@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonpath-plus/-/jsonpath-plus-4.0.0.tgz#954b69faa3d8b07f30ae2f9e601176a4b0d2806e" + integrity sha512-e0Jtg4KAzDJKKwzbLaUtinCn0RZseWBVRTRGihSpvFlM3wTR7ExSp+PTdeTsDrLNJUe7L7JYJe8mblHX5SCT6A== + jsonschema@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" @@ -11842,6 +13463,11 @@ jszip@^3.10.1: readable-stream "~2.3.6" setimmediate "^1.0.5" +just-extend@^4.0.2: + version "4.2.1" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" + integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== + just-kebab-case@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/just-kebab-case/-/just-kebab-case-1.1.0.tgz#ebe854fde84b0afa4e597fcd870b12eb3c026755" @@ -12084,7 +13710,7 @@ lit@2.6.1: lit-element "^3.2.0" lit-html "^2.6.0" -local-pkg@^0.4.2: +local-pkg@^0.4.2, local-pkg@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== @@ -12121,6 +13747,21 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + lodash.isequal@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" @@ -12211,7 +13852,7 @@ lodash.upperfirst@^4.3.1: resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.16, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.16.3, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.16, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -12253,6 +13894,18 @@ logform@^2.3.2, logform@^2.4.0: safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" +lolex@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" + integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== + +lolex@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + dependencies: + "@sinonjs/commons" "^1.7.0" + long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" @@ -12344,6 +13997,13 @@ magic-string@^0.27.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" +magic-string@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.0.tgz#fd58a4748c5c4547338a424e90fa5dd17f4de529" + integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -12363,6 +14023,13 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" @@ -12397,6 +14064,13 @@ mcl-wasm@^0.7.1: resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== +md5-hex@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" + integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== + dependencies: + blueimp-md5 "^2.10.0" + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -12411,6 +14085,14 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== +mem@^6.0.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/mem/-/mem-6.1.1.tgz#ea110c2ebc079eca3022e6b08c85a795e77f6318" + integrity sha512-Ci6bIfq/UgcxPTYa8dQQ5FY3BzKkT894bwXWXxC/zqs0XgMO2cT20CGkOqda7gZNkmK5VP4x89IGZ6K7hfbn3Q== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^3.0.0" + memoizee@^0.4.15: version "0.4.15" resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" @@ -12479,6 +14161,17 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +merkletreejs@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.9.tgz#cdb364a3b974a44f4eff3446522d7066e0cf95de" + integrity sha512-NjlATjJr4NEn9s8v/VEHhgwRWaE1eA/Une07d9SEqKzULJi1Wsh0Y3svwJdP2bYLMmgSBHzOrNydMWM1NN9VeQ== + dependencies: + bignumber.js "^9.0.1" + buffer-reverse "^1.0.1" + crypto-js "^3.1.9-1" + treeify "^1.1.0" + web3-utils "^1.3.4" + meros@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/meros/-/meros-1.2.1.tgz#056f7a76e8571d0aaf3c7afcbe7eb6407ff7329e" @@ -12539,6 +14232,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + mimic-fn@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" @@ -12700,7 +14398,7 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mlly@^1.1.0, mlly@^1.1.1: +mlly@^1.1.0, mlly@^1.1.1, mlly@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.2.0.tgz#f0f6c2fc8d2d12ea6907cd869066689b5031b613" integrity sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww== @@ -12999,6 +14697,11 @@ nanoid@^3.0.2, nanoid@^3.1.20, nanoid@^3.1.23, nanoid@^3.3.4: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + napi-macros@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" @@ -13067,6 +14770,28 @@ nft.storage@^7.0.0: streaming-iterables "^6.0.0" throttled-queue "^2.1.2" +nise@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.3.tgz#9d2cfe37d44f57317766c6e9408a359c5d3ac1f7" + integrity sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ== + dependencies: + "@sinonjs/formatio" "^3.2.1" + "@sinonjs/text-encoding" "^0.7.1" + just-extend "^4.0.2" + lolex "^5.0.1" + path-to-regexp "^1.7.0" + +nise@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.4.tgz#491ce7e7307d4ec546f5a659b2efe94a18b4bbc0" + integrity sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg== + dependencies: + "@sinonjs/commons" "^2.0.0" + "@sinonjs/fake-timers" "^10.0.2" + "@sinonjs/text-encoding" "^0.7.1" + just-extend "^4.0.2" + path-to-regexp "^1.7.0" + node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -13217,6 +14942,13 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + number-to-bn@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" @@ -13230,6 +14962,11 @@ numeral@^2.0.6: resolved "https://registry.yarnpkg.com/numeral/-/numeral-2.0.6.tgz#4ad080936d443c2561aed9f2197efffe25f4e506" integrity sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA== +nwsapi@^2.2.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.4.tgz#fd59d5e904e8e1f03c25a7d5a15cfa16c714a1e5" + integrity sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g== + nwsapi@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" @@ -13472,6 +15209,11 @@ p-cancelable@^3.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + p-defer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" @@ -13607,6 +15349,19 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parse5@^7.0.0, parse5@^7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" @@ -13674,6 +15429,13 @@ path-to-regexp@2.2.1: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -13910,6 +15672,15 @@ postcss-value-parser@^3.3.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== +postcss@^8.4.13: + version "8.4.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" + integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@^8.4.21: version "8.4.21" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" @@ -13950,7 +15721,7 @@ prettier-plugin-solidity@^1.0.0-beta.24: semver "^7.3.8" solidity-comments-extractor "^0.0.7" -prettier@1.19.1: +prettier@1.19.1, prettier@^1.19.1: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== @@ -13960,6 +15731,11 @@ prettier@^2.3.1, prettier@^2.6.2, prettier@^2.7.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== +prettier@^2.3.2: + version "2.8.7" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450" + integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw== + pretty-format@^27.0.2, pretty-format@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" @@ -13998,6 +15774,11 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + promise-nodeify@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/promise-nodeify/-/promise-nodeify-3.0.1.tgz#f0f5d9720ee9ec71dd2bfa92667be504c10229c2" @@ -14188,9 +15969,9 @@ pvutils@^1.1.3: integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== qrcode@1.5.1, qrcode@^1.5.0, qrcode@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.1.tgz#0103f97317409f7bc91772ef30793a54cd59f0cb" - integrity sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg== + version "1.5.3" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" + integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== dependencies: dijkstrajs "^1.0.1" encode-utf8 "^1.0.3" @@ -14677,7 +16458,7 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.2.0: +regexpp@^3.1.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -14834,6 +16615,11 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve.exports@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== + resolve.exports@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.1.tgz#cee884cd4e3f355660e501fa3276b27d7ffe5a20" @@ -14860,6 +16646,15 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -14943,6 +16738,20 @@ rlp@^2.2.3, rlp@^2.2.4: dependencies: bn.js "^5.2.0" +"rollup@>=2.59.0 <2.78.0": + version "2.77.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12" + integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g== + optionalDependencies: + fsevents "~2.3.2" + +rollup@^2.38.5, rollup@^2.56.3: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + rollup@^3.10.0: version "3.19.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.19.1.tgz#2b3a31ac1ff9f3afab2e523fa687fef5b0ee20fc" @@ -14950,6 +16759,13 @@ rollup@^3.10.0: optionalDependencies: fsevents "~2.3.2" +rollup@^3.20.2: + version "3.20.6" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.20.6.tgz#53c0fd73e397269d2ce5f0ec12851457dd53cacd" + integrity sha512-2yEB3nQXp/tBQDN0hJScJQheXdvU2wFhh6ld7K/aiZ1vYcak6N/BKjY1QrU6BvO2JWYS8bEs14FRaxXosxy2zw== + optionalDependencies: + fsevents "~2.3.2" + rpc-websockets@^7.5.1: version "7.5.1" resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.1.tgz#e0a05d525a97e7efc31a0617f093a13a2e10c401" @@ -15074,6 +16890,13 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + saxes@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" @@ -15170,6 +16993,13 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.2.1, semver@^7.3.2: + version "7.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== + dependencies: + lru-cache "^6.0.0" + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -15362,6 +17192,40 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +sinon-chrome@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sinon-chrome/-/sinon-chrome-3.0.1.tgz#9fb14c230fa0959cb280f9f589e9eda8ccfda1d9" + integrity sha512-NTEFhyuiWEMnRmIqldUiA2DhKn2EqnZxyEk5Ez5rBXj+Nl54aJ0MEmF4wjltrxecxd8zlNLxyE0HyLabev9JsQ== + dependencies: + lodash "^4.16.3" + sinon "^7.2.3" + urijs "^1.18.2" + +sinon@^15.0.4: + version "15.0.4" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.0.4.tgz#bcca6fef19b14feccc96473f0d7adc81e0bc5268" + integrity sha512-uzmfN6zx3GQaria1kwgWGeKiXSSbShBbue6Dcj0SI8fiCNFbiUDqKl57WFlY5lyhxZVUKmXvzgG2pilRQCBwWg== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers" "^10.0.2" + "@sinonjs/samsam" "^8.0.0" + diff "^5.1.0" + nise "^5.1.4" + supports-color "^7.2.0" + +sinon@^7.2.3: + version "7.5.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.5.0.tgz#e9488ea466070ea908fd44a3d6478fd4923c67ec" + integrity sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q== + dependencies: + "@sinonjs/commons" "^1.4.0" + "@sinonjs/formatio" "^3.2.1" + "@sinonjs/samsam" "^3.3.3" + diff "^3.5.0" + lolex "^4.2.0" + nise "^1.5.2" + supports-color "^5.5.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -15481,7 +17345,7 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.13, source-map-support@^0.5.20, source-map-support@^0.5.21: +source-map-support@^0.5.13, source-map-support@^0.5.20, source-map-support@^0.5.21, source-map-support@^0.5.6: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -15499,6 +17363,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" @@ -15618,7 +17487,7 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -std-env@^3.3.1: +std-env@^3.3.1, std-env@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.2.tgz#af27343b001616015534292178327b202b9ee955" integrity sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA== @@ -15875,7 +17744,7 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strip-literal@^1.0.0: +strip-literal@^1.0.0, strip-literal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.0.1.tgz#0115a332710c849b4e46497891fb8d585e404bd2" integrity sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q== @@ -15919,20 +17788,28 @@ supports-color@^3.1.0: dependencies: has-flag "^1.0.0" -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -15999,7 +17876,7 @@ table-layout@^1.0.2: typical "^5.2.0" wordwrapjs "^4.0.0" -table@^6.8.0: +table@^6.0.9, table@^6.8.0: version "6.8.1" resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== @@ -16089,6 +17966,14 @@ tenderly@^0.4.0: prompts "^2.4.2" tslog "^4.4.0" +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -16158,6 +18043,11 @@ thread-stream@^2.0.0: dependencies: real-require "^0.2.0" +throat@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" + integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== + throttled-queue@^2.1.2: version "2.1.4" resolved "https://registry.yarnpkg.com/throttled-queue/-/throttled-queue-2.1.4.tgz#4e2008c73ab3f72ba1bb09496c3cc9c5b745dbee" @@ -16176,6 +18066,11 @@ through2@^3.0.0, through2@^3.0.1: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +time-zone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" + integrity sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA== + timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -16217,7 +18112,7 @@ tiny-lru@^10.0.0: resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-10.0.1.tgz#aaf5d22207e641ed1b176ac2e616d6cc2fc9ef66" integrity sha512-Vst+6kEsWvb17Zpz14sRJV/f8bUWKhqm6Dc+v08iShmIJ/WxqWytHzCTd6m88pS33rE2zpX34TRmOpAJPloNCA== -tinybench@^2.3.1: +tinybench@^2.3.1, tinybench@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.4.0.tgz#83f60d9e5545353610fe7993bd783120bc20c7a7" integrity sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg== @@ -16227,11 +18122,21 @@ tinypool@^0.3.0, tinypool@^0.3.1: resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.3.1.tgz#a99c2e446aba9be05d3e1cb756d6aed7af4723b6" integrity sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ== +tinypool@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.4.0.tgz#3cf3ebd066717f9f837e8d7d31af3c127fdb5446" + integrity sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA== + tinyspy@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.1.1.tgz#0cb91d5157892af38cb2d217f5c7e8507a5bf092" integrity sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g== +tinyspy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.1.0.tgz#bd6875098f988728e6456cfd5ab8cc06498ecdeb" + integrity sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ== + tmp-promise@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.2.tgz#6e933782abff8b00c3119d63589ca1fb9caaa62a" @@ -16293,7 +18198,7 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^4.1.2: +tough-cookie@^4.0.0, tough-cookie@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== @@ -16303,6 +18208,13 @@ tough-cookie@^4.1.2: universalify "^0.2.0" url-parse "^1.5.3" +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + tr46@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" @@ -16320,6 +18232,11 @@ tree-kill@^1.2.2: resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== +treeify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" + integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== + trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -16346,6 +18263,20 @@ ts-essentials@^7.0.1: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== +ts-jest@^27.1.0: + version "27.1.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.5.tgz#0ddf1b163fbaae3d5b7504a1e65c914a95cff297" + integrity sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^27.0.0" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "20.x" + ts-jest@^29.0.3: version "29.0.5" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.0.5.tgz#c5557dcec8fe434fcb8b70c3e21c6b143bfce066" @@ -16468,7 +18399,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -16563,7 +18494,7 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^4.5.5, typescript@^4.9.3: +typescript@^4.5.5, typescript@^4.9.3, typescript@^4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== @@ -16700,6 +18631,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urijs@^1.18.2: + version "1.19.11" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.11.tgz#204b0d6b605ae80bea54bea39280cdb7c9f923cc" + integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== + url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" @@ -16817,6 +18753,20 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + v8-to-istanbul@^9.0.1: version "9.1.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" @@ -16917,6 +18867,42 @@ vite-node@0.29.2: picocolors "^1.0.0" vite "^3.0.0 || ^4.0.0" +vite-node@0.30.1: + version "0.30.1" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.30.1.tgz#ab0ed1553019c7d81ac95529c57ab8ac9e82347d" + integrity sha512-vTikpU/J7e6LU/8iM3dzBo8ZhEiKZEKRznEMm+mJh95XhWaPrJQraT/QsT2NWmuEf+zgAoMe64PKT7hfZ1Njmg== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + mlly "^1.2.0" + pathe "^1.1.0" + picocolors "^1.0.0" + vite "^3.0.0 || ^4.0.0" + +vite-plugin-chrome-extension@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/vite-plugin-chrome-extension/-/vite-plugin-chrome-extension-0.0.7.tgz#d6bceddcf5914c921fce8052f2d8e3024e3023b5" + integrity sha512-AoNcYg04MFpytR5/1NTsgPYDPHGXC0v/3EbCzbdDTNKAK+V5SmAY5ZRmANRXyfsnyb73NFoKrmqW4THjT93l2Q== + dependencies: + ajv "^6.11.0" + array-flat-polyfill "^1.0.1" + chalk "^4.1.1" + cheerio "^1.0.0-rc.3" + convert-source-map "^1.7.0" + cosmiconfig "^6.0.0" + fs-extra "^8.1.0" + glob "^7.1.6" + jsonpath-plus "^4.0.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.get "^4.4.2" + mem "^6.0.1" + prettier "^1.19.1" + rollup "^2.38.5" + slash "^3.0.0" + vite "^2.2.0" + webextension-polyfill "^0.6.0" + vite-plugin-node-polyfills@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.7.0.tgz#004f400cfae791338c6f0a46d4ddf559c331c899" @@ -16925,6 +18911,18 @@ vite-plugin-node-polyfills@^0.7.0: "@rollup/plugin-inject" "^5.0.3" node-stdlib-browser "^1.2.0" +vite@^2.2.0: + version "2.9.15" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.9.15.tgz#2858dd5b2be26aa394a283e62324281892546f0b" + integrity sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ== + dependencies: + esbuild "^0.14.27" + postcss "^8.4.13" + resolve "^1.22.0" + rollup ">=2.59.0 <2.78.0" + optionalDependencies: + fsevents "~2.3.2" + "vite@^3.0.0 || ^4.0.0", vite@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/vite/-/vite-4.1.4.tgz#170d93bcff97e0ebc09764c053eebe130bfe6ca0" @@ -16937,6 +18935,17 @@ vite-plugin-node-polyfills@^0.7.0: optionalDependencies: fsevents "~2.3.2" +vite@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.0.tgz#1fb9432e1980cf254e1ae1b7b8981fd262c6aa49" + integrity sha512-JTGFgDh3dVxeGBpuQX04Up+JZmuG6wu9414Ei36vQzaEruY/M4K0AgwtuB2b4HaBgB7R8l+LHxjB0jcgz4d2qQ== + dependencies: + esbuild "^0.17.5" + postcss "^8.4.21" + rollup "^3.20.2" + optionalDependencies: + fsevents "~2.3.2" + vitest@^0.25.8: version "0.25.8" resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.25.8.tgz#9b57e0b41cd6f2d2d92aa94a39b35c36f715f8cc" @@ -17017,11 +19026,57 @@ vitest@^0.29.2: vite-node "0.29.2" why-is-node-running "^2.2.2" +vitest@^0.30.1: + version "0.30.1" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.30.1.tgz#351d4a2f27aa8cc0245e3583e3ed45e30efc71d6" + integrity sha512-y35WTrSTlTxfMLttgQk4rHcaDkbHQwDP++SNwPb+7H8yb13Q3cu2EixrtHzF27iZ8v0XCciSsLg00RkPAzB/aA== + dependencies: + "@types/chai" "^4.3.4" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + "@vitest/expect" "0.30.1" + "@vitest/runner" "0.30.1" + "@vitest/snapshot" "0.30.1" + "@vitest/spy" "0.30.1" + "@vitest/utils" "0.30.1" + acorn "^8.8.2" + acorn-walk "^8.2.0" + cac "^6.7.14" + chai "^4.3.7" + concordance "^5.0.4" + debug "^4.3.4" + local-pkg "^0.4.3" + magic-string "^0.30.0" + pathe "^1.1.0" + picocolors "^1.0.0" + source-map "^0.6.1" + std-env "^3.3.2" + strip-literal "^1.0.1" + tinybench "^2.4.0" + tinypool "^0.4.0" + vite "^3.0.0 || ^4.0.0" + vite-node "0.30.1" + why-is-node-running "^2.2.2" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + w3c-xmlserializer@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" @@ -17046,7 +19101,7 @@ wagmi@^0.12.2: abitype "^0.3.0" use-sync-external-store "^1.2.0" -walker@^1.0.8: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -17321,6 +19376,19 @@ web3-utils@1.8.2, web3-utils@^1.3.6: randombytes "^2.1.0" utf8 "3.0.0" +web3-utils@^1.3.4: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.9.0.tgz#7c5775a47586cefb4ad488831be8f6627be9283d" + integrity sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ== + dependencies: + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + web3@^1.8.0, web3@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/web3/-/web3-1.8.2.tgz#95a4e5398fd0f01325264bf8e5e8cdc69a7afe86" @@ -17345,11 +19413,26 @@ webcrypto-core@^1.7.4: pvtsutils "^1.3.2" tslib "^2.4.0" +webextension-polyfill@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.6.0.tgz#1afd925f3274a0d4848083579b9c0b649a5c6763" + integrity sha512-PlYwiX8e4bNZrEeBFxbFFsLtm0SMPxJliLTGdNCA0Bq2XkWrAn2ejUd+89vZm+8BnfFB1BclJyCz3iKsm2atNg== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" @@ -17367,6 +19450,18 @@ websocket@^1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" +well-known-symbols@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5" + integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + whatwg-encoding@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" @@ -17374,6 +19469,11 @@ whatwg-encoding@^2.0.0: dependencies: iconv-lite "0.6.3" +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + whatwg-mimetype@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" @@ -17395,6 +19495,15 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -17548,6 +19657,16 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + write-file-atomic@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" @@ -17620,6 +19739,11 @@ xhr@^2.0.4, xhr@^2.3.3: parse-headers "^2.0.0" xtend "^4.0.0" +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" @@ -17703,7 +19827,7 @@ yaml@1.9.2: dependencies: "@babel/runtime" "^7.9.2" -yaml@^1.10.0: +yaml@^1.10.0, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== @@ -17718,6 +19842,11 @@ yargs-parser@20.2.4: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== +yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -17726,11 +19855,6 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^21.0.0, yargs-parser@^21.0.1, yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" @@ -17746,7 +19870,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0: +yargs@16.2.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== From 761ff97391a2a11d1d74d2fce9b857e6e6953db7 Mon Sep 17 00:00:00 2001 From: portuu3 <61605646+portuu3@users.noreply.github.com> Date: Tue, 25 Apr 2023 16:06:52 +0200 Subject: [PATCH 20/22] enchance contracts and subgraph CD workflows (#423) --- .github/workflows/cd-deploy-contracts.yaml | 26 +- .github/workflows/cd-subgraph.yaml | 34 + package.json | 1 + packages/core/.openzeppelin/unknown-1287.json | 698 ++++++++++++++++++ packages/core/scripts/upgrade-proxies.ts | 113 ++- .../subgraph/config/moonbase-alpha-v1.json | 4 +- yarn.lock | 86 ++- 7 files changed, 948 insertions(+), 14 deletions(-) diff --git a/.github/workflows/cd-deploy-contracts.yaml b/.github/workflows/cd-deploy-contracts.yaml index 7f5ddf51f8..cc6c8efc72 100644 --- a/.github/workflows/cd-deploy-contracts.yaml +++ b/.github/workflows/cd-deploy-contracts.yaml @@ -12,6 +12,7 @@ jobs: deploy-contracts: name: Deploy contracts runs-on: ubuntu-latest + environment: deploy-contracts strategy: matrix: network: [ @@ -22,6 +23,7 @@ jobs: reward_pool: '0x0376D26246Eb35FF4F9924cF13E6C05fd0bD7Fb4', reputation: '0x6B220A6306D8D86C9878A1FBb3F49707b3E2b405', private_key: TESTNET_PRIVATE_KEY, + subgraph: 'goerli-v1' }, { name: polygon, @@ -30,6 +32,7 @@ jobs: reward_pool: '0xa8e32d777a3839440cc7c24D591A64B9481753B3', # reputation: private_key: MAINNET_PRIVATE_KEY, + subgraph: 'polygon-v1' }, { name: polygonMumbai, @@ -38,6 +41,7 @@ jobs: reward_pool: '0xf0145eD99AC3c4f877aDa7dA4D1E059ec9116BAE', reputation: '0xC522463d36f76b881bE66484e3068F11e7038Ace', private_key: TESTNET_PRIVATE_KEY, + subgraph: 'mumbai-v1' }, { name: bsc, @@ -46,6 +50,7 @@ jobs: reward_pool: '0x4A5963Dd6792692e9147EdC7659936b96251917a', # reputation: private_key: MAINNET_PRIVATE_KEY, + subgraph: 'bsc-v1' }, { name: bscTestnet, @@ -54,6 +59,7 @@ jobs: reward_pool: '0xB0A0500103eCEc431b73F6BAd923F0a2774E6e29', reputation: '0xb8F62639aA3DD51A39d6AACD969363e7F87dcc98', private_key: TESTNET_PRIVATE_KEY, + subgraph: 'bsctest-v1' }, { name: moonbeam, @@ -62,6 +68,7 @@ jobs: reward_pool: '0x4A5963Dd6792692e9147EdC7659936b96251917a', # reputation: private_key: MAINNET_PRIVATE_KEY, + subgraph: 'moonbeam-v1' }, { name: moonbaseAlpha, @@ -70,6 +77,7 @@ jobs: reward_pool: '0xf46B45Df3d956369726d8Bd93Ba33963Ab692920', reputation: '0x87469B4f2Fcf37cBd34E54244c0BD4Fa0603664c', private_key: TESTNET_PRIVATE_KEY, + subgraph: 'moonbase-alpha-v1' }, { name: mainnet, @@ -77,6 +85,7 @@ jobs: staking: '0x05398211bA2046E296fBc9a9D3EB49e3F15C3123', reward_pool: '0x4A5963Dd6792692e9147EdC7659936b96251917a', private_key: MAINNET_PRIVATE_KEY, + subgraph: 'mainnet-v1' } # { # name: avalanche, @@ -123,6 +132,7 @@ jobs: # SKALE_API_KEY: ${{ secrets.SKALE_API_KEY }} # SKALE_BROWSER_API_URL: ${{ secrets.SKALE_BROWSER_API_URL }} # SKALE_BROWSER_URL: ${{ secrets.SKALE_BROWSER_URL }} + SUBGRAPH: ${{ matrix.network.subgraph }} steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 @@ -136,13 +146,20 @@ jobs: uses: dorny/paths-filter@v2 id: filter with: + base: ${{ github.ref }} filters: | escrow_factory: - 'packages/core/contracts/Escrow*.sol' + - 'packages/core/contracts/interfaces/IStaking.sol' staking: - 'packages/core/contracts/Staking.sol' + - 'packages/core/contracts/libs/Stakes.sol' + - 'packages/core/contracts/interfaces/IStaking.sol' + - 'packages/core/contracts/interfaces/IRewardPool.sol' + - 'packages/core/contracts/interfaces/IEscrow.sol' reward_pool: - 'packages/core/contracts/RewardPool.sol' + - 'packages/core/contracts/interfaces/IRewardPool.sol' reputation: - 'packages/core/contracts/Reputation.sol' @@ -207,6 +224,11 @@ jobs: if: ${{ success() }} uses: EndBug/add-and-commit@v9 with: - add: './packages/core/.openzeppelin' - message: 'chore(generated): update generated network data automatically' + add: "['./packages/core/.openzeppelin', './packages/sdk/typescript/subgraph/config']" + message: 'Update grafting and upgrade file from CD' default_author: github_actions + - name: Trigger Another Workflow + uses: benc-uk/workflow-dispatch@v1 + with: + workflow: Subgraph deployment + inputs: '{ "subgraph-name": "${{ matrix.network.subgraph }}" }' diff --git a/.github/workflows/cd-subgraph.yaml b/.github/workflows/cd-subgraph.yaml index 47d3d111a9..f1af19e361 100644 --- a/.github/workflows/cd-subgraph.yaml +++ b/.github/workflows/cd-subgraph.yaml @@ -7,11 +7,32 @@ on: paths: - packages/sdk/typescript/subgraph/** - .github/workflows/cd-subgraph.yaml + workflow_dispatch: + inputs: + subgraph-name: + description: 'subgraph name' + required: true jobs: + contracts-check: + runs-on: ubuntu-latest + outputs: + contracts_updated: ${{ steps.filter.outputs.contracts }} + steps: + - uses: actions/checkout@v3 + - name: Check changes in files + uses: dorny/paths-filter@v2 + id: filter + with: + base: ${{ github.ref }} + filters: | + contracts: + - 'packages/core/contracts/**' subgraph: name: Deploy Subgraph + needs: contracts-check runs-on: ubuntu-latest + strategy: matrix: network: @@ -39,25 +60,38 @@ jobs: # graph: skale fail-fast: true max-parallel: 3 + if: ${{ needs.contracts-check.outputs.contracts_updated != 'true' || github.event.inputs.subgraph-name }} steps: - uses: actions/checkout@v3 + - name: Continue check + id: continue_check + run: | + if [[ ${{ needs.contracts-check.outputs.contracts_updated}} == 'true' && "${{ github.event.inputs.subgraph-name }}" != "${{ matrix.network.graph }}" ]]; then + echo "stop=true" >> $GITHUB_OUTPUT + fi - run: yarn --ignore-scripts + if: ${{steps.continue_check.outputs.stop != 'true'}} name: Install dependencies - run: yarn compile + if: ${{steps.continue_check.outputs.stop != 'true'}} name: Compile smart contracts working-directory: ./packages/core - run: yarn global add @graphprotocol/graph-cli + if: ${{steps.continue_check.outputs.stop != 'true'}} name: Install Graph CLI - run: graph auth --product hosted-service ${API_KEY} + if: ${{steps.continue_check.outputs.stop != 'true'}} name: Authenticate Graph CLI env: API_KEY: ${{ secrets.HP_GRAPH_API_KEY }} - run: yarn generate + if: ${{steps.continue_check.outputs.stop != 'true'}} name: Generate Subgraph working-directory: ./packages/sdk/typescript/subgraph env: NETWORK: ${{ matrix.network.graph }} - run: graph deploy --product hosted-service humanprotocol/${NETWORK} + if: ${{steps.continue_check.outputs.stop != 'true'}} name: Deploy Subgraph working-directory: ./packages/sdk/typescript/subgraph env: diff --git a/package.json b/package.json index db6d41dcad..5f198e2339 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ ] }, "devDependencies": { + "@apollo/client": "^3.7.12", "@babel/core": "^7.20.2", "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", diff --git a/packages/core/.openzeppelin/unknown-1287.json b/packages/core/.openzeppelin/unknown-1287.json index d14c2aef2f..33be913dd6 100644 --- a/packages/core/.openzeppelin/unknown-1287.json +++ b/packages/core/.openzeppelin/unknown-1287.json @@ -852,6 +852,704 @@ } } } + }, + "adb26cc2a129192ee782ae5451b70ab09485d00baa46f24dad20dc55a16087a7": { + "address": "0x6478312bE22FeE34a366d8e945d4dBd97388a306", + "txHash": "0xf13ab228b3fda3b668c426c2f62ff33eb9533c06480fae76365d3dc25e0babd1", + "layout": { + "solcVersion": "0.8.9", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "counter", + "offset": 0, + "slot": "201", + "type": "t_uint256", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:16" + }, + { + "label": "escrowCounters", + "offset": 0, + "slot": "202", + "type": "t_mapping(t_address,t_uint256)", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:17" + }, + { + "label": "lastEscrow", + "offset": 0, + "slot": "203", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:18" + }, + { + "label": "staking", + "offset": 0, + "slot": "204", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:19" + }, + { + "label": "__gap", + "offset": 0, + "slot": "205", + "type": "t_array(t_uint256)46_storage", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:81" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "4924150f83dae4ba388377cd75189be20abee7147d209249d097c6270aea21f7": { + "address": "0x295c5AB1A5eDb8dC20d4508012eF00Fd1D31d8dE", + "txHash": "0x7f65f538606e3fdb25531cf882abdbb0bbcc74984c32e9ff33115042a1668196", + "layout": { + "solcVersion": "0.8.9", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "token", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "Staking", + "src": "contracts/Staking.sol:26" + }, + { + "label": "rewardPool", + "offset": 0, + "slot": "202", + "type": "t_address", + "contract": "Staking", + "src": "contracts/Staking.sol:29" + }, + { + "label": "minimumStake", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "Staking", + "src": "contracts/Staking.sol:32" + }, + { + "label": "lockPeriod", + "offset": 0, + "slot": "204", + "type": "t_uint32", + "contract": "Staking", + "src": "contracts/Staking.sol:35" + }, + { + "label": "stakes", + "offset": 0, + "slot": "205", + "type": "t_mapping(t_address,t_struct(Staker)7335_storage)", + "contract": "Staking", + "src": "contracts/Staking.sol:38" + }, + { + "label": "stakers", + "offset": 0, + "slot": "206", + "type": "t_array(t_address)dyn_storage", + "contract": "Staking", + "src": "contracts/Staking.sol:41" + }, + { + "label": "allocations", + "offset": 0, + "slot": "207", + "type": "t_mapping(t_address,t_struct(Allocation)7195_storage)", + "contract": "Staking", + "src": "contracts/Staking.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "208", + "type": "t_array(t_uint256)43_storage", + "contract": "Staking", + "src": "contracts/Staking.sol:591" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)43_storage": { + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_struct(Allocation)7195_storage)": { + "label": "mapping(address => struct IStaking.Allocation)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Staker)7335_storage)": { + "label": "mapping(address => struct Stakes.Staker)", + "numberOfBytes": "32" + }, + "t_struct(Allocation)7195_storage": { + "label": "struct IStaking.Allocation", + "members": [ + { + "label": "escrowAddress", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "staker", + "type": "t_address", + "offset": 0, + "slot": "1" + }, + { + "label": "tokens", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "createdAt", + "type": "t_uint256", + "offset": 0, + "slot": "3" + }, + { + "label": "closedAt", + "type": "t_uint256", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(Staker)7335_storage": { + "label": "struct Stakes.Staker", + "members": [ + { + "label": "tokensStaked", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "tokensAllocated", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "tokensLocked", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "tokensLockedUntil", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "ca5733762e0cfc07034c9a481ba85a25036b270dae38d2e212b1bbf55afac99e": { + "address": "0x6B220A6306D8D86C9878A1FBb3F49707b3E2b405", + "txHash": "0xb342e4c8ec87a3f224e781e87d9fb53edfad6f5a8c6ce93c4764aaa2640925d8", + "layout": { + "solcVersion": "0.8.9", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "token", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:21" + }, + { + "label": "staking", + "offset": 0, + "slot": "202", + "type": "t_address", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:24" + }, + { + "label": "fees", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:27" + }, + { + "label": "rewards", + "offset": 0, + "slot": "204", + "type": "t_mapping(t_address,t_array(t_struct(Reward)7143_storage)dyn_storage)", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:30" + }, + { + "label": "totalFee", + "offset": 0, + "slot": "205", + "type": "t_uint256", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:32" + }, + { + "label": "__gap", + "offset": 0, + "slot": "206", + "type": "t_array(t_uint256)45_storage", + "contract": "RewardPool", + "src": "contracts/RewardPool.sol:144" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Reward)7143_storage)dyn_storage": { + "label": "struct IRewardPool.Reward[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_array(t_struct(Reward)7143_storage)dyn_storage)": { + "label": "mapping(address => struct IRewardPool.Reward[])", + "numberOfBytes": "32" + }, + "t_struct(Reward)7143_storage": { + "label": "struct IRewardPool.Reward", + "members": [ + { + "label": "escrowAddress", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "slasher", + "type": "t_address", + "offset": 0, + "slot": "1" + }, + { + "label": "tokens", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "c483f36124422742342eee0ba46ed38a3932266d67ed525556d5533ea3cb21b9": { + "address": "0x13DbA7F7e14B6Cd5C92A45ed0EE626EA57d516bc", + "txHash": "0x0b5933e1000047f0aaf04b7119764d6fb073599f5223ed0991149e6acb5537ee", + "layout": { + "solcVersion": "0.8.9", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "counter", + "offset": 0, + "slot": "201", + "type": "t_uint256", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:16" + }, + { + "label": "escrowCounters", + "offset": 0, + "slot": "202", + "type": "t_mapping(t_address,t_uint256)", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:17" + }, + { + "label": "lastEscrow", + "offset": 0, + "slot": "203", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:18" + }, + { + "label": "staking", + "offset": 0, + "slot": "204", + "type": "t_address", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:19" + }, + { + "label": "__gap", + "offset": 0, + "slot": "205", + "type": "t_array(t_uint256)46_storage", + "contract": "EscrowFactory", + "src": "contracts/EscrowFactory.sol:81" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } } } } diff --git a/packages/core/scripts/upgrade-proxies.ts b/packages/core/scripts/upgrade-proxies.ts index cc4fe5aa59..8f07062477 100644 --- a/packages/core/scripts/upgrade-proxies.ts +++ b/packages/core/scripts/upgrade-proxies.ts @@ -1,19 +1,25 @@ /* eslint-disable no-console */ import { ethers, upgrades } from 'hardhat'; +import fs from 'fs'; +import prettier from 'prettier'; +import { ApolloClient, gql, InMemoryCache } from '@apollo/client'; async function main() { + const subgraph = process.env.SUBGRAPH; const escrowFactoryAddress = process.env.ESCROW_FACTORY_ADDRESS; const stakingAddress = process.env.STAKING_ADDRESS; const reputationAddress = process.env.REPUTATION_ADDRESS; const rewardPoolAddress = process.env.REWARD_POOL_ADDRESS; - + let blockNumber = 0; if ( - !escrowFactoryAddress && - !stakingAddress && - !rewardPoolAddress && - !reputationAddress + (!escrowFactoryAddress && + !stakingAddress && + !rewardPoolAddress && + !reputationAddress) || + !subgraph ) { console.error('Env variable missing'); + return; } if (escrowFactoryAddress) { @@ -23,7 +29,18 @@ async function main() { escrowFactoryAddress, EscrowFactory ); - await escrowFactoryContract.deployed(); + const contract = await escrowFactoryContract.deployed(); + const txReceipt = await ethers.provider.getTransactionReceipt( + contract.deployTransaction.hash + ); + + if ( + txReceipt.blockNumber && + (txReceipt.blockNumber < blockNumber || blockNumber == 0) + ) { + blockNumber = txReceipt.blockNumber; + } + console.log( 'Escrow Factory Proxy Address: ', escrowFactoryContract.address @@ -42,7 +59,18 @@ async function main() { stakingAddress, Staking ); - await stakingContract.deployed(); + const contract = await stakingContract.deployed(); + const txReceipt = await ethers.provider.getTransactionReceipt( + contract.deployTransaction.hash + ); + + if ( + txReceipt.blockNumber && + (txReceipt.blockNumber < blockNumber || blockNumber == 0) + ) { + blockNumber = txReceipt.blockNumber; + } + console.log('Staking Proxy Address: ', stakingContract.address); console.log( 'New Staking Implementation Address: ', @@ -56,7 +84,18 @@ async function main() { rewardPoolAddress, RewardPool ); - await rewardPoolContract.deployed(); + const contract = await rewardPoolContract.deployed(); + const txReceipt = await ethers.provider.getTransactionReceipt( + contract.deployTransaction.hash + ); + + if ( + txReceipt.blockNumber && + (txReceipt.blockNumber < blockNumber || blockNumber == 0) + ) { + blockNumber = txReceipt.blockNumber; + } + console.log('Reward Pool Proxy Address: ', rewardPoolContract.address); console.log( 'New Reward Pool Implementation Address: ', @@ -72,7 +111,18 @@ async function main() { reputationAddress, Reputation ); - await reputationContract.deployed(); + const contract = await reputationContract.deployed(); + const txReceipt = await ethers.provider.getTransactionReceipt( + contract.deployTransaction.hash + ); + + if ( + txReceipt.blockNumber && + (txReceipt.blockNumber < blockNumber || blockNumber == 0) + ) { + blockNumber = txReceipt.blockNumber; + } + console.log('Reputation Proxy Address: ', reputationContract.address); console.log( 'New Reputation Implementation Address: ', @@ -81,6 +131,51 @@ async function main() { ) ); } + + if (blockNumber > 0) + updateGraftingConfig(blockNumber, await getSubgraphId(subgraph), subgraph); +} + +interface JSONData { + [key: string]: any; +} + +const GET_SUBGRAPH_ID = gql` + query MyQuery { + _meta { + deployment + } + } +`; + +function getSubgraphId(subgraphName: string) { + const hostedServiceEndpoint = `https://api.thegraph.com/subgraphs/name/humanprotocol/${subgraphName}`; + const client = new ApolloClient({ + uri: hostedServiceEndpoint, + cache: new InMemoryCache(), + }); + + return client.query({ query: GET_SUBGRAPH_ID }).then((result) => { + const subgraphId: string = result.data._meta.deployment; + return subgraphId; + }); +} + +function updateGraftingConfig( + blockNumber: number, + subgraphId: string, + subgraphName: string +) { + const filename = `../sdk/typescript/subgraph/config/${subgraphName}.json`; + const data: JSONData = JSON.parse(fs.readFileSync(filename, 'utf8')); + const currentObject = data; + currentObject['graft']['block'] = blockNumber; + currentObject['graft']['base'] = subgraphId; + const formattedData = prettier.format(JSON.stringify(data), { + parser: 'json', + }); + + fs.writeFileSync(filename, formattedData); } main().catch((error) => { diff --git a/packages/sdk/typescript/subgraph/config/moonbase-alpha-v1.json b/packages/sdk/typescript/subgraph/config/moonbase-alpha-v1.json index 1a7486d94a..61bb00184e 100644 --- a/packages/sdk/typescript/subgraph/config/moonbase-alpha-v1.json +++ b/packages/sdk/typescript/subgraph/config/moonbase-alpha-v1.json @@ -2,8 +2,8 @@ "network": "mbase", "description": "Human subgraph on Moonbase Alpha network", "graft": { - "base": "QmY7gnMbfzt6dUbeiqXBi22x5SnSs473kF3MAKC1ShimA7", - "block": 3912594 + "base": "QmeMPFuH9eorte4yeySqGWrbpYdazyxSn3m8WsZn7dG92v", + "block": 4213548 }, "EscrowFactory": { "address": "0x5e622FF522D81aa426f082bDD95210BC25fCA7Ed", diff --git a/yarn.lock b/yarn.lock index 666cf09bfe..e5bfbd4306 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,6 +15,25 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" +"@apollo/client@^3.7.12": + version "3.7.12" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.7.12.tgz#9ddd355d0788374cdb900e5f40298b196176952b" + integrity sha512-XvH8ssDibx5hR92Tet8CHtUxhiIs+RbYjyxkflAcnF85QT3VacUdNAhjj0OcA2kcZ+5KyceJmilmBNjj6+rJFg== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + "@wry/context" "^0.7.0" + "@wry/equality" "^0.5.0" + "@wry/trie" "^0.3.0" + graphql-tag "^2.12.6" + hoist-non-react-statics "^3.3.2" + optimism "^0.16.2" + prop-types "^15.7.2" + response-iterator "^0.2.6" + symbol-observable "^4.0.0" + ts-invariant "^0.10.3" + tslib "^2.3.0" + zen-observable-ts "^1.2.5" + "@ardatan/sync-fetch@^0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz#3385d3feedceb60a896518a1db857ec1e945348f" @@ -5670,6 +5689,27 @@ fast-url-parser "^1.1.3" tslib "^2.3.1" +"@wry/context@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.0.tgz#be88e22c0ddf62aeb0ae9f95c3d90932c619a5c8" + integrity sha512-LcDAiYWRtwAoSOArfk7cuYvFXytxfVrdX7yxoUmK7pPITLk5jYh2F8knCwS7LjgYL8u1eidPlKKV6Ikqq0ODqQ== + dependencies: + tslib "^2.3.0" + +"@wry/equality@^0.5.0": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.3.tgz#fafebc69561aa2d40340da89fa7dc4b1f6fb7831" + integrity sha512-avR+UXdSrsF2v8vIqIgmeTY0UR91UT+IyablCyKe/uk22uOJ8fusKZnH9JH9e1/EtLeNJBtagNmL3eJdnOV53g== + dependencies: + tslib "^2.3.0" + +"@wry/trie@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.3.2.tgz#a06f235dc184bd26396ba456711f69f8c35097e6" + integrity sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ== + dependencies: + tslib "^2.3.0" + "@zeit/schemas@2.29.0": version "2.29.0" resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.29.0.tgz#a59ae6ebfdf4ddc66a876872dd736baa58b6696c" @@ -10862,6 +10902,13 @@ graphql-import-node@^0.0.5: resolved "https://registry.yarnpkg.com/graphql-import-node/-/graphql-import-node-0.0.5.tgz#caf76a6cece10858b14f27cce935655398fc1bf0" integrity sha512-OXbou9fqh9/Lm7vwXT0XoRN9J5+WCYKnbiTalgFDvkQERITRmcfncZs6aVABedd5B85yQU5EULS4a5pnbpuI0Q== +graphql-tag@^2.12.6: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + graphql-ws@5.12.0: version "5.12.0" resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.12.0.tgz#d06fe38916334b4a4c827f73268cbf4359a32ed7" @@ -15140,6 +15187,14 @@ openpgp@^5.5.0: dependencies: asn1.js "^5.0.0" +optimism@^0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.16.2.tgz#519b0c78b3b30954baed0defe5143de7776bf081" + integrity sha512-zWNbgWj+3vLEjZNIh/okkY2EUfX+vB9TJopzIZwT1xxaMqC5hRLLraePod4c5n4He08xuXNH+zhKFFCu390wiQ== + dependencies: + "@wry/context" "^0.7.0" + "@wry/trie" "^0.3.0" + optimist@~0.3.5: version "0.3.7" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" @@ -16664,6 +16719,11 @@ resolve@^2.0.0-next.4: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +response-iterator@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.6.tgz#249005fb14d2e4eeb478a3f735a28fd8b4c9f3da" + integrity sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw== + responselike@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" @@ -17837,6 +17897,11 @@ swr@^1.3.0: resolved "https://registry.yarnpkg.com/swr/-/swr-1.3.0.tgz#c6531866a35b4db37b38b72c45a63171faf9f4e8" integrity sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw== +symbol-observable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -18263,6 +18328,13 @@ ts-essentials@^7.0.1: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== +ts-invariant@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" + integrity sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ== + dependencies: + tslib "^2.1.0" + ts-jest@^27.1.0: version "27.1.5" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.5.tgz#0ddf1b163fbaae3d5b7504a1e65c914a95cff297" @@ -18325,7 +18397,7 @@ tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.5.0: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -19928,6 +20000,18 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== +zen-observable-ts@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58" + integrity sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg== + dependencies: + zen-observable "0.8.15" + +zen-observable@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== + zksync-web3@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.8.1.tgz#db289d8f6caf61f4d5ddc471fa3448d93208dc14" From 6597cd9c1aa9adb767d5b0ca32799232a5aa16fc Mon Sep 17 00:00:00 2001 From: m00n620 <50647994+m00n620@users.noreply.github.com> Date: Tue, 25 Apr 2023 11:00:10 -0400 Subject: [PATCH 21/22] fix: fortune launcher client styling (#424) --- .../client/public/images/fortune-crypto.png | Bin 24041 -> 78197 bytes .../client/public/images/fortune-fiat.png | Bin 8856 -> 30197 bytes .../fortune/launcher/client/src/App.tsx | 213 ++++++++++-------- .../launcher/client/src/assets/fortune.svg | 11 + .../launcher/client/src/assets/logo.svg | 13 ++ .../client/src/components/FiatJobRequest.tsx | 8 +- .../client/src/components/FundingMethod.tsx | 12 +- .../launcher/client/src/components/Header.tsx | 141 ++++++++++++ .../fortune/launcher/client/src/theme.ts | 12 + 9 files changed, 308 insertions(+), 102 deletions(-) create mode 100644 packages/examples/fortune/launcher/client/src/assets/fortune.svg create mode 100644 packages/examples/fortune/launcher/client/src/assets/logo.svg create mode 100644 packages/examples/fortune/launcher/client/src/components/Header.tsx diff --git a/packages/examples/fortune/launcher/client/public/images/fortune-crypto.png b/packages/examples/fortune/launcher/client/public/images/fortune-crypto.png index 188364629fde159d1148d0c8bfd30c396bba7d48..d7676f75a02180bbec9b613eeaaf24be2c88791d 100644 GIT binary patch literal 78197 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%0A-bPr9j5V5AEz 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 diff --git a/packages/examples/fortune/launcher/client/public/images/fortune-fiat.png b/packages/examples/fortune/launcher/client/public/images/fortune-fiat.png index 27c2f9dad688b39ae6881e4819d0cca864cd4e75..41bafdd98ab68c747bc62570447dfc2a50aaee03 100644 GIT binary patch literal 30197 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 AyZ`_I literal 8856 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 a`u_`FC+gVf0T|!_0000 - - - {status === FortuneStageStatus.FUNDING_METHOD && ( - - - Fortune - - - HUMAN Protocol basic functionality demo - - - Based on an old Unix program in which a pseudorandom message is - displayed from a database of quotations, created by the - community. We're adopting this basic idea, and - decentralizing it, placing the basic ask-and-receive - functionality on-chain. - - - - Blog Article - - - - )} - - - - {status === FortuneStageStatus.FUNDING_METHOD && ( - - )} - {status === FortuneStageStatus.JOB_REQUEST && - fundingMethod === 'crypto' && ( - setStatus(FortuneStageStatus.LAUNCH)} - onSuccess={handleOnSuccess} - onFail={handleOnError} + <> +

+ + + + {status === FortuneStageStatus.FUNDING_METHOD && ( + + + + fortune + + + Fortune + + + HUMAN Protocol basic functionality demo + + + Based on an old Unix program in which a pseudorandom message + is displayed from a database of quotations, created by the + community. We're adopting this basic idea, and + decentralizing it, placing the basic ask-and-receive + functionality on-chain. + + + + Blog Article + + + + + )} + + + + {status === FortuneStageStatus.FUNDING_METHOD && ( + + )} + {status === FortuneStageStatus.JOB_REQUEST && + fundingMethod === 'crypto' && ( + setStatus(FortuneStageStatus.LAUNCH)} + onSuccess={handleOnSuccess} + onFail={handleOnError} + /> + )} + {status === FortuneStageStatus.JOB_REQUEST && + fundingMethod === 'fiat' && ( + setStatus(FortuneStageStatus.LAUNCH)} + onSuccess={handleOnSuccess} + onFail={handleOnError} + /> + )} + {status === FortuneStageStatus.LAUNCH && } + {status === FortuneStageStatus.LAUNCH_SUCCESS && ( + )} - {status === FortuneStageStatus.JOB_REQUEST && - fundingMethod === 'fiat' && ( - setStatus(FortuneStageStatus.LAUNCH)} - onSuccess={handleOnSuccess} - onFail={handleOnError} + {status === FortuneStageStatus.LAUNCH_FAIL && ( + setStatus(FortuneStageStatus.JOB_REQUEST)} /> )} - {status === FortuneStageStatus.LAUNCH && } - {status === FortuneStageStatus.LAUNCH_SUCCESS && ( - - )} - {status === FortuneStageStatus.LAUNCH_FAIL && ( - setStatus(FortuneStageStatus.JOB_REQUEST)} - /> - )} - - - {lastEscrowAddress && ( - - Last Escrow: {lastEscrowAddress} - - )} - + + + {lastEscrowAddress && ( + + Last Escrow: {lastEscrowAddress} + + )} + + - + - + ); } diff --git a/packages/examples/fortune/launcher/client/src/assets/fortune.svg b/packages/examples/fortune/launcher/client/src/assets/fortune.svg new file mode 100644 index 0000000000..5c2a88c941 --- /dev/null +++ b/packages/examples/fortune/launcher/client/src/assets/fortune.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/examples/fortune/launcher/client/src/assets/logo.svg b/packages/examples/fortune/launcher/client/src/assets/logo.svg new file mode 100644 index 0000000000..627402d877 --- /dev/null +++ b/packages/examples/fortune/launcher/client/src/assets/logo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx b/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx index c99fa08684..a67d79dbc0 100644 --- a/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx +++ b/packages/examples/fortune/launcher/client/src/components/FiatJobRequest.tsx @@ -274,7 +274,7 @@ export const JobRequest = ({ Card - + @@ -282,7 +282,7 @@ export const JobRequest = ({ Name on Card - + Amount - + Currency - +