diff --git a/.dockerignore b/.dockerignore index bb06422b..e649f9d9 100644 --- a/.dockerignore +++ b/.dockerignore @@ -8,9 +8,15 @@ README.md # Node node_modules/ tests/ +cypress/ +cypress.config.ts + +# IPC +repositories/ # Build -dist/ +build/ +.next/ # Infra *Dockerfile* diff --git a/.env.example b/.env.example index 5eec831e..86de62d6 100644 --- a/.env.example +++ b/.env.example @@ -1 +1,7 @@ -NEXT_PUBLIC_ALEPH_CHANNEL=TEST \ No newline at end of file +NEXT_PUBLIC_ALEPH_CHANNEL=TEST + +NEXT_PUBLIC_GITCLONE_DIR=repositories +NEXT_PUBLIC_GITHUB_CLIENT_ID="your OAuth client id" +NEXT_PUBLIC_GITHUB_CLIENT_SECRET="your OAuth client secret" +NEXTAUTH_URL=http://localhost:8080 +NEXTAUTH_SECRET="secret" \ No newline at end of file diff --git a/.github/workflows/end-to-end-tests.yaml b/.github/workflows/end-to-end-tests.yaml index ace30f76..13cd71ee 100644 --- a/.github/workflows/end-to-end-tests.yaml +++ b/.github/workflows/end-to-end-tests.yaml @@ -16,7 +16,7 @@ jobs: - name: Run cypress uses: cypress-io/github-action@v4 with: - start: docker run -p 8080:80 ipc:latest + start: docker run -p 8080:8080 ipc:latest wait-on: "http://localhost:8080" - name: Get screenshots diff --git a/.gitignore b/.gitignore index 9f7b59fe..83986da4 100644 --- a/.gitignore +++ b/.gitignore @@ -20,10 +20,7 @@ cypress/downloads # next.js /.next/ -/build/ - -# production -/build +out/ # misc .DS_Store @@ -38,5 +35,5 @@ npm-debug.log* yarn-debug.log* yarn-error.log* - +repositories .metamask diff --git a/Dockerfile b/Dockerfile index 8bd620c4..23588d5a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,41 +1,35 @@ -### -# Builder image -### -FROM node:16.5-alpine AS builder +FROM node:16-alpine WORKDIR /app # Install dependencies COPY package.json . COPY yarn.lock . - -# Install dependencies -RUN yarn install +RUN yarn --frozen-lockfile; # Copy source (see .dockerignore) COPY . . -# Add env variable +# Add env variables ENV NEXT_PUBLIC_ALEPH_CHANNEL=TEST +ENV NEXTAUTH_URL="http://localhost:8080" +ENV NEXTAUTH_SECRET = $(openssl rand -base64 32) +ENV NEXT_PUBLIC_GITCLONE_DIR="repositories" +ENV NEXT_PUBLIC_GITHUB_CLIENT_ID="your OAuth client id" +ENV NEXT_PUBLIC_GITHUB_CLIENT_SECRET="your OAuth client secret" -# Build source -RUN yarn run build +RUN yarn build -### -# Production image -### -FROM nginx:1.21.6-alpine as app - -WORKDIR /app +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +RUN mv next.config.js .next/standalone/ +RUN mv public .next/standalone/ +RUN mv .next/static .next/standalone/.next/ -# Copy code -COPY --from=builder /app/build /usr/share/nginx/html +WORKDIR /app/.next/standalone -# Copy nginx configuration -COPY nginx.conf /etc/nginx/conf.d/default.conf +EXPOSE 8080 -# Expose PORT -EXPOSE 80 +ENV PORT 8080 -# Prefix commands and start production -ENTRYPOINT ["nginx", "-g", "daemon off;"] +CMD ["node", "server.js"] diff --git a/cypress/e2e/features/files.cy.ts b/cypress/e2e/features/files.cy.ts index ca7750fa..ead19de8 100644 --- a/cypress/e2e/features/files.cy.ts +++ b/cypress/e2e/features/files.cy.ts @@ -15,44 +15,34 @@ describe('Create account for File tests', () => { describe('Upload a file modal in Dashboard', () => { const fixtureFile = 'upload_test_file.txt'; + const emptyFixtureFile = 'upload_empty_file.txt'; beforeEach(() => { cy.visit('/login'); cy.get('#ipc-login-text-area').click().type(dashboardSpecMnemonic); cy.get('#ipc-login-credentials-button').click(); cy.get('#ipc-dashboard-drawer-button').click({ force: true }); - cy.get('#ipc-upload-button').click(); + cy.get('.ipc-new-elem-button').click(); + cy.get('#ipc-upload-button').click({ force: true }); }); it('Good number of buttons after upload', () => { cy.get('#ipc-dashboard-upload-file').attachFile(fixtureFile); cy.get('#ipc-dashboard-upload-file-modal-button').click(); cy.wait(2000); - cy.get('button').should('have.length', 12); + cy.get('button').should('have.length', 13); }); it('Good number of buttons after closing modal', () => { cy.get('#ipc-modal-close-button').click(); - cy.get('button').should('have.length', 12); - }); -}); - -describe('Upload an empty file in Dashboard', () => { - const fixtureFile = 'upload_empty_file.txt'; - - beforeEach(() => { - cy.visit('/login'); - cy.get('#ipc-login-text-area').click().type(dashboardSpecMnemonic); - cy.get('#ipc-login-credentials-button').click(); - cy.get('#ipc-dashboard-drawer-button').click({ force: true }); - cy.get('#ipc-upload-button').click(); + cy.get('button').should('have.length', 18); }); it('Good number of buttons after failed upload', () => { - cy.get('#ipc-dashboard-upload-file').attachFile(fixtureFile, { allowEmpty: true }); + cy.get('#ipc-dashboard-upload-file').attachFile(emptyFixtureFile, { allowEmpty: true }); cy.get('#ipc-dashboard-upload-file-modal-button').click(); cy.wait(2000); - cy.get('button').should('have.length', 12); + cy.get('button').should('have.length', 20); }); }); @@ -61,6 +51,7 @@ describe('Download a file in Dashboard', () => { cy.visit('/login'); cy.get('#ipc-login-text-area').click().type(dashboardSpecMnemonic); cy.get('#ipc-login-credentials-button').click(); + cy.get('.ipc-file-popover-button').click(); cy.get('#ipc-dashboard-download-button').click(); }); diff --git a/cypress/e2e/features/programs.cy.ts b/cypress/e2e/features/programs.cy.ts index 2ac94dfa..d6d4c25a 100644 --- a/cypress/e2e/features/programs.cy.ts +++ b/cypress/e2e/features/programs.cy.ts @@ -11,7 +11,7 @@ describe('Create account for Dashboard tests', () => { }); }); -describe('Upload a program modal for Dashboard', () => { +describe('Deploy a program modal for Dashboard', () => { const fixtureFile = 'upload_test_program.zip'; beforeEach(() => { @@ -19,18 +19,19 @@ describe('Upload a program modal for Dashboard', () => { cy.get('#ipc-login-text-area').click().type(dashboardSpecMnemonic); cy.get('#ipc-login-credentials-button').click(); cy.get('#ipc-dashboard-drawer-button').click({ force: true }); - cy.get('#ipc-deploy-button').click().wait(2500); + cy.get('.ipc-new-elem-button').click(); + cy.get('#ipc-deploy-button').click({ force: true }).wait(2500); }); - it('Good number of buttons after upload', () => { + it('Good number of buttons after deployment', () => { cy.get('#ipc-dashboard-deploy-program').attachFile(fixtureFile); cy.get('#ipc-dashboard-deploy-program-modal-button').click(); cy.wait(2000); - cy.get('button').should('have.length', 10); + cy.get('button').should('have.length', 12); }); it('Good number of buttons after closing modal', () => { cy.get('#ipc-modal-close-button').click(); - cy.get('button').should('have.length', 10); + cy.get('button').should('have.length', 11); }); }); diff --git a/cypress/e2e/front/dashboard.cy.ts b/cypress/e2e/front/dashboard.cy.ts index e2b57a1f..828cb08f 100644 --- a/cypress/e2e/front/dashboard.cy.ts +++ b/cypress/e2e/front/dashboard.cy.ts @@ -24,13 +24,17 @@ describe('Good front for Dashboard', () => { it('Good name for upload button', () => { cy.get('#ipc-dashboard-drawer-button').click({ force: true }); + cy.get('.ipc-new-elem-button').click(); cy.get('#ipc-upload-button').should('contain', 'Upload a file'); }); it('Good name for deploy button', () => { - cy.get('#ipc-dashboard-drawer-button').click({ force: true }); cy.get('#ipc-deploy-button').should('contain', 'Deploy a program'); }); + + it('Good name for create folder button', () => { + cy.get('#ipc-create-folder-button').should('contain', 'Create a folder'); + }); }); describe('Good Upload file modal front in Dashboard', () => { @@ -39,7 +43,8 @@ describe('Good Upload file modal front in Dashboard', () => { cy.get('#ipc-login-text-area').click().type(dashboardSpecMnemonic); cy.get('#ipc-login-credentials-button').click(); cy.get('#ipc-dashboard-drawer-button').click({ force: true }); - cy.get('#ipc-upload-button').click(); + cy.get('.ipc-new-elem-button').click(); + cy.get('#ipc-upload-button').click({ force: true }); }); it('Good header', () => { @@ -47,7 +52,7 @@ describe('Good Upload file modal front in Dashboard', () => { }); it('Good number of buttons', () => { - cy.get('button').should('have.length', 10); + cy.get('button').should('have.length', 13); }); it('Good number of input', () => { @@ -69,7 +74,8 @@ describe('Good Deploy program modal front in Dashboard', () => { cy.get('#ipc-login-text-area').click().type(dashboardSpecMnemonic); cy.get('#ipc-login-credentials-button').click(); cy.get('#ipc-dashboard-drawer-button').click({ force: true }); - cy.get('#ipc-deploy-button').click(); + cy.get('.ipc-new-elem-button').click(); + cy.get('#ipc-deploy-button').click({ force: true }); }); it('Good header', () => { @@ -77,7 +83,7 @@ describe('Good Deploy program modal front in Dashboard', () => { }); it('Good number of buttons', () => { - cy.get('button').should('have.length', 10); + cy.get('button').should('have.length', 13); }); it('Good number of input', () => { @@ -92,3 +98,34 @@ describe('Good Deploy program modal front in Dashboard', () => { cy.get('#ipc-modal-close-button').should('contain', 'Close'); }); }); + +describe('Good Create folder modal front in Dashboard', () => { + it('Go to create folder modal into dashboard', () => { + cy.visit('/login'); + cy.get('#ipc-login-text-area').click().type(dashboardSpecMnemonic); + cy.get('#ipc-login-credentials-button').click(); + cy.get('#ipc-dashboard-drawer-button').click({ force: true }); + cy.get('.ipc-new-elem-button').click(); + cy.get('#ipc-create-folder-button').click({ force: true }); + }); + + it('Good header', () => { + cy.get('header').should('contain', 'Create a folder'); + }); + + it('Good number of buttons', () => { + cy.get('button').should('have.length', 13); + }); + + it('Good number of input', () => { + cy.get('input[type=text]').should('have.length', 1); + }); + + it('Good name for create folder button', () => { + cy.get('#ipc-dashboard-create-folder-modal-button').should('contain', 'Create Folder'); + }); + + it('Good name for close button', () => { + cy.get('#ipc-modal-close-button').should('contain', 'Close'); + }); +}); diff --git a/cypress/e2e/front/home.cy.ts b/cypress/e2e/front/home.cy.ts index 0504ec81..6722dfb0 100644 --- a/cypress/e2e/front/home.cy.ts +++ b/cypress/e2e/front/home.cy.ts @@ -30,7 +30,7 @@ describe('Signup Button front in Home', () => { }); it('Good URL redirect for create account button', () => { - cy.get('#ipc-home-create-account-button').click().url().should('eq', 'http://localhost:8080/signup'); + cy.get('#ipc-home-create-account-button').click().url().should('eq', `${Cypress.config().baseUrl}/signup`); }); }); @@ -40,6 +40,6 @@ describe('Login Button front in Home', () => { }); it('Good URL redirect for login button', () => { - cy.get('#ipc-home-login-button').click().url().should('eq', 'http://localhost:8080/login'); + cy.get('#ipc-home-login-button').click().url().should('eq', `${Cypress.config().baseUrl}/login`); }); }); diff --git a/cypress/e2e/login.cy.ts b/cypress/e2e/login.cy.ts index 8b17cbcf..57fd78e1 100644 --- a/cypress/e2e/login.cy.ts +++ b/cypress/e2e/login.cy.ts @@ -1,4 +1,4 @@ -const mnemonic = 'repair nest celery light distance coil giant pyramid poet suit trim fluid'; +const mnemonic = 'enlist deny plug hockey sign dirt rebel nothing tobacco dream error fever'; describe('Good front for Login', () => { it('Go to login', () => { @@ -41,7 +41,7 @@ describe('Login with credentials Button for Login', () => { }); it('Good URL redirect for login button', () => { - cy.get('#ipc-login-credentials-button').click().url().should('eq', 'http://localhost:8080/dashboard'); + cy.get('#ipc-login-credentials-button').click().url().should('eq', `${Cypress.config().baseUrl}/dashboard`); }); }); @@ -51,6 +51,6 @@ describe('Signup Button for Login', () => { }); it('Good URL redirect for signup button', () => { - cy.get('#ipc-login-signup-button').click().url().should('eq', 'http://localhost:8080/signup'); + cy.get('#ipc-login-signup-button').click().url().should('eq', `${Cypress.config().baseUrl}/signup`); }); }); diff --git a/cypress/e2e/signup.cy.ts b/cypress/e2e/signup.cy.ts index 441cad36..9958a22e 100644 --- a/cypress/e2e/signup.cy.ts +++ b/cypress/e2e/signup.cy.ts @@ -68,7 +68,7 @@ describe('Signup with credentials Button for Signup', () => { }); it('Good URL redirect for close button', () => { - cy.get('#ipc-modal-close-button').click().url().should('eq', 'http://localhost:8080/dashboard'); + cy.get('#ipc-modal-close-button').click().url().should('eq', `${Cypress.config().baseUrl}/dashboard`); }); }); @@ -78,6 +78,6 @@ describe('Login Button for Signup', () => { }); it('Good URL redirect for login button', () => { - cy.get('#ipc-signup-login-button').click().url().should('eq', 'http://localhost:8080/login'); + cy.get('#ipc-signup-login-button').click().url().should('eq', `${Cypress.config().baseUrl}/login`); }); }); diff --git a/next.config.js b/next.config.js index a843cbee..4247815e 100644 --- a/next.config.js +++ b/next.config.js @@ -1,6 +1,7 @@ /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, + output: 'standalone', } -module.exports = nextConfig +module.exports = nextConfig; diff --git a/nginx.conf b/nginx.conf deleted file mode 100644 index e6773908..00000000 --- a/nginx.conf +++ /dev/null @@ -1,20 +0,0 @@ -server { - listen 80; - server_name localhost; - - - index index.html; - location = / { - root /usr/share/nginx/html; - } - - location / { - root /usr/share/nginx/html; - try_files $uri $uri.html 404.html; - } - - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root /usr/share/nginx/html; - } -} diff --git a/package.json b/package.json index daad6e8e..b6de5234 100644 --- a/package.json +++ b/package.json @@ -3,30 +3,37 @@ "version": "0.1.0", "private": true, "dependencies": { - "@babel/core": "^7.18.5", + "@babel/core": "^7.18.10", "@chakra-ui/icons": "^1.1.7", "@chakra-ui/react": "^1.6.6", "@chakra-ui/system": "^1.6.6", "@chakra-ui/theme-tools": "^1.1.9", - "@emotion/react": "^11.9.3", - "@emotion/styled": "^11.9.3", + "@emotion/react": "^11.10.0", + "@emotion/styled": "^11.10.0", "aleph-sdk-ts": "^2.2.2", + "archiver": "^5.3.1", + "axios": "^0.27.2", "crypto-js": "^4.1.1", "eth-crypto": "^2.3.0", "ethers": "^5.6.9", "framer-motion": "^4.1.17", + "git-clone": "^0.2.0", + "joi": "^17.6.0", "js-file-download": "^0.4.12", - "next": "^12.1.6", + "next": "^12.2.4", + "next-auth": "^4.10.3", + "next-connect": "^1.0.0-next.1", + "next-joi": "^2.2.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-icons": "^4.4.0", "typescript": "^4.7.4", - "web3": "^1.7.4" + "web3": "^1.7.5" }, "scripts": { "dev": "next dev -p 8080", - "build": "next build && next export -o build/", - "start": "next start -p 8080", + "build": "next build", + "start": "next start", "cypress:open": "cypress open", "cypress:run": "cypress run", "lint": "next lint", @@ -45,22 +52,23 @@ ] }, "devDependencies": { - "@next/eslint-plugin-next": "^12.1.6", - "@types/crypto-js": "^4.0.1", + "@next/eslint-plugin-next": "^12.2.3", + "@types/crypto-js": "^4.1.1", + "@types/git-clone": "^0.2.0", "@types/node": "^12.20.15", "@types/react": "^17.0.11", "@types/react-dom": "^17.0.8", - "@typescript-eslint/eslint-plugin": "^5.29.0", - "@typescript-eslint/parser": "^5.29.0", - "cypress": "^10.2.0", + "@typescript-eslint/eslint-plugin": "^5.32.0", + "@typescript-eslint/parser": "^5.32.0", + "cypress": "^10.4.0", "cypress-file-upload": "^5.0.8", - "eslint": "^8.18.0", + "eslint": "^8.21.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^17.0.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.6.0", - "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-jsx-a11y": "^6.6.1", + "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", "prettier": "^2.7.1" diff --git a/pages/_app.tsx b/pages/_app.tsx index e4af7a8b..3dca0187 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,6 +1,7 @@ import { useEffect, useState } from 'react'; import Head from 'next/head'; import { AppProps } from 'next/app'; +import { SessionProvider } from 'next-auth/react'; import { ChakraProvider, Center, Spinner, useToast } from '@chakra-ui/react'; @@ -9,14 +10,20 @@ import 'theme/index.css'; import User from 'lib/user'; import Auth from 'lib/auth'; +import type { IPCFile, IPCFolder, IPCContact } from 'types/types'; import UserContext from 'contexts/user'; import AuthContext from 'contexts/auth'; +import DriveContext from 'contexts/drive'; -const App = ({ Component, pageProps }: AppProps) => { +const App = ({ Component, pageProps: { session, ...pageProps } }: AppProps) => { const [auth, setAuth] = useState(undefined); const [user, setUser] = useState(undefined); const [error, setError] = useState(undefined); + const [files, setFiles] = useState([]); + const [folders, setFolders] = useState([]); + const [contacts, setContacts] = useState([]); + const [path, setPath] = useState('/'); const toast = useToast(); useEffect(() => { @@ -61,7 +68,22 @@ const App = ({ Component, pageProps }: AppProps) => { - + + + + + diff --git a/pages/api/auth/[...nextauth].ts b/pages/api/auth/[...nextauth].ts new file mode 100644 index 00000000..4385daa5 --- /dev/null +++ b/pages/api/auth/[...nextauth].ts @@ -0,0 +1,22 @@ +import NextAuth from 'next-auth'; +import GithubProvider from 'next-auth/providers/github'; +import { GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET } from 'config/constants'; + +export default NextAuth({ + providers: [ + GithubProvider({ + clientId: GITHUB_CLIENT_ID, + clientSecret: GITHUB_CLIENT_SECRET, + authorization: { params: { scope: 'repo' } }, + }), + ], + callbacks: { + async jwt({ token, account }) { + if (account) return { ...token, accessToken: account.access_token }; + return token; + }, + async session({ session, token }) { + return { ...session, accessToken: token.accessToken }; + }, + }, +}); diff --git a/pages/api/computing/github/repositories.ts b/pages/api/computing/github/repositories.ts new file mode 100644 index 00000000..1e657dd3 --- /dev/null +++ b/pages/api/computing/github/repositories.ts @@ -0,0 +1,23 @@ +import { NextApiRequest, NextApiResponse } from 'next'; +import { getSession } from 'next-auth/react'; +import axios from 'axios'; + +export default async (req: NextApiRequest, res: NextApiResponse): Promise => { + const session = await getSession({ req }); + + if (!session) return res.status(401).json({ error: 'Permission denied' }); + const userInfo = await axios.get('https://api.github.com/user', { + headers: { + Authorization: `token ${session.accessToken}`, + }, + }); + if (userInfo.status !== 200) return res.status(userInfo.status).json({ error: userInfo.statusText }); + + const userRepos = await axios.get('https://api.github.com/user/repos', { + headers: { + Authorization: `token ${session.accessToken}`, + }, + }); + if (userRepos.status !== 200) return res.status(userRepos.status).json({ error: userRepos.statusText }); + return res.status(200).json(userRepos.data); +}; diff --git a/pages/api/program/create.ts b/pages/api/program/create.ts new file mode 100644 index 00000000..5975579a --- /dev/null +++ b/pages/api/program/create.ts @@ -0,0 +1,27 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; +import { createRouter } from 'next-connect'; +import Joi from 'joi'; +import validate from 'lib/middlewares/validation'; +// import { clone, cleanup, getProgramName } from 'lib/services/git'; for future use +import { clone, getProgramName } from 'lib/services/git'; +import { compress, programPublish } from 'lib/services/deploy'; + +const router = createRouter(); + +const postSchema = Joi.object({ + // eslint-disable-next-line no-useless-escape + repository: Joi.string().pattern(/((git|http(s)?)|(git@[\w\.]+))(:(\/\/)?)([\w\.@\:\/\-~]+)(\.git)(\/)?/), +}); + +router.post(validate({ body: postSchema }), async (req, res) => { + const { repository } = req.body; + let itemHash = ''; + await clone(repository).then(async (path: string) => { + const fileName: string = await compress(path); + itemHash = await programPublish(fileName); + // await cleanup(GITCLONE_DIR); + }); + return res.status(200).json({ name: getProgramName(repository), item_hash: itemHash }); +}); + +export default router.handler(); diff --git a/pages/dashboard.tsx b/pages/dashboard.tsx index a456a0ab..932f1ce0 100644 --- a/pages/dashboard.tsx +++ b/pages/dashboard.tsx @@ -1,83 +1,43 @@ import { ChangeEvent, useEffect, useState } from 'react'; import { useRouter } from 'next/router'; +import { useSession, signIn, signOut } from 'next-auth/react'; +import axios from 'axios'; -import { - Box, - VStack, - Button, - HStack, - useDisclosure, - useToast, - Input, - Text, - Flex, - Spacer, - Divider, - FormControl, - FormLabel, -} from '@chakra-ui/react'; -import { CheckIcon } from '@chakra-ui/icons'; - -import EthCrypto from 'eth-crypto'; +import { Box, VStack, Button, HStack, useDisclosure, useToast, Input, Select } from '@chakra-ui/react'; import { useUserContext } from 'contexts/user'; -import type { IPCFile, IPCContact, IPCProgram } from 'types/types'; +import type { IPCFile, IPCProgram, GitHubRepository } from 'types/types'; import Modal from 'components/Modal'; -import { generateFileKey } from 'utils/generateFileKey'; - -import { getFileContent, extractFilename } from 'utils/fileManipulation'; +import { extractFilename } from 'utils/fileManipulation'; import { ResponsiveBar } from 'components/ResponsiveBar'; -import { DisplayFileCards } from 'components/DisplayFileCards'; +import { DisplayCards } from 'components/DisplayCards'; +import { useDriveContext } from 'contexts/drive'; const Dashboard = (): JSX.Element => { const toast = useToast({ duration: 2000, isClosable: true }); const router = useRouter(); const { user } = useUserContext(); - const { isOpen, onOpen, onClose } = useDisclosure(); - const { isOpen: isOpenContactAdd, onOpen: onOpenContactAdd, onClose: onCloseContactAdd } = useDisclosure(); - const { - isOpen: isOpenUpdateFileName, - onOpen: onOpenUpdateFileName, - onClose: onCloseUpdateFileName, - } = useDisclosure(); - const { isOpen: isOpenContactUpdate, onOpen: onOpenContactUpdate, onClose: onCloseContactUpdate } = useDisclosure(); - const { isOpen: isOpenShare, onOpen: onOpenShare, onClose: onCloseShare } = useDisclosure(); const { isOpen: isOpenProgram, onOpen: onOpenProgram, onClose: onCloseProgram } = useDisclosure(); + const { isOpen: isOpenGithub, onOpen: onOpenGithub, onClose: onCloseGithub } = useDisclosure(); + const { setFiles, setFolders, setContacts } = useDriveContext(); const [programs, setPrograms] = useState([]); - const { - isOpen: isOpenUpdateFileContent, - onOpen: onOpenUpdateFileContent, - onClose: onCloseUpdateFileContent, - } = useDisclosure(); - const [files, setFiles] = useState([]); const [sharedFiles, setSharedFiles] = useState([]); - const [contacts, setContacts] = useState([]); - const [contactInfos, setContactInfo] = useState({ - name: '', - address: '', - publicKey: '', - files: [], - }); const [selectedTab, setSelectedTab] = useState(0); - const [isUploadLoading, setIsUploadLoading] = useState(false); const [isDeployLoading, setIsDeployLoading] = useState(false); - const [isUpdateLoading, setIsUpdateLoading] = useState(false); + const [isGithubLoading] = useState(false); const [fileEvent, setFileEvent] = useState | undefined>(undefined); - const [contactsNameEvent, setContactNameEvent] = useState | undefined>(undefined); - const [fileNameEvent, setFileNameEvent] = useState | undefined>(undefined); - const [contactsPublicKeyEvent, setContactPublicKeyEvent] = useState | undefined>( - undefined, - ); - const [selectedFile, setSelectedFile] = useState({ + const [selectedProgram, setSelectedProgram] = useState({ name: '', hash: '', - created_at: 0, - key: { iv: '', ephemPublicKey: '', ciphertext: '', mac: '' }, + createdAt: 0, }); + const [repositories, setRepositories] = useState([]); + const [selectedRepository, setSelectedRepository] = useState(''); + const { data: session } = useSession(); useEffect(() => { (async () => { @@ -86,30 +46,33 @@ const Dashboard = (): JSX.Element => { } else { await loadContact(); await loadUserContents(); + if (session) await getRepositories(); } })(); }, []); - const loadUserContents = async () => { - try { - const loadShared = await user.drive.loadShared(user.contact.contacts); - toast({ title: loadShared.message, status: loadShared.success ? 'success' : 'error' }); - setFiles(user.drive.files); - setSharedFiles(user.drive.sharedFiles); + const loadContact = async () => { + const load = await user.contact.load(); - const loadedPrograms = await user.computing.loadPrograms(); - toast({ title: loadedPrograms.message, status: loadedPrograms.success ? 'success' : 'error' }); - setPrograms(user.computing.programs); - } catch (error) { - console.error(error); - toast({ title: 'Unable to load shared drive', status: 'error' }); - } + toast({ title: load.message, status: load.success ? 'success' : 'error' }); + setContacts(user.contact.contacts); + }; + + const loadUserContents = async () => { + const loadShared = await user.drive.loadShared(user.contact.contacts); + toast({ title: loadShared.message, status: loadShared.success ? 'success' : 'error' }); + setFiles(user.drive.files); + setFolders(user.drive.folders); + setSharedFiles(user.drive.sharedFiles); + + const loadedPrograms = await user.computing.load(); + toast({ title: loadedPrograms.message, status: loadedPrograms.success ? 'success' : 'error' }); + setPrograms(user.computing.programs); }; - const uploadProgram = async () => { + const uploadProgram = async (oldProgram: IPCProgram | undefined) => { if (!fileEvent || !fileEvent.target.files) return; const filename = extractFilename(fileEvent.target.value); - if (!filename) return; setIsDeployLoading(true); @@ -118,11 +81,14 @@ const Dashboard = (): JSX.Element => { { name: filename, hash: '', - created_at: Date.now(), + createdAt: Date.now(), }, fileEvent.target.files[0], + !!oldProgram, + oldProgram, ); toast({ title: upload.message, status: upload.success ? 'success' : 'error' }); + setPrograms(user.computing.programs); onCloseProgram(); } catch (error) { console.error(error); @@ -132,226 +98,63 @@ const Dashboard = (): JSX.Element => { setIsDeployLoading(false); }; - const uploadFile = async () => { - if (!fileEvent) return; - const filename = extractFilename(fileEvent.target.value); - const fileContent = await getFileContent(fileEvent.target.files ? fileEvent.target.files[0] : []); - const key = generateFileKey(); - - if (!filename || !fileContent) { - toast({ title: 'Invalid file', status: 'error' }); - setFileEvent(undefined); - setIsUploadLoading(false); - onClose(); - return; - } - - const file: IPCFile = { - name: filename, - hash: fileContent, - created_at: Date.now(), - key: { iv: '', ephemPublicKey: '', ciphertext: '', mac: '' }, - }; - setIsUploadLoading(true); + const getRepositories = async () => { try { - if (user.account) { - const upload = await user.drive.upload(file, key); - if (!upload.success || !upload.file) { - toast({ title: upload.message, status: upload.success ? 'success' : 'error' }); - } else { - user.drive.files.push(upload.file); - - const shared = await user.contact.addFileToContact( - user.account.address, - user.drive.files[user.drive.files.length - 1], - ); - toast({ title: upload.message, status: shared.success ? 'success' : 'error' }); - } - } else { - toast({ title: 'Failed to load account', status: 'error' }); - } - onClose(); + const result = await axios.get('/api/computing/github/repositories'); + if (result.status !== 200) throw new Error("Unable to load repositories from Github's API"); + setRepositories(result.data); } catch (error) { console.error(error); - toast({ title: 'Unable to upload the file', status: 'error' }); } - setFileEvent(undefined); - setIsUploadLoading(false); }; - const updateFileName = async () => { - try { - if (fileNameEvent) { - const filename = fileNameEvent.target.value; - const update = await user.contact.updateFileName(selectedFile, filename); - toast({ title: update.message, status: update.success ? 'success' : 'error' }); - if (update.success) { - const index = files.indexOf(selectedFile); - - if (index !== -1) files[index].name = filename; - setFiles(files); - } - onCloseUpdateFileName(); - } - } catch (error) { - console.error(error); - toast({ title: 'Unable to change name', status: 'error' }); - } - }; - - const updateFileContent = async () => { - if (!fileEvent || !selectedFile) return; - - const oldFile = selectedFile; - const fileContent = await getFileContent(fileEvent.target.files ? fileEvent.target.files[0] : []); - const key = generateFileKey(); - - if (!fileContent) return; - - const newFile: IPCFile = { - name: oldFile.name, - hash: fileContent, - created_at: oldFile.created_at, - key: { iv: '', ephemPublicKey: '', ciphertext: '', mac: '' }, - }; - setIsUpdateLoading(true); - try { - const upload = await user.drive.upload(newFile, key); - - if (!upload.success || !upload.file) { - toast({ title: upload.message, status: upload.success ? 'success' : 'error' }); - } else { - const updated = await user.contact.updateFileContent(upload.file, oldFile.hash); - toast({ title: updated.message, status: updated.success ? 'success' : 'error' }); - if (updated.success && upload.file) { - const index = files.indexOf(oldFile); - if (index !== -1) files[index] = upload.file; - setFiles(files); - - const deleted = await user.drive.delete(oldFile.hash); - toast({ title: deleted.message, status: deleted.success ? 'success' : 'error' }); - } - } - onCloseUpdateFileContent(); - } catch (error) { - console.error(error); - toast({ title: 'Unable to update the file', status: 'error' }); - } - setIsUpdateLoading(false); - }; - - const shareFile = async (contact: IPCContact) => { - try { - const share = await user.contact.addFileToContact(contact.address, selectedFile); - onCloseShare(); - toast({ title: share.message, status: share.success ? 'success' : 'error' }); - } catch (error) { - console.error(error); - toast({ title: 'Unable to share the file', status: 'error' }); - } - }; - - const loadContact = async () => { - try { - const load = await user.contact.load(); - toast({ title: load.message, status: load.success ? 'success' : 'error' }); - - setContacts(user.contact.contacts); - } catch (error) { - console.error(error); - toast({ title: 'Unable to load contacts', status: 'error' }); - } - }; - - const addContact = async () => { - try { - if (contactsNameEvent && contactsPublicKeyEvent) { - const add = await user.contact.add({ - name: contactsNameEvent.target.value, - address: EthCrypto.publicKey.toAddress(contactsPublicKeyEvent.target.value.slice(2)), - publicKey: contactsPublicKeyEvent.target.value, - files: [], - }); - - toast({ title: add.message, status: add.success ? 'success' : 'error' }); - setContacts(user.contact.contacts); - } else { - toast({ title: 'Bad contact infos', status: 'error' }); - } - onCloseContactAdd(); - } catch (error) { - console.error(error); - toast({ title: 'Unable to add this contact', status: 'error' }); - } - }; - - const updateContact = async () => { - try { - if (contactsPublicKeyEvent) { - const update = await user.contact.update( - contactInfos.address, - contactsNameEvent ? contactsNameEvent.target.value : contactInfos.name, - ); - toast({ title: update.message, status: update.success ? 'success' : 'error' }); - setContacts(user.contact.contacts); - } else { - toast({ title: 'Invalid address', status: 'error' }); - } - onCloseContactUpdate(); - } catch (error) { - console.error(error); - toast({ title: 'Unable to update this contact', status: 'error' }); - } - }; - - const deleteContact = async (contactToDelete: IPCContact) => { - try { - const deletedContact = contacts.find((contact) => contact === contactToDelete); - - if (deletedContact) { - const deleteResponse = await user.contact.remove(contactToDelete.address); - - toast({ title: deleteResponse.message, status: deleteResponse.success ? 'success' : 'error' }); - setContacts(user.contact.contacts); - } else { - toast({ title: 'Unable to find this contact', status: 'error' }); - } - } catch (error) { - console.error(error); - toast({ title: 'Unable to delete this contact', status: 'error' }); - } + const cloneToBackend = async (repository: string) => { + axios + .post('/api/program/create', { + repository: `${repository}.git`, + }) + .then(async (response) => { + const newProgram: IPCProgram = { + name: response.data.name, + hash: response.data.item_hash, + createdAt: Date.now(), + }; + user.computing.programs.push(newProgram); + await user.computing.publishAggregate(); + setPrograms(user.computing.programs); + toast({ title: 'Upload succeeded', status: 'success' }); + onCloseGithub(); + }) + .catch((e) => { + toast({ title: 'Upload failed', status: 'error' }); + console.error(e); + }); }; return ( - - - - - + + + + + + + { variant="inline" w="100%" mb="16px" - onClick={uploadProgram} + onClick={() => uploadProgram(selectedProgram)} isLoading={isDeployLoading} id="ipc-dashboard-deploy-program-modal-button" > @@ -379,182 +182,56 @@ const Dashboard = (): JSX.Element => { /> - Upload file - - } - > - ) => setFileEvent(e)} - id="ipc-dashboard-upload-file" - /> - - { + cloneToBackend(selectedRepository); + }} + isLoading={isDeployLoading} + id="ipc-dashboard-deploy-from-github-modal-button" > - Add the contact + Deploy program } > <> - ) => setContactNameEvent(e)} - id="ipc-dashboard-input-contact-name" - /> - ) => setContactPublicKeyEvent(e)} - id="ipc-dashboard-input-contact-public-key" - /> + {!session && ( + + )} + {session && ( + <> + + + + + + )} - - Update the contact - - } - > - - New name - ) => setContactNameEvent(e)} - id="ipc-dashboard-input-contact-name" - /> - - - - OK - - } - > - - New file name - ) => setFileNameEvent(e)} - id="ipc-dashboard-input-update-filename" - /> - - - - Upload new version - - } - > - ) => setFileEvent(e)} - id="ipc-dashboard-input-new-file-content" - /> - - - - {contacts.map((contact) => { - if (user.account && contact.address !== user.account.address) - return ( - - - {contact.name} - {contact.address} - - - - - ); - return ; - })} - - ); }; diff --git a/pages/login.tsx b/pages/login.tsx index 72de871d..ee74bb79 100644 --- a/pages/login.tsx +++ b/pages/login.tsx @@ -60,7 +60,7 @@ const Login = (): JSX.Element => { - Already an account ? + Create an account
diff --git a/pages/signup.tsx b/pages/signup.tsx index 68ac763b..10bf3099 100644 --- a/pages/signup.tsx +++ b/pages/signup.tsx @@ -74,7 +74,7 @@ const Signup = (): JSX.Element => { Signup - Already an account ? + Already got an account ?
diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 00000000..951a58ec Binary files /dev/null and b/public/favicon.ico differ diff --git a/src/components/ContactCards.tsx b/src/components/ContactCards.tsx index 2188d126..d9d517ec 100644 --- a/src/components/ContactCards.tsx +++ b/src/components/ContactCards.tsx @@ -1,25 +1,19 @@ import { Box, Button, Divider, Tooltip, VStack } from '@chakra-ui/react'; -import { CopyIcon, DeleteIcon, EditIcon } from '@chakra-ui/icons'; +import { CopyIcon } from '@chakra-ui/icons'; import ContactCard from 'components/ContactCard'; import type { IPCContact } from 'types/types'; +import AddContact from 'components/contact/AddContact'; +import DeleteContact from 'components/contact/DeleteContact'; +import UpdateContact from 'components/contact/UpdateContact'; + type ContactCardsProps = { contacts: IPCContact[]; - setContactInfo: (contact: IPCContact) => void; - onOpenContactUpdate: () => void; - onOpenContactAdd: () => void; - deleteContact: (contactToDelete: IPCContact) => Promise; }; -const ContactCards = ({ - contacts, - setContactInfo, - onOpenContactUpdate, - onOpenContactAdd, - deleteContact, -}: ContactCardsProps): JSX.Element => ( +const ContactCards = ({ contacts }: ContactCardsProps): JSX.Element => ( <> - + {contacts.map((contact, index) => { @@ -57,23 +49,10 @@ const ContactCards = ({ - + - + diff --git a/src/components/CustomButtons.tsx b/src/components/CustomButtons.tsx index eab94c35..20ea357f 100644 --- a/src/components/CustomButtons.tsx +++ b/src/components/CustomButtons.tsx @@ -1,25 +1,46 @@ import { Button } from '@chakra-ui/react'; -type UploadButtonProps = { - text: string; +type CustomButtonProps = { onClick: () => void; isLoading: boolean; }; -export const UploadButton = ({ text, onClick, isLoading }: UploadButtonProps): JSX.Element => ( - ); -export const ContactButton = ({ text, onClick, isLoading }: UploadButtonProps): JSX.Element => ( - ); -export const DeployButton = ({ text, onClick, isLoading }: UploadButtonProps): JSX.Element => ( - ); diff --git a/src/components/DisplayCards.tsx b/src/components/DisplayCards.tsx new file mode 100644 index 00000000..97e621ba --- /dev/null +++ b/src/components/DisplayCards.tsx @@ -0,0 +1,92 @@ +import { VStack, HStack, Box, Text, Spacer } from '@chakra-ui/react'; + +import type { IPCFile, IPCProgram } from 'types/types'; + +import DriveCards from 'components/DriveCards'; +import ProgramCards from 'components/ProgramCards'; +import ContactCards from 'components/ContactCards'; +import ProfileCard from 'components/ProfileCard'; + +import { useDriveContext } from 'contexts/drive'; +import { useUserContext } from 'contexts/user'; + +type CardsProps = { + myPrograms: IPCProgram[]; + sharedFiles: IPCFile[]; + index: number; + onOpenRedeployProgram: () => void; + isRedeployLoading: boolean; + setSelectedProgram: (program: IPCProgram) => void; +}; + +export const DisplayCards = ({ + myPrograms, + sharedFiles, + index, + onOpenRedeployProgram, + isRedeployLoading, + setSelectedProgram, +}: CardsProps): JSX.Element => { + const { user } = useUserContext(); + const { path, files, folders } = useDriveContext(); + + if (index === 0) + return ( + + + My Files + + + + Name + + + + Latest upload on Aleph + + + + File Size + + + elem.path === path)} + folders={folders.filter((elem) => elem.path === path)} + /> + + ); + if (index === 1) + return ( + + + Shared with me + + + + ); + if (index === 2) return ; + if (index === 3) + return ( + + + My Programs + + + + Name + + + + Latest upload on Aleph + + + + + ); + return ; +}; diff --git a/src/components/DisplayFileCards.tsx b/src/components/DisplayFileCards.tsx deleted file mode 100644 index 19221a71..00000000 --- a/src/components/DisplayFileCards.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import FileCards from 'components/FileCards'; -import ProgramCards from 'components/ProgramCards'; -import ContactCards from 'components/ContactCards'; -import ProfileCard from 'components/ProfileCard'; - -import type { IPCContact, IPCFile, IPCProgram } from 'types/types'; - -type FileCardsProps = { - myFiles: IPCFile[]; - myPrograms: IPCProgram[]; - sharedFiles: IPCFile[]; - contacts: IPCContact[]; - index: number; - isUpdateLoading: boolean; - setSelectedFile: (file: IPCFile) => void; - onOpenShare: () => void; - setContactInfo: (contact: IPCContact) => void; - onOpenContactUpdate: () => void; - onOpenContactAdd: () => void; - onOpenUpdateFileName: () => void; - onOpenUpdateFileContent: () => void; - deleteContact: (contactToDelete: IPCContact) => Promise; -}; - -export const DisplayFileCards = ({ - myFiles, - myPrograms, - sharedFiles, - contacts, - index, - isUpdateLoading, - setSelectedFile, - onOpenShare, - setContactInfo, - onOpenContactUpdate, - onOpenContactAdd, - onOpenUpdateFileName, - onOpenUpdateFileContent, - deleteContact, -}: FileCardsProps): JSX.Element => { - if (index === 0) - return ( - - ); - if (index === 1) - return ( - - ); - if (index === 2) - return ( - - ); - if (index === 3) return ; - return ( - - ); -}; diff --git a/src/components/DriveCards.tsx b/src/components/DriveCards.tsx new file mode 100644 index 00000000..c2387850 --- /dev/null +++ b/src/components/DriveCards.tsx @@ -0,0 +1,174 @@ +import { + Button, + Text, + HStack, + Popover, + PopoverTrigger, + Portal, + PopoverContent, + PopoverHeader, + PopoverBody, + PopoverFooter, + Box, +} from '@chakra-ui/react'; +import { ArrowBackIcon } from '@chakra-ui/icons'; + +import FileCard from 'components/FileCard'; +import FolderCard from 'components/FolderCard'; + +import DeleteFile from 'components/file/DeleteFile'; +import DownloadFile from 'components/file/DownloadFile'; +import MoveFile from 'components/file/MoveFile'; +import RenameFile from 'components/file/RenameFile'; +import ShareFile from 'components/file/ShareFile'; +import UpdateContentFile from 'components/file/UpdateContentFile'; + +import DeleteFolder from 'components/folder/DeleteFolder'; +import MoveFolder from 'components/folder/MoveFolder'; + +import type { IPCFile, IPCFolder } from 'types/types'; + +import { FcFile, FcFolder } from 'react-icons/fc'; +import { useDriveContext } from 'contexts/drive'; + +const PathCard = (): JSX.Element => { + const { path, setPath } = useDriveContext(); + + if (path === '/') return <>; + + return ( + + + + {path} + + + ); +}; + +type DriveCardsProps = { + files: IPCFile[]; + folders: IPCFolder[]; +}; + +const DriveCards = ({ files, folders }: DriveCardsProps): JSX.Element => { + const { path, setPath } = useDriveContext(); + + return ( + <> + + {folders.map((folder) => ( + + <> + + + + + + + + + + + + + + + + + + + + + + + + ))} + {files.map((file) => ( + + <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {`${new Date(file.createdAt).toString().substring(4, 15).slice(0, 3)} /${new Date(file.createdAt) + .toString() + .substring(4, 15) + .slice(3, 6)} /${new Date(file.createdAt).toString().substring(4, 15).slice(6)}`} + + + + {file.size / 1000} ko + + + + ))} + + ); +}; + +export default DriveCards; diff --git a/src/components/FileCard.tsx b/src/components/FileCard.tsx index f50899fe..66b0ce99 100644 --- a/src/components/FileCard.tsx +++ b/src/components/FileCard.tsx @@ -1,32 +1,26 @@ -import { Box, Flex, Text, VStack } from '@chakra-ui/react'; - -import type { IPCFile } from 'types/types'; +import { Box, Flex, HStack } from '@chakra-ui/react'; type FileCardProps = { - file: IPCFile; children: JSX.Element; }; -const FileCard = ({ file, children }: FileCardProps): JSX.Element => ( +const FileCard = ({ children }: FileCardProps): JSX.Element => ( - - - {file.name} - + {children} - + ); diff --git a/src/components/FileCards.tsx b/src/components/FileCards.tsx deleted file mode 100644 index 530ea769..00000000 --- a/src/components/FileCards.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import { useState } from 'react'; -import { Button, Icon, useToast } from '@chakra-ui/react'; -import { DownloadIcon } from '@chakra-ui/icons'; -import { MdPeopleAlt } from 'react-icons/md'; - -import FileCard from 'components/FileCard'; -import FileEditButtons from 'components/FileEditButtons'; - -import type { IPCFile } from 'types/types'; - -import { useUserContext } from 'contexts/user'; - -type FileCardsProps = { - files: IPCFile[]; - isUpdateLoading: boolean; - setSelectedFile: (file: IPCFile) => void; - onOpenShare: () => void; - onOpenUpdateFileName: () => void; - onOpenUpdateFileContent: () => void; -}; - -const FileCards = ({ - files, - isUpdateLoading, - setSelectedFile, - onOpenShare, - onOpenUpdateFileName, - onOpenUpdateFileContent, -}: FileCardsProps): JSX.Element => { - const { user } = useUserContext(); - const toast = useToast({ duration: 2000, isClosable: true }); - const [isDownloadLoading, setIsDownloadLoading] = useState(false); - - const downloadFile = async (file: IPCFile) => { - setIsDownloadLoading(true); - try { - const download = await user.drive.download(file); - toast({ title: download.message, status: download.success ? 'success' : 'error' }); - } catch (error) { - console.error(error); - toast({ title: 'Unable to download file', status: 'error' }); - } - setIsDownloadLoading(false); - }; - - return ( - <> - {files.map((file: IPCFile) => ( - - <> - - - - - - ))} - - ); -}; - -export default FileCards; diff --git a/src/components/FileEditButtons.tsx b/src/components/FileEditButtons.tsx deleted file mode 100644 index 78add088..00000000 --- a/src/components/FileEditButtons.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { useState, useEffect } from 'react'; -import { Button, Icon } from '@chakra-ui/react'; -import { EditIcon } from '@chakra-ui/icons'; -import { MdUpdate } from 'react-icons/md'; -import { useUserContext } from 'contexts/user'; -import type { IPCFile } from 'types/types'; - -type FileEditButtonsProps = { - file: IPCFile; - isUpdateLoading: boolean; - setSelectedFile: (file: IPCFile) => void; - onOpenUpdateFileName: () => void; - onOpenUpdateFileContent: () => void; -}; - -const FileEditButtons = ({ - file, - isUpdateLoading, - setSelectedFile, - onOpenUpdateFileName, - onOpenUpdateFileContent, -}: FileEditButtonsProps): JSX.Element => { - const { user } = useUserContext(); - const [hasPermission, setHasPermission] = useState(false); - - useEffect(() => { - const permission = user.contact.hasEditPermission(file.hash); - setHasPermission(permission.success); - }, []); - - if (!hasPermission) return <>; - - return ( - <> - - - - ); -}; - -export default FileEditButtons; diff --git a/src/components/FolderCard.tsx b/src/components/FolderCard.tsx new file mode 100644 index 00000000..da020808 --- /dev/null +++ b/src/components/FolderCard.tsx @@ -0,0 +1,27 @@ +import { Box, Flex, HStack } from '@chakra-ui/react'; + +type FolderCardProps = { + children: JSX.Element; +}; + +const FolderCard = ({ children }: FolderCardProps): JSX.Element => ( + + + + {children} + + + +); + +export default FolderCard; diff --git a/src/components/Modal.tsx b/src/components/Modal.tsx index e5215345..816b2710 100644 --- a/src/components/Modal.tsx +++ b/src/components/Modal.tsx @@ -1,10 +1,10 @@ -import { Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, ModalOverlay } from '@chakra-ui/react'; +import { Modal as UIModal, ModalBody, ModalContent, ModalFooter, ModalHeader, ModalOverlay } from '@chakra-ui/react'; import colors from 'theme/foundations/colors'; import OutlineButton from 'components/OutlineButton'; -type PopupProps = { +type ModalProps = { isOpen: boolean; onClose: () => void; title: string; @@ -12,8 +12,8 @@ type PopupProps = { CTA?: JSX.Element; }; -const Popup = ({ isOpen, onClose, title, children, CTA }: PopupProps): JSX.Element => ( - +const Modal = ({ isOpen, onClose, title, children, CTA }: ModalProps): JSX.Element => ( + - + ); -export default Popup; +export default Modal; diff --git a/src/components/ProfileCard.tsx b/src/components/ProfileCard.tsx index 6a896879..83cd3662 100644 --- a/src/components/ProfileCard.tsx +++ b/src/components/ProfileCard.tsx @@ -1,15 +1,15 @@ import { Box, VStack, Text, Flex, Tooltip, Button } from '@chakra-ui/react'; -import { CopyIcon, EditIcon } from '@chakra-ui/icons'; +import { CopyIcon } from '@chakra-ui/icons'; import type { IPCContact } from 'types/types'; +import UpdateContact from './contact/UpdateContact'; + type ProfileCardProps = { profile: IPCContact; - setContactInfo: (contact: IPCContact) => void; - onOpenContactUpdate: () => void; }; -const ProfileCard = ({ profile, setContactInfo, onOpenContactUpdate }: ProfileCardProps): JSX.Element => ( +const ProfileCard = ({ profile }: ProfileCardProps): JSX.Element => ( - + diff --git a/src/components/ProgramCard.tsx b/src/components/ProgramCard.tsx index 8feba6af..dc6bfcf9 100644 --- a/src/components/ProgramCard.tsx +++ b/src/components/ProgramCard.tsx @@ -1,4 +1,4 @@ -import { Box, Flex, Text, VStack } from '@chakra-ui/react'; +import { Box, Flex } from '@chakra-ui/react'; import type { IPCProgram } from 'types/types'; @@ -7,26 +7,11 @@ type ProgramCardProps = { children: JSX.Element; }; -const ProgramCard = ({ program, children }: ProgramCardProps): JSX.Element => ( - - - - {program.name} - - - {children} - - +const ProgramCard = ({ children }: ProgramCardProps): JSX.Element => ( + + + {children} + ); diff --git a/src/components/ProgramCards.tsx b/src/components/ProgramCards.tsx index 9011d8c4..716924fe 100644 --- a/src/components/ProgramCards.tsx +++ b/src/components/ProgramCards.tsx @@ -1,29 +1,64 @@ -import { Button } from '@chakra-ui/react'; +import { Box, Button, HStack, Text } from '@chakra-ui/react'; import ProgramCard from 'components/ProgramCard'; import type { IPCProgram } from 'types/types'; +import { RedeployButton } from 'components/CustomButtons'; +import { FcRules } from 'react-icons/fc'; + type ProgramCardsProps = { programs: IPCProgram[]; + onOpenRedeployProgram: () => void; + isRedeployLoading: boolean; + setSelectedProgram: (program: IPCProgram) => void; }; -const ProgramCards = ({ programs }: ProgramCardsProps): JSX.Element => ( +const ProgramCards = ({ + programs, + onOpenRedeployProgram, + isRedeployLoading, + setSelectedProgram, +}: ProgramCardsProps): JSX.Element => ( <> {programs.map((program: IPCProgram) => ( - - + + <> + + + + {program.name} + + + + + { + setSelectedProgram(program); + onOpenRedeployProgram(); + }} + isLoading={isRedeployLoading} + /> + + + {`${new Date(program.createdAt).toString().substring(4, 15).slice(0, 3)} /${new Date(program.createdAt) + .toString() + .substring(4, 15) + .slice(3, 6)} /${new Date(program.createdAt).toString().substring(4, 15).slice(6)}`} + + ))} diff --git a/src/components/ResponsiveBar.tsx b/src/components/ResponsiveBar.tsx index eaf45811..7bdf9e98 100644 --- a/src/components/ResponsiveBar.tsx +++ b/src/components/ResponsiveBar.tsx @@ -17,28 +17,28 @@ import { HamburgerIcon } from '@chakra-ui/icons'; import colors from 'theme/foundations/colors'; import Sidebar from 'components/SideBar'; -import { UploadButton, DeployButton } from 'components/CustomButtons'; +import { DeployButton, GithubDeployButton } from 'components/CustomButtons'; type BarProps = { - onOpen: () => void; onOpenProgram: () => void; - isUploadLoading: boolean; isDeployLoading: boolean; + onOpenGithub: () => void; setSelectedTab: (tab: number) => void; + isGithubLoading: boolean; selectedTab: number; }; export const LeftBar = ({ - onOpen, onOpenProgram, - isUploadLoading, isDeployLoading, + isGithubLoading, + onOpenGithub, setSelectedTab, selectedTab, }: BarProps): JSX.Element => ( onOpen()} isLoading={isUploadLoading} />} - deployButton={} + deployButton={} + githubButton={} contactTab="Contacts" myFilesTab="My files" myProgramsTab="My programs" @@ -50,11 +50,11 @@ export const LeftBar = ({ ); export const BarWithDrawer = ({ - onOpen, onOpenProgram, setSelectedTab, isDeployLoading, - isUploadLoading, + onOpenGithub, + isGithubLoading, selectedTab, }: BarProps): JSX.Element => { const { isOpen: isOpenDrawer, onOpen: onOpenDrawer, onClose: onCloseDrawer } = useDisclosure(); @@ -66,10 +66,10 @@ export const BarWithDrawer = ({ @@ -100,10 +100,10 @@ export const BarWithDrawer = ({ }; export const ResponsiveBar = ({ - onOpen, onOpenProgram, + onOpenGithub, + isGithubLoading, setSelectedTab, - isUploadLoading, isDeployLoading, selectedTab, }: BarProps): JSX.Element => { @@ -112,20 +112,20 @@ export const ResponsiveBar = ({ if (!isDrawerNeeded) return ( ); return ( diff --git a/src/components/SideBar.tsx b/src/components/SideBar.tsx index 144034ac..1a5608da 100644 --- a/src/components/SideBar.tsx +++ b/src/components/SideBar.tsx @@ -1,16 +1,37 @@ -import { Tab, TabList, Tabs, Text, VStack } from '@chakra-ui/react'; +import { + Tab, + TabList, + Tabs, + Text, + VStack, + Popover, + PopoverTrigger, + Portal, + PopoverContent, + Button, + PopoverHeader, + PopoverFooter, + PopoverBody, + HStack, +} from '@chakra-ui/react'; + +import { FcRules } from 'react-icons/fc'; +import { GoMarkGithub } from 'react-icons/go'; import colors from 'theme/foundations/colors'; +import CreateFolder from 'components/folder/CreateFolder'; +import UploadFile from './file/UploadFile'; + type SideBarPropsType = { contactTab: string; myFilesTab: string; sharedFilesTab: string; myProgramsTab: string; profileTab: string; - uploadButton: JSX.Element; deployButton: JSX.Element; setSelectedTab: (tab: number) => void; + githubButton: JSX.Element; currentTabIndex: number; }; @@ -20,8 +41,8 @@ const SideBar = ({ sharedFilesTab, myProgramsTab, profileTab, - uploadButton, deployButton, + githubButton, setSelectedTab, currentTabIndex, }: SideBarPropsType): JSX.Element => ( @@ -41,10 +62,38 @@ const SideBar = ({ bgGradient={`linear-gradient(90deg, ${colors.blue[700]} 0%, ${colors.red[700]} 100%)`} bgClip="text" id="ipc-sideBar-title" - pb="64px" > Inter Planetary Cloud + + + + + + + + + + + + + + + + {deployButton} + + + + + + {githubButton} + + + + + setSelectedTab(index)}> - {uploadButton} - {deployButton} ); diff --git a/src/components/contact/AddContact.tsx b/src/components/contact/AddContact.tsx new file mode 100644 index 00000000..9be548b2 --- /dev/null +++ b/src/components/contact/AddContact.tsx @@ -0,0 +1,79 @@ +import { ChangeEvent, useState } from 'react'; +import { Button, Input, useToast, useDisclosure } from '@chakra-ui/react'; + +import EthCrypto from 'eth-crypto'; + +import Modal from 'components/Modal'; + +import { useUserContext } from 'contexts/user'; +import { useDriveContext } from 'contexts/drive'; + +const AddContact = (): JSX.Element => { + const { user } = useUserContext(); + const { setContacts } = useDriveContext(); + const toast = useToast({ duration: 2000, isClosable: true }); + + const [name, setName] = useState(''); + const [contactPublicKey, setContactPublicKey] = useState(''); + const { isOpen, onOpen, onClose } = useDisclosure(); + + const addContact = async () => { + if (name && contactPublicKey) { + const add = await user.contact.add({ + name, + address: EthCrypto.publicKey.toAddress(contactPublicKey.slice(2)), + publicKey: contactPublicKey, + files: [], + folders: [], + }); + + toast({ title: add.message, status: add.success ? 'success' : 'error' }); + setContacts(user.contact.contacts); + } else { + toast({ title: 'Bad contact infos', status: 'error' }); + } + setName(''); + onClose(); + }; + + return ( + <> + + + Add the contact + + } + > + <> + ) => setName(e.target.value)} + id="ipc-dashboard-input-contact-name" + /> + ) => setContactPublicKey(e.target.value)} + id="ipc-dashboard-input-contact-public-key" + /> + + + + ); +}; + +export default AddContact; diff --git a/src/components/contact/DeleteContact.tsx b/src/components/contact/DeleteContact.tsx new file mode 100644 index 00000000..0556ff3b --- /dev/null +++ b/src/components/contact/DeleteContact.tsx @@ -0,0 +1,38 @@ +import { Button, useToast } from '@chakra-ui/react'; +import { DeleteIcon } from '@chakra-ui/icons'; + +import type { IPCContact } from 'types/types'; + +import { useUserContext } from 'contexts/user'; +import { useDriveContext } from 'contexts/drive'; + +type DeleteContactProps = { + contact: IPCContact; +}; + +const DeleteContact = ({ contact }: DeleteContactProps): JSX.Element => { + const { user } = useUserContext(); + const { setContacts } = useDriveContext(); + const toast = useToast({ duration: 2000, isClosable: true }); + + const deleteContact = async () => { + const deletedContact = user.contact.contacts.find((c) => c === contact); + + if (deletedContact) { + const deleteResponse = await user.contact.remove(contact.address); + + toast({ title: deleteResponse.message, status: deleteResponse.success ? 'success' : 'error' }); + setContacts(user.contact.contacts); + } else { + toast({ title: 'Unable to find this contact', status: 'error' }); + } + }; + + return ( + + ); +}; + +export default DeleteContact; diff --git a/src/components/contact/UpdateContact.tsx b/src/components/contact/UpdateContact.tsx new file mode 100644 index 00000000..9b7e3b5c --- /dev/null +++ b/src/components/contact/UpdateContact.tsx @@ -0,0 +1,78 @@ +import { ChangeEvent, useState } from 'react'; +import { Button, Input, FormControl, FormLabel, useToast, useDisclosure } from '@chakra-ui/react'; +import { EditIcon } from '@chakra-ui/icons'; + +import Modal from 'components/Modal'; + +import type { IPCContact } from 'types/types'; + +import { useUserContext } from 'contexts/user'; +import { useDriveContext } from 'contexts/drive'; + +type UpdateContactProps = { + contact: IPCContact; +}; + +const UpdateContact = ({ contact }: UpdateContactProps): JSX.Element => { + const { user } = useUserContext(); + const { setContacts } = useDriveContext(); + const toast = useToast({ duration: 2000, isClosable: true }); + + const [name, setName] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const { isOpen, onOpen, onClose } = useDisclosure(); + + const updateContact = async () => { + setIsLoading(true); + if (name) { + const update = await user.contact.update(contact.address, name); + toast({ title: update.message, status: update.success ? 'success' : 'error' }); + setContacts(user.contact.contacts); + } else { + toast({ title: 'Invalid name', status: 'error' }); + } + setName(''); + setIsLoading(true); + onClose(); + }; + + return ( + <> + + + Update the contact + + } + > + + New name + ) => setName(e.target.value)} + id="ipc-dashboard-input-contact-name" + /> + + + + ); +}; + +export default UpdateContact; diff --git a/src/components/file/DeleteFile.tsx b/src/components/file/DeleteFile.tsx new file mode 100644 index 00000000..ea00393a --- /dev/null +++ b/src/components/file/DeleteFile.tsx @@ -0,0 +1,88 @@ +import { useState, useEffect } from 'react'; +import { Button, HStack, Text, useToast, useDisclosure } from '@chakra-ui/react'; +import { FcFullTrash } from 'react-icons/fc'; + +import Modal from 'components/Modal'; +import type { IPCFile } from 'types/types'; + +import { useUserContext } from 'contexts/user'; +import { useDriveContext } from 'contexts/drive'; + +type DeleteFileProps = { + file: IPCFile; +}; + +const DeleteFile = ({ file }: DeleteFileProps): JSX.Element => { + const { user } = useUserContext(); + const { setFiles } = useDriveContext(); + const toast = useToast({ duration: 2000, isClosable: true }); + const [hasPermission, setHasPermission] = useState(false); + + const { isOpen, onOpen, onClose } = useDisclosure(); + + useEffect(() => { + const permission = user.contact.hasEditPermission(file.hash); + setHasPermission(permission.success); + return () => setHasPermission(false); + }, []); + + const deleteFile = async () => { + if (user.account) { + const deleted = await user.drive.delete([file.hash]); + + toast({ title: deleted.message, status: deleted.success ? 'success' : 'error' }); + if (deleted.success) { + const removed = await user.contact.removeFilesFromContact(user.account.address, [file.hash]); + + if (!removed.success) { + toast({ title: removed.message, status: 'error' }); + } else { + setFiles(user.drive.files); + } + } + } else { + toast({ title: 'Failed to load account', status: 'error' }); + } + onClose(); + }; + + if (!hasPermission) return <>; + + return ( + + + + deleteFile()} + id="ipc-dashboard-delete-file-button" + > + Delete + + } + > + Are you sure you want to delete this file ? + + + ); +}; + +export default DeleteFile; diff --git a/src/components/file/DownloadFile.tsx b/src/components/file/DownloadFile.tsx new file mode 100644 index 00000000..83d4c92e --- /dev/null +++ b/src/components/file/DownloadFile.tsx @@ -0,0 +1,50 @@ +import { useState } from 'react'; +import { Button, HStack, useToast } from '@chakra-ui/react'; +import { FcDownload } from 'react-icons/fc'; + +import type { IPCFile } from 'types/types'; + +import { useUserContext } from 'contexts/user'; + +type DownloadFileProps = { + file: IPCFile; +}; + +const DownloadFile = ({ file }: DownloadFileProps): JSX.Element => { + const { user } = useUserContext(); + const toast = useToast({ duration: 2000, isClosable: true }); + + const [isLoading, setIsLoading] = useState(false); + + const downloadFile = async () => { + setIsLoading(true); + try { + const download = await user.drive.download(file); + toast({ title: download.message, status: download.success ? 'success' : 'error' }); + } catch (error) { + console.error(error); + toast({ title: 'Unable to download file', status: 'error' }); + } + setIsLoading(false); + }; + + return ( + + + + + ); +}; + +export default DownloadFile; diff --git a/src/components/file/MoveFile.tsx b/src/components/file/MoveFile.tsx new file mode 100644 index 00000000..4d8c9b42 --- /dev/null +++ b/src/components/file/MoveFile.tsx @@ -0,0 +1,140 @@ +import { useState, useEffect } from 'react'; +import { Button, Divider, HStack, useToast, useDisclosure } from '@chakra-ui/react'; +import { ArrowBackIcon, ChevronRightIcon } from '@chakra-ui/icons'; +import { FcAdvance, FcFolder } from 'react-icons/fc'; + +import Modal from 'components/Modal'; +import type { IPCFile } from 'types/types'; + +import { useUserContext } from 'contexts/user'; +import { useDriveContext } from 'contexts/drive'; + +type MoveFileProps = { + file: IPCFile; +}; + +const MoveFile = ({ file }: MoveFileProps): JSX.Element => { + const { user } = useUserContext(); + const { files, setFiles, folders } = useDriveContext(); + const [hasPermission, setHasPermission] = useState(false); + const toast = useToast({ duration: 2000, isClosable: true }); + + const [newPath, setNewPath] = useState('/'); + const [isLoading, setIsLoading] = useState(false); + const { isOpen, onOpen, onClose } = useDisclosure(); + + useEffect(() => { + const permission = user.contact.hasEditPermission(file.hash); + setHasPermission(permission.success); + return () => { + setHasPermission(false); + setNewPath('/'); + }; + }, []); + + const moveFile = async () => { + setIsLoading(true); + + const moved = await user.contact.moveFile(file, newPath); + toast({ title: moved.message, status: moved.success ? 'success' : 'error' }); + + const index = files.indexOf(file); + if (index !== -1) { + files[index].path = newPath; + setFiles([...files]); + } + setNewPath('/'); + setIsLoading(false); + onClose(); + }; + + if (!hasPermission) return <>; + + return ( + + {' '} + + + Move + + } + > + <> + +
+
+ {folders.filter((f) => f.path === newPath).length ? ( + folders + .filter((f) => f.path === newPath) + .map((f) => ( +
+ + + + + +
+ )) + ) : ( + <> + + + + + + + )} + +
+
+ ); +}; + +export default MoveFile; diff --git a/src/components/file/RenameFile.tsx b/src/components/file/RenameFile.tsx new file mode 100644 index 00000000..6b5bcb19 --- /dev/null +++ b/src/components/file/RenameFile.tsx @@ -0,0 +1,99 @@ +import { ChangeEvent, useState, useEffect } from 'react'; +import { Button, FormControl, FormLabel, HStack, Input, useToast, useDisclosure } from '@chakra-ui/react'; +import { FcEditImage } from 'react-icons/fc'; + +import Modal from 'components/Modal'; +import type { IPCFile } from 'types/types'; + +import { useUserContext } from 'contexts/user'; +import { useDriveContext } from 'contexts/drive'; + +type RenameFileProps = { + file: IPCFile; +}; + +const RenameFile = ({ file }: RenameFileProps): JSX.Element => { + const { user } = useUserContext(); + const { files, setFiles } = useDriveContext(); + const [hasPermission, setHasPermission] = useState(false); + const toast = useToast({ duration: 2000, isClosable: true }); + + const [name, setName] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const { isOpen, onOpen, onClose } = useDisclosure(); + + useEffect(() => { + const permission = user.contact.hasEditPermission(file.hash); + setHasPermission(permission.success); + return () => setHasPermission(false); + }, []); + + const renameFile = async () => { + setIsLoading(true); + if (name) { + const update = await user.contact.updateFileName(file, name); + toast({ title: update.message, status: update.success ? 'success' : 'error' }); + if (update.success) { + const index = files.indexOf(file); + + if (index !== -1) files[index].name = name; + setFiles(files); + } + } + setName(''); + setIsLoading(false); + onClose(); + }; + + if (!hasPermission) return <>; + + return ( + + + + + OK + + } + > + + New file name + ) => setName(e.target.value)} + id="ipc-dashboard-input-update-filename" + /> + + + + ); +}; + +export default RenameFile; diff --git a/src/components/file/ShareFile.tsx b/src/components/file/ShareFile.tsx new file mode 100644 index 00000000..1234f805 --- /dev/null +++ b/src/components/file/ShareFile.tsx @@ -0,0 +1,75 @@ +import { useState, useEffect } from 'react'; +import { Button, Divider, Flex, HStack, Text, Spacer, VStack, useToast, useDisclosure } from '@chakra-ui/react'; +import { CheckIcon } from '@chakra-ui/icons'; +import { FcShare } from 'react-icons/fc'; + +import Modal from 'components/Modal'; +import type { IPCFile, IPCContact } from 'types/types'; + +import { useUserContext } from 'contexts/user'; + +type ShareFileProps = { + file: IPCFile; +}; + +const ShareFile = ({ file }: ShareFileProps): JSX.Element => { + const { user } = useUserContext(); + const toast = useToast({ duration: 2000, isClosable: true }); + const [hasPermission, setHasPermission] = useState(false); + + const { isOpen, onOpen, onClose } = useDisclosure(); + + useEffect(() => { + const permission = user.contact.hasEditPermission(file.hash); + setHasPermission(permission.success); + return () => setHasPermission(false); + }, []); + + const shareFile = async (contact: IPCContact) => { + const share = await user.contact.addFileToContact(contact.address, file); + + toast({ title: share.message, status: share.success ? 'success' : 'error' }); + onClose(); + }; + + if (!hasPermission) return <>; + + return ( + + + + + + {user.contact.contacts.map((contact) => { + if (user.account && contact.address !== user.account.address) + return ( + + + {contact.name} + {contact.address} + + + + + ); + return ; + })} + + + + ); +}; + +export default ShareFile; diff --git a/src/components/file/UpdateContentFile.tsx b/src/components/file/UpdateContentFile.tsx new file mode 100644 index 00000000..5126088d --- /dev/null +++ b/src/components/file/UpdateContentFile.tsx @@ -0,0 +1,115 @@ +import { ChangeEvent, useState, useEffect } from 'react'; +import { Button, Input, HStack, useToast, useDisclosure } from '@chakra-ui/react'; +import { FcUpload } from 'react-icons/fc'; + +import Modal from 'components/Modal'; +import type { IPCFile } from 'types/types'; + +import { generateFileKey } from 'utils/generateFileKey'; +import { getFileContent } from 'utils/fileManipulation'; + +import { useUserContext } from 'contexts/user'; +import { useDriveContext } from 'contexts/drive'; + +type UpdateContentFileProps = { + file: IPCFile; +}; + +const UpdateContentFile = ({ file }: UpdateContentFileProps): JSX.Element => { + const { user } = useUserContext(); + const { files, setFiles } = useDriveContext(); + const [hasPermission, setHasPermission] = useState(false); + const toast = useToast({ duration: 2000, isClosable: true }); + + const [fileEvent, setFileEvent] = useState | undefined>(undefined); + const [isLoading, setIsLoading] = useState(false); + const { isOpen, onOpen, onClose } = useDisclosure(); + + useEffect(() => { + const permission = user.contact.hasEditPermission(file.hash); + setHasPermission(permission.success); + return () => setHasPermission(false); + }, []); + + const updateContent = async () => { + if (!fileEvent) return; + + const oldFile = file; + const fileContent = await getFileContent(fileEvent.target.files ? fileEvent.target.files[0] : []); + const key = generateFileKey(); + + if (!fileContent) return; + + const newFile: IPCFile = { + ...oldFile, + hash: fileContent, + key: { iv: '', ephemPublicKey: '', ciphertext: '', mac: '' }, + }; + setIsLoading(true); + const upload = await user.drive.upload(newFile, key); + if (!upload.success || !upload.file) { + toast({ title: upload.message, status: upload.success ? 'success' : 'error' }); + } else { + const updated = await user.contact.updateFileContent(upload.file, oldFile.hash); + toast({ title: updated.message, status: updated.success ? 'success' : 'error' }); + if (updated.success && upload.file) { + const index = files.indexOf(oldFile); + if (index !== -1) files[index] = upload.file; + setFiles(files); + + const deleted = await user.drive.delete([oldFile.hash]); + toast({ title: deleted.message, status: deleted.success ? 'success' : 'error' }); + } + } + setIsLoading(false); + onClose(); + }; + + if (!hasPermission) return <>; + + return ( + + + + + Upload new version + + } + > + ) => setFileEvent(e)} + id="ipc-dashboard-input-new-file-content" + /> + + + ); +}; + +export default UpdateContentFile; diff --git a/src/components/file/UploadFile.tsx b/src/components/file/UploadFile.tsx new file mode 100644 index 00000000..b60254a0 --- /dev/null +++ b/src/components/file/UploadFile.tsx @@ -0,0 +1,107 @@ +import { ChangeEvent, useState } from 'react'; +import { Button, HStack, Input, useDisclosure, useToast } from '@chakra-ui/react'; +import { FcFile } from 'react-icons/fc'; + +import Modal from 'components/Modal'; +import type { IPCFile } from 'types/types'; + +import { generateFileKey } from 'utils/generateFileKey'; +import { getFileContent, extractFilename } from 'utils/fileManipulation'; + +import { useUserContext } from 'contexts/user'; +import { useDriveContext } from 'contexts/drive'; + +const UploadFile = (): JSX.Element => { + const { user } = useUserContext(); + const { path, files, setFiles } = useDriveContext(); + const toast = useToast({ duration: 2000, isClosable: true }); + + const [fileEvent, setFileEvent] = useState | undefined>(undefined); + const [isLoading, setIsLoading] = useState(false); + const { isOpen, onOpen, onClose } = useDisclosure(); + + const uploadFile = async () => { + if (!fileEvent) return; + setIsLoading(true); + const filename = extractFilename(fileEvent.target.value); + const fileContent = await getFileContent(fileEvent.target.files ? fileEvent.target.files[0] : []); + const key = generateFileKey(); + if (!filename || !fileContent) { + toast({ title: 'Invalid file', status: 'error' }); + setFileEvent(undefined); + setIsLoading(false); + return; + } + + const file: IPCFile = { + name: filename, + hash: fileContent, + size: fileEvent.target.files![0].size, + createdAt: Date.now(), + key: { iv: '', ephemPublicKey: '', ciphertext: '', mac: '' }, + path, + }; + + if (user.account) { + const upload = await user.drive.upload(file, key); + if (!upload.success || !upload.file) { + toast({ title: upload.message, status: upload.success ? 'success' : 'error' }); + } else { + setFiles([...files, upload.file]); + user.drive.files.push(upload.file); + + const shared = await user.contact.addFileToContact(user.account.address, upload.file); + toast({ title: upload.message, status: shared.success ? 'success' : 'error' }); + } + } else { + toast({ title: 'Failed to load account', status: 'error' }); + } + onClose(); + setFileEvent(undefined); + setIsLoading(false); + }; + + return ( + + + + + Upload file + + } + > + ) => setFileEvent(e)} + id="ipc-dashboard-upload-file" + /> + + + ); +}; + +export default UploadFile; diff --git a/src/components/folder/CreateFolder.tsx b/src/components/folder/CreateFolder.tsx new file mode 100644 index 00000000..9708c227 --- /dev/null +++ b/src/components/folder/CreateFolder.tsx @@ -0,0 +1,90 @@ +import { ChangeEvent, useState } from 'react'; +import { Button, FormControl, FormLabel, HStack, Input, useDisclosure, useToast } from '@chakra-ui/react'; +import { FcFolder } from 'react-icons/fc'; + +import Modal from 'components/Modal'; +import type { IPCFolder } from 'types/types'; + +import { useUserContext } from 'contexts/user'; +import { useDriveContext } from 'contexts/drive'; + +const CreateFolder = (): JSX.Element => { + const { user } = useUserContext(); + const { folders, setFolders, path } = useDriveContext(); + const toast = useToast({ duration: 2000, isClosable: true }); + + const [name, setName] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const { isOpen, onOpen, onClose } = useDisclosure(); + + const createFolder = async () => { + if (!name || name.includes('/')) { + toast({ title: 'Invalid folder name', status: 'error' }); + return; + } + setIsLoading(true); + + const folder: IPCFolder = { + name, + path, + createdAt: Date.now(), + }; + + const created = await user.contact.createFolder(folder); + toast({ title: created.message, status: created.success ? 'success' : 'error' }); + if (created.success) { + setFolders([...folders, folder]); + } + + setIsLoading(false); + setName(''); + onClose(); + }; + + return ( + + + + + Create Folder + + } + > + + Name + ) => setName(e.target.value)} + id="ipc-dashboard-input-folder-name" + /> + + + + ); +}; + +export default CreateFolder; diff --git a/src/components/folder/DeleteFolder.tsx b/src/components/folder/DeleteFolder.tsx new file mode 100644 index 00000000..408c16a3 --- /dev/null +++ b/src/components/folder/DeleteFolder.tsx @@ -0,0 +1,90 @@ +import { useDriveContext } from 'contexts/drive'; +import { useEffect, useState } from 'react'; +import { Button, HStack, Text, useToast, useDisclosure } from '@chakra-ui/react'; +import { FcFullTrash } from 'react-icons/fc'; + +import Modal from 'components/Modal'; +import type { IPCFolder } from 'types/types'; + +import { useUserContext } from 'contexts/user'; + +type DeleteFolderProps = { + folder: IPCFolder; +}; + +const DeleteFolder = ({ folder }: DeleteFolderProps): JSX.Element => { + const { user } = useUserContext(); + const { folders, setFolders, setFiles } = useDriveContext(); + const toast = useToast({ duration: 2000, isClosable: true }); + + const [hasPermission, setHasPermission] = useState(false); + const { isOpen, onOpen, onClose } = useDisclosure(); + + useEffect(() => { + setHasPermission(true); + return () => setHasPermission(false); + }, []); + + const deleteFolder = async () => { + const fullPath = `${folder.path}${folder.name}/`; + + if (user.account) { + const foldersResponse = await user.contact.deleteFolder(folder); + setFolders( + folders.filter( + (f) => !f.path.startsWith(fullPath) && (f.path !== folder.path || f.createdAt !== folder.createdAt), + ), + ); + + if (foldersResponse.success) { + const filesToDelete = user.drive.files.filter((file) => file.path.startsWith(fullPath)); + if (filesToDelete.length > 0) { + const filesResponse = await user.drive.delete(filesToDelete.map((file) => file.hash)); + await user.contact.removeFilesFromContact( + user.account.address, + filesToDelete.map((file) => file.hash), + ); + foldersResponse.success = filesResponse.success; + } + } + toast({ title: foldersResponse.message, status: foldersResponse.success ? 'success' : 'error' }); + } else { + toast({ title: 'Failed to load account', status: 'error' }); + } + setFiles(user.drive.files); + onClose(); + }; + + if (!hasPermission) return <>; + + return ( + + + + + Delete + + } + > + Are you sure you want to delete this folder and all it's content ? + + + ); +}; + +export default DeleteFolder; diff --git a/src/components/folder/MoveFolder.tsx b/src/components/folder/MoveFolder.tsx new file mode 100644 index 00000000..f65cda5d --- /dev/null +++ b/src/components/folder/MoveFolder.tsx @@ -0,0 +1,150 @@ +import { useState, useEffect } from 'react'; +import { Button, Divider, HStack, useToast, useDisclosure } from '@chakra-ui/react'; +import { ArrowBackIcon, ChevronRightIcon } from '@chakra-ui/icons'; +import { FcAdvance, FcFolder } from 'react-icons/fc'; + +import Modal from 'components/Modal'; +import type { IPCFolder } from 'types/types'; + +import { useUserContext } from 'contexts/user'; +import { useDriveContext } from 'contexts/drive'; + +type MoveFolderProps = { + folder: IPCFolder; +}; + +const MoveFolder = ({ folder }: MoveFolderProps): JSX.Element => { + const { user } = useUserContext(); + const { files, setFiles, folders, setFolders } = useDriveContext(); + const [hasPermission, setHasPermission] = useState(false); + const toast = useToast({ duration: 2000, isClosable: true }); + + const [newPath, setNewPath] = useState('/'); + const [isLoading, setIsLoading] = useState(false); + const { isOpen, onOpen, onClose } = useDisclosure(); + + useEffect(() => { + setHasPermission(true); + return () => { + setHasPermission(false); + setNewPath('/'); + }; + }, []); + + const moveFolder = async () => { + setIsLoading(true); + const fullPath = `${folder.path}${folder.name}/`; + + const moved = await user.contact.moveFolder(folder, newPath); + + toast({ title: moved.message, status: moved.success ? 'success' : 'error' }); + setFiles( + files.map((f) => { + if (f.path.startsWith(fullPath)) return { ...f, path: f.path.replace(folder.path, newPath) }; + return f; + }), + ); + + setFolders( + folders.map((f) => { + if (f.path.startsWith(fullPath)) return { ...f, path: f.path.replace(folder.path, newPath) }; + if (f === folder) return { ...f, path: newPath }; + return f; + }), + ); + + setNewPath('/'); + setIsLoading(false); + onClose(); + }; + + if (!hasPermission) return <>; + + return ( + + + + + Move + + } + > + <> + +
+
+ {folders.filter((f) => f.path === newPath && f.createdAt !== folder.createdAt).length ? ( + folders + .filter((f) => f.path === newPath) + .map((f) => ( +
+ + + + + +
+ )) + ) : ( + <> + + + + + + + )} + +
+
+ ); +}; + +export default MoveFolder; diff --git a/src/config/constants.ts b/src/config/constants.ts index 61047c49..2de77506 100644 --- a/src/config/constants.ts +++ b/src/config/constants.ts @@ -1,3 +1,10 @@ +if (!process.env.NEXT_PUBLIC_GITCLONE_DIR) throw new Error('NEXT_PUBLIC_GITCLONE_DIR env variable must be set'); if (!process.env.NEXT_PUBLIC_ALEPH_CHANNEL) throw new Error('NEXT_PUBLIC_ALEPH_CHANNEL env variable must be set'); +if (!process.env.NEXT_PUBLIC_GITHUB_CLIENT_ID) throw new Error('NEXT_PUBLIC_GITHUB_CLIENT_ID env variable must be set'); +if (!process.env.NEXT_PUBLIC_GITHUB_CLIENT_SECRET) + throw new Error('NEXT_PUBLIC_GITHUB_CLIENT_SECRET env variable must be set'); export const ALEPH_CHANNEL = process.env.NEXT_PUBLIC_ALEPH_CHANNEL; +export const GITCLONE_DIR = process.env.NEXT_PUBLIC_GITCLONE_DIR; +export const GITHUB_CLIENT_ID = process.env.NEXT_PUBLIC_GITHUB_CLIENT_ID; +export const GITHUB_CLIENT_SECRET = process.env.NEXT_PUBLIC_GITHUB_CLIENT_SECRET; diff --git a/src/contexts/drive.ts b/src/contexts/drive.ts new file mode 100644 index 00000000..f5fd94d6 --- /dev/null +++ b/src/contexts/drive.ts @@ -0,0 +1,28 @@ +import { createContext, Dispatch, useContext } from 'react'; + +import type { IPCContact, IPCFile, IPCFolder } from 'types/types'; + +type DriveContextProps = { + files: IPCFile[]; + setFiles: Dispatch; + folders: IPCFolder[]; + setFolders: Dispatch; + contacts: IPCContact[]; + setContacts: Dispatch; + path: string; + setPath: Dispatch; +}; + +type DriveContextType = undefined | DriveContextProps; + +const DriveContext = createContext(undefined); + +const useDriveContext = (): DriveContextProps => { + const context = useContext(DriveContext); + if (!context) throw new Error('context used outside of provider.'); + return context; +}; + +export type { DriveContextType }; +export { useDriveContext }; +export default DriveContext; diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 054c857f..35d5cdf6 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -40,6 +40,7 @@ class Auth { address: account.address, publicKey: account.publicKey, files: [], + folders: [], }, ], programs: [], diff --git a/src/lib/computing.ts b/src/lib/computing.ts index 3485e394..b33a143d 100644 --- a/src/lib/computing.ts +++ b/src/lib/computing.ts @@ -1,4 +1,4 @@ -import { accounts, program, aggregate } from 'aleph-sdk-ts'; +import { accounts, program, aggregate, forget } from 'aleph-sdk-ts'; import { DEFAULT_API_V2 } from 'aleph-sdk-ts/global'; import { ItemType, AggregateMessage } from 'aleph-sdk-ts/messages/message'; @@ -16,7 +16,7 @@ class Computing { this.account = importedAccount; } - private async publishAggregate(): Promise> { + public async publishAggregate(): Promise> { const aggr = await aggregate.Get({ APIServer: DEFAULT_API_V2, address: this.account!.address, @@ -37,7 +37,7 @@ class Computing { }); } - public async loadPrograms(): Promise { + public async load(): Promise { try { if (this.account) { const aggr = await aggregate.Get({ @@ -57,9 +57,43 @@ class Computing { } } - public async uploadProgram(myProgram: IPCProgram, uploadFile: File): Promise { + public async deleteProgram(programHash: string): Promise { try { if (this.account) { + await forget.publish({ + APIServer: DEFAULT_API_V2, + channel: ALEPH_CHANNEL, + hashes: [programHash], + inlineRequested: true, + storageEngine: ItemType.ipfs, + account: this.account, + }); + + return { success: true, message: 'program deleted' }; + } + return { success: false, message: 'Failed to load account' }; + } catch (err) { + console.error(err); + return { success: false, message: 'Failed to delete program' }; + } + } + + public async uploadProgram( + myProgram: IPCProgram, + uploadFile: File, + isRedeploy: boolean, + oldProgramHash: IPCProgram | undefined, + ): Promise { + try { + if (this.account) { + // remove old program from user's programs array + if (isRedeploy && oldProgramHash) { + const newProgramsArray: IPCProgram[] = this.programs.filter( + (oldProgram: IPCProgram) => oldProgram !== oldProgramHash, + ); + this.programs = newProgramsArray; + } + const programHashPublishProgram = await program.publish({ channel: ALEPH_CHANNEL, account: this.account, @@ -71,9 +105,8 @@ class Computing { }); const newProgram: IPCProgram = { - name: myProgram.name, + ...myProgram, hash: programHashPublishProgram.item_hash, - created_at: myProgram.created_at, }; this.programs.push(newProgram); diff --git a/src/lib/contact.ts b/src/lib/contact.ts index a551a3d6..c3cfda7d 100644 --- a/src/lib/contact.ts +++ b/src/lib/contact.ts @@ -4,7 +4,7 @@ import { DEFAULT_API_V2 } from 'aleph-sdk-ts/global'; import { ItemType, AggregateMessage } from 'aleph-sdk-ts/messages/message'; import { ALEPH_CHANNEL } from 'config/constants'; -import type { IPCContact, IPCFile, ResponseType, AggregateType, AggregateContentType } from 'types/types'; +import type { IPCContact, IPCFile, ResponseType, AggregateType, AggregateContentType, IPCFolder } from 'types/types'; import { encryptWithPublicKey, decryptWithPrivateKey } from 'eth-crypto'; class Contact { @@ -46,7 +46,7 @@ class Contact { if (this.account) { const aggr = await aggregate.Get({ APIServer: DEFAULT_API_V2, - address: this.account!.address, + address: this.account.address, keys: ['InterPlanetaryCloud'], }); @@ -83,12 +83,10 @@ class Contact { try { if (this.account) { if (contactAddress !== this.account.address) { - this.contacts.map((contact, index) => { + this.contacts.forEach((contact, index) => { if (contact.address === contactAddress) { this.contacts.splice(index, 1); - return true; } - return false; }); await this.publishAggregate(); @@ -106,15 +104,10 @@ class Contact { public async update(contactAddress: string, newName: string): Promise { try { if (this.account) { - if ( - this.contacts.find((contact, index) => { - if (contact.address === contactAddress) { - this.contacts[index].name = newName; - return true; - } - return false; - }) - ) { + const contact = this.contacts.find((c) => c.address === contactAddress); + + if (contact) { + contact.name = newName; await this.publishAggregate(); return { success: true, message: 'Contact updated' }; } @@ -130,20 +123,18 @@ class Contact { public async updateFileContent(newFile: IPCFile, oldHash: string): Promise { try { if (this.account) { - await Promise.all( - this.contacts.map(async (contact, i) => { - this.contacts[i].files.map(async (file, j) => { - if (file.hash === oldHash) { - this.contacts[i].files[j].hash = newFile.hash; - this.contacts[i].files[j].key = await encryptWithPublicKey( - contact.publicKey.slice(2), - await decryptWithPrivateKey(this.private_key, newFile.key), - ); - await this.publishAggregate(); - } - }); - }), - ); + this.contacts.forEach(async (contact, i) => { + const file = this.contacts[i].files.find((f) => f.hash === oldHash); + + if (file) { + file.hash = newFile.hash; + file.key = await encryptWithPublicKey( + contact.publicKey.slice(2), + await decryptWithPrivateKey(this.private_key, newFile.key), + ); + await this.publishAggregate(); + } + }); return { success: true, message: 'File content updated' }; } return { success: false, message: 'Failed to load account' }; @@ -156,10 +147,9 @@ class Contact { public hasEditPermission(hash: string): ResponseType { try { if (this.account) { - const owner = this.account.address; if ( this.contacts.find((contact, index) => { - if (owner === contact.address) { + if (this.account?.address === contact.address) { return this.contacts[index].files.find((file) => file.hash === hash); } return false; @@ -178,9 +168,14 @@ class Contact { public async updateFileName(concernedFile: IPCFile, newName: string): Promise { try { - for (let i = 0; this.contacts[i] != null; i += 1) { - this.updateOneFileName(concernedFile.hash, newName, i); - } + this.contacts.forEach(async (contact) => { + const file = contact.files.find((f) => f.hash === concernedFile.hash); + + if (file) { + file.name = newName; + await this.publishAggregate(); + } + }); return { success: true, message: 'Filename updated' }; } catch (err) { console.error(err); @@ -188,63 +183,148 @@ class Contact { } } - public async updateOneFileName(fileHash: string, newName: string, contactIndex: number): Promise { + public async addFileToContact(contactAddress: string, mainFile: IPCFile): Promise { try { if (this.account) { - if ( - this.contacts[contactIndex].files.find((file, fileIndex) => { - if (file.hash === fileHash) { - this.contacts[contactIndex].files[fileIndex].name = newName; - return true; - } - return false; - }) - ) { + const index = this.contacts.findIndex((contact) => contact.address === contactAddress); + + if (index !== -1) { + if (this.contacts[index].files.find((file) => file.hash === mainFile.hash)) { + return { success: false, message: 'The file is already shared' }; + } + const newFile: IPCFile = { + ...mainFile, + key: await encryptWithPublicKey( + this.contacts[index].publicKey.slice(2), + await decryptWithPrivateKey(this.private_key, mainFile.key), + ), + }; + + this.contacts[index].files.push(newFile); await this.publishAggregate(); - return { success: true, message: 'Filename updated' }; + return { success: true, message: 'File shared with the contact' }; } - return { success: false, message: 'File does not exist' }; + return { success: false, message: 'Contact does not exist' }; } return { success: false, message: 'Failed to load account' }; } catch (err) { console.error(err); - return { success: false, message: 'Failed to update this filename' }; + return { success: false, message: 'Failed to share the file with the contact' }; } } - public async addFileToContact(contactAddress: string, mainFile: IPCFile): Promise { + public async removeFilesFromContact(address: string, hashes: string[]): Promise { try { if (this.account) { - if ( - await Promise.all( - this.contacts.map(async (contact, index) => { - if (contact.address === contactAddress) { - if (this.contacts[index].files.find((file) => file.hash === mainFile.hash)) { - return { success: false, message: 'The file is already shared' }; - } - this.contacts[index].files.push({ - hash: mainFile.hash, - key: await encryptWithPublicKey( - contact.publicKey.slice(2), - await decryptWithPrivateKey(this.private_key, mainFile.key), - ), - created_at: mainFile.created_at, - name: mainFile.name, - }); - await this.publishAggregate(); - return true; - } - return false; - }), - ) - ) - return { success: true, message: 'File shared with the contact' }; + const index = this.contacts.findIndex((contact) => contact.address === address); + + if (index !== -1) { + this.contacts[index].files = this.contacts[index].files.filter((f) => !hashes.includes(f.hash)); + + await this.publishAggregate(); + return { success: true, message: 'File deleted from the contact' }; + } return { success: false, message: 'Contact does not exist' }; } return { success: false, message: 'Failed to load account' }; } catch (err) { console.error(err); - return { success: false, message: 'Failed to share the file with the contact' }; + return { success: false, message: 'Failed to delete the file from the contact' }; + } + } + + public async createFolder(folder: IPCFolder): Promise { + try { + if (this.account) { + const contact = this.contacts.find((c) => c.address === this.account?.address); + + if (contact) { + contact.folders.push(folder); + await this.publishAggregate(); + return { success: true, message: 'Folder created' }; + } + return { success: false, message: 'Failed to load contact' }; + } + return { success: false, message: 'Failed to load account' }; + } catch (err) { + console.error(err); + return { success: false, message: 'Failed to create the folder' }; + } + } + + public async moveFolder(folder: IPCFolder, newPath: string): Promise { + try { + if (this.account) { + const contact = this.contacts.find((c) => c.address === this.account?.address); + const fullPath = `${folder.path}${folder.name}/`; + + if (contact) { + contact.folders = contact.folders.map((f) => { + if (f.path.startsWith(fullPath)) return { ...f, path: f.path.replace(folder.path, newPath) }; + if (f === folder) return { ...f, path: newPath }; + return f; + }); + contact.files = contact.files.map((f) => { + if (f.path.startsWith(fullPath)) return { ...f, path: f.path.replace(folder.path, newPath) }; + return f; + }); + + await this.publishAggregate(); + return { success: true, message: 'Folder created' }; + } + return { success: false, message: 'Failed to load contact' }; + } + return { success: false, message: 'Failed to load account' }; + } catch (err) { + console.error(err); + return { success: false, message: 'Failed to create the folder' }; + } + } + + public async deleteFolder(folder: IPCFolder): Promise { + try { + if (this.account) { + const contact = this.contacts.find((c) => c.address === this.account?.address); + + if (contact) { + const fullPath = `${folder.path}${folder.name}/`; + contact.folders = contact.folders.filter( + (f) => !f.path.startsWith(fullPath) && (f.path !== folder.path || f.createdAt !== folder.createdAt), + ); + + await this.publishAggregate(); + + return { success: true, message: 'Folder deleted' }; + } + return { success: false, message: 'Failed to find your contact' }; + } + return { success: false, message: 'Failed to load contact' }; + } catch (err) { + console.error(err); + return { success: false, message: 'Failed to delete the folder' }; + } + } + + public async moveFile(file: IPCFile, newPath: string): Promise { + try { + if (this.account) { + const contact = this.contacts.find((c) => c.address === this.account?.address); + + if (contact) { + const currentFile = contact.files.find((f) => f.hash === file.hash); + if (currentFile) { + currentFile.path = newPath; + await this.publishAggregate(); + return { success: true, message: 'File moved' }; + } + return { success: false, message: 'File does not exist' }; + } + return { success: false, message: 'Failed to load contact' }; + } + return { success: false, message: 'Failed to load account' }; + } catch (err) { + console.error(err); + return { success: false, message: 'Failed to move the file' }; } } } diff --git a/src/lib/drive.ts b/src/lib/drive.ts index 666d7b70..73e17085 100644 --- a/src/lib/drive.ts +++ b/src/lib/drive.ts @@ -10,12 +10,14 @@ import CryptoJS from 'crypto-js'; import { ArraybufferToString } from 'utils/arraytbufferToString'; -import type { IPCContact, IPCFile, ResponseType, UploadResponse, AggregateType } from 'types/types'; +import type { IPCContact, IPCFile, IPCFolder, ResponseType, UploadResponse, AggregateType } from 'types/types'; import { encryptWithPublicKey, decryptWithPrivateKey } from 'eth-crypto'; class Drive { public files: IPCFile[]; + public folders: IPCFolder[]; + public sharedFiles: IPCFile[]; private readonly account: accounts.base.Account | undefined; @@ -24,6 +26,7 @@ class Drive { constructor(importedAccount: accounts.base.Account, private_key: string) { this.files = []; + this.folders = []; this.sharedFiles = []; this.account = importedAccount; this.private_key = private_key; @@ -40,17 +43,15 @@ class Drive { keys: ['InterPlanetaryCloud'], }); - aggr.InterPlanetaryCloud.contacts.map((contactToFind: IPCContact) => { - if (contactToFind.address === this.account!.address) { - if (contact.address === this.account!.address) { - this.files = this.files.concat(contactToFind.files); - } else { - this.sharedFiles = this.sharedFiles.concat(contactToFind.files); - } - return true; + const found = aggr.InterPlanetaryCloud.contacts.find((c) => c.address === this.account!.address); + if (found) { + if (contact.address === this.account!.address) { + this.files = found.files; + this.folders = found.folders; + } else { + this.sharedFiles = this.sharedFiles.concat(found.files); } - return false; - }); + } }), ); return { success: true, message: 'Shared drive loaded' }; @@ -80,9 +81,8 @@ class Drive { }); const newFile: IPCFile = { - name: file.name, + ...file, hash: fileHashPublishStore.content.item_hash, - created_at: file.created_at, key: await encryptWithPublicKey(this.account.publicKey.slice(2), key), }; @@ -95,18 +95,20 @@ class Drive { } } - public async delete(fileHash: string): Promise { + public async delete(fileHashes: string[]): Promise { try { if (this.account) { await forget.publish({ APIServer: DEFAULT_API_V2, channel: ALEPH_CHANNEL, - hashes: [fileHash], + hashes: fileHashes, inlineRequested: true, storageEngine: ItemType.ipfs, account: this.account, }); + this.files = this.files.filter((file) => !fileHashes.includes(file.hash)); + return { success: true, message: 'File deleted' }; } return { success: false, message: 'Failed to load account' }; diff --git a/src/lib/middlewares/validation.ts b/src/lib/middlewares/validation.ts new file mode 100644 index 00000000..aa5ac8a7 --- /dev/null +++ b/src/lib/middlewares/validation.ts @@ -0,0 +1,7 @@ +import withJoi from 'next-joi'; + +export default withJoi({ + onValidationError: (_, res) => { + res.status(400).end('Bad request'); + }, +}); diff --git a/src/lib/services/deploy.ts b/src/lib/services/deploy.ts new file mode 100644 index 00000000..bf457d0a --- /dev/null +++ b/src/lib/services/deploy.ts @@ -0,0 +1,27 @@ +import { ALEPH_CHANNEL } from 'config/constants'; +import { program } from 'aleph-sdk-ts'; +import { ItemType } from 'aleph-sdk-ts/messages/message'; +import { DEFAULT_API_V2 } from 'aleph-sdk-ts/global'; +import { ethereum } from 'aleph-sdk-ts/accounts'; +import fs from 'fs'; +import child_process from 'child_process'; + +async function compress(path: string): Promise { + child_process.execSync(`zip -r ${path} *`, { cwd: path }); + return `${path}.zip`; +} + +async function programPublish(path: string): Promise { + const programHashPublishProgram = await program.publish({ + channel: ALEPH_CHANNEL, + account: ethereum.NewAccount().account, + storageEngine: ItemType.storage, + inlineRequested: true, + APIServer: DEFAULT_API_V2, + file: fs.readFileSync(path), + entrypoint: `main:app`, + }); + return programHashPublishProgram.item_hash; +} + +export { compress, programPublish }; diff --git a/src/lib/services/git.ts b/src/lib/services/git.ts new file mode 100644 index 00000000..2e9c3ae2 --- /dev/null +++ b/src/lib/services/git.ts @@ -0,0 +1,41 @@ +import node_path from 'path'; +import _clone from 'git-clone'; +import { GITCLONE_DIR } from 'config/constants'; +import { createDir, fileExists, rmdir } from 'utils/fsPromise'; + +function getRepoName(repoUrl: string): string { + const path = repoUrl.replace('.git', ''); + return node_path.basename(path); +} + +function getRepoUsername(repoUrl: string): string { + const pathArray = repoUrl.replace('.git', '').split('/'); + const usernameBase = pathArray[pathArray.length - 2]; + if (!usernameBase.includes('git@')) { + return usernameBase; + } + return usernameBase.split(':')[1]; +} + +function getProgramName(repoUrl: string): string { + return `${getRepoUsername(repoUrl)}@${getRepoName(repoUrl)}`; +} + +function getPath(repoUrl: string): string { + return node_path.join(GITCLONE_DIR, `${getProgramName(repoUrl)}`); +} + +function cleanup(path: string): Promise { + return rmdir(path, { recursive: true }); +} + +async function clone(repoUrl: string): Promise { + if (!fileExists(GITCLONE_DIR)) { + createDir(GITCLONE_DIR); + } + const path = getPath(repoUrl); + await _clone(repoUrl, path); + return node_path.resolve(path); +} + +export { cleanup, clone, getProgramName }; diff --git a/src/types/types.ts b/src/types/types.ts index e8dae4b9..90447787 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -4,13 +4,21 @@ export type IPCFile = { hash: string; key: Encrypted; name: string; - created_at: number; + size: number; + createdAt: number; + path: string; +}; + +export type IPCFolder = { + name: string; + createdAt: number; + path: string; }; export type IPCProgram = { hash: string; name: string; - created_at: number; + createdAt: number; }; export type IPCContact = { @@ -18,6 +26,7 @@ export type IPCContact = { address: string; publicKey: string; files: IPCFile[]; + folders: IPCFolder[]; }; export type ResponseType = { @@ -37,3 +46,8 @@ export type AggregateContentType = { export type AggregateType = { InterPlanetaryCloud: AggregateContentType; }; + +export type GitHubRepository = { + name: string; + html_url: string; +}; diff --git a/src/utils/fileManipulation.ts b/src/utils/fileManipulation.ts index 177a04d2..2ccc5cb0 100644 --- a/src/utils/fileManipulation.ts +++ b/src/utils/fileManipulation.ts @@ -3,4 +3,10 @@ export const extractFilename = (filepath: string): string => { return result && result.length ? result[0] : ''; }; -export const getFileContent = async (file: unknown): Promise => (file as Blob).text(); +export const getFileContent = async (file: unknown): Promise => { + try { + return await (file as Blob).text(); + } catch (error) { + return ''; + } +}; diff --git a/src/utils/fsPromise.ts b/src/utils/fsPromise.ts new file mode 100644 index 00000000..410b8a1a --- /dev/null +++ b/src/utils/fsPromise.ts @@ -0,0 +1,8 @@ +import { promisify } from 'util'; +import fs from 'fs'; + +const rmdir = promisify(fs.rmdir); +const fileExists = promisify(fs.exists); +const createDir = promisify(fs.mkdir); + +export { rmdir, fileExists, createDir }; diff --git a/tsconfig.json b/tsconfig.json index 8a3988ae..48ccde02 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,7 +24,7 @@ }, "include": [ "src", - "pages", + "pages" ], "exclude": [ "node_modules" diff --git a/yarn.lock b/yarn.lock index 302ef63a..9fc5a48a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,162 +10,167 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== +"@babel/code-frame@^7.0.0", "@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== dependencies: - "@babel/highlight" "^7.16.7" + "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.10": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471" - integrity sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg== +"@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== -"@babel/core@^7.18.5": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000" - integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ== +"@babel/core@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== dependencies: "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helpers" "^7.18.2" - "@babel/parser" "^7.18.5" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.5" - "@babel/types" "^7.18.4" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" - integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== +"@babel/generator@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.10.tgz#794f328bfabdcbaf0ebf9bf91b5b57b61fa77a2a" + integrity sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA== dependencies: - "@babel/types" "^7.18.2" - "@jridgewell/gen-mapping" "^0.3.0" + "@babel/types" "^7.18.10" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b" - integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== +"@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" - integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== - -"@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd" - integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.0" - "@babel/types" "^7.18.0" - -"@babel/helper-plugin-utils@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" - integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== - -"@babel/helper-simple-access@^7.17.7": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" - integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== - dependencies: - "@babel/types" "^7.18.2" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helpers@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.2.tgz#970d74f0deadc3f5a938bfa250738eb4ac889384" - integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - -"@babel/highlight@^7.16.7": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" - integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^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== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-plugin-utils@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@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== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.16.7", "@babel/parser@^7.18.5": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c" - integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== +"@babel/parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.10.tgz#94b5f8522356e69e8277276adf67ed280c90ecc1" + integrity sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg== -"@babel/plugin-syntax-jsx@^7.12.13": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47" - integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog== +"@babel/plugin-syntax-jsx@^7.17.12": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/runtime-corejs3@^7.10.2": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz#52f0241a31e0ec61a6187530af6227c2846bd60c" - integrity sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz#7bacecd1cb2dd694eacd32a91fcf7021c20770ae" + integrity sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A== dependencies: core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" @@ -177,44 +182,45 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.7.2": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4" - integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd" - integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.18.5" - "@babel/types" "^7.18.4" +"@babel/template@^7.18.10", "@babel/template@^7.18.6": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.10.tgz#37ad97d1cb00efa869b91dd5d1950f8a6cf0cb08" + integrity sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" - integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== +"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" "@chakra-ui/accordion@1.4.11": @@ -824,39 +830,39 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@emotion/babel-plugin@^11.7.1": - version "11.9.2" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz#723b6d394c89fb2ef782229d92ba95a740576e95" - integrity sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw== - dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/runtime" "^7.13.10" - "@emotion/hash" "^0.8.0" - "@emotion/memoize" "^0.7.5" - "@emotion/serialize" "^1.0.2" - babel-plugin-macros "^2.6.1" +"@emotion/babel-plugin@^11.10.0": + version "11.10.0" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.0.tgz#ae545b8faa6b42d3a50ec86b70b758296f3c4467" + integrity sha512-xVnpDAAbtxL1dsuSelU5A7BnY/lftws0wUexNJZTPsvX/1tM4GZJbclgODhvW4E+NH7E5VFcH0bBn30NvniPJA== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/serialize" "^1.1.0" + babel-plugin-macros "^3.1.0" convert-source-map "^1.5.0" escape-string-regexp "^4.0.0" find-root "^1.1.0" source-map "^0.5.7" stylis "4.0.13" -"@emotion/cache@^11.9.3": - version "11.9.3" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.9.3.tgz#96638449f6929fd18062cfe04d79b29b44c0d6cb" - integrity sha512-0dgkI/JKlCXa+lEXviaMtGBL0ynpx4osh7rjOXE71q9bIF8G+XhJgvi+wDu0B0IdCVx37BffiwXlN9I3UuzFvg== +"@emotion/cache@^11.10.0": + version "11.10.1" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.1.tgz#75a157c2a6bb9220450f73ebef1df2e1467dc65d" + integrity sha512-uZTj3Yz5D69GE25iFZcIQtibnVCFsc/6+XIozyL3ycgWvEdif2uEw9wlUt6umjLr4Keg9K6xRPHmD8LGi+6p1A== dependencies: - "@emotion/memoize" "^0.7.4" - "@emotion/sheet" "^1.1.1" - "@emotion/utils" "^1.0.0" - "@emotion/weak-memoize" "^0.2.5" + "@emotion/memoize" "^0.8.0" + "@emotion/sheet" "^1.2.0" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" stylis "4.0.13" -"@emotion/hash@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== +"@emotion/hash@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" + integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== "@emotion/is-prop-valid@^0.8.2": version "0.8.8" @@ -865,77 +871,77 @@ dependencies: "@emotion/memoize" "0.7.4" -"@emotion/is-prop-valid@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz#f0907a416368cf8df9e410117068e20fe87c0a3a" - integrity sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA== +"@emotion/is-prop-valid@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" + integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== dependencies: - "@emotion/memoize" "^0.7.4" + "@emotion/memoize" "^0.8.0" "@emotion/memoize@0.7.4": version "0.7.4" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== -"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50" - integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== - -"@emotion/react@^11.9.3": - version "11.9.3" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.9.3.tgz#f4f4f34444f6654a2e550f5dab4f2d360c101df9" - integrity sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@emotion/babel-plugin" "^11.7.1" - "@emotion/cache" "^11.9.3" - "@emotion/serialize" "^1.0.4" - "@emotion/utils" "^1.1.0" - "@emotion/weak-memoize" "^0.2.5" +"@emotion/memoize@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== + +"@emotion/react@^11.10.0": + version "11.10.0" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.0.tgz#53c577f063f26493f68a05188fb87528d912ff2e" + integrity sha512-K6z9zlHxxBXwN8TcpwBKcEsBsOw4JWCCmR+BeeOWgqp8GIU1yA2Odd41bwdAAr0ssbQrbJbVnndvv7oiv1bZeQ== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.10.0" + "@emotion/cache" "^11.10.0" + "@emotion/serialize" "^1.1.0" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@^1.0.2", "@emotion/serialize@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.4.tgz#ff31fd11bb07999611199c2229e152faadc21a3c" - integrity sha512-1JHamSpH8PIfFwAMryO2bNka+y8+KA5yga5Ocf2d7ZEiJjb7xlLW7aknBGZqJLajuLOvJ+72vN+IBSwPlXD1Pg== +"@emotion/serialize@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.0.tgz#b1f97b1011b09346a40e9796c37a3397b4ea8ea8" + integrity sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA== dependencies: - "@emotion/hash" "^0.8.0" - "@emotion/memoize" "^0.7.4" - "@emotion/unitless" "^0.7.5" - "@emotion/utils" "^1.0.0" + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/unitless" "^0.8.0" + "@emotion/utils" "^1.2.0" csstype "^3.0.2" -"@emotion/sheet@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.1.tgz#015756e2a9a3c7c5f11d8ec22966a8dbfbfac787" - integrity sha512-J3YPccVRMiTZxYAY0IOq3kd+hUP8idY8Kz6B/Cyo+JuXq52Ek+zbPbSQUrVQp95aJ+lsAW7DPL1P2Z+U1jGkKA== +"@emotion/sheet@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.0.tgz#771b1987855839e214fc1741bde43089397f7be5" + integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w== -"@emotion/styled@^11.9.3": - version "11.9.3" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.9.3.tgz#47f0c71137fec7c57035bf3659b52fb536792340" - integrity sha512-o3sBNwbtoVz9v7WB1/Y/AmXl69YHmei2mrVnK7JgyBJ//Rst5yqPZCecEJlMlJrFeWHp+ki/54uN265V2pEcXA== +"@emotion/styled@^11.10.0": + version "11.10.0" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.0.tgz#c19484dab4206ae46727c07efb4316423dd21312" + integrity sha512-V9oaEH6V4KePeQpgUE83i8ht+4Ri3E8Djp/ZPJ4DQlqWhSKITvgzlR3/YQE2hdfP4Jw3qVRkANJz01LLqK9/TA== dependencies: - "@babel/runtime" "^7.13.10" - "@emotion/babel-plugin" "^11.7.1" - "@emotion/is-prop-valid" "^1.1.3" - "@emotion/serialize" "^1.0.4" - "@emotion/utils" "^1.1.0" + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.10.0" + "@emotion/is-prop-valid" "^1.2.0" + "@emotion/serialize" "^1.1.0" + "@emotion/utils" "^1.2.0" -"@emotion/unitless@^0.7.5": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" - integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== +"@emotion/unitless@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" + integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== -"@emotion/utils@^1.0.0", "@emotion/utils@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf" - integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ== +"@emotion/utils@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" + integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== -"@emotion/weak-memoize@^0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" - integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@emotion/weak-memoize@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" + integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== "@eslint/eslintrc@^1.3.0": version "1.3.0" @@ -1638,15 +1644,32 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + "@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" @@ -1660,29 +1683,29 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" - integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== +"@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== dependencies: - "@jridgewell/set-array" "^1.0.0" + "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" - integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" - integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.13" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" - integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -1693,84 +1716,89 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.9": - version "0.3.13" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" - integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@next/env@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/env/-/env-12.1.6.tgz#5f44823a78335355f00f1687cfc4f1dafa3eca08" - integrity sha512-Te/OBDXFSodPU6jlXYPAXpmZr/AkG6DCATAxttQxqOWaq6eDFX25Db3dK0120GZrSZmv4QCe9KsZmJKDbWs4OA== +"@next/env@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-12.2.4.tgz#5ba9bed9970be4113773233148b4539691bfc4fe" + integrity sha512-/gApFXWk5CCLFQJL5IYJXxPQuG5tz5nPX4l27A9Zm/+wJxiwFrRSP54AopDxIv4JRp/rGwcgk/lZS/0Clw8jYA== -"@next/eslint-plugin-next@^12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.6.tgz#dde3f98831f15923b25244588d924c716956292e" - integrity sha512-yNUtJ90NEiYFT6TJnNyofKMPYqirKDwpahcbxBgSIuABwYOdkGwzos1ZkYD51Qf0diYwpQZBeVqElTk7Q2WNqw== +"@next/eslint-plugin-next@^12.2.3": + version "12.2.3" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.3.tgz#63726691aac6a7f01b64190a0323d590a0e8154d" + integrity sha512-B2e8Yg1MpuLsGxhCx4rU8/Tcnr5wFmCx1O2eyLXBPnaCcsFXfGCo067ujagtDLtWASL3GNgzg78U1SB0dbc38A== dependencies: glob "7.1.7" -"@next/swc-android-arm-eabi@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.6.tgz#79a35349b98f2f8c038ab6261aa9cd0d121c03f9" - integrity sha512-BxBr3QAAAXWgk/K7EedvzxJr2dE014mghBSA9iOEAv0bMgF+MRq4PoASjuHi15M2zfowpcRG8XQhMFtxftCleQ== - -"@next/swc-android-arm64@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.6.tgz#ec08ea61794f8752c8ebcacbed0aafc5b9407456" - integrity sha512-EboEk3ROYY7U6WA2RrMt/cXXMokUTXXfnxe2+CU+DOahvbrO8QSWhlBl9I9ZbFzJx28AGB9Yo3oQHCvph/4Lew== - -"@next/swc-darwin-arm64@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.6.tgz#d1053805615fd0706e9b1667893a72271cd87119" - integrity sha512-P0EXU12BMSdNj1F7vdkP/VrYDuCNwBExtRPDYawgSUakzi6qP0iKJpya2BuLvNzXx+XPU49GFuDC5X+SvY0mOw== - -"@next/swc-darwin-x64@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.6.tgz#2d1b926a22f4c5230d5b311f9c56cfdcc406afec" - integrity sha512-9FptMnbgHJK3dRDzfTpexs9S2hGpzOQxSQbe8omz6Pcl7rnEp9x4uSEKY51ho85JCjL4d0tDLBcXEJZKKLzxNg== - -"@next/swc-linux-arm-gnueabihf@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.6.tgz#c021918d2a94a17f823106a5e069335b8a19724f" - integrity sha512-PvfEa1RR55dsik/IDkCKSFkk6ODNGJqPY3ysVUZqmnWMDSuqFtf7BPWHFa/53znpvVB5XaJ5Z1/6aR5CTIqxPw== - -"@next/swc-linux-arm64-gnu@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.6.tgz#ac55c07bfabde378dfa0ce2b8fc1c3b2897e81ae" - integrity sha512-53QOvX1jBbC2ctnmWHyRhMajGq7QZfl974WYlwclXarVV418X7ed7o/EzGY+YVAEKzIVaAB9JFFWGXn8WWo0gQ== - -"@next/swc-linux-arm64-musl@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.6.tgz#e429f826279894be9096be6bec13e75e3d6bd671" - integrity sha512-CMWAkYqfGdQCS+uuMA1A2UhOfcUYeoqnTW7msLr2RyYAys15pD960hlDfq7QAi8BCAKk0sQ2rjsl0iqMyziohQ== - -"@next/swc-linux-x64-gnu@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.6.tgz#1f276c0784a5ca599bfa34b2fcc0b38f3a738e08" - integrity sha512-AC7jE4Fxpn0s3ujngClIDTiEM/CQiB2N2vkcyWWn6734AmGT03Duq6RYtPMymFobDdAtZGFZd5nR95WjPzbZAQ== - -"@next/swc-linux-x64-musl@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.6.tgz#1d9933dd6ba303dcfd8a2acd6ac7c27ed41e2eea" - integrity sha512-c9Vjmi0EVk0Kou2qbrynskVarnFwfYIi+wKufR9Ad7/IKKuP6aEhOdZiIIdKsYWRtK2IWRF3h3YmdnEa2WLUag== - -"@next/swc-win32-arm64-msvc@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.6.tgz#2ef9837f12ca652b1783d72ecb86208906042f02" - integrity sha512-3UTOL/5XZSKFelM7qN0it35o3Cegm6LsyuERR3/OoqEExyj3aCk7F025b54/707HTMAnjlvQK3DzLhPu/xxO4g== - -"@next/swc-win32-ia32-msvc@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.6.tgz#74003d0aa1c59dfa56cb15481a5c607cbc0027b9" - integrity sha512-8ZWoj6nCq6fI1yCzKq6oK0jE6Mxlz4MrEsRyu0TwDztWQWe7rh4XXGLAa2YVPatYcHhMcUL+fQQbqd1MsgaSDA== - -"@next/swc-win32-x64-msvc@12.1.6": - version "12.1.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.6.tgz#a350caf42975e7197b24b495b8d764eec7e6a36e" - integrity sha512-4ZEwiRuZEicXhXqmhw3+de8Z4EpOLQj/gp+D9fFWo6ii6W1kBkNNvvEx4A90ugppu+74pT1lIJnOuz3A9oQeJA== +"@next/swc-android-arm-eabi@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.4.tgz#5c7f508f93baec810c96bf60128b7c1f2109bee2" + integrity sha512-P4YSFNpmXXSnn3P1qsOAqz+MX3On9fHrlc8ovb/CFJJoU+YLCR53iCEwfw39e0IZEgDA7ttgr108plF8mxaX0g== + +"@next/swc-android-arm64@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.2.4.tgz#f86411e0513419f027d16b2d4d823a3ca631a634" + integrity sha512-4o2n14E18O+8xHlf6dgJsWPXN9gmSmfIe2Z0EqKDIPBBkFt/2CyrH0+vwHnL2l7xkDHhOGfZYcYIWVUR5aNu0A== + +"@next/swc-darwin-arm64@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.4.tgz#23db172f02f5cf0ceca5e0934cfde21f30cc7461" + integrity sha512-DcUO6MGBL9E3jj5o86MUnTOy4WawIJJhyCcFYO4f51sbl7+uPIYIx40eo98A6NwJEXazCqq1hLeqOaNTAIvDiQ== + +"@next/swc-darwin-x64@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.4.tgz#820125d2a4d35cd9c807156a403a447360b5923f" + integrity sha512-IUlFMqeLjdIzDorrGC2Dt+2Ae3DbKQbRzCzmDq4/CP1+jJGeDXo/2AHnlE+WYnwQAC4KtAz6pbVnd3KstZWsVA== + +"@next/swc-freebsd-x64@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.4.tgz#81ccd262c7ea3f7ed2de136c3402fc28cd103ce8" + integrity sha512-475vwyWcjnyDVDWLgAATP0HI8W1rwByc+uXk1B6KkAVFhkoDgH387LW0uNqxavK+VxCzj3avQXX/58XDvxtSlg== + +"@next/swc-linux-arm-gnueabihf@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.4.tgz#5b543e461696adcb60c64b56fc81eaa9e3cfcdd8" + integrity sha512-qZW+L3iG3XSGtlOPmD5RRWXyk6ZNdscLV0BQjuDvP+exTg+uixqHXOHz0/GVATIJEBQOF0Kew7jAXVXEP+iRTQ== + +"@next/swc-linux-arm64-gnu@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.4.tgz#f83b824d112494db41df69e2c456950a57deacba" + integrity sha512-fEPRjItWYaKyyG9N+2HIA59OBHIhk7WC+Rh+LwXsh0pQe870Ykpek3KQs0umjsrEGe57NyMomq3f80/N8taDvA== + +"@next/swc-linux-arm64-musl@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.4.tgz#a7e575970fcd6166c7b506fd25121927c13349ee" + integrity sha512-rnCTzXII0EBCcFn9P5s/Dho2kPUMSX/bP0iOAj8wEI/IxUEfEElbin89zJoNW30cycHu19xY8YP4K2+hzciPzQ== + +"@next/swc-linux-x64-gnu@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.4.tgz#4dd2ad1c72c160430199265e74b6d7037f2be4f5" + integrity sha512-PhXX6NSuIuhHInxPY2VkG2Bl7VllsD3Cjx+pQcS1wTym7Zt7UoLvn05PkRrkiyIkvR+UXnqPUM3TYiSbnemXEw== + +"@next/swc-linux-x64-musl@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.4.tgz#15415b1e6b92ca19453c4c6113496685167b05d4" + integrity sha512-GmC/QROiUZpFirHRfPQqMyCXZ+5+ndbBZrMvL74HtQB/CKXB8K1VM+rvy9Gp/5OaU8Rxp48IcX79NOfI2LiXlA== + +"@next/swc-win32-arm64-msvc@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.4.tgz#48344aded1702e321bef0fdefc3fb9f763c2ba25" + integrity sha512-9XKoCXbNZuaMRPtcKQz3+hgVpkMosaLlcxHFXT8/j4w61k7/qvEbrkMDS9WHNrD/xVcLycwhPRgXcns2K1BdBQ== + +"@next/swc-win32-ia32-msvc@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.4.tgz#e040fbf292205716c2c1d69d51c1c98fa59825ff" + integrity sha512-hEyRieZKH9iw4AzvXaQ+Fyb98k0G/o9QcRGxA1/O/O/elf1+Qvuwb15phT8GbVtIeNziy66XTPOhKKfdr8KyUg== + +"@next/swc-win32-x64-msvc@12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.4.tgz#0134c4cd5df39033347614ce5fc26af485ac9048" + integrity sha512-5Pl1tdMJWLy4rvzU1ecx0nHWgDPqoYuvYoXE/5X0Clu9si/yOuBIj573F2kOTY7mu0LX2wgCJVSnyK0abHBxIw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1793,6 +1821,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@panva/hkdf@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.0.2.tgz#bab0f09d09de9fd83628220d496627681bc440d6" + integrity sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA== + "@polkadot/keyring@^7.7.1": version "7.9.2" resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-7.9.2.tgz#1f5bf6b7bdb5942d275aebf72d4ed98abe874fa8" @@ -1930,10 +1963,27 @@ prop-types "^15.7.2" tslib "^2.1.0" -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sindresorhus/is@^4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@solana/buffer-layout@^4.0.0": version "4.0.0" @@ -1943,9 +1993,9 @@ buffer "~6.0.3" "@solana/web3.js@^1.31.0": - version "1.44.2" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.44.2.tgz#5303efd94a7f2d6054a1483a4b4db4a26eb2a392" - integrity sha512-DvrJMoKonLuaX0/KyyJXcP/+w+9q8mve4gN3hC2Ptg51K/Gi1/cx6oQN2lbRZb4wYPBd2s2GDAJAJUAwZGsEug== + version "1.50.1" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.50.1.tgz#dae726a06267d1bcd88b1e3cd8ae44c709302dcf" + integrity sha512-1l9N/nS8pJEA2YibNT8wa072718O0/A1eKWE0+pdWC5wDGQgBNxZSLuv7Cq5Dcn46WsZ5J5ZstK89q8J/ZZaQA== dependencies: "@babel/runtime" "^7.12.5" "@ethersproject/sha2" "^5.5.0" @@ -1959,17 +2009,25 @@ jayson "^3.4.4" js-sha3 "^0.8.0" node-fetch "2" - rpc-websockets "^7.4.2" + react-native-url-polyfill "^1.3.0" + rpc-websockets "^7.5.0" secp256k1 "^4.0.2" superstruct "^0.14.2" tweetnacl "^1.0.0" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== +"@swc/helpers@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.3.tgz#16593dfc248c53b699d4b5026040f88ddb497012" + integrity sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA== + dependencies: + tslib "^2.4.0" + +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== dependencies: - defer-to-connect "^1.0.1" + defer-to-connect "^2.0.1" "@tsconfig/node10@^1.0.7": version "1.0.9" @@ -2012,6 +2070,16 @@ dependencies: base-x "^3.0.6" +"@types/cacheable-request@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" + integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + "@types/connect@^3.4.33": version "3.4.35" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" @@ -2019,20 +2087,35 @@ dependencies: "@types/node" "*" -"@types/crypto-js@^4.0.1": +"@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/express-serve-static-core@^4.17.9": - version "4.17.29" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" - integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== + version "4.17.30" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04" + integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" +"@types/git-clone@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@types/git-clone/-/git-clone-0.2.0.tgz#7a7212ab3ed80ef6d558824d442af83d77d69568" + integrity sha512-RnYrs8sZWTBfeg8hAh5VwM3wEBlIaraQfo8h9FSxmX09KQ9VUDuL9AFzR3doV6IUMzEwjee6fOViIhqFvs1ulA== + +"@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/json-buffer@~3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/json-buffer/-/json-buffer-3.0.0.tgz#85c1ff0f0948fc159810d4b5be35bf8c20875f64" + integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ== + "@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" @@ -2043,6 +2126,13 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/keyv@*": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + "@types/lodash.mergewith@4.6.6": version "4.6.6" resolved "https://registry.yarnpkg.com/@types/lodash.mergewith/-/lodash.mergewith-4.6.6.tgz#c4698f5b214a433ff35cb2c75ee6ec7f99d79f10" @@ -2056,9 +2146,9 @@ integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== "@types/node@*": - version "18.0.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a" - integrity sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== + version "18.6.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.3.tgz#4e4a95b6fe44014563ceb514b2598b3e623d1c98" + integrity sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg== "@types/node@10.12.18": version "10.12.18" @@ -2076,9 +2166,9 @@ integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^14.14.31": - version "14.18.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.21.tgz#0155ee46f6be28b2ff0342ca1a9b9fd4468bef41" - integrity sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q== + version "14.18.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.23.tgz#70f5f20b0b1b38f696848c1d3647bb95694e615e" + integrity sha512-MhbCWN18R4GhO8ewQWAFK4TGQdBpXWByukz7cWyJmXhvRuCIaM/oWytGPqVmDzgEnnaIc9ss6HbU5mUi+vyZPA== "@types/parse-json@^4.0.0": version "4.0.0" @@ -2115,14 +2205,21 @@ "@types/react" "^17" "@types/react@^17", "@types/react@^17.0.11", "@types/react@^17.0.15": - version "17.0.47" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.47.tgz#4ee71aaf4c5a9e290e03aa4d0d313c5d666b3b78" - integrity sha512-mk0BL8zBinf2ozNr3qPnlu1oyVTYq+4V7WA76RgxUAtf0Em/Wbid38KN6n4abEkvO4xMTBWmnP1FtQzgkEiJoA== + version "17.0.48" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.48.tgz#a4532a8b91d7b27b8768b6fc0c3bccb760d15a6c" + integrity sha512-zJ6IYlJ8cYYxiJfUaZOQee4lh99mFihBoqkOSEGV+dFi9leROW6+PgstzQ+w3gWTnUfskALtQPGHK6dYmPj+2A== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + "@types/ripemd160@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/ripemd160/-/ripemd160-2.0.0.tgz#d33e49cf66edf4668828030d4aa80116bbf8ae81" @@ -2178,14 +2275,14 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.29.0": - version "5.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz#c67794d2b0fd0b4a47f50266088acdc52a08aab6" - integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w== +"@typescript-eslint/eslint-plugin@^5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz#e27e38cffa4a61226327c874a7be965e9a861624" + integrity sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew== dependencies: - "@typescript-eslint/scope-manager" "5.29.0" - "@typescript-eslint/type-utils" "5.29.0" - "@typescript-eslint/utils" "5.29.0" + "@typescript-eslint/scope-manager" "5.32.0" + "@typescript-eslint/type-utils" "5.32.0" + "@typescript-eslint/utils" "5.32.0" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -2193,69 +2290,69 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.29.0": - version "5.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.29.0.tgz#41314b195b34d44ff38220caa55f3f93cfca43cf" - integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw== +"@typescript-eslint/parser@^5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.32.0.tgz#1de243443bc6186fb153b9e395b842e46877ca5d" + integrity sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A== dependencies: - "@typescript-eslint/scope-manager" "5.29.0" - "@typescript-eslint/types" "5.29.0" - "@typescript-eslint/typescript-estree" "5.29.0" + "@typescript-eslint/scope-manager" "5.32.0" + "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/typescript-estree" "5.32.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.29.0": - version "5.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3" - integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA== +"@typescript-eslint/scope-manager@5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz#763386e963a8def470580cc36cf9228864190b95" + integrity sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg== dependencies: - "@typescript-eslint/types" "5.29.0" - "@typescript-eslint/visitor-keys" "5.29.0" + "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/visitor-keys" "5.32.0" -"@typescript-eslint/type-utils@5.29.0": - version "5.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz#241918001d164044020b37d26d5b9f4e37cc3d5d" - integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg== +"@typescript-eslint/type-utils@5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz#45a14506fe3fb908600b4cef2f70778f7b5cdc79" + integrity sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg== dependencies: - "@typescript-eslint/utils" "5.29.0" + "@typescript-eslint/utils" "5.32.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.29.0": - version "5.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" - integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== +"@typescript-eslint/types@5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.32.0.tgz#484273021eeeae87ddb288f39586ef5efeb6dcd8" + integrity sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ== -"@typescript-eslint/typescript-estree@5.29.0": - version "5.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" - integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ== +"@typescript-eslint/typescript-estree@5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz#282943f34babf07a4afa7b0ff347a8e7b6030d12" + integrity sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg== dependencies: - "@typescript-eslint/types" "5.29.0" - "@typescript-eslint/visitor-keys" "5.29.0" + "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/visitor-keys" "5.32.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.29.0": - version "5.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" - integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A== +"@typescript-eslint/utils@5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.32.0.tgz#eccb6b672b94516f1afc6508d05173c45924840c" + integrity sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.29.0" - "@typescript-eslint/types" "5.29.0" - "@typescript-eslint/typescript-estree" "5.29.0" + "@typescript-eslint/scope-manager" "5.32.0" + "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/typescript-estree" "5.32.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.29.0": - version "5.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee" - integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ== +"@typescript-eslint/visitor-keys@5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz#b9715d0b11fdb5dd10fd0c42ff13987470525394" + integrity sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g== dependencies: - "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/types" "5.32.0" eslint-visitor-keys "^3.3.0" JSONStream@^1.3.5: @@ -2266,6 +2363,11 @@ JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" +abortcontroller-polyfill@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz#1b5b487bd6436b5b764fd52a612509702c3144b5" + integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== + accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -2289,10 +2391,10 @@ acorn@7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== -acorn@^8.4.1, acorn@^8.7.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +acorn@^8.4.1, acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== aes-js@3.0.0: version "3.0.0" @@ -2378,6 +2480,35 @@ arch@^2.2.0: resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" + integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.3" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.0.0" + tar-stream "^2.2.0" + zip-stream "^4.1.0" + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -2481,7 +2612,7 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^3.2.0: +async@^3.2.0, async@^3.2.3: version "3.2.4" resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== @@ -2511,10 +2642,10 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axe-core@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.2.tgz#dcf7fb6dea866166c3eab33d68208afe4d5f670c" - integrity sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA== +axe-core@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" + integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== axios@^0.21.4: version "0.21.4" @@ -2523,19 +2654,27 @@ axios@^0.21.4: dependencies: follow-redirects "^1.14.0" +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" + axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-plugin-macros@^2.6.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" - integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" balanced-match@^1.0.0: version "1.0.2" @@ -2615,6 +2754,15 @@ bip66@^1.1.5: dependencies: safe-buffer "^5.0.1" +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + blakejs@^1.1.0, blakejs@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" @@ -2680,6 +2828,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -2747,14 +2902,14 @@ browserify-sign@^4.0.0: safe-buffer "^5.2.0" browserslist@^4.20.2: - version "4.21.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.0.tgz#7ab19572361a140ecd1e023e2c1ed95edda0cefe" - integrity sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA== + version "4.21.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== dependencies: - caniuse-lite "^1.0.30001358" - electron-to-chromium "^1.4.164" - node-releases "^2.0.5" - update-browserslist-db "^1.0.0" + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" @@ -2772,7 +2927,7 @@ bs58check@<3.0.0, bs58check@^2.1.1, bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" -buffer-crc32@~0.2.3: +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== @@ -2795,7 +2950,7 @@ buffer@6.0.1: base64-js "^1.3.1" ieee754 "^1.2.1" -buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: +buffer@^5.0.5, buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -2823,18 +2978,23 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== +cacheable-lookup@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz#65c0e51721bb7f9f2cb513aed6da4a1b93ad7dc8" + integrity sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A== + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== dependencies: clone-response "^1.0.2" get-stream "^5.1.0" http-cache-semantics "^4.0.0" - keyv "^3.0.0" + keyv "^4.0.0" lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" + normalize-url "^6.0.1" + responselike "^2.0.0" cachedir@^2.3.0: version "2.3.0" @@ -2859,10 +3019,10 @@ camelcase@^6.2.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001332, caniuse-lite@^1.0.30001358: - version "1.0.30001359" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz#a1c1cbe1c2da9e689638813618b4219acbd4925e" - integrity sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw== +caniuse-lite@^1.0.30001332, caniuse-lite@^1.0.30001370: + version "1.0.30001373" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz#2dc3bc3bfcb5d5a929bec11300883040d7b4b4be" + integrity sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ== caseless@~0.12.0: version "0.12.0" @@ -2955,9 +3115,9 @@ cli-truncate@^2.1.0: string-width "^4.2.0" clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" @@ -3012,6 +3172,24 @@ common-tags@^1.8.0: resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== +compress-brotli@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/compress-brotli/-/compress-brotli-1.3.8.tgz#0c0a60c97a989145314ec381e84e26682e7b38db" + integrity sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ== + dependencies: + "@types/json-buffer" "~3.0.0" + json-buffer "~3.0.1" + +compress-commons@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" + integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.2" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + compute-scroll-into-view@1.0.14: version "1.0.14" resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.14.tgz#80e3ebb25d6aa89f42e533956cb4b16a04cfe759" @@ -3065,10 +3243,10 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -cookiejar@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" - integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== copy-to-clipboard@3.3.1: version "3.3.1" @@ -3078,15 +3256,20 @@ copy-to-clipboard@3.3.1: toggle-selection "^1.0.6" core-js-pure@^3.20.2: - version "3.23.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.3.tgz#bcd02d3d8ec68ad871ef50d5ccbb248ddb54f401" - integrity sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA== + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3" + integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== 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" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cors@^2.8.1: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -3095,22 +3278,30 @@ cors@^2.8.1: object-assign "^4" vary "^1" -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== +cosmiconfig@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== dependencies: "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" + import-fresh "^3.2.1" parse-json "^5.0.0" path-type "^4.0.0" - yaml "^1.7.2" + yaml "^1.10.0" crc-32@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== +crc32-stream@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" + integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + create-ecdh@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" @@ -3147,6 +3338,13 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cross-fetch@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -3205,10 +3403,10 @@ cypress-file-upload@^5.0.8: resolved "https://registry.yarnpkg.com/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz#d8824cbeaab798e44be8009769f9a6c9daa1b4a1" integrity sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g== -cypress@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.2.0.tgz#ca078abfceb13be2a33cbba6e0e80ded770f542a" - integrity sha512-+i9lY5ENlfi2mJwsggzR+XASOIgMd7S/Gd3/13NCpv596n3YSplMAueBTIxNLcxDpTcIksp+9pM3UaDrJDpFqA== +cypress@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.4.0.tgz#bb5b3b6588ad49eff172fecf5778cc0da2980e4e" + integrity sha512-OM7F8MRE01SHQRVVzunid1ZK1m90XTxYnl+7uZfIrB4CYqUDCrZEeSyCXzIbsS6qcaijVCAhqDL60SxG8N6hew== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -3322,9 +3520,9 @@ dashdash@^1.12.0: assert-plus "^1.0.0" dayjs@^1.10.4: - version "1.11.3" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.3.tgz#4754eb694a624057b9ad2224b67b15d552589258" - integrity sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A== + version "1.11.4" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.4.tgz#3b3c10ca378140d8917e06ebc13a4922af4f433e" + integrity sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g== debug@2.6.9, debug@^2.2.0, debug@^2.6.9: version "2.6.9" @@ -3359,15 +3557,22 @@ decompress-response@^3.2.0, decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" @@ -3460,9 +3665,9 @@ drbg.js@^1.0.1: create-hmac "^1.1.4" duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA== + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== ecc-jsbn@~0.1.1: version "0.1.2" @@ -3485,12 +3690,12 @@ eccrypto@1.1.6: secp256k1 "3.7.1" eciesjs@^0.3.12: - version "0.3.14" - resolved "https://registry.yarnpkg.com/eciesjs/-/eciesjs-0.3.14.tgz#98c98dc519222cdc7b6f9a055b8a7a2e658ab543" - integrity sha512-rBbLawo9HRMksRrroYa32RG0BbZ692fRArt1VjeI/pG6hZoSfGTFxxi6jNztJwwNt9EziIGBV7LBczntChmVFw== + version "0.3.15" + resolved "https://registry.yarnpkg.com/eciesjs/-/eciesjs-0.3.15.tgz#614fd3251a72c063b6a0a9a8dbbfe89aafc94b7a" + integrity sha512-8hMcxjgUCSyastAK+BkFAzojRR/wqJNUkp20a0Yw8PudTSeHB57kjcl9x2jkaTVCG2NJwSTdJkM6RcUpqnY+Zw== dependencies: "@types/secp256k1" "^4.0.3" - futoin-hkdf "^1.5.0" + futoin-hkdf "^1.5.1" secp256k1 "^4.0.3" ed2curve@^0.3.0: @@ -3505,10 +3710,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.164: - version "1.4.170" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz#0415fc489402e09bfbe1f0c99bbf4d73f31d48d4" - integrity sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw== +electron-to-chromium@^1.4.202: + version "1.4.209" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.209.tgz#18ec3a0773fb3e39fc0a5c9373b2e7c72df584af" + integrity sha512-SfWI9G/e3rxGIUalHbUCH9yEsTpO+72y+cD1Sw0tYtuTrdOPaFAgZKXM1crWVJwTNmj6KIPbbx0NIoV8a2cFJw== elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.4.1, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" @@ -3538,7 +3743,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -3605,9 +3810,9 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.61" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.61.tgz#311de37949ef86b6b0dcea894d1ffedb909d3269" - integrity sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA== + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== dependencies: es6-iterator "^2.0.3" es6-symbol "^3.1.3" @@ -3622,7 +3827,7 @@ es6-iterator@^2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@4.2.8, es6-promise@^4.0.3: +es6-promise@4.2.8, es6-promise@^4.0.3, es6-promise@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== @@ -3728,29 +3933,29 @@ eslint-plugin-import@^2.26.0: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-plugin-jsx-a11y@^6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz#2c5ac12e013eb98337b9aa261c3b355275cc6415" - integrity sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw== +eslint-plugin-jsx-a11y@^6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== dependencies: - "@babel/runtime" "^7.18.3" + "@babel/runtime" "^7.18.9" aria-query "^4.2.2" array-includes "^3.1.5" ast-types-flow "^0.0.7" - axe-core "^4.4.2" + axe-core "^4.4.3" axobject-query "^2.2.0" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" has "^1.0.3" - jsx-ast-utils "^3.3.1" + jsx-ast-utils "^3.3.2" language-tags "^1.0.5" minimatch "^3.1.2" semver "^6.3.0" -eslint-plugin-prettier@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz#8b99d1e4b8b24a762472b4567992023619cb98e0" - integrity sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ== +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" @@ -3812,13 +4017,14 @@ 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@^8.18.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.18.0.tgz#78d565d16c993d0b73968c523c0446b13da784fd" - integrity sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA== +eslint@^8.21.0: + version "8.21.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.21.0.tgz#1940a68d7e0573cef6f50037addee295ff9be9ef" + integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== dependencies: "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.9.2" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -3828,14 +4034,17 @@ eslint@^8.18.0: eslint-scope "^7.1.1" eslint-utils "^3.0.0" eslint-visitor-keys "^3.3.0" - espree "^9.3.2" + espree "^9.3.3" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" + find-up "^5.0.0" functional-red-black-tree "^1.0.1" glob-parent "^6.0.1" globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -3853,12 +4062,12 @@ eslint@^8.18.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== +espree@^9.3.2, espree@^9.3.3: + version "9.3.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" + integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== dependencies: - acorn "^8.7.1" + acorn "^8.8.0" acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" @@ -4069,9 +4278,9 @@ ethjs-unit@0.1.6: number-to-bn "1.7.0" eventemitter2@^6.4.3: - version "6.4.5" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" - integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== eventemitter3@4.0.4: version "4.0.4" @@ -4289,6 +4498,14 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -4298,9 +4515,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== + version "3.2.6" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" + integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== focus-lock@^0.9.1: version "0.9.2" @@ -4309,7 +4526,7 @@ focus-lock@^0.9.1: dependencies: tslib "^2.0.3" -follow-redirects@^1.14.0: +follow-redirects@^1.14.0, follow-redirects@^1.14.9: version "1.15.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== @@ -4326,6 +4543,11 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== +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" + integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -4374,6 +4596,11 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -4430,7 +4657,7 @@ functions-have-names@^1.2.2: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -futoin-hkdf@^1.5.0: +futoin-hkdf@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/futoin-hkdf/-/futoin-hkdf-1.5.1.tgz#141f00427bc9950b38a42aa786b99c318b9b688d" integrity sha512-g5d0Qp7ks55hYmYmfqn4Nz18XH49lcCR+vvIvHT92xXnsJaGZmY1EtWQWilJ6BQp57heCIXM/rRo+AFep8hGgg== @@ -4459,13 +4686,6 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -4473,6 +4693,11 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -4495,6 +4720,11 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +git-clone@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/git-clone/-/git-clone-0.2.0.tgz#9dce00facbab227d2562150052cd4a3a7ec15c41" + integrity sha512-1UAkEPIFbyjHaddljUKvPhhLRnrKaImT71T7rdvSvWLXw95nLdhdi6Qmlx0KOWoV1qqvHGLq5lMLJEZM0JXk8A== + glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -4521,7 +4751,7 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3: +glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -4554,9 +4784,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.15.0: - version "13.15.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" - integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== dependencies: type-fest "^0.20.2" @@ -4572,22 +4802,24 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -got@9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" +got@12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" + integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== + dependencies: + "@sindresorhus/is" "^4.6.0" + "@szmarczak/http-timer" "^5.0.1" + "@types/cacheable-request" "^6.0.2" + "@types/responselike" "^1.0.0" + cacheable-lookup "^6.0.4" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + form-data-encoder "1.7.1" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^2.0.0" got@^7.1.0: version "7.1.0" @@ -4614,6 +4846,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -4757,6 +4994,14 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" +http2-wrapper@^2.1.10: + version "2.1.11" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.1.11.tgz#d7c980c7ffb85be3859b6a96c800b2951ae257ef" + integrity sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -4786,7 +5031,7 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== -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== @@ -4812,7 +5057,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5048,6 +5293,11 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -5092,6 +5342,22 @@ jayson@^3.4.4: uuid "^8.3.2" ws "^7.4.5" +joi@^17.6.0: + version "17.6.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.0.tgz#0bb54f2f006c09a96e75ce687957bd04290054b2" + integrity sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" + +jose@^4.1.4, jose@^4.3.7: + version "4.8.3" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.8.3.tgz#5a754fb4aa5f2806608d083f438e6916b11087da" + integrity sha512-7rySkpW78d8LBp4YU70Wb7+OTgE3OwAALNVZxhoIhp4Kscp+p/fBkdpxGAMKxvCAMV4QfXBU9m6l9nX/vGwd2g== + js-file-download@^0.4.12: version "0.4.12" resolved "https://registry.yarnpkg.com/js-file-download/-/js-file-download-0.4.12.tgz#10c70ef362559a5b23cdbdc3bd6f399c3d91d821" @@ -5129,10 +5395,10 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== +json-buffer@3.0.1, json-buffer@~3.0.1: + version "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: version "2.3.1" @@ -5212,10 +5478,10 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz#a3e0f1cb7e230954eab4dcbce9f6288a78f8ba44" - integrity sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ== +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz#afe5efe4332cd3515c065072bd4d6b0aa22152bd" + integrity sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q== dependencies: array-includes "^3.1.5" object.assign "^4.1.2" @@ -5229,17 +5495,18 @@ keccak@^3.0.0: node-gyp-build "^4.2.0" readable-stream "^3.6.0" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== +keyv@^4.0.0: + version "4.3.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.3.3.tgz#6c1bcda6353a9e96fc1b4e1aeb803a6e35090ba9" + integrity sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ== dependencies: - json-buffer "3.0.0" + compress-brotli "^1.3.8" + json-buffer "3.0.1" language-subtag-registry@~0.3.2: - version "0.3.21" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" - integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== language-tags@^1.0.5: version "1.0.5" @@ -5253,6 +5520,13 @@ lazy-ass@^1.6.0: resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -5288,6 +5562,33 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +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.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -5303,6 +5604,11 @@ lodash.once@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== + lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -5333,7 +5639,7 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: +lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== @@ -5343,6 +5649,11 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -5432,11 +5743,16 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: +mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -5461,6 +5777,13 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" @@ -5575,7 +5898,7 @@ nano-json-stream-parser@^0.1.2: resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== -nanoid@^3.1.30: +nanoid@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== @@ -5590,40 +5913,70 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +next-auth@^4.10.3: + version "4.10.3" + resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.10.3.tgz#0a952dd5004fd2ac2ba414c990922cf9b33951a3" + integrity sha512-7zc4aXYc/EEln7Pkcsn21V1IevaTZsMLJwapfbnKA4+JY0+jFzWbt5p/ljugesGIrN4VOZhpZIw50EaFZyghJQ== + dependencies: + "@babel/runtime" "^7.16.3" + "@panva/hkdf" "^1.0.1" + cookie "^0.4.1" + jose "^4.3.7" + oauth "^0.9.15" + openid-client "^5.1.0" + preact "^10.6.3" + preact-render-to-string "^5.1.19" + uuid "^8.3.2" + +next-connect@^1.0.0-next.1: + version "1.0.0-next.3" + resolved "https://registry.yarnpkg.com/next-connect/-/next-connect-1.0.0-next.3.tgz#d7df4ee2c54bb1808f273e1ebec308e2ffb553d2" + integrity sha512-i1kb8rz/3lm6z68Lnh18juHGgbgFVZXXAIiElaASGXxDZ8mJ2EVxdbTXX8NiF9BbGDBeao7u6uKMqw5ZLZg/Kg== + dependencies: + regexparam "^2.0.1" + +next-joi@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/next-joi/-/next-joi-2.2.1.tgz#bd690b5eba02d6d5d8bae76a2f402fb11843eca8" + integrity sha512-m6/rDj9a9sp0CeMGy3np/7T2663QFinfiTY4MuJ9LEicU+6SiDim4wnsqG5CfzI4IQX4tupN6jSCtsv0t2EWnQ== + next-tick@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== -next@^12.1.6: - version "12.1.6" - resolved "https://registry.yarnpkg.com/next/-/next-12.1.6.tgz#eb205e64af1998651f96f9df44556d47d8bbc533" - integrity sha512-cebwKxL3/DhNKfg9tPZDQmbRKjueqykHHbgaoG4VBRH3AHQJ2HO0dbKFiS1hPhe1/qgc2d/hFeadsbPicmLD+A== +next@^12.2.4: + version "12.2.4" + resolved "https://registry.yarnpkg.com/next/-/next-12.2.4.tgz#88f7a7a4cd76063704cda28b3b07c4217b8928b0" + integrity sha512-b1xlxEozmAWokAXzXsi5vlmU/IfJcFNIJA8dpU5UdkFbyDPio8wwb8mAQ/Y7rGtfTgG/t/u49BiyEA+xAgFvow== dependencies: - "@next/env" "12.1.6" + "@next/env" "12.2.4" + "@swc/helpers" "0.4.3" caniuse-lite "^1.0.30001332" - postcss "8.4.5" + postcss "8.4.14" styled-jsx "5.0.2" + use-sync-external-store "1.2.0" optionalDependencies: - "@next/swc-android-arm-eabi" "12.1.6" - "@next/swc-android-arm64" "12.1.6" - "@next/swc-darwin-arm64" "12.1.6" - "@next/swc-darwin-x64" "12.1.6" - "@next/swc-linux-arm-gnueabihf" "12.1.6" - "@next/swc-linux-arm64-gnu" "12.1.6" - "@next/swc-linux-arm64-musl" "12.1.6" - "@next/swc-linux-x64-gnu" "12.1.6" - "@next/swc-linux-x64-musl" "12.1.6" - "@next/swc-win32-arm64-msvc" "12.1.6" - "@next/swc-win32-ia32-msvc" "12.1.6" - "@next/swc-win32-x64-msvc" "12.1.6" + "@next/swc-android-arm-eabi" "12.2.4" + "@next/swc-android-arm64" "12.2.4" + "@next/swc-darwin-arm64" "12.2.4" + "@next/swc-darwin-x64" "12.2.4" + "@next/swc-freebsd-x64" "12.2.4" + "@next/swc-linux-arm-gnueabihf" "12.2.4" + "@next/swc-linux-arm64-gnu" "12.2.4" + "@next/swc-linux-arm64-musl" "12.2.4" + "@next/swc-linux-x64-gnu" "12.2.4" + "@next/swc-linux-x64-musl" "12.2.4" + "@next/swc-win32-arm64-msvc" "12.2.4" + "@next/swc-win32-ia32-msvc" "12.2.4" + "@next/swc-win32-x64-msvc" "12.2.4" 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" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-fetch@2: +node-fetch@2, node-fetch@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -5631,19 +5984,24 @@ node-fetch@2: whatwg-url "^5.0.0" node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + version "4.5.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" + integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== -node-releases@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" - integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== npm-run-path@^4.0.0: version "4.0.1" @@ -5665,11 +6023,21 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== +oauth@^0.9.15: + version "0.9.15" + resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" + integrity sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA== + object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +object-hash@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" + integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== + object-inspect@^1.12.0, object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" @@ -5732,6 +6100,11 @@ oboe@2.1.5: dependencies: http-https "^1.0.0" +oidc-token-hash@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz#ae6beec3ec20f0fd885e5400d175191d6e2f10c6" + integrity sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ== + on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -5753,6 +6126,16 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +openid-client@^5.1.0: + version "5.1.8" + resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.1.8.tgz#3a24910288b32c32f548fb6e391f44178ce6370f" + integrity sha512-EPxJY6bT7YIYQEXSGxRC5flQ3GUhLy98ufdto6+BVBrFGPmwjUpy4xBcYuU/Wt9nPkO/3EgljBrr6Ezx4lp1RQ== + dependencies: + jose "^4.1.4" + lru-cache "^6.0.0" + object-hash "^2.0.1" + oidc-token-hash "^5.0.1" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -5775,10 +6158,10 @@ p-cancelable@^0.3.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== p-finally@^1.0.0: version "1.0.0" @@ -5792,6 +6175,13 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -5799,6 +6189,13 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -5861,6 +6258,11 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -5932,14 +6334,26 @@ popmotion@9.3.6: style-value-types "4.1.4" tslib "^2.1.0" -postcss@8.4.5: - version "8.4.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" - integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== dependencies: - nanoid "^3.1.30" + nanoid "^3.3.4" picocolors "^1.0.0" - source-map-js "^1.0.1" + source-map-js "^1.0.2" + +preact-render-to-string@^5.1.19: + version "5.2.1" + resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-5.2.1.tgz#71f3e8cda65f33dbc8ad8d904ff58e3f532e59f3" + integrity sha512-Wp3ner1aIVBpKg02C4AoLdBiw4kNaiFSYHr4wUF+fR7FWKAQzNri+iPfPp31sEhAtBfWoJrSxiEFzd5wp5zCgQ== + dependencies: + pretty-format "^3.8.0" + +preact@^10.6.3: + version "10.10.1" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.10.1.tgz#df67e4348f50fc6ad2e11e813553f15c6543176b" + integrity sha512-cXljG59ylGtSLismoLojXPAGvnh2ipQr3BYz9KZQr+1sdASCT+sR/v8dSMDS96xGCdtln2wHfAHCnLJK+XcBNg== prelude-ls@^1.2.1: version "1.2.1" @@ -5951,11 +6365,6 @@ prepend-http@^1.0.1: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - prettier-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" @@ -5973,6 +6382,16 @@ pretty-bytes@^5.6.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== +pretty-format@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" + integrity sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew== + +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@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -6001,9 +6420,9 @@ proxy-from-env@1.0.0: integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== public-encrypt@^4.0.0: version "4.0.3" @@ -6061,6 +6480,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + 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" @@ -6134,6 +6558,13 @@ react-is@^16.13.1, react-is@^16.7.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-native-url-polyfill@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-native-url-polyfill/-/react-native-url-polyfill-1.3.0.tgz#c1763de0f2a8c22cc3e959b654c8790622b6ef6a" + integrity sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ== + dependencies: + whatwg-url-without-unicode "8.0.0-3" + react-remove-scroll-bar@^2.1.0: version "2.3.3" resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.3.tgz#e291f71b1bb30f5f67f023765b7435f4b2b2cd94" @@ -6170,7 +6601,20 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -readable-stream@^3.6.0: +readable-stream@^2.0.0, readable-stream@^2.0.5: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -6179,6 +6623,13 @@ readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdir-glob@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.2.tgz#b185789b8e6a43491635b6953295c5c5e3fd224c" + integrity sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA== + dependencies: + minimatch "^5.1.0" + regenerator-runtime@^0.13.4: version "0.13.9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" @@ -6193,6 +6644,11 @@ regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" +regexparam@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexparam/-/regexparam-2.0.1.tgz#c912f5dae371e3798100b3c9ce22b7414d0889fa" + integrity sha512-zRgSaYemnNYxUv+/5SeoHI0eJIgTL/A2pUtXUPLHQxUldagouJ9p+K6IbIZ/JiQuCEv2E2B1O11SjVQy3aMCkw== + regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" @@ -6231,12 +6687,17 @@ request@^2.79.0: tunnel-agent "^0.6.0" uuid "^3.3.2" +resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.12.0, resolve@^1.20.0, resolve@^1.22.0: +resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -6254,12 +6715,12 @@ resolve@^2.0.0-next.3: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: - lowercase-keys "^1.0.0" + lowercase-keys "^2.0.0" restore-cursor@^3.1.0: version "3.1.0" @@ -6301,7 +6762,7 @@ rlp@^2.2.4: dependencies: bn.js "^5.2.0" -rpc-websockets@^7.4.2: +rpc-websockets@^7.5.0: version "7.5.0" resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.0.tgz#bbeb87572e66703ff151e50af1658f98098e2748" integrity sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ== @@ -6322,9 +6783,9 @@ run-parallel@^1.1.9: queue-microtask "^1.2.2" rxjs@^7.5.1: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + version "7.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== dependencies: tslib "^2.1.0" @@ -6517,7 +6978,7 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -source-map-js@^1.0.1: +source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -6600,6 +7061,13 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -6695,6 +7163,17 @@ swarm-js@^0.1.40: tar "^4.0.2" xhr-request "^1.0.1" +tar-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@^4.0.2: version "4.4.19" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" @@ -6761,11 +7240,6 @@ to-fast-properties@^2.0.0: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -6797,9 +7271,9 @@ tr46@~0.0.3: integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== ts-node@^10.3.0: - version "10.8.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" - integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" @@ -6830,7 +7304,7 @@ tslib@^1.0.0, tslib@^1.8.1: 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.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== @@ -6890,9 +7364,9 @@ type@^1.0.1: integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" - integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== + version "2.6.1" + resolved "https://registry.yarnpkg.com/type/-/type-2.6.1.tgz#808f389ec777205cc3cd97c1c88ec1a913105aae" + integrity sha512-OvgH5rB0XM+iDZGQ1Eg/o7IZn0XYJFVrN/9FQ4OWIYILyJJgVP2s1hLTOFn6UOZoDUI/HctGa0PFlE2n2HW3NQ== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -6946,10 +7420,10 @@ untildify@^4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz#dbfc5a789caa26b1db8990796c2c8ebbce304824" - integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA== +update-browserslist-db@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -6968,13 +7442,6 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - url-set-query@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" @@ -7000,6 +7467,11 @@ use-sidecar@^1.0.1, use-sidecar@^1.0.5: detect-node-es "^1.1.0" tslib "^2.0.0" +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + utf-8-validate@^5.0.2: version "5.0.9" resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" @@ -7012,7 +7484,7 @@ 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.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== @@ -7085,85 +7557,85 @@ warning@^4.0.3: dependencies: loose-envify "^1.0.0" -web3-bzz@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.7.4.tgz#9419e606e38a9777443d4ce40506ebd796e06075" - integrity sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q== +web3-bzz@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.7.5.tgz#edeb262c3a6619109763077a94172513cf07cdde" + integrity sha512-Z53sY0YK/losqjJncmL4vP0zZI9r6tiXg6o7R6e1JD2Iy7FH3serQvU+qXmPjqEBzsnhf8wTG+YcBPB3RHpr0Q== dependencies: "@types/node" "^12.12.6" - got "9.6.0" + got "12.1.0" swarm-js "^0.1.40" -web3-core-helpers@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz#f8f808928560d3e64e0c8d7bdd163aa4766bcf40" - integrity sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg== +web3-core-helpers@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.7.5.tgz#e97b3ecac787ade4b9390807a86aca78ed97872b" + integrity sha512-lDDjTks6Q6aNUO87RYrY2xub3UWTKr/RIWxpHJODEqkLxZS1dWdyliJ6aIx3031VQwsNT5HE7NvABe/t0p3iDQ== dependencies: - web3-eth-iban "1.7.4" - web3-utils "1.7.4" + web3-eth-iban "1.7.5" + web3-utils "1.7.5" -web3-core-method@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.7.4.tgz#3873c6405e1a0a8a1efc1d7b28de8b7550b00c15" - integrity sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ== +web3-core-method@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.7.5.tgz#ffe8883c169468f0e4d13509377f2d8876d9b7be" + integrity sha512-ApTvq1Llzlbxmy0n4L7QaE6NodIsR80VJqk8qN4kLg30SGznt/pNJFebryLI2kpyDmxSgj1TjEWzmHJBp6FhYg== dependencies: "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.7.4" - web3-core-promievent "1.7.4" - web3-core-subscriptions "1.7.4" - web3-utils "1.7.4" + web3-core-helpers "1.7.5" + web3-core-promievent "1.7.5" + web3-core-subscriptions "1.7.5" + web3-utils "1.7.5" -web3-core-promievent@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz#80a75633fdfe21fbaae2f1e38950edb2f134868c" - integrity sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA== +web3-core-promievent@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.7.5.tgz#56a9b06a20e20a0a89d2ab7f88d44c8ae01d5b62" + integrity sha512-uZ1VRErVuhiLtHlyt3oEH/JSvAf6bWPndChHR9PG7i1Zfqm6ZVCeM91ICTPmiL8ddsGQOxASpnJk4vhApcTIww== dependencies: eventemitter3 "4.0.4" -web3-core-requestmanager@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz#2dc8a526dab8183dca3fef54658621801b1d0469" - integrity sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA== +web3-core-requestmanager@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.7.5.tgz#be18fc99642689aeb2e016fa43fb47bb9e8c94ce" + integrity sha512-3KpfxW/wVH4mgwWEsSJGHKrtRVoijWlDxtUrm17xgtqRNZ2mFolifKnHAUKa0fY48C9CrxmcCiMIi3W4G6WYRw== dependencies: util "^0.12.0" - web3-core-helpers "1.7.4" - web3-providers-http "1.7.4" - web3-providers-ipc "1.7.4" - web3-providers-ws "1.7.4" + web3-core-helpers "1.7.5" + web3-providers-http "1.7.5" + web3-providers-ipc "1.7.5" + web3-providers-ws "1.7.5" -web3-core-subscriptions@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz#cfbd3fa71081a8c8c6f1a64577a1a80c5bd9826f" - integrity sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g== +web3-core-subscriptions@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.7.5.tgz#c0e25610768ea9d9f9107b4ac74b6b6573125e00" + integrity sha512-YK6utQ7Wwjbe4XZOIA8quWGBPi1lFDS1A+jQYwxKKrCvm6BloBNc3FhvrcSYlDhLe/kOy8+2Je8i9amndgT4ww== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.7.4" + web3-core-helpers "1.7.5" -web3-core@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.7.4.tgz#943fff99134baedafa7c65b4a0bbd424748429ff" - integrity sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q== +web3-core@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.7.5.tgz#8ee2ca490230a30ca970cb9f308eb65b76405e1d" + integrity sha512-UgOWXZr1fR/3cUQJKWbfMwRxj1/N7o6RSd/dHqdXBlOD+62EjNZItFmLRg5veq5kp9YfXzrNw9bnDkXfsL+nKQ== dependencies: "@types/bn.js" "^5.1.0" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-core-requestmanager "1.7.4" - web3-utils "1.7.4" + web3-core-helpers "1.7.5" + web3-core-method "1.7.5" + web3-core-requestmanager "1.7.5" + web3-utils "1.7.5" -web3-eth-abi@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz#3fee967bafd67f06b99ceaddc47ab0970f2a614a" - integrity sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg== +web3-eth-abi@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.7.5.tgz#db9d6dbcc043a6e922252f3228686e9bbd50d7c9" + integrity sha512-qWHvF7sayxql9BD1yqK9sZRLBQ66eJzGeaU53Y1PRq2iFPrhY6NUWxQ3c3ps0rg+dyObvRbloviWpKXcS4RE/A== dependencies: "@ethersproject/abi" "^5.6.3" - web3-utils "1.7.4" + web3-utils "1.7.5" -web3-eth-accounts@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz#7a24a4dfe947f7e9d1bae678529e591aa146167a" - integrity sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw== +web3-eth-accounts@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.7.5.tgz#b37ee3aeebcc6bce3337636aeb272cbba0ece547" + integrity sha512-AzMLoTj3RGwKpyp3x3TtHrEeU4VpR99iMOD6NKrWSDumS6QEi0lCo+y7QZhdTlINw3iIA3SFIdvbAOO4NCHSDg== dependencies: "@ethereumjs/common" "^2.5.0" "@ethereumjs/tx" "^3.3.2" @@ -7172,125 +7644,127 @@ web3-eth-accounts@1.7.4: ethereumjs-util "^7.0.10" scrypt-js "^3.0.1" uuid "3.3.2" - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-utils "1.7.4" + web3-core "1.7.5" + web3-core-helpers "1.7.5" + web3-core-method "1.7.5" + web3-utils "1.7.5" -web3-eth-contract@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz#e5761cfb43d453f57be4777b2e5e7e1082078ff7" - integrity sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ== +web3-eth-contract@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.7.5.tgz#a032419579bcec062513a3d089ad0e89ac63d731" + integrity sha512-qab7NPJRKRlTs58ozsqK8YIEwWpxIm3vD/okSIKBGkFx5gIHWW+vGmMh5PDSfefLJM9rCd+T+Lc0LYvtME7uqg== dependencies: "@types/bn.js" "^5.1.0" - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-core-promievent "1.7.4" - web3-core-subscriptions "1.7.4" - web3-eth-abi "1.7.4" - web3-utils "1.7.4" - -web3-eth-ens@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz#346720305379c0a539e226141a9602f1da7bc0c8" - integrity sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA== + web3-core "1.7.5" + web3-core-helpers "1.7.5" + web3-core-method "1.7.5" + web3-core-promievent "1.7.5" + web3-core-subscriptions "1.7.5" + web3-eth-abi "1.7.5" + web3-utils "1.7.5" + +web3-eth-ens@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.7.5.tgz#fa0e287f5e6fae20531117b7467e21b482d58cab" + integrity sha512-k1Q0msdRv/wac2egpZBIwG3n/sa/KdrVmVJvFm471gLTL4xfUizV5qJjkDVf+ikf9JyDvWJTs5eWNUUbOFIw/A== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-promievent "1.7.4" - web3-eth-abi "1.7.4" - web3-eth-contract "1.7.4" - web3-utils "1.7.4" - -web3-eth-iban@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz#711fb2547fdf0f988060027331b2b6c430505753" - integrity sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w== + web3-core "1.7.5" + web3-core-helpers "1.7.5" + web3-core-promievent "1.7.5" + web3-eth-abi "1.7.5" + web3-eth-contract "1.7.5" + web3-utils "1.7.5" + +web3-eth-iban@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.7.5.tgz#1a50efa42cabf1b731396d38bef6a8bf92b5ee1f" + integrity sha512-mn2W5t/1IpL8OZvzAabLKT4kvwRnZSJ9K0tctndl9sDNWkfITYQibEEhUaNNA50Q5fJKgVudHI/m0gwIVTyG8Q== dependencies: bn.js "^5.2.1" - web3-utils "1.7.4" + web3-utils "1.7.5" -web3-eth-personal@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz#22c399794cb828a75703df8bb4b3c1331b471546" - integrity sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g== +web3-eth-personal@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.7.5.tgz#615a3ddcf97aeea93e2a4569753c033fd7a495c5" + integrity sha512-txh2P/eN8I4AOUKFi9++KKddoD0tWfCuu9Y1Kc41jSRbk6smO88Fum0KWNmYFYhSCX2qiknS1DfqsONl3igoKQ== dependencies: "@types/node" "^12.12.6" - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-net "1.7.4" - web3-utils "1.7.4" - -web3-eth@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.7.4.tgz#a7c1d3ccdbba4de4a82df7e3c4db716e4a944bf2" - integrity sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug== - dependencies: - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-core-subscriptions "1.7.4" - web3-eth-abi "1.7.4" - web3-eth-accounts "1.7.4" - web3-eth-contract "1.7.4" - web3-eth-ens "1.7.4" - web3-eth-iban "1.7.4" - web3-eth-personal "1.7.4" - web3-net "1.7.4" - web3-utils "1.7.4" - -web3-net@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.7.4.tgz#3153dfd3423262dd6fbec7aae5467202c4cad431" - integrity sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg== - dependencies: - web3-core "1.7.4" - web3-core-method "1.7.4" - web3-utils "1.7.4" - -web3-providers-http@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.7.4.tgz#8209cdcb115db5ccae1f550d1c4e3005e7538d02" - integrity sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA== - dependencies: - web3-core-helpers "1.7.4" - xhr2-cookies "1.1.0" - -web3-providers-ipc@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz#02e85e99e48f432c9d34cee7d786c3685ec9fcfa" - integrity sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw== + web3-core "1.7.5" + web3-core-helpers "1.7.5" + web3-core-method "1.7.5" + web3-net "1.7.5" + web3-utils "1.7.5" + +web3-eth@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.7.5.tgz#36906f50a6c35570cbc08871a33caa83dc131c9c" + integrity sha512-BucjvqZyDWYkGlsFX+OnOBub0YutlC1KZiNGibdmvtNX0NQK+8iw1uzAoL9yTTwCSszL7lnkFe8N+HCOl9B4Dw== + dependencies: + web3-core "1.7.5" + web3-core-helpers "1.7.5" + web3-core-method "1.7.5" + web3-core-subscriptions "1.7.5" + web3-eth-abi "1.7.5" + web3-eth-accounts "1.7.5" + web3-eth-contract "1.7.5" + web3-eth-ens "1.7.5" + web3-eth-iban "1.7.5" + web3-eth-personal "1.7.5" + web3-net "1.7.5" + web3-utils "1.7.5" + +web3-net@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.7.5.tgz#87fbc00a9ca40515bf60c847c0092498887cfdc8" + integrity sha512-xwuCb2YWw49PmW81AJQ/G+Xi2ikRsYyZXSgyPt4LmZuKjiqg/6kSdK8lZvUi3Pi3wM+QDBXbpr73M/WEkW0KvA== + dependencies: + web3-core "1.7.5" + web3-core-method "1.7.5" + web3-utils "1.7.5" + +web3-providers-http@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.7.5.tgz#144bb0c29007d1b766bafb0e20f80be050c7aa80" + integrity sha512-vPgr4Kzy0M3CHtoP/Bh7qwK/D9h2fhjpoqctdMWVJseOfeTgfOphCKN0uwV8w2VpZgDPXA8aeTdBx5OjmDdStA== + dependencies: + abortcontroller-polyfill "^1.7.3" + cross-fetch "^3.1.4" + es6-promise "^4.2.8" + web3-core-helpers "1.7.5" + +web3-providers-ipc@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.7.5.tgz#5b0f9b4f7340416953b8816d2e42e3f548d47372" + integrity sha512-aNHx+RAROzO+apDEzy8Zncj78iqWBadIXtpmFDg7uiTn8i+oO+IcP1Yni7jyzkltsysVJHgHWG4kPx50ANCK3Q== dependencies: oboe "2.1.5" - web3-core-helpers "1.7.4" + web3-core-helpers "1.7.5" -web3-providers-ws@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz#6e60bcefb456f569a3e766e386d7807a96f90595" - integrity sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ== +web3-providers-ws@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.7.5.tgz#196b9e56a4a48f9bee54def56875ea53dec7c711" + integrity sha512-9uJNVVkIGC8PmM9kNbgPth56HDMSSsxZh3ZEENdwO3LNWemaADiQYUDCsD/dMVkn0xsGLHP5dgAy4Q5msqySLg== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.7.4" + web3-core-helpers "1.7.5" websocket "^1.0.32" -web3-shh@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.7.4.tgz#bee91cce2737c529fd347274010b548b6ea060f1" - integrity sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A== +web3-shh@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.7.5.tgz#742e27f5c44bea6d7adef3a49b085e0fcd6aa621" + integrity sha512-aCIWJyLMH5H76OybU4ZpUCJ93yNOPATGhJ+KboRPU8QZDzS2CcVhtEzyl27bbvw+rSnVroMLqBgTXBB4mmKI7A== dependencies: - web3-core "1.7.4" - web3-core-method "1.7.4" - web3-core-subscriptions "1.7.4" - web3-net "1.7.4" + web3-core "1.7.5" + web3-core-method "1.7.5" + web3-core-subscriptions "1.7.5" + web3-net "1.7.5" -web3-utils@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.4.tgz#eb6fa3706b058602747228234453811bbee017f5" - integrity sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA== +web3-utils@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.5.tgz#081a952ac6e0322e25ac97b37358a43c7372ef6a" + integrity sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw== dependencies: bn.js "^5.2.1" ethereum-bloom-filters "^1.0.6" @@ -7300,24 +7774,29 @@ web3-utils@1.7.4: randombytes "^2.1.0" utf8 "3.0.0" -web3@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.7.4.tgz#00c9aef8e13ade92fd773d845fff250535828e93" - integrity sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A== +web3@^1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.7.5.tgz#4e185d2058195b5775109b3f27cdea65a34a036e" + integrity sha512-3jHZTWyXt975AOXgnZKayiSWDLpoSKk9fZtLk1hURQtt7AdSbXPT8AK9ooBCm0Dt3GYaOeNcHGaiHC3gtyqhLg== dependencies: - web3-bzz "1.7.4" - web3-core "1.7.4" - web3-eth "1.7.4" - web3-eth-personal "1.7.4" - web3-net "1.7.4" - web3-shh "1.7.4" - web3-utils "1.7.4" + web3-bzz "1.7.5" + web3-core "1.7.5" + web3-eth "1.7.5" + web3-eth-personal "1.7.5" + web3-net "1.7.5" + web3-shh "1.7.5" + web3-utils "1.7.5" 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== + websocket@^1.0.32: version "1.0.34" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" @@ -7330,6 +7809,15 @@ websocket@^1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" +whatwg-url-without-unicode@8.0.0-3: + version "8.0.0-3" + resolved "https://registry.yarnpkg.com/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz#ab6df4bf6caaa6c85a59f6e82c026151d4bb376b" + integrity sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig== + dependencies: + buffer "^5.4.3" + punycode "^2.1.1" + webidl-conversions "^5.0.0" + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -7418,14 +7906,14 @@ ws@^3.0.0: ultron "~1.1.0" ws@^7.4.5: - version "7.5.8" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" - integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== ws@^8.5.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" - integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== + version "8.8.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== xhr-request-promise@^0.1.2: version "0.1.3" @@ -7447,13 +7935,6 @@ xhr-request@^1.0.1, xhr-request@^1.1.0: url-set-query "^1.0.0" xhr "^2.0.4" -xhr2-cookies@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" - integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== - dependencies: - cookiejar "^2.1.1" - xhr@^2.0.4, xhr@^2.3.3: version "2.6.0" resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" @@ -7491,7 +7972,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -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== @@ -7508,3 +7989,17 @@ yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zip-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" + integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^4.1.0" + readable-stream "^3.6.0"