From 720d240317675f5cffed13cac7c234308f9d6c53 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 13 Jan 2025 16:36:05 +0000 Subject: [PATCH 01/23] structure and wip --- gaztec/.env | 2 + gaztec/.gitignore | 29 + gaztec/.yarnrc.yml | 1 + gaztec/README.md | 50 + gaztec/eslint.config.js | 28 + gaztec/index.html | 25 + gaztec/package.json | 51 + gaztec/src/App.css | 6 + gaztec/src/App.tsx | 18 + gaztec/src/assets/Aztec_logo.png | Bin 0 -> 23211 bytes gaztec/src/common.styles.tsx | 50 + gaztec/src/components/contract/contract.tsx | 59 + gaztec/src/components/contract/dropzone.css | 8 + gaztec/src/components/home/home.tsx | 69 + .../components/createAccountDialog.tsx | 79 + gaztec/src/components/sidebar/sidebar.tsx | 197 + gaztec/src/config.ts | 56 + gaztec/src/main.tsx | 10 + gaztec/src/utils/storage.ts | 352 ++ gaztec/src/vite-env.d.ts | 1 + gaztec/tsconfig.json | 26 + gaztec/vite.config.ts | 61 + gaztec/yarn.lock | 4921 +++++++++++++++++ 23 files changed, 6099 insertions(+) create mode 100644 gaztec/.env create mode 100644 gaztec/.gitignore create mode 100644 gaztec/.yarnrc.yml create mode 100644 gaztec/README.md create mode 100644 gaztec/eslint.config.js create mode 100644 gaztec/index.html create mode 100644 gaztec/package.json create mode 100644 gaztec/src/App.css create mode 100644 gaztec/src/App.tsx create mode 100644 gaztec/src/assets/Aztec_logo.png create mode 100644 gaztec/src/common.styles.tsx create mode 100644 gaztec/src/components/contract/contract.tsx create mode 100644 gaztec/src/components/contract/dropzone.css create mode 100644 gaztec/src/components/home/home.tsx create mode 100644 gaztec/src/components/sidebar/components/createAccountDialog.tsx create mode 100644 gaztec/src/components/sidebar/sidebar.tsx create mode 100644 gaztec/src/config.ts create mode 100644 gaztec/src/main.tsx create mode 100644 gaztec/src/utils/storage.ts create mode 100644 gaztec/src/vite-env.d.ts create mode 100644 gaztec/tsconfig.json create mode 100644 gaztec/vite.config.ts create mode 100644 gaztec/yarn.lock diff --git a/gaztec/.env b/gaztec/.env new file mode 100644 index 000000000000..94bf9f0295e5 --- /dev/null +++ b/gaztec/.env @@ -0,0 +1,2 @@ +VITE_AZTEC_NODE_URL=http://localhost:8080 +VITE_LOG_LEVEL=debug \ No newline at end of file diff --git a/gaztec/.gitignore b/gaztec/.gitignore new file mode 100644 index 000000000000..7cad3ad0f331 --- /dev/null +++ b/gaztec/.gitignore @@ -0,0 +1,29 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.yarn/* +!.yarn/releases +vite.config.ts.* +*.module.css.d.ts \ No newline at end of file diff --git a/gaztec/.yarnrc.yml b/gaztec/.yarnrc.yml new file mode 100644 index 000000000000..3186f3f0795a --- /dev/null +++ b/gaztec/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/gaztec/README.md b/gaztec/README.md new file mode 100644 index 000000000000..74872fd4af60 --- /dev/null +++ b/gaztec/README.md @@ -0,0 +1,50 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react' + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}) +``` diff --git a/gaztec/eslint.config.js b/gaztec/eslint.config.js new file mode 100644 index 000000000000..092408a9f09e --- /dev/null +++ b/gaztec/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/gaztec/index.html b/gaztec/index.html new file mode 100644 index 000000000000..f6f53a86ef90 --- /dev/null +++ b/gaztec/index.html @@ -0,0 +1,25 @@ + + + + + + Private Token Noir Smart Contract + + + +
+ + + diff --git a/gaztec/package.json b/gaztec/package.json new file mode 100644 index 000000000000..c6d2094f3f41 --- /dev/null +++ b/gaztec/package.json @@ -0,0 +1,51 @@ +{ + "name": "vite", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "clean": "rm -rf ./dist .tsbuildinfo", + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@aztec/accounts": "link:../yarn-project/accounts", + "@aztec/aztec.js": "link:../yarn-project/aztec.js", + "@aztec/bb-prover": "link:../yarn-project/bb-prover", + "@aztec/circuit-types": "link:../yarn-project/circuit-types", + "@aztec/circuits.js": "link:../yarn-project/circuits.js", + "@aztec/foundation": "link:../yarn-project/foundation", + "@aztec/key-store": "link:../yarn-project/key-store", + "@aztec/kv-store": "link:../yarn-project/kv-store", + "@aztec/pxe": "link:../yarn-project/pxe", + "@aztec/simulator": "link:../yarn-project/simulator", + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@fontsource/roboto": "^5.1.1", + "@mui/icons-material": "^6.3.1", + "@mui/material": "^6.3.1", + "@mui/styles": "^6.3.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-dropzone": "^14.3.5", + "react-toastify": "^10.0.6" + }, + "devDependencies": { + "@eslint/js": "^9.18.0", + "@types/node": "^22.10.5", + "@types/react": "^19.0.6", + "@types/react-dom": "^19.0.3", + "@vitejs/plugin-react-swc": "^3.7.2", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.18", + "globals": "^15.14.0", + "typescript": "~5.7.3", + "typescript-eslint": "^8.11.0", + "vite": "^6.0.7", + "vite-plugin-node-polyfills": "^0.22.0", + "vite-plugin-top-level-await": "^1.4.4" + } +} diff --git a/gaztec/src/App.css b/gaztec/src/App.css new file mode 100644 index 000000000000..3288e8e40a3a --- /dev/null +++ b/gaztec/src/App.css @@ -0,0 +1,6 @@ +#root { + height: 100vh; + width: 100vw; + margin: 0; + text-align: center; +} \ No newline at end of file diff --git a/gaztec/src/App.tsx b/gaztec/src/App.tsx new file mode 100644 index 000000000000..bf60c6e93de1 --- /dev/null +++ b/gaztec/src/App.tsx @@ -0,0 +1,18 @@ +import { ToastContainer } from "react-toastify"; +import "react-toastify/dist/ReactToastify.css"; +import "./App.css"; +import { Home } from "./components/home/home"; +import { Global } from "@emotion/react"; +import { globalStyle } from "./common.styles"; + +function App() { + return ( + <> + + + + + ); +} + +export default App; diff --git a/gaztec/src/assets/Aztec_logo.png b/gaztec/src/assets/Aztec_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..21b602eb0690a7a05feed4d276776421b7e78da8 GIT binary patch literal 23211 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 + const { getRootProps, getInputProps } = useDropzone({ + onDrop: (files) => { + const file = files[0]; + const reader = new FileReader(); + reader.onload = (e) => { + const contractArtifact = loadContractArtifact( + JSON.parse(e.target?.result as string) + ); + setContractArtifact(contractArtifact); + }; + reader.readAsText(file); + }, + }); + + return ( +
+ {!contractArtifact ? ( +
+
+ +

Drag 'n' drop some files here, or click to select files

+
+
+ ) : ( +
{contractArtifact?.name}
+ )} +
+ ); +} diff --git a/gaztec/src/components/contract/dropzone.css b/gaztec/src/components/contract/dropzone.css new file mode 100644 index 000000000000..5fe7b18ae4fc --- /dev/null +++ b/gaztec/src/components/contract/dropzone.css @@ -0,0 +1,8 @@ +.dropzone { + color: black; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} \ No newline at end of file diff --git a/gaztec/src/components/home/home.tsx b/gaztec/src/components/home/home.tsx new file mode 100644 index 000000000000..34baf38c0850 --- /dev/null +++ b/gaztec/src/components/home/home.tsx @@ -0,0 +1,69 @@ +import { css } from "@emotion/react"; +import { ContractComponent } from "../contract/contract"; +import { SidebarComponent } from "../sidebar/sidebar"; +import { createContext, useState } from "react"; +import { type PXE, type AccountWalletWithSecretKey } from "@aztec/aztec.js"; +import { type WalletDB } from "../../utils/storage"; + +const layout = css({ + display: "flex", + flexDirection: "row", + height: "100%", +}); + +export const PrivateContext = createContext<{ + pxe: PXE | null; + nodeURL: string; + wallet: AccountWalletWithSecretKey | null; + isPXEInitialized: boolean; + walletDB: WalletDB | null; + setWalletDB: (walletDB: WalletDB) => void; + setPXEInitialized: (isPXEInitialized: boolean) => void; + setWallet: (wallet: AccountWalletWithSecretKey) => void; + setPXE: (pxe: PXE) => void; + setNodeURL: (nodeURL: string) => void; +}>({ + pxe: null, + nodeURL: "", + wallet: null, + isPXEInitialized: false, + walletDB: null, + setWalletDB: (walletDB: WalletDB) => {}, + setPXEInitialized: (isPXEInitialized: boolean) => {}, + setWallet: (wallet: AccountWalletWithSecretKey) => {}, + setNodeURL: (nodeURL: string) => {}, + setPXE: (pxe: PXE) => {}, +}); + +export function Home() { + const [pxe, setPXE] = useState(null); + const [wallet, setWallet] = useState(null); + const [nodeURL, setNodeURL] = useState(""); + const [isPXEInitialized, setPXEInitialized] = useState(false); + const [walletAlias, setWalletAlias] = useState(""); + const [walletDB, setWalletDB] = useState(null); + + const privateContextInitialValue = { + pxe, + nodeURL, + wallet, + isPXEInitialized, + walletAlias, + walletDB, + setWalletDB, + setPXEInitialized, + setWallet, + setPXE, + setNodeURL, + setWalletAlias, + }; + + return ( +
+ + + + +
+ ); +} diff --git a/gaztec/src/components/sidebar/components/createAccountDialog.tsx b/gaztec/src/components/sidebar/components/createAccountDialog.tsx new file mode 100644 index 000000000000..0b87a2539904 --- /dev/null +++ b/gaztec/src/components/sidebar/components/createAccountDialog.tsx @@ -0,0 +1,79 @@ +import DialogTitle from "@mui/material/DialogTitle"; +import Dialog from "@mui/material/Dialog"; +import { AccountWalletWithSecretKey, Fr, PXE } from "@aztec/aztec.js"; +import { getSchnorrAccount } from "@aztec/accounts/schnorr"; +import { Button, CircularProgress, TextField, css } from "@mui/material"; +import { useState } from "react"; +import { deriveSigningKey } from "@aztec/circuits.js"; + +const creationForm = css({ + display: "flex", + flexDirection: "column", + gap: "1rem", + padding: "1rem", + alignItems: "center", +}); + +export function CreateAccountDialog({ + open, + pxe, + onClose, +}: { + open: boolean; + pxe: PXE; + onClose: ( + account?: AccountWalletWithSecretKey, + salt?: Fr, + alias?: string + ) => void; +}) { + const [alias, setAlias] = useState(""); + const [secretKey] = useState(Fr.random()); + const [deployingAccount, setDeployingAccount] = useState(false); + + const createAccount = async () => { + setDeployingAccount(true); + const salt = Fr.random(); + const account = getSchnorrAccount( + pxe, + secretKey, + deriveSigningKey(secretKey), + salt + ); + await account.deploy().wait(); + const wallet = await account.getWallet(); + setDeployingAccount(false); + onClose(wallet, salt, alias); + }; + + const handleClose = () => { + onClose(); + }; + + return ( + + Create account +
+ {deployingAccount ? ( + <> + Deploying... + + + ) : ( + <> + { + setAlias(event.target.value); + }} + /> + + + )} +
+
+ ); +} diff --git a/gaztec/src/components/sidebar/sidebar.tsx b/gaztec/src/components/sidebar/sidebar.tsx new file mode 100644 index 000000000000..a3ca13875e46 --- /dev/null +++ b/gaztec/src/components/sidebar/sidebar.tsx @@ -0,0 +1,197 @@ +import { css } from "@emotion/react"; +import InputLabel from "@mui/material/InputLabel"; +import MenuItem from "@mui/material/MenuItem"; +import FormControl from "@mui/material/FormControl"; +import Select, { SelectChangeEvent } from "@mui/material/Select"; +import { PrivateContext } from "../home/home"; +import { PrivateEnv } from "../../config"; +import { createStore } from "@aztec/kv-store/indexeddb"; +import { AccountWalletWithSecretKey, Fr, createLogger } from "@aztec/aztec.js"; +import { WalletDB } from "../../utils/storage"; +import { useContext, useState } from "react"; +import { CreateAccountDialog } from "./components/createAccountDialog"; +import { getSchnorrAccount } from "@aztec/accounts/schnorr"; +import { AztecAddress, deriveSigningKey } from "@aztec/circuits.js"; +import AddIcon from "@mui/icons-material/Add"; +import logoURL from "../../assets/Aztec_logo.png"; + +const container = css({ + display: "flex", + flexDirection: "column", + height: "100%", + width: "25vw", + backgroundColor: "var(--main-accent-color)", + overflow: "hidden", + padding: "0 0.5rem", +}); + +const select = css({ + width: "100%", + margin: "0.5rem 0rem", +}); + +const header = css({ + display: "flex", + flexDirection: "row", + height: "5rem", + alignItems: "center", +}); + +const logo = css({ + height: "90%", + margin: "0.5rem 0.5rem 0rem 0rem", +}); + +const NETWORKS = [ + { + nodeURL: "http://localhost:8080", + name: "Local", + }, + { nodeURL: "http://34.145.98.34:8080", name: "Devnet" }, +]; + +const convertAztecAddressFromUTF8BufferAsString = (bufferAsString: string) => { + return String.fromCharCode(...bufferAsString.split(",").map((x) => +x)); +}; + +const parseAliasedAccounts = ( + aliasedAccounts: { key: string; value: string }[] +) => { + return aliasedAccounts + .filter((account) => account.key !== "accounts:last") + .map(({ key, value }) => ({ + key, + value: convertAztecAddressFromUTF8BufferAsString(value), + })); +}; + +const formatAddressAsString = (addressAsString: string) => { + return `${addressAsString.slice(0, 4)}...${addressAsString.slice(-4)}`; +}; + +export function SidebarComponent() { + const { + setPXE, + setNodeURL, + setPXEInitialized, + setWalletDB, + setWallet, + wallet, + walletDB, + nodeURL, + isPXEInitialized, + pxe, + } = useContext(PrivateContext); + const [accounts, setAccounts] = useState([]); + const [openCreateAccountDialog, setOpenCreateAccountDialog] = useState(false); + + const handleNetworkChange = async (event: SelectChangeEvent) => { + setPXEInitialized(false); + const nodeURL = event.target.value; + setNodeURL(nodeURL); + const pxe = await PrivateEnv.initPXE(nodeURL); + const rollupAddress = (await pxe.getNodeInfo()).l1ContractAddresses + .rollupAddress; + const walletLogger = createLogger("wallet:data:indexeddb"); + const walletDBStore = await createStore( + `wallet-${rollupAddress}`, + { dataDirectory: "wallet", dataStoreMapSizeKB: 2e10 }, + walletLogger + ); + const walletDB = WalletDB.getInstance(); + walletDB.init(walletDBStore, walletLogger.info); + const aliasedAccounts = await walletDB.listAliases("accounts"); + setAccounts(parseAliasedAccounts(aliasedAccounts)); + setWalletDB(walletDB); + setPXE(pxe); + setPXEInitialized(true); + }; + + const handleAccountChange = async (event: SelectChangeEvent) => { + if (event.target.value == "") { + return; + } + const accountAddress = AztecAddress.fromString(event.target.value); + const accountData = await walletDB.retrieveAccount(accountAddress); + const account = getSchnorrAccount( + pxe, + accountData.secretKey, + deriveSigningKey(accountData.secretKey), + accountData.salt + ); + setWallet(await account.getWallet()); + }; + + const handleAccountCreation = async ( + account?: AccountWalletWithSecretKey, + salt?: Fr, + alias?: string + ) => { + if (!account || !salt || !alias) { + return; + } + await walletDB.storeAccount(account.getAddress(), { + type: "schnorr", + secretKey: account.getSecretKey(), + alias, + salt, + }); + const aliasedAccounts = await walletDB.listAliases("accounts"); + setAccounts(parseAliasedAccounts(aliasedAccounts)); + setOpenCreateAccountDialog(false); + }; + + return ( +
+
+ + +

GAztec

+
+ + Network + + + {pxe && isPXEInitialized ? ( + <> + + Account + + + + + ) : ( + <> + )} +
+ ); +} diff --git a/gaztec/src/config.ts b/gaztec/src/config.ts new file mode 100644 index 000000000000..e3a009976e4c --- /dev/null +++ b/gaztec/src/config.ts @@ -0,0 +1,56 @@ +import { createLogger, createAztecNodeClient, type PXE } from "@aztec/aztec.js"; +import { PXEService } from "@aztec/pxe/service"; +import { PXEServiceConfig, getPXEServiceConfig } from "@aztec/pxe/config"; +import { KVPxeDatabase } from "@aztec/pxe/database"; +import { KeyStore } from "@aztec/key-store"; +import { L2TipsStore } from "@aztec/kv-store/stores"; +import { createStore } from "@aztec/kv-store/indexeddb"; +import { BBWASMLazyPrivateKernelProver } from "@aztec/bb-prover/wasm/lazy"; +import { WASMSimulator } from "@aztec/simulator/client"; + +process.env = Object.keys(import.meta.env).reduce((acc, key) => { + acc[key.replace("VITE_", "")] = import.meta.env[key]; + return acc; +}, {}); + +export class PrivateEnv { + static async initPXE(nodeURL: string): Promise { + const config = getPXEServiceConfig(); + config.dataDirectory = "pxe"; + config.proverEnabled = true; + const aztecNode = await createAztecNodeClient(nodeURL); + const simulationProvider = new WASMSimulator(); + const proofCreator = new BBWASMLazyPrivateKernelProver( + simulationProvider, + 16 + ); + const l1Contracts = await aztecNode.getL1ContractAddresses(); + const configWithContracts = { + ...config, + l1Contracts, + } as PXEServiceConfig; + + const store = await createStore( + "pxe_data", + configWithContracts, + createLogger("pxe:data:indexeddb") + ); + + const keyStore = new KeyStore(store); + + const db = await KVPxeDatabase.create(store); + const tips = new L2TipsStore(store, "pxe"); + + const pxe = new PXEService( + keyStore, + aztecNode, + db, + tips, + proofCreator, + simulationProvider, + config + ); + await pxe.init(); + return pxe; + } +} diff --git a/gaztec/src/main.tsx b/gaztec/src/main.tsx new file mode 100644 index 000000000000..a5897ec44f38 --- /dev/null +++ b/gaztec/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import "./common.styles.tsx"; +import App from "./App.tsx"; + +createRoot(document.getElementById("root")!).render( + + + +); diff --git a/gaztec/src/utils/storage.ts b/gaztec/src/utils/storage.ts new file mode 100644 index 000000000000..073e155d6440 --- /dev/null +++ b/gaztec/src/utils/storage.ts @@ -0,0 +1,352 @@ +import { type AuthWitness, type TxHash } from "@aztec/circuit-types"; +import { type AztecAddress, Fr, GasSettings } from "@aztec/circuits.js"; +import { type LogFn } from "@aztec/foundation/log"; +import { type AztecAsyncMap, type AztecAsyncKVStore } from "@aztec/kv-store"; + +export const Aliases = [ + "accounts", + "contracts", + "artifacts", + "secrets", + "transactions", + "authwits", +] as const; +export type AliasType = (typeof Aliases)[number]; + +export const AccountTypes = [ + "schnorr", + "ecdsasecp256r1ssh", + "ecdsasecp256k1", +] as const; +export type AccountType = (typeof AccountTypes)[number]; + +export class WalletDB { + #accounts!: AztecAsyncMap; + #aliases!: AztecAsyncMap; + #bridgedFeeJuice!: AztecAsyncMap; + #transactions!: AztecAsyncMap; + #userLog!: LogFn; + + private static instance: WalletDB; + + static getInstance() { + if (!WalletDB.instance) { + WalletDB.instance = new WalletDB(); + } + + return WalletDB.instance; + } + + init(store: AztecAsyncKVStore, userLog: LogFn) { + this.#accounts = store.openMap("accounts"); + this.#aliases = store.openMap("aliases"); + this.#bridgedFeeJuice = store.openMap("bridgedFeeJuice"); + this.#transactions = store.openMap("transactions"); + this.#userLog = userLog; + } + + async pushBridgedFeeJuice( + recipient: AztecAddress, + secret: Fr, + amount: bigint, + leafIndex: bigint, + log: LogFn = this.#userLog + ) { + let stackPointer = + ( + await this.#bridgedFeeJuice.getAsync( + `${recipient.toString()}:stackPointer` + ) + )?.readInt8() || 0; + stackPointer++; + await this.#bridgedFeeJuice.set( + `${recipient.toString()}:${stackPointer}`, + Buffer.from( + `${amount.toString()}:${secret.toString()}:${leafIndex.toString()}` + ) + ); + await this.#bridgedFeeJuice.set( + `${recipient.toString()}:stackPointer`, + Buffer.from([stackPointer]) + ); + log( + `Pushed ${amount} fee juice for recipient ${recipient.toString()}. Stack pointer ${stackPointer}` + ); + } + + async popBridgedFeeJuice( + recipient: AztecAddress, + log: LogFn = this.#userLog + ) { + let stackPointer = + ( + await this.#bridgedFeeJuice.getAsync( + `${recipient.toString()}:stackPointer` + ) + )?.readInt8() || 0; + const result = await this.#bridgedFeeJuice.getAsync( + `${recipient.toString()}:${stackPointer}` + ); + if (!result) { + throw new Error( + `No stored fee juice available for recipient ${recipient.toString()}. Please provide claim amount and secret. Stack pointer ${stackPointer}` + ); + } + const [amountStr, secretStr, leafIndexStr] = result.toString().split(":"); + await this.#bridgedFeeJuice.set( + `${recipient.toString()}:stackPointer`, + Buffer.from([--stackPointer]) + ); + log( + `Retrieved ${amountStr} fee juice for recipient ${recipient.toString()}. Stack pointer ${stackPointer}` + ); + return { + amount: BigInt(amountStr), + secret: secretStr, + leafIndex: BigInt(leafIndexStr), + }; + } + + async storeAccount( + address: AztecAddress, + { + type, + secretKey, + salt, + alias, + }: { + type: AccountType; + secretKey: Fr; + salt: Fr; + alias: string | undefined; + }, + log: LogFn = this.#userLog + ) { + if (alias) { + await this.#aliases.set( + `accounts:${alias}`, + Buffer.from(address.toString()) + ); + } + await this.#accounts.set(`${address.toString()}:type`, Buffer.from(type)); + await this.#accounts.set(`${address.toString()}:sk`, secretKey.toBuffer()); + await this.#accounts.set(`${address.toString()}:salt`, salt.toBuffer()); + await this.#aliases.set("accounts:last", Buffer.from(address.toString())); + log( + `Account stored in database with alias${ + alias ? `es last & ${alias}` : " last" + }` + ); + } + + async storeSender( + address: AztecAddress, + alias: string, + log: LogFn = this.#userLog + ) { + await this.#aliases.set( + `accounts:${alias}`, + Buffer.from(address.toString()) + ); + log(`Account stored in database with alias ${alias} as a sender`); + } + + async storeContract( + address: AztecAddress, + artifactPath: string, + log: LogFn = this.#userLog, + alias?: string + ) { + if (alias) { + await this.#aliases.set( + `contracts:${alias}`, + Buffer.from(address.toString()) + ); + await this.#aliases.set(`artifacts:${alias}`, Buffer.from(artifactPath)); + } + await this.#aliases.set(`contracts:last`, Buffer.from(address.toString())); + await this.#aliases.set(`artifacts:last`, Buffer.from(artifactPath)); + await this.#aliases.set( + `artifacts:${address.toString()}`, + Buffer.from(artifactPath) + ); + log( + `Contract stored in database with alias${ + alias ? `es last & ${alias}` : " last" + }` + ); + } + + async storeAuthwitness( + authWit: AuthWitness, + log: LogFn = this.#userLog, + alias?: string + ) { + if (alias) { + await this.#aliases.set( + `authwits:${alias}`, + Buffer.from(authWit.toString()) + ); + } + await this.#aliases.set(`authwits:last`, Buffer.from(authWit.toString())); + log( + `Authorization witness stored in database with alias${ + alias ? `es last & ${alias}` : " last" + }` + ); + } + + async storeTx( + { + txHash, + nonce, + cancellable, + gasSettings, + }: { + txHash: TxHash; + nonce: Fr; + cancellable: boolean; + gasSettings: GasSettings; + }, + log: LogFn = this.#userLog, + alias?: string + ) { + if (alias) { + await this.#aliases.set( + `transactions:${alias}`, + Buffer.from(txHash.toString()) + ); + } + await this.#transactions.set( + `${txHash.toString()}:nonce`, + nonce.toBuffer() + ); + await this.#transactions.set( + `${txHash.toString()}:cancellable`, + Buffer.from(cancellable ? "true" : "false") + ); + await this.#transactions.set( + `${txHash.toString()}:gasSettings`, + gasSettings.toBuffer() + ); + await this.#aliases.set( + `transactions:last`, + Buffer.from(txHash.toString()) + ); + log( + `Transaction hash stored in database with alias${ + alias ? `es last & ${alias}` : " last" + }` + ); + } + + async retrieveTxData(txHash: TxHash) { + const nonceBuffer = await this.#transactions.getAsync( + `${txHash.toString()}:nonce` + ); + if (!nonceBuffer) { + throw new Error( + `Could not find ${txHash.toString()}:nonce. Transaction with hash "${txHash.toString()}" does not exist on this wallet.` + ); + } + const nonce = Fr.fromBuffer(nonceBuffer); + const cancellable = + (await this.#transactions + .getAsync(`${txHash.toString()}:cancellable`)! + .toString()) === "true"; + const gasBuffer = await this.#transactions.getAsync( + `${txHash.toString()}:gasSettings` + )!; + return { + txHash, + nonce, + cancellable, + gasSettings: GasSettings.fromBuffer(gasBuffer), + }; + } + + tryRetrieveAlias(arg: string) { + try { + return this.retrieveAlias(arg); + } catch (e) { + return arg; + } + } + + async retrieveAlias(arg: string) { + if (Aliases.find((alias) => arg.startsWith(`${alias}:`))) { + const [type, ...alias] = arg.split(":"); + const data = await this.#aliases.getAsync( + `${type}:${alias.join(":") ?? "last"}` + ); + if (!data) { + throw new Error(`Could not find alias ${arg}`); + } + return data.toString(); + } else { + throw new Error(`Aliases must start with one of ${Aliases.join(", ")}`); + } + } + + async listAliases(type?: AliasType) { + const result = []; + if (type && !Aliases.includes(type)) { + throw new Error(`Unknown alias type ${type}`); + } + for await (const [key, value] of this.#aliases.entriesAsync()) { + if (!type || key.startsWith(`${type}:`)) { + result.push({ key, value: value.toString() }); + } + } + return result; + } + + async storeAccountMetadata( + aliasOrAddress: AztecAddress | string, + metadataKey: string, + metadata: Buffer + ) { + const { address } = await this.retrieveAccount(aliasOrAddress); + await this.#accounts.set(`${address.toString()}:${metadataKey}`, metadata); + } + + async retrieveAccountMetadata( + aliasOrAddress: AztecAddress | string, + metadataKey: string + ) { + const { address } = await this.retrieveAccount(aliasOrAddress); + const result = this.#accounts.getAsync( + `${address.toString()}:${metadataKey}` + ); + if (!result) { + throw new Error( + `Could not find metadata with key ${metadataKey} for account ${aliasOrAddress}` + ); + } + return result; + } + + async retrieveAccount(address: AztecAddress | string) { + const secretKeyBuffer = await this.#accounts.getAsync( + `${address.toString()}:sk` + ); + if (!secretKeyBuffer) { + throw new Error( + `Could not find ${address}:sk. Account "${address.toString}" does not exist on this wallet.` + ); + } + const secretKey = Fr.fromBuffer(secretKeyBuffer); + const salt = Fr.fromBuffer( + await this.#accounts.getAsync(`${address.toString()}:salt`)! + ); + const type = ( + await this.#accounts.getAsync(`${address.toString()}:type`)! + ).toString("utf8") as AccountType; + return { address, secretKey, salt, type }; + } + + async storeAlias(type: AliasType, key: string, value: Buffer, log: LogFn) { + await this.#aliases.set(`${type}:${key}`, value); + log(`Data stored in database with alias ${type}:${key}`); + } +} diff --git a/gaztec/src/vite-env.d.ts b/gaztec/src/vite-env.d.ts new file mode 100644 index 000000000000..11f02fe2a006 --- /dev/null +++ b/gaztec/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/gaztec/tsconfig.json b/gaztec/tsconfig.json new file mode 100644 index 000000000000..63861184d96d --- /dev/null +++ b/gaztec/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "composite": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "jsxImportSource": "@emotion/react" + }, + "include": [ + "src/**/*.ts*", + "tests/**/*.ts", + "src/contracts/target/*.json", + "artifacts/**/*.ts" + ] +} diff --git a/gaztec/vite.config.ts b/gaztec/vite.config.ts new file mode 100644 index 000000000000..00beeebc448b --- /dev/null +++ b/gaztec/vite.config.ts @@ -0,0 +1,61 @@ +import { defineConfig, searchForWorkspaceRoot } from "vite"; +import react from "@vitejs/plugin-react-swc"; +import { PolyfillOptions, nodePolyfills } from "vite-plugin-node-polyfills"; +import topLevelAwait from "vite-plugin-top-level-await"; + +// Unfortunate, but needed due to https://github.com/davidmyersdev/vite-plugin-node-polyfills/issues/81 +// Suspected to be because of the yarn workspace setup, but not sure +const nodePolyfillsFix = (options?: PolyfillOptions | undefined): Plugin => { + return { + ...nodePolyfills(options), + /* @ts-ignore */ + resolveId(source: string) { + const m = + /^vite-plugin-node-polyfills\/shims\/(buffer|global|process)$/.exec( + source + ); + if (m) { + return `../../node_modules/vite-plugin-node-polyfills/shims/${m[1]}/dist/index.cjs`; + } + }, + }; +}; + +// https://vite.dev/config/ +export default defineConfig({ + server: { + headers: { + "Cross-Origin-Opener-Policy": "same-origin", + "Cross-Origin-Embedder-Policy": "require-corp", + }, + fs: { + allow: [ + searchForWorkspaceRoot(process.cwd()), + "../yarn-project/noir-protocol-circuits-types/artifacts", + "../noir/packages/noirc_abi/web", + "../noir/packages/acvm_js/web", + ], + }, + }, + plugins: [ + react({ jsxImportSource: "@emotion/react" }), + nodePolyfillsFix({ include: ["buffer", "process", "path"] }), + topLevelAwait(), + ], + css: { + modules: { + localsConvention: "camelCase", + }, + }, + build: { + rollupOptions: { + output: { + manualChunks(id: string) { + if (id.includes("bb-prover")) { + return "@aztec/bb-prover"; + } + }, + }, + }, + }, +}); diff --git a/gaztec/yarn.lock b/gaztec/yarn.lock new file mode 100644 index 000000000000..1639d02c479d --- /dev/null +++ b/gaztec/yarn.lock @@ -0,0 +1,4921 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@aztec/accounts@link:../yarn-project/accounts::locator=vite%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@aztec/accounts@link:../yarn-project/accounts::locator=vite%40workspace%3A." + languageName: node + linkType: soft + +"@aztec/aztec.js@link:../yarn-project/aztec.js::locator=vite%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@aztec/aztec.js@link:../yarn-project/aztec.js::locator=vite%40workspace%3A." + languageName: node + linkType: soft + +"@aztec/bb-prover@link:../yarn-project/bb-prover::locator=vite%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@aztec/bb-prover@link:../yarn-project/bb-prover::locator=vite%40workspace%3A." + languageName: node + linkType: soft + +"@aztec/circuit-types@link:../yarn-project/circuit-types::locator=vite%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@aztec/circuit-types@link:../yarn-project/circuit-types::locator=vite%40workspace%3A." + languageName: node + linkType: soft + +"@aztec/circuits.js@link:../yarn-project/circuits.js::locator=vite%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@aztec/circuits.js@link:../yarn-project/circuits.js::locator=vite%40workspace%3A." + languageName: node + linkType: soft + +"@aztec/foundation@link:../yarn-project/foundation::locator=vite%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@aztec/foundation@link:../yarn-project/foundation::locator=vite%40workspace%3A." + languageName: node + linkType: soft + +"@aztec/key-store@link:../yarn-project/key-store::locator=vite%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@aztec/key-store@link:../yarn-project/key-store::locator=vite%40workspace%3A." + languageName: node + linkType: soft + +"@aztec/kv-store@link:../yarn-project/kv-store::locator=vite%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@aztec/kv-store@link:../yarn-project/kv-store::locator=vite%40workspace%3A." + languageName: node + linkType: soft + +"@aztec/pxe@link:../yarn-project/pxe::locator=vite%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@aztec/pxe@link:../yarn-project/pxe::locator=vite%40workspace%3A." + languageName: node + linkType: soft + +"@aztec/simulator@link:../yarn-project/simulator::locator=vite%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@aztec/simulator@link:../yarn-project/simulator::locator=vite%40workspace%3A." + languageName: node + linkType: soft + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/generator@npm:7.26.5" + dependencies: + "@babel/parser": "npm:^7.26.5" + "@babel/types": "npm:^7.26.5" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.16.7": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" + dependencies: + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + languageName: node + linkType: hard + +"@babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/parser@npm:7.26.5" + dependencies: + "@babel/types": "npm:^7.26.5" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/2e77dd99ee028ee3c10fa03517ae1169f2432751adf71315e4dc0d90b61639d51760d622f418f6ac665ae4ea65f8485232a112ea0e76f18e5900225d3d19a61e + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.7": + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/12c01357e0345f89f4f7e8c0e81921f2a3e3e101f06e8eaa18a382b517376520cd2fa8c237726eb094dab25532855df28a7baaf1c26342b52782f6936b07c287 + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/traverse@npm:7.26.5" + dependencies: + "@babel/code-frame": "npm:^7.26.2" + "@babel/generator": "npm:^7.26.5" + "@babel/parser": "npm:^7.26.5" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.26.5" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/0779059ecf63e31446564cf31adf170e701e8017ef02c819c57924a9a83d6b2ce41dbff3ef295589da9410497a3e575655bb8084ca470e0ab1bc193128afa9fe + languageName: node + linkType: hard + +"@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/types@npm:7.26.5" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/0278053b69d7c2b8573aa36dc5242cad95f0d965e1c0ed21ccacac6330092e59ba5949753448f6d6eccf6ad59baaef270295cc05218352e060ea8c68388638c4 + languageName: node + linkType: hard + +"@emotion/babel-plugin@npm:^11.13.5": + version: 11.13.5 + resolution: "@emotion/babel-plugin@npm:11.13.5" + dependencies: + "@babel/helper-module-imports": "npm:^7.16.7" + "@babel/runtime": "npm:^7.18.3" + "@emotion/hash": "npm:^0.9.2" + "@emotion/memoize": "npm:^0.9.0" + "@emotion/serialize": "npm:^1.3.3" + babel-plugin-macros: "npm:^3.1.0" + convert-source-map: "npm:^1.5.0" + escape-string-regexp: "npm:^4.0.0" + find-root: "npm:^1.1.0" + source-map: "npm:^0.5.7" + stylis: "npm:4.2.0" + checksum: 10c0/8ccbfec7defd0e513cb8a1568fa179eac1e20c35fda18aed767f6c59ea7314363ebf2de3e9d2df66c8ad78928dc3dceeded84e6fa8059087cae5c280090aeeeb + languageName: node + linkType: hard + +"@emotion/cache@npm:^11.13.5, @emotion/cache@npm:^11.14.0": + version: 11.14.0 + resolution: "@emotion/cache@npm:11.14.0" + dependencies: + "@emotion/memoize": "npm:^0.9.0" + "@emotion/sheet": "npm:^1.4.0" + "@emotion/utils": "npm:^1.4.2" + "@emotion/weak-memoize": "npm:^0.4.0" + stylis: "npm:4.2.0" + checksum: 10c0/3fa3e7a431ab6f8a47c67132a00ac8358f428c1b6c8421d4b20de9df7c18e95eec04a5a6ff5a68908f98d3280044f247b4965ac63df8302d2c94dba718769724 + languageName: node + linkType: hard + +"@emotion/hash@npm:^0.9.2": + version: 0.9.2 + resolution: "@emotion/hash@npm:0.9.2" + checksum: 10c0/0dc254561a3cc0a06a10bbce7f6a997883fd240c8c1928b93713f803a2e9153a257a488537012efe89dbe1246f2abfe2add62cdb3471a13d67137fcb808e81c2 + languageName: node + linkType: hard + +"@emotion/is-prop-valid@npm:^1.3.0": + version: 1.3.1 + resolution: "@emotion/is-prop-valid@npm:1.3.1" + dependencies: + "@emotion/memoize": "npm:^0.9.0" + checksum: 10c0/123215540c816ff510737ec68dcc499c53ea4deb0bb6c2c27c03ed21046e2e69f6ad07a7a174d271c6cfcbcc9ea44e1763e0cf3875c92192f7689216174803cd + languageName: node + linkType: hard + +"@emotion/memoize@npm:^0.9.0": + version: 0.9.0 + resolution: "@emotion/memoize@npm:0.9.0" + checksum: 10c0/13f474a9201c7f88b543e6ea42f55c04fb2fdc05e6c5a3108aced2f7e7aa7eda7794c56bba02985a46d8aaa914fcdde238727a98341a96e2aec750d372dadd15 + languageName: node + linkType: hard + +"@emotion/react@npm:^11.14.0": + version: 11.14.0 + resolution: "@emotion/react@npm:11.14.0" + dependencies: + "@babel/runtime": "npm:^7.18.3" + "@emotion/babel-plugin": "npm:^11.13.5" + "@emotion/cache": "npm:^11.14.0" + "@emotion/serialize": "npm:^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" + "@emotion/utils": "npm:^1.4.2" + "@emotion/weak-memoize": "npm:^0.4.0" + hoist-non-react-statics: "npm:^3.3.1" + peerDependencies: + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/d0864f571a9f99ec643420ef31fde09e2006d3943a6aba079980e4d5f6e9f9fecbcc54b8f617fe003c00092ff9d5241179149ffff2810cb05cf72b4620cfc031 + languageName: node + linkType: hard + +"@emotion/serialize@npm:^1.3.3": + version: 1.3.3 + resolution: "@emotion/serialize@npm:1.3.3" + dependencies: + "@emotion/hash": "npm:^0.9.2" + "@emotion/memoize": "npm:^0.9.0" + "@emotion/unitless": "npm:^0.10.0" + "@emotion/utils": "npm:^1.4.2" + csstype: "npm:^3.0.2" + checksum: 10c0/b28cb7de59de382021de2b26c0c94ebbfb16967a1b969a56fdb6408465a8993df243bfbd66430badaa6800e1834724e84895f5a6a9d97d0d224de3d77852acb4 + languageName: node + linkType: hard + +"@emotion/sheet@npm:^1.4.0": + version: 1.4.0 + resolution: "@emotion/sheet@npm:1.4.0" + checksum: 10c0/3ca72d1650a07d2fbb7e382761b130b4a887dcd04e6574b2d51ce578791240150d7072a9bcb4161933abbcd1e38b243a6fb4464a7fe991d700c17aa66bb5acc7 + languageName: node + linkType: hard + +"@emotion/styled@npm:^11.14.0": + version: 11.14.0 + resolution: "@emotion/styled@npm:11.14.0" + dependencies: + "@babel/runtime": "npm:^7.18.3" + "@emotion/babel-plugin": "npm:^11.13.5" + "@emotion/is-prop-valid": "npm:^1.3.0" + "@emotion/serialize": "npm:^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" + "@emotion/utils": "npm:^1.4.2" + peerDependencies: + "@emotion/react": ^11.0.0-rc.0 + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/20aa5c488e4edecf63659212fc5ba1ccff2d3a66593fc8461de7cd5fe9192a741db357ffcd270a455bd61898d7f37cd5c84b4fd2b7974dade712badf7860ca9c + languageName: node + linkType: hard + +"@emotion/unitless@npm:^0.10.0": + version: 0.10.0 + resolution: "@emotion/unitless@npm:0.10.0" + checksum: 10c0/150943192727b7650eb9a6851a98034ddb58a8b6958b37546080f794696141c3760966ac695ab9af97efe10178690987aee4791f9f0ad1ff76783cdca83c1d49 + languageName: node + linkType: hard + +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.2.0": + version: 1.2.0 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.2.0" + peerDependencies: + react: ">=16.8.0" + checksum: 10c0/074dbc92b96bdc09209871070076e3b0351b6b47efefa849a7d9c37ab142130767609ca1831da0055988974e3b895c1de7606e4c421fecaa27c3e56a2afd3b08 + languageName: node + linkType: hard + +"@emotion/utils@npm:^1.4.2": + version: 1.4.2 + resolution: "@emotion/utils@npm:1.4.2" + checksum: 10c0/7d0010bf60a2a8c1a033b6431469de4c80e47aeb8fd856a17c1d1f76bbc3a03161a34aeaa78803566e29681ca551e7bf9994b68e9c5f5c796159923e44f78d9a + languageName: node + linkType: hard + +"@emotion/weak-memoize@npm:^0.4.0": + version: 0.4.0 + resolution: "@emotion/weak-memoize@npm:0.4.0" + checksum: 10c0/64376af11f1266042d03b3305c30b7502e6084868e33327e944b539091a472f089db307af69240f7188f8bc6b319276fd7b141a36613f1160d73d12a60f6ca1a + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/aix-ppc64@npm:0.24.2" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-arm64@npm:0.24.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-arm@npm:0.24.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-x64@npm:0.24.2" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/darwin-arm64@npm:0.24.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/darwin-x64@npm:0.24.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/freebsd-arm64@npm:0.24.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/freebsd-x64@npm:0.24.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-arm64@npm:0.24.2" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-arm@npm:0.24.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-ia32@npm:0.24.2" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-loong64@npm:0.24.2" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-mips64el@npm:0.24.2" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-ppc64@npm:0.24.2" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-riscv64@npm:0.24.2" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-s390x@npm:0.24.2" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-x64@npm:0.24.2" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/netbsd-arm64@npm:0.24.2" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/netbsd-x64@npm:0.24.2" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/openbsd-arm64@npm:0.24.2" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/openbsd-x64@npm:0.24.2" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/sunos-x64@npm:0.24.2" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-arm64@npm:0.24.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-ia32@npm:0.24.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-x64@npm:0.24.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.1 + resolution: "@eslint-community/eslint-utils@npm:4.4.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.19.0": + version: 0.19.1 + resolution: "@eslint/config-array@npm:0.19.1" + dependencies: + "@eslint/object-schema": "npm:^2.1.5" + debug: "npm:^4.3.1" + minimatch: "npm:^3.1.2" + checksum: 10c0/43b01f596ddad404473beae5cf95c013d29301c72778d0f5bf8a6699939c8a9a5663dbd723b53c5f476b88b0c694f76ea145d1aa9652230d140fe1161e4a4b49 + languageName: node + linkType: hard + +"@eslint/core@npm:^0.10.0": + version: 0.10.0 + resolution: "@eslint/core@npm:0.10.0" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/074018075079b3ed1f14fab9d116f11a8824cdfae3e822badf7ad546962fafe717a31e61459bad8cc59cf7070dc413ea9064ddb75c114f05b05921029cde0a64 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^3.2.0": + version: 3.2.0 + resolution: "@eslint/eslintrc@npm:3.2.0" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^10.0.1" + globals: "npm:^14.0.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/43867a07ff9884d895d9855edba41acf325ef7664a8df41d957135a81a477ff4df4196f5f74dc3382627e5cc8b7ad6b815c2cea1b58f04a75aced7c43414ab8b + languageName: node + linkType: hard + +"@eslint/js@npm:9.18.0, @eslint/js@npm:^9.18.0": + version: 9.18.0 + resolution: "@eslint/js@npm:9.18.0" + checksum: 10c0/3938344c5ac7feef4b73fcb30f3c3e753570cea74c24904bb5d07e9c42fcd34fcbc40f545b081356a299e11f360c9c274b348c05fb0113fc3d492e5175eee140 + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.5": + version: 2.1.5 + resolution: "@eslint/object-schema@npm:2.1.5" + checksum: 10c0/5320691ed41ecd09a55aff40ce8e56596b4eb81f3d4d6fe530c50fdd6552d88102d1c1a29d970ae798ce30849752a708772de38ded07a6f25b3da32ebea081d8 + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.2.5": + version: 0.2.5 + resolution: "@eslint/plugin-kit@npm:0.2.5" + dependencies: + "@eslint/core": "npm:^0.10.0" + levn: "npm:^0.4.1" + checksum: 10c0/ba9832b8409af618cf61791805fe201dd62f3c82c783adfcec0f5cd391e68b40beaecb47b9a3209e926dbcab65135f410cae405b69a559197795793399f61176 + languageName: node + linkType: hard + +"@fontsource/roboto@npm:^5.1.1": + version: 5.1.1 + resolution: "@fontsource/roboto@npm:5.1.1" + checksum: 10c0/913b254f3c64f6ede01c832051819e15d3bc3e6c9f0c778e92f63805d7a66179183ba036aaee994af22b4d3c21340a246c136a6bc6c569fd0e718e5e10e02789 + languageName: node + linkType: hard + +"@humanfs/core@npm:^0.19.1": + version: 0.19.1 + resolution: "@humanfs/core@npm:0.19.1" + checksum: 10c0/aa4e0152171c07879b458d0e8a704b8c3a89a8c0541726c6b65b81e84fd8b7564b5d6c633feadc6598307d34564bd53294b533491424e8e313d7ab6c7bc5dc67 + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.6": + version: 0.16.6 + resolution: "@humanfs/node@npm:0.16.6" + dependencies: + "@humanfs/core": "npm:^0.19.1" + "@humanwhocodes/retry": "npm:^0.3.0" + checksum: 10c0/8356359c9f60108ec204cbd249ecd0356667359b2524886b357617c4a7c3b6aace0fd5a369f63747b926a762a88f8a25bc066fa1778508d110195ce7686243e1 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.3.0": + version: 0.3.1 + resolution: "@humanwhocodes/retry@npm:0.3.1" + checksum: 10c0/f0da1282dfb45e8120480b9e2e275e2ac9bbe1cf016d046fdad8e27cc1285c45bb9e711681237944445157b430093412b4446c1ab3fc4bb037861b5904101d3b + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.4.1": + version: 0.4.1 + resolution: "@humanwhocodes/retry@npm:0.4.1" + checksum: 10c0/be7bb6841c4c01d0b767d9bb1ec1c9359ee61421ce8ba66c249d035c5acdfd080f32d55a5c9e859cdd7868788b8935774f65b2caf24ec0b7bd7bf333791f063b + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@mui/core-downloads-tracker@npm:^6.3.1": + version: 6.3.1 + resolution: "@mui/core-downloads-tracker@npm:6.3.1" + checksum: 10c0/a996ad8db6bd8c981c4e2e2d243526c838dd29f0bbe7dc5ab6933be357e41f748781d322b1decf79ae1c9abba24190162559d84deedcb7c8824a68754dddf216 + languageName: node + linkType: hard + +"@mui/icons-material@npm:^6.3.1": + version: 6.3.1 + resolution: "@mui/icons-material@npm:6.3.1" + dependencies: + "@babel/runtime": "npm:^7.26.0" + peerDependencies: + "@mui/material": ^6.3.1 + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/edaf71b7368c14cfbfed6f475ef96187871a010e972b9e7608d23cadae5ce52a3a6888b32453721dc1d86e2e7ad9c61aadde83ba5cd94363782bf83803d1ab36 + languageName: node + linkType: hard + +"@mui/material@npm:^6.3.1": + version: 6.3.1 + resolution: "@mui/material@npm:6.3.1" + dependencies: + "@babel/runtime": "npm:^7.26.0" + "@mui/core-downloads-tracker": "npm:^6.3.1" + "@mui/system": "npm:^6.3.1" + "@mui/types": "npm:^7.2.21" + "@mui/utils": "npm:^6.3.1" + "@popperjs/core": "npm:^2.11.8" + "@types/react-transition-group": "npm:^4.4.12" + clsx: "npm:^2.1.1" + csstype: "npm:^3.1.3" + prop-types: "npm:^15.8.1" + react-is: "npm:^19.0.0" + react-transition-group: "npm:^4.4.5" + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@mui/material-pigment-css": ^6.3.1 + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@mui/material-pigment-css": + optional: true + "@types/react": + optional: true + checksum: 10c0/7fb91acd9bc021dde78e70d495a2abd69d0e2df35e526e0730e060c3177bb10cc3058ee27c72b5ec9bc7622d9c2ef99831b89f511f6700bc3717f979e2cb0152 + languageName: node + linkType: hard + +"@mui/private-theming@npm:^6.3.1": + version: 6.3.1 + resolution: "@mui/private-theming@npm:6.3.1" + dependencies: + "@babel/runtime": "npm:^7.26.0" + "@mui/utils": "npm:^6.3.1" + prop-types: "npm:^15.8.1" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/aafaca0d7e5fd4d83c2cade28b7de554c0d848595f8f23f26c8f7daf3fc664053c9c81342d44d24e0a04a4813b58d6f0c1d135ae2775380acda91468a21f9684 + languageName: node + linkType: hard + +"@mui/styled-engine@npm:^6.3.1": + version: 6.3.1 + resolution: "@mui/styled-engine@npm:6.3.1" + dependencies: + "@babel/runtime": "npm:^7.26.0" + "@emotion/cache": "npm:^11.13.5" + "@emotion/serialize": "npm:^1.3.3" + "@emotion/sheet": "npm:^1.4.0" + csstype: "npm:^3.1.3" + prop-types: "npm:^15.8.1" + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/styled": ^11.3.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + checksum: 10c0/81bbf8f2016b1c7debbbaab1a44ebaf8e494e8c9d32d2201b28f8c653a082177f6570fef779bf835bad1a9120af219a64b1d7a9a8a569c9c07045f00affe6b87 + languageName: node + linkType: hard + +"@mui/styles@npm:^6.3.1": + version: 6.3.1 + resolution: "@mui/styles@npm:6.3.1" + dependencies: + "@babel/runtime": "npm:^7.26.0" + "@emotion/hash": "npm:^0.9.2" + "@mui/private-theming": "npm:^6.3.1" + "@mui/types": "npm:^7.2.21" + "@mui/utils": "npm:^6.3.1" + clsx: "npm:^2.1.1" + csstype: "npm:^3.1.3" + hoist-non-react-statics: "npm:^3.3.2" + jss: "npm:^10.10.0" + jss-plugin-camel-case: "npm:^10.10.0" + jss-plugin-default-unit: "npm:^10.10.0" + jss-plugin-global: "npm:^10.10.0" + jss-plugin-nested: "npm:^10.10.0" + jss-plugin-props-sort: "npm:^10.10.0" + jss-plugin-rule-value-function: "npm:^10.10.0" + jss-plugin-vendor-prefixer: "npm:^10.10.0" + prop-types: "npm:^15.8.1" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/721c932bb44c800cb42af84940331a8632b190afa25d75e76befc5b1f695752c95eb26dc44ec815202e6ee29a9038359f936ecc42672a35b20976488b0f05404 + languageName: node + linkType: hard + +"@mui/system@npm:^6.3.1": + version: 6.3.1 + resolution: "@mui/system@npm:6.3.1" + dependencies: + "@babel/runtime": "npm:^7.26.0" + "@mui/private-theming": "npm:^6.3.1" + "@mui/styled-engine": "npm:^6.3.1" + "@mui/types": "npm:^7.2.21" + "@mui/utils": "npm:^6.3.1" + clsx: "npm:^2.1.1" + csstype: "npm:^3.1.3" + prop-types: "npm:^15.8.1" + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 10c0/49613b001f7e60c7ed70f3e2ee3ffc4f3a2719509e4f9ec18faf73a354597b8d894d0ee8861bf3a5b5db763efca36bcfb75989505c88e009c1627b114bac88ef + languageName: node + linkType: hard + +"@mui/types@npm:^7.2.21": + version: 7.2.21 + resolution: "@mui/types@npm:7.2.21" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/c0038ae402a3cfb2805a19167362fb5ac2ca1403f0ef3dad688d1e2276afe757b69d5fb1e3af4cd0e985b9221d287fd863c5b00f29fd07a276c7de9e3423a0f3 + languageName: node + linkType: hard + +"@mui/utils@npm:^6.3.1": + version: 6.3.1 + resolution: "@mui/utils@npm:6.3.1" + dependencies: + "@babel/runtime": "npm:^7.26.0" + "@mui/types": "npm:^7.2.21" + "@types/prop-types": "npm:^15.7.14" + clsx: "npm:^2.1.1" + prop-types: "npm:^15.8.1" + react-is: "npm:^19.0.0" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/b111bca7ad065b1028714d55a8df90267c47a72ffb2bfad7a1709cef0d5d9036b463855d431b3606967c9351c7ee23f1dee02457b2f3ed02513744f0173eb00c + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@popperjs/core@npm:^2.11.8": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: 10c0/4681e682abc006d25eb380d0cf3efc7557043f53b6aea7a5057d0d1e7df849a00e281cd8ea79c902a35a414d7919621fc2ba293ecec05f413598e0b23d5a1e63 + languageName: node + linkType: hard + +"@rollup/plugin-inject@npm:^5.0.5": + version: 5.0.5 + resolution: "@rollup/plugin-inject@npm:5.0.5" + dependencies: + "@rollup/pluginutils": "npm:^5.0.1" + estree-walker: "npm:^2.0.2" + magic-string: "npm:^0.30.3" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/22d10cf44fa56a6683d5ac4df24a9003379b3dcaae9897f5c30c844afc2ebca83cfaa5557f13a1399b1c8a0d312c3217bcacd508b7ebc4b2cbee401bd1ec8be2 + languageName: node + linkType: hard + +"@rollup/plugin-virtual@npm:^3.0.2": + version: 3.0.2 + resolution: "@rollup/plugin-virtual@npm:3.0.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/7115edb7989096d1ce334939fcf6e1ba365586b487bf61b2dd4f915386197f350db70904030342c0720fe58f5a52828975c645c4d415c1d432d9b1b6760a22ef + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.0.1": + version: 5.1.4 + resolution: "@rollup/pluginutils@npm:5.1.4" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^4.0.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/6d58fbc6f1024eb4b087bc9bf59a1d655a8056a60c0b4021d3beaeec3f0743503f52467fd89d2cf0e7eccf2831feb40a05ad541a17637ea21ba10b21c2004deb + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.30.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-android-arm64@npm:4.30.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.30.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.30.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.30.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.30.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.30.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.30.1" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.30.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.30.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loongarch64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.30.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.30.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.30.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.30.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.30.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.30.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.30.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.30.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.30.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@swc/core-darwin-arm64@npm:1.10.7": + version: 1.10.7 + resolution: "@swc/core-darwin-arm64@npm:1.10.7" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-darwin-x64@npm:1.10.7": + version: 1.10.7 + resolution: "@swc/core-darwin-x64@npm:1.10.7" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@swc/core-linux-arm-gnueabihf@npm:1.10.7": + version: 1.10.7 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.10.7" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@swc/core-linux-arm64-gnu@npm:1.10.7": + version: 1.10.7 + resolution: "@swc/core-linux-arm64-gnu@npm:1.10.7" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-arm64-musl@npm:1.10.7": + version: 1.10.7 + resolution: "@swc/core-linux-arm64-musl@npm:1.10.7" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-linux-x64-gnu@npm:1.10.7": + version: 1.10.7 + resolution: "@swc/core-linux-x64-gnu@npm:1.10.7" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-x64-musl@npm:1.10.7": + version: 1.10.7 + resolution: "@swc/core-linux-x64-musl@npm:1.10.7" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-win32-arm64-msvc@npm:1.10.7": + version: 1.10.7 + resolution: "@swc/core-win32-arm64-msvc@npm:1.10.7" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-win32-ia32-msvc@npm:1.10.7": + version: 1.10.7 + resolution: "@swc/core-win32-ia32-msvc@npm:1.10.7" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@swc/core-win32-x64-msvc@npm:1.10.7": + version: 1.10.7 + resolution: "@swc/core-win32-x64-msvc@npm:1.10.7" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@swc/core@npm:^1.7.0, @swc/core@npm:^1.7.26": + version: 1.10.7 + resolution: "@swc/core@npm:1.10.7" + dependencies: + "@swc/core-darwin-arm64": "npm:1.10.7" + "@swc/core-darwin-x64": "npm:1.10.7" + "@swc/core-linux-arm-gnueabihf": "npm:1.10.7" + "@swc/core-linux-arm64-gnu": "npm:1.10.7" + "@swc/core-linux-arm64-musl": "npm:1.10.7" + "@swc/core-linux-x64-gnu": "npm:1.10.7" + "@swc/core-linux-x64-musl": "npm:1.10.7" + "@swc/core-win32-arm64-msvc": "npm:1.10.7" + "@swc/core-win32-ia32-msvc": "npm:1.10.7" + "@swc/core-win32-x64-msvc": "npm:1.10.7" + "@swc/counter": "npm:^0.1.3" + "@swc/types": "npm:^0.1.17" + peerDependencies: + "@swc/helpers": "*" + dependenciesMeta: + "@swc/core-darwin-arm64": + optional: true + "@swc/core-darwin-x64": + optional: true + "@swc/core-linux-arm-gnueabihf": + optional: true + "@swc/core-linux-arm64-gnu": + optional: true + "@swc/core-linux-arm64-musl": + optional: true + "@swc/core-linux-x64-gnu": + optional: true + "@swc/core-linux-x64-musl": + optional: true + "@swc/core-win32-arm64-msvc": + optional: true + "@swc/core-win32-ia32-msvc": + optional: true + "@swc/core-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: 10c0/73d3b164620590aff57512125e3cfd6dc1bb3346882fa9ad12abf8029f8be01eb71e6afc3c760c3e2cb479a2d7ff3180bf298f907768b93e3eac15fc72e0d855 + languageName: node + linkType: hard + +"@swc/counter@npm:^0.1.3": + version: 0.1.3 + resolution: "@swc/counter@npm:0.1.3" + checksum: 10c0/8424f60f6bf8694cfd2a9bca45845bce29f26105cda8cf19cdb9fd3e78dc6338699e4db77a89ae449260bafa1cc6bec307e81e7fb96dbf7dcfce0eea55151356 + languageName: node + linkType: hard + +"@swc/types@npm:^0.1.17": + version: 0.1.17 + resolution: "@swc/types@npm:0.1.17" + dependencies: + "@swc/counter": "npm:^0.1.3" + checksum: 10c0/29f5c8933a16042956f1adb7383e836ed7646cbf679826e78b53fdd0c08e8572cb42152e527b6b530a9bd1052d33d0972f90f589761ccd252c12652c9b7a72fc + languageName: node + linkType: hard + +"@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/node@npm:^22.10.5": + version: 22.10.5 + resolution: "@types/node@npm:22.10.5" + dependencies: + undici-types: "npm:~6.20.0" + checksum: 10c0/6a0e7d1fe6a86ef6ee19c3c6af4c15542e61aea2f4cee655b6252efb356795f1f228bc8299921e82924e80ff8eca29b74d9dd0dd5cc1a90983f892f740b480df + languageName: node + linkType: hard + +"@types/parse-json@npm:^4.0.0": + version: 4.0.2 + resolution: "@types/parse-json@npm:4.0.2" + checksum: 10c0/b1b863ac34a2c2172fbe0807a1ec4d5cb684e48d422d15ec95980b81475fac4fdb3768a8b13eef39130203a7c04340fc167bae057c7ebcafd7dec9fe6c36aeb1 + languageName: node + linkType: hard + +"@types/prop-types@npm:^15.7.14": + version: 15.7.14 + resolution: "@types/prop-types@npm:15.7.14" + checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1 + languageName: node + linkType: hard + +"@types/react-dom@npm:^19.0.3": + version: 19.0.3 + resolution: "@types/react-dom@npm:19.0.3" + peerDependencies: + "@types/react": ^19.0.0 + checksum: 10c0/3867427b333cbe8cbba496d7cc20ec9676d32c25ae44f4d1263a4129d42e57cf4adf0039ad263432f1215b88075c27d326e7eb4ed646128235d01a76e661d48f + languageName: node + linkType: hard + +"@types/react-transition-group@npm:^4.4.12": + version: 4.4.12 + resolution: "@types/react-transition-group@npm:4.4.12" + peerDependencies: + "@types/react": "*" + checksum: 10c0/0441b8b47c69312c89ec0760ba477ba1a0808a10ceef8dc1c64b1013ed78517332c30f18681b0ec0b53542731f1ed015169fed1d127cc91222638ed955478ec7 + languageName: node + linkType: hard + +"@types/react@npm:^19.0.6": + version: 19.0.6 + resolution: "@types/react@npm:19.0.6" + dependencies: + csstype: "npm:^3.0.2" + checksum: 10c0/4ddb0ad2a92940c0323996c2efbae9712e562e1d60d1015ba5088ca8e8db32f1804516a2971e6fa7a95bda9aa9c1896c86c32739213ef12527924c021b0145bf + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:8.19.1": + version: 8.19.1 + resolution: "@typescript-eslint/eslint-plugin@npm:8.19.1" + dependencies: + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:8.19.1" + "@typescript-eslint/type-utils": "npm:8.19.1" + "@typescript-eslint/utils": "npm:8.19.1" + "@typescript-eslint/visitor-keys": "npm:8.19.1" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.3.1" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^2.0.0" + peerDependencies: + "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/993784b04533b13c3f3919c793cfc3a369fa61692e1a2d72de6fba27df247c275d852cdcbc4e393c310b73fce8d34d210a9b632b66f4d761a1a3b4781f8fa93f + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:8.19.1": + version: 8.19.1 + resolution: "@typescript-eslint/parser@npm:8.19.1" + dependencies: + "@typescript-eslint/scope-manager": "npm:8.19.1" + "@typescript-eslint/types": "npm:8.19.1" + "@typescript-eslint/typescript-estree": "npm:8.19.1" + "@typescript-eslint/visitor-keys": "npm:8.19.1" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/1afbd2d0a25f439943bdc94637417429574eb3889a2a1ce24bd425721713aca213808a975bb518a6616171783bc04fa973167f05fc6a96cfd88c1d1666077ad4 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:8.19.1": + version: 8.19.1 + resolution: "@typescript-eslint/scope-manager@npm:8.19.1" + dependencies: + "@typescript-eslint/types": "npm:8.19.1" + "@typescript-eslint/visitor-keys": "npm:8.19.1" + checksum: 10c0/7dca0c28ad27a0c7e26499e0f584f98efdcf34087f46aadc661b36c310484b90655e83818bafd249b5a28c7094a69c54d553f6cd403869bf134f95a9148733f5 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:8.19.1": + version: 8.19.1 + resolution: "@typescript-eslint/type-utils@npm:8.19.1" + dependencies: + "@typescript-eslint/typescript-estree": "npm:8.19.1" + "@typescript-eslint/utils": "npm:8.19.1" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^2.0.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/757592b515beec58c079c605aa648ba94d985ae48ba40460034e849c7bc2b603b1da6113e59688e284608c9d5ccaa27adf0a14fb032cb1782200c6acae51ddd2 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:8.19.1": + version: 8.19.1 + resolution: "@typescript-eslint/types@npm:8.19.1" + checksum: 10c0/e907bf096d5ed7a812a1e537a98dd881ab5d2d47e072225bfffaa218c1433115a148b27a15744db8374b46dac721617c6d13a1da255fdeb369cf193416533f6e + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:8.19.1": + version: 8.19.1 + resolution: "@typescript-eslint/typescript-estree@npm:8.19.1" + dependencies: + "@typescript-eslint/types": "npm:8.19.1" + "@typescript-eslint/visitor-keys": "npm:8.19.1" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^2.0.0" + peerDependencies: + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/549d9d565a58a25fc8397a555506f2e8d29a740f5b6ed9105479e22de5aab89d9d535959034a8e9d4115adb435de09ee6987d28e8922052eea577842ddce1a7a + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:8.19.1": + version: 8.19.1 + resolution: "@typescript-eslint/utils@npm:8.19.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:8.19.1" + "@typescript-eslint/types": "npm:8.19.1" + "@typescript-eslint/typescript-estree": "npm:8.19.1" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/f7d2fe9a2bd8cb3ae6fafe5e465882a6784b2acf81d43d194c579381b92651c2ffc0fca69d2a35eee119f539622752a0e9ec063aaec7576d5d2bfe68b441980d + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:8.19.1": + version: 8.19.1 + resolution: "@typescript-eslint/visitor-keys@npm:8.19.1" + dependencies: + "@typescript-eslint/types": "npm:8.19.1" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10c0/117537450a099f51f3f0d39186f248ae370bdc1b7f6975dbdbffcfc89e6e1aa47c1870db790d4f778a48f2c1f6cd9c269b63867c12afaa424367c63dabee8fd0 + languageName: node + linkType: hard + +"@vitejs/plugin-react-swc@npm:^3.7.2": + version: 3.7.2 + resolution: "@vitejs/plugin-react-swc@npm:3.7.2" + dependencies: + "@swc/core": "npm:^1.7.26" + peerDependencies: + vite: ^4 || ^5 || ^6 + checksum: 10c0/9b9a5e0540791ba96a9fe4e8b8146ab274edcc730315535705f20126d6dfaffe72ae474bac9904ce841976e1959b6ecffd047bb2f0b7abf4d85aae7fbfdd00ab + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn@npm:^8.14.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"asn1.js@npm:^4.10.1": + version: 4.10.1 + resolution: "asn1.js@npm:4.10.1" + dependencies: + bn.js: "npm:^4.0.0" + inherits: "npm:^2.0.1" + minimalistic-assert: "npm:^1.0.0" + checksum: 10c0/afa7f3ab9e31566c80175a75b182e5dba50589dcc738aa485be42bdd787e2a07246a4b034d481861123cbe646a7656f318f4f1cad2e9e5e808a210d5d6feaa88 + languageName: node + linkType: hard + +"assert@npm:^2.0.0": + version: 2.1.0 + resolution: "assert@npm:2.1.0" + dependencies: + call-bind: "npm:^1.0.2" + is-nan: "npm:^1.3.2" + object-is: "npm:^1.1.5" + object.assign: "npm:^4.1.4" + util: "npm:^0.12.5" + checksum: 10c0/7271a5da883c256a1fa690677bf1dd9d6aa882139f2bed1cd15da4f9e7459683e1da8e32a203d6cc6767e5e0f730c77a9532a87b896b4b0af0dd535f668775f0 + languageName: node + linkType: hard + +"attr-accept@npm:^2.0.0, attr-accept@npm:^2.2.4": + version: 2.2.5 + resolution: "attr-accept@npm:2.2.5" + checksum: 10c0/9b4cb82213925cab2d568f71b3f1c7a7778f9192829aac39a281e5418cd00c04a88f873eb89f187e0bf786fa34f8d52936f178e62cbefb9254d57ecd88ada99b + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + languageName: node + linkType: hard + +"babel-plugin-macros@npm:^3.1.0": + version: 3.1.0 + resolution: "babel-plugin-macros@npm:3.1.0" + dependencies: + "@babel/runtime": "npm:^7.12.5" + cosmiconfig: "npm:^7.0.0" + resolve: "npm:^1.19.0" + checksum: 10c0/c6dfb15de96f67871d95bd2e8c58b0c81edc08b9b087dc16755e7157f357dc1090a8dc60ebab955e92587a9101f02eba07e730adc253a1e4cf593ca3ebd3839c + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": + version: 4.12.1 + resolution: "bn.js@npm:4.12.1" + checksum: 10c0/b7f37a0cd5e4b79142b6f4292d518b416be34ae55d6dd6b0f66f96550c8083a50ffbbf8bda8d0ab471158cb81aa74ea4ee58fe33c7802e4a30b13810e98df116 + languageName: node + linkType: hard + +"bn.js@npm:^5.2.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 10c0/bed3d8bd34ec89dbcf9f20f88bd7d4a49c160fda3b561c7bb227501f974d3e435a48fb9b61bc3de304acab9215a3bda0803f7017ffb4d0016a0c3a740a283caa + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"brorand@npm:^1.0.1, brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 10c0/6f366d7c4990f82c366e3878492ba9a372a73163c09871e80d82fb4ae0d23f9f8924cb8a662330308206e6b3b76ba1d528b4601c9ef73c2166b440b2ea3b7571 + languageName: node + linkType: hard + +"browser-resolve@npm:^2.0.0": + version: 2.0.0 + resolution: "browser-resolve@npm:2.0.0" + dependencies: + resolve: "npm:^1.17.0" + checksum: 10c0/06c43adf3cb1939825ab9a4ac355b23272820ee421a20d04f62e0dabd9ea305e497b97f3ac027f87d53c366483aafe8673bbe1aaa5e41cd69eeafa65ac5fda6e + languageName: node + linkType: hard + +"browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": + version: 1.2.0 + resolution: "browserify-aes@npm:1.2.0" + dependencies: + buffer-xor: "npm:^1.0.3" + cipher-base: "npm:^1.0.0" + create-hash: "npm:^1.1.0" + evp_bytestokey: "npm:^1.0.3" + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/967f2ae60d610b7b252a4cbb55a7a3331c78293c94b4dd9c264d384ca93354c089b3af9c0dd023534efdc74ffbc82510f7ad4399cf82bc37bc07052eea485f18 + languageName: node + linkType: hard + +"browserify-cipher@npm:^1.0.1": + version: 1.0.1 + resolution: "browserify-cipher@npm:1.0.1" + dependencies: + browserify-aes: "npm:^1.0.4" + browserify-des: "npm:^1.0.0" + evp_bytestokey: "npm:^1.0.0" + checksum: 10c0/aa256dcb42bc53a67168bbc94ab85d243b0a3b56109dee3b51230b7d010d9b78985ffc1fb36e145c6e4db151f888076c1cfc207baf1525d3e375cbe8187fe27d + languageName: node + linkType: hard + +"browserify-des@npm:^1.0.0": + version: 1.0.2 + resolution: "browserify-des@npm:1.0.2" + dependencies: + cipher-base: "npm:^1.0.1" + des.js: "npm:^1.0.0" + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.1.2" + checksum: 10c0/943eb5d4045eff80a6cde5be4e5fbb1f2d5002126b5a4789c3c1aae3cdddb1eb92b00fb92277f512288e5c6af330730b1dbabcf7ce0923e749e151fcee5a074d + languageName: node + linkType: hard + +"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": + version: 4.1.1 + resolution: "browserify-rsa@npm:4.1.1" + dependencies: + bn.js: "npm:^5.2.1" + randombytes: "npm:^2.1.0" + safe-buffer: "npm:^5.2.1" + checksum: 10c0/b650ee1192e3d7f3d779edc06dd96ed8720362e72ac310c367b9d7fe35f7e8dbb983c1829142b2b3215458be8bf17c38adc7224920843024ed8cf39e19c513c0 + languageName: node + linkType: hard + +"browserify-sign@npm:^4.2.3": + version: 4.2.3 + resolution: "browserify-sign@npm:4.2.3" + dependencies: + bn.js: "npm:^5.2.1" + browserify-rsa: "npm:^4.1.0" + create-hash: "npm:^1.2.0" + create-hmac: "npm:^1.1.7" + elliptic: "npm:^6.5.5" + hash-base: "npm:~3.0" + inherits: "npm:^2.0.4" + parse-asn1: "npm:^5.1.7" + readable-stream: "npm:^2.3.8" + safe-buffer: "npm:^5.2.1" + checksum: 10c0/30c0eba3f5970a20866a4d3fbba2c5bd1928cd24f47faf995f913f1499214c6f3be14bb4d6ec1ab5c6cafb1eca9cb76ba1c2e1c04ed018370634d4e659c77216 + languageName: node + linkType: hard + +"browserify-zlib@npm:^0.2.0": + version: 0.2.0 + resolution: "browserify-zlib@npm:0.2.0" + dependencies: + pako: "npm:~1.0.5" + checksum: 10c0/9ab10b6dc732c6c5ec8ebcbe5cb7fe1467f97402c9b2140113f47b5f187b9438f93a8e065d8baf8b929323c18324fbf1105af479ee86d9d36cab7d7ef3424ad9 + languageName: node + linkType: hard + +"buffer-xor@npm:^1.0.3": + version: 1.0.3 + resolution: "buffer-xor@npm:1.0.3" + checksum: 10c0/fd269d0e0bf71ecac3146187cfc79edc9dbb054e2ee69b4d97dfb857c6d997c33de391696d04bdd669272751fa48e7872a22f3a6c7b07d6c0bc31dbe02a4075c + languageName: node + linkType: hard + +"buffer@npm:^5.7.1": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + +"builtin-status-codes@npm:^3.0.0": + version: 3.0.0 + resolution: "builtin-status-codes@npm:3.0.0" + checksum: 10c0/c37bbba11a34c4431e56bd681b175512e99147defbe2358318d8152b3a01df7bf25e0305873947e5b350073d5ef41a364a22b37e48f1fb6d2fe6d5286a0f348c + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": + version: 1.0.1 + resolution: "call-bind-apply-helpers@npm:1.0.1" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/acb2ab68bf2718e68a3e895f0d0b73ccc9e45b9b6f210f163512ba76f91dab409eb8792f6dae188356f9095747512a3101646b3dea9d37fb8c7c6bf37796d18c + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.2" + checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": + version: 1.0.3 + resolution: "call-bound@npm:1.0.3" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/45257b8e7621067304b30dbd638e856cac913d31e8e00a80d6cf172911acd057846572d0b256b45e652d515db6601e2974a1b1a040e91b4fc36fb3dd86fa69cf + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": + version: 1.0.6 + resolution: "cipher-base@npm:1.0.6" + dependencies: + inherits: "npm:^2.0.4" + safe-buffer: "npm:^5.2.1" + checksum: 10c0/f73268e0ee6585800875d9748f2a2377ae7c2c3375cba346f75598ac6f6bc3a25dec56e984a168ced1a862529ffffe615363f750c40349039d96bd30fba0fca8 + languageName: node + linkType: hard + +"clsx@npm:^1.0.2": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 10c0/34dead8bee24f5e96f6e7937d711978380647e936a22e76380290e35486afd8634966ce300fc4b74a32f3762c7d4c0303f442c3e259f4ce02374eb0c82834f27 + languageName: node + linkType: hard + +"clsx@npm:^2.1.0, clsx@npm:^2.1.1": + version: 2.1.1 + resolution: "clsx@npm:2.1.1" + checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"console-browserify@npm:^1.1.0": + version: 1.2.0 + resolution: "console-browserify@npm:1.2.0" + checksum: 10c0/89b99a53b7d6cee54e1e64fa6b1f7ac24b844b4019c5d39db298637e55c1f4ffa5c165457ad984864de1379df2c8e1886cbbdac85d9dbb6876a9f26c3106f226 + languageName: node + linkType: hard + +"constants-browserify@npm:^1.0.0": + version: 1.0.0 + resolution: "constants-browserify@npm:1.0.0" + checksum: 10c0/ab49b1d59a433ed77c964d90d19e08b2f77213fb823da4729c0baead55e3c597f8f97ebccfdfc47bd896d43854a117d114c849a6f659d9986420e97da0f83ac5 + languageName: node + linkType: hard + +"convert-source-map@npm:^1.5.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: 10c0/281da55454bf8126cbc6625385928c43479f2060984180c42f3a86c8b8c12720a24eac260624a7d1e090004028d2dee78602330578ceec1a08e27cb8bb0a8a5b + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 + languageName: node + linkType: hard + +"cosmiconfig@npm:^7.0.0": + version: 7.1.0 + resolution: "cosmiconfig@npm:7.1.0" + dependencies: + "@types/parse-json": "npm:^4.0.0" + import-fresh: "npm:^3.2.1" + parse-json: "npm:^5.0.0" + path-type: "npm:^4.0.0" + yaml: "npm:^1.10.0" + checksum: 10c0/b923ff6af581638128e5f074a5450ba12c0300b71302398ea38dbeabd33bbcaa0245ca9adbedfcf284a07da50f99ede5658c80bb3e39e2ce770a99d28a21ef03 + languageName: node + linkType: hard + +"create-ecdh@npm:^4.0.4": + version: 4.0.4 + resolution: "create-ecdh@npm:4.0.4" + dependencies: + bn.js: "npm:^4.1.0" + elliptic: "npm:^6.5.3" + checksum: 10c0/77b11a51360fec9c3bce7a76288fc0deba4b9c838d5fb354b3e40c59194d23d66efe6355fd4b81df7580da0661e1334a235a2a5c040b7569ba97db428d466e7f + languageName: node + linkType: hard + +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": + version: 1.2.0 + resolution: "create-hash@npm:1.2.0" + dependencies: + cipher-base: "npm:^1.0.1" + inherits: "npm:^2.0.1" + md5.js: "npm:^1.3.4" + ripemd160: "npm:^2.0.1" + sha.js: "npm:^2.4.0" + checksum: 10c0/d402e60e65e70e5083cb57af96d89567954d0669e90550d7cec58b56d49c4b193d35c43cec8338bc72358198b8cbf2f0cac14775b651e99238e1cf411490f915 + languageName: node + linkType: hard + +"create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": + version: 1.1.7 + resolution: "create-hmac@npm:1.1.7" + dependencies: + cipher-base: "npm:^1.0.3" + create-hash: "npm:^1.1.0" + inherits: "npm:^2.0.1" + ripemd160: "npm:^2.0.0" + safe-buffer: "npm:^5.0.1" + sha.js: "npm:^2.4.8" + checksum: 10c0/24332bab51011652a9a0a6d160eed1e8caa091b802335324ae056b0dcb5acbc9fcf173cf10d128eba8548c3ce98dfa4eadaa01bd02f44a34414baee26b651835 + languageName: node + linkType: hard + +"create-require@npm:^1.1.1": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"crypto-browserify@npm:^3.11.0": + version: 3.12.1 + resolution: "crypto-browserify@npm:3.12.1" + dependencies: + browserify-cipher: "npm:^1.0.1" + browserify-sign: "npm:^4.2.3" + create-ecdh: "npm:^4.0.4" + create-hash: "npm:^1.2.0" + create-hmac: "npm:^1.1.7" + diffie-hellman: "npm:^5.0.3" + hash-base: "npm:~3.0.4" + inherits: "npm:^2.0.4" + pbkdf2: "npm:^3.1.2" + public-encrypt: "npm:^4.0.3" + randombytes: "npm:^2.1.0" + randomfill: "npm:^1.0.4" + checksum: 10c0/184a2def7b16628e79841243232ab5497f18d8e158ac21b7ce90ab172427d0a892a561280adc08f9d4d517bce8db2a5b335dc21abb970f787f8e874bd7b9db7d + languageName: node + linkType: hard + +"css-vendor@npm:^2.0.8": + version: 2.0.8 + resolution: "css-vendor@npm:2.0.8" + dependencies: + "@babel/runtime": "npm:^7.8.3" + is-in-browser: "npm:^1.0.2" + checksum: 10c0/2538bc37adf72eb79781929dbb8c48e12c6a4b926594ad4134408b3000249f1a50d25be374f0e63f688c863368814aa6cc2e9ea11ea22a7309a7d966b281244c + languageName: node + linkType: hard + +"csstype@npm:^3.0.2, csstype@npm:^3.1.3": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"des.js@npm:^1.0.0": + version: 1.1.0 + resolution: "des.js@npm:1.1.0" + dependencies: + inherits: "npm:^2.0.1" + minimalistic-assert: "npm:^1.0.0" + checksum: 10c0/671354943ad67493e49eb4c555480ab153edd7cee3a51c658082fcde539d2690ed2a4a0b5d1f401f9cde822edf3939a6afb2585f32c091f2d3a1b1665cd45236 + languageName: node + linkType: hard + +"diffie-hellman@npm:^5.0.3": + version: 5.0.3 + resolution: "diffie-hellman@npm:5.0.3" + dependencies: + bn.js: "npm:^4.1.0" + miller-rabin: "npm:^4.0.0" + randombytes: "npm:^2.0.0" + checksum: 10c0/ce53ccafa9ca544b7fc29b08a626e23a9b6562efc2a98559a0c97b4718937cebaa9b5d7d0a05032cc9c1435e9b3c1532b9e9bf2e0ede868525922807ad6e1ecf + languageName: node + linkType: hard + +"dom-helpers@npm:^5.0.1": + version: 5.2.1 + resolution: "dom-helpers@npm:5.2.1" + dependencies: + "@babel/runtime": "npm:^7.8.7" + csstype: "npm:^3.0.2" + checksum: 10c0/f735074d66dd759b36b158fa26e9d00c9388ee0e8c9b16af941c38f014a37fc80782de83afefd621681b19ac0501034b4f1c4a3bff5caa1b8667f0212b5e124c + languageName: node + linkType: hard + +"domain-browser@npm:4.22.0": + version: 4.22.0 + resolution: "domain-browser@npm:4.22.0" + checksum: 10c0/2ef7eda6d2161038fda0c9aa4c9e18cc7a0baa89ea6be975d449527c2eefd4b608425db88508e2859acc472f46f402079274b24bd75e3fb506f28c5dba203129 + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"elliptic@npm:^6.5.3, elliptic@npm:^6.5.5": + version: 6.6.1 + resolution: "elliptic@npm:6.6.1" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/8b24ef782eec8b472053793ea1e91ae6bee41afffdfcb78a81c0a53b191e715cbe1292aa07165958a9bbe675bd0955142560b1a007ffce7d6c765bcaf951a867 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/1fed3d102eb27ab8d983337bb7c8b159dd2a1e63ff833ec54eea1311c96d5b08223b433060ba240541ca8adba9eee6b0a60cdbf2f80634b784febc9cc8b687b4 + languageName: node + linkType: hard + +"esbuild@npm:^0.24.2": + version: 0.24.2 + resolution: "esbuild@npm:0.24.2" + dependencies: + "@esbuild/aix-ppc64": "npm:0.24.2" + "@esbuild/android-arm": "npm:0.24.2" + "@esbuild/android-arm64": "npm:0.24.2" + "@esbuild/android-x64": "npm:0.24.2" + "@esbuild/darwin-arm64": "npm:0.24.2" + "@esbuild/darwin-x64": "npm:0.24.2" + "@esbuild/freebsd-arm64": "npm:0.24.2" + "@esbuild/freebsd-x64": "npm:0.24.2" + "@esbuild/linux-arm": "npm:0.24.2" + "@esbuild/linux-arm64": "npm:0.24.2" + "@esbuild/linux-ia32": "npm:0.24.2" + "@esbuild/linux-loong64": "npm:0.24.2" + "@esbuild/linux-mips64el": "npm:0.24.2" + "@esbuild/linux-ppc64": "npm:0.24.2" + "@esbuild/linux-riscv64": "npm:0.24.2" + "@esbuild/linux-s390x": "npm:0.24.2" + "@esbuild/linux-x64": "npm:0.24.2" + "@esbuild/netbsd-arm64": "npm:0.24.2" + "@esbuild/netbsd-x64": "npm:0.24.2" + "@esbuild/openbsd-arm64": "npm:0.24.2" + "@esbuild/openbsd-x64": "npm:0.24.2" + "@esbuild/sunos-x64": "npm:0.24.2" + "@esbuild/win32-arm64": "npm:0.24.2" + "@esbuild/win32-ia32": "npm:0.24.2" + "@esbuild/win32-x64": "npm:0.24.2" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/5a25bb08b6ba23db6e66851828d848bd3ff87c005a48c02d83e38879058929878a6baa5a414e1141faee0d1dece3f32b5fbc2a87b82ed6a7aa857cf40359aeb5 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-plugin-react-hooks@npm:^5.1.0": + version: 5.1.0 + resolution: "eslint-plugin-react-hooks@npm:5.1.0" + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + checksum: 10c0/37ef76e1d916d46ab8e93a596078efcf2162e2c653614437e0c54e31d02a5dadabec22802fab717effe257aeb4bdc20c2a710666a89ab1cf07e01e614dde75d8 + languageName: node + linkType: hard + +"eslint-plugin-react-refresh@npm:^0.4.18": + version: 0.4.18 + resolution: "eslint-plugin-react-refresh@npm:0.4.18" + peerDependencies: + eslint: ">=8.40" + checksum: 10c0/19140a0d90e126c198c07337bc106af24f398dd8f061314f42c17511a647bea93880a11b7d40219088ac0eaea598eb591d320cfc6f82262bfb05f602101b2acc + languageName: node + linkType: hard + +"eslint-scope@npm:^8.2.0": + version: 8.2.0 + resolution: "eslint-scope@npm:8.2.0" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/8d2d58e2136d548ac7e0099b1a90d9fab56f990d86eb518de1247a7066d38c908be2f3df477a79cf60d70b30ba18735d6c6e70e9914dca2ee515a729975d70d6 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^4.2.0": + version: 4.2.0 + resolution: "eslint-visitor-keys@npm:4.2.0" + checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 + languageName: node + linkType: hard + +"eslint@npm:^9.13.0": + version: 9.18.0 + resolution: "eslint@npm:9.18.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.12.1" + "@eslint/config-array": "npm:^0.19.0" + "@eslint/core": "npm:^0.10.0" + "@eslint/eslintrc": "npm:^3.2.0" + "@eslint/js": "npm:9.18.0" + "@eslint/plugin-kit": "npm:^0.2.5" + "@humanfs/node": "npm:^0.16.6" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@humanwhocodes/retry": "npm:^0.4.1" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.6" + debug: "npm:^4.3.2" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^8.2.0" + eslint-visitor-keys: "npm:^4.2.0" + espree: "npm:^10.3.0" + esquery: "npm:^1.5.0" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^8.0.0" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + bin: + eslint: bin/eslint.js + checksum: 10c0/7f592ad228b9bd627a24870fdc875bacdab7bf535d4b67316c4cb791e90d0125130a74769f3c407b0c4b7027b3082ef33864a63ee1024552a60a17db60493f15 + languageName: node + linkType: hard + +"espree@npm:^10.0.1, espree@npm:^10.3.0": + version: 10.3.0 + resolution: "espree@npm:10.3.0" + dependencies: + acorn: "npm:^8.14.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 + languageName: node + linkType: hard + +"esquery@npm:^1.5.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"estree-walker@npm:^2.0.2": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"events@npm:^3.0.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + +"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": + version: 1.0.3 + resolution: "evp_bytestokey@npm:1.0.3" + dependencies: + md5.js: "npm:^1.3.4" + node-gyp: "npm:latest" + safe-buffer: "npm:^5.1.1" + checksum: 10c0/77fbe2d94a902a80e9b8f5a73dcd695d9c14899c5e82967a61b1fc6cbbb28c46552d9b127cff47c45fcf684748bdbcfa0a50410349109de87ceb4b199ef6ee99 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-glob@npm:^3.3.2": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.18.0 + resolution: "fastq@npm:1.18.0" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 + languageName: node + linkType: hard + +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" + dependencies: + flat-cache: "npm:^4.0.0" + checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 + languageName: node + linkType: hard + +"file-selector@npm:^0.1.12": + version: 0.1.19 + resolution: "file-selector@npm:0.1.19" + dependencies: + tslib: "npm:^2.0.1" + checksum: 10c0/6ed76fd91b77f05c0f3d089aa67d198e4c6096b5752796f1875cd9302664acaccfa35bf2fb6f4c6bcf5527775d9ef80f6d2dc6197d6a5eee91ef26c2160853c1 + languageName: node + linkType: hard + +"file-selector@npm:^2.1.0": + version: 2.1.2 + resolution: "file-selector@npm:2.1.2" + dependencies: + tslib: "npm:^2.7.0" + checksum: 10c0/fe827e0e95410aacfcc3eabc38c29cc36055257f03c1c06b631a2b5af9730c142ad2c52f5d64724d02231709617bda984701f52bd1f4b7aca50fb6585a27c1d2 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "find-root@npm:1.1.0" + checksum: 10c0/1abc7f3bf2f8d78ff26d9e00ce9d0f7b32e5ff6d1da2857bcdf4746134c422282b091c672cde0572cac3840713487e0a7a636af9aa1b74cb11894b447a521efa + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.4" + checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.2 + resolution: "flatted@npm:3.3.2" + checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: "npm:^1.1.3" + checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6": + version: 1.2.7 + resolution: "get-intrinsic@npm:1.2.7" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + function-bind: "npm:^1.1.2" + get-proto: "npm:^1.0.0" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/b475dec9f8bff6f7422f51ff4b7b8d0b68e6776ee83a753c1d627e3008c3442090992788038b37eff72e93e43dceed8c1acbdf2d6751672687ec22127933080d + languageName: node + linkType: hard + +"get-proto@npm:^1.0.0": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d + languageName: node + linkType: hard + +"globals@npm:^15.14.0": + version: 15.14.0 + resolution: "globals@npm:15.14.0" + checksum: 10c0/039deb8648bd373b7940c15df9f96ab7508fe92b31bbd39cbd1c1a740bd26db12457aa3e5d211553b234f30e9b1db2fee3683012f543a01a6942c9062857facb + languageName: node + linkType: hard + +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"hash-base@npm:^3.0.0": + version: 3.1.0 + resolution: "hash-base@npm:3.1.0" + dependencies: + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.6.0" + safe-buffer: "npm:^5.2.0" + checksum: 10c0/663eabcf4173326fbb65a1918a509045590a26cc7e0964b754eef248d281305c6ec9f6b31cb508d02ffca383ab50028180ce5aefe013e942b44a903ac8dc80d0 + languageName: node + linkType: hard + +"hash-base@npm:~3.0, hash-base@npm:~3.0.4": + version: 3.0.5 + resolution: "hash-base@npm:3.0.5" + dependencies: + inherits: "npm:^2.0.4" + safe-buffer: "npm:^5.2.1" + checksum: 10c0/6dc185b79bad9b6d525cd132a588e4215380fdc36fec6f7a8a58c5db8e3b642557d02ad9c367f5e476c7c3ad3ccffa3607f308b124e1ed80e3b80a1b254db61e + languageName: node + linkType: hard + +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: "npm:^2.0.3" + minimalistic-assert: "npm:^1.0.1" + checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: "npm:^1.0.3" + minimalistic-assert: "npm:^1.0.0" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/f3d9ba31b40257a573f162176ac5930109816036c59a09f901eb2ffd7e5e705c6832bedfff507957125f2086a0ab8f853c0df225642a88bf1fcaea945f20600d + languageName: node + linkType: hard + +"hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: "npm:^16.7.0" + checksum: 10c0/fe0889169e845d738b59b64badf5e55fa3cf20454f9203d1eb088df322d49d4318df774828e789898dcb280e8a5521bb59b3203385662ca5e9218a6ca5820e74 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-browserify@npm:^1.0.0": + version: 1.0.0 + resolution: "https-browserify@npm:1.0.0" + checksum: 10c0/e17b6943bc24ea9b9a7da5714645d808670af75a425f29baffc3284962626efdc1eb3aa9bbffaa6e64028a6ad98af5b09fabcb454a8f918fb686abfdc9e9b8ae + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"hyphenate-style-name@npm:^1.0.3": + version: 1.1.0 + resolution: "hyphenate-style-name@npm:1.1.0" + checksum: 10c0/bfe88deac2414a41a0d08811e277c8c098f23993d6a1eb17f14a0f11b54c4d42865a63d3cfe1914668eefb9a188e2de58f38b55a179a238fd1fef606893e194f + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"ignore@npm:^5.2.0, ignore@npm:^5.3.1": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4": + version: 1.2.0 + resolution: "is-arguments@npm:1.2.0" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/6377344b31e9fcb707c6751ee89b11f132f32338e6a782ec2eac9393b0cbd32235dad93052998cda778ee058754860738341d8114910d50ada5615912bb929fc + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f + languageName: node + linkType: hard + +"is-core-module@npm:^2.16.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.7": + version: 1.1.0 + resolution: "is-generator-function@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.0" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/fdfa96c8087bf36fc4cd514b474ba2ff404219a4dd4cfa6cf5426404a1eed259bdcdb98f082a71029a48d01f27733e3436ecc6690129a7ec09cb0434bee03a2a + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-in-browser@npm:^1.0.2, is-in-browser@npm:^1.1.3": + version: 1.1.3 + resolution: "is-in-browser@npm:1.1.3" + checksum: 10c0/87e6119a56ec3d84910eb6ad855b4a3ac05b242fc2bc2c28abbf978f76b5a834ec5622165035acaf2844a85856b1a0fbc12bd0cb1ce9e86314ebec675c6fe856 + languageName: node + linkType: hard + +"is-nan@npm:^1.3.2": + version: 1.3.2 + resolution: "is-nan@npm:1.3.2" + dependencies: + call-bind: "npm:^1.0.0" + define-properties: "npm:^1.1.3" + checksum: 10c0/8bfb286f85763f9c2e28ea32e9127702fe980ffd15fa5d63ade3be7786559e6e21355d3625dd364c769c033c5aedf0a2ed3d4025d336abf1b9241e3d9eddc5b0 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-regex@npm:^1.2.1": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.3": + version: 1.1.15 + resolution: "is-typed-array@npm:1.1.15" + dependencies: + which-typed-array: "npm:^1.1.16" + checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4 + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isomorphic-timers-promises@npm:^1.0.1": + version: 1.0.1 + resolution: "isomorphic-timers-promises@npm:1.0.1" + checksum: 10c0/3b4761d0012ebe6b6382246079fc667f3513f36fe4042638f2bfb7db1557e4f1acd33a9c9907706c04270890ec6434120f132f3f300161a42a7dd8628926c8a4 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"jss-plugin-camel-case@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-camel-case@npm:10.10.0" + dependencies: + "@babel/runtime": "npm:^7.3.1" + hyphenate-style-name: "npm:^1.0.3" + jss: "npm:10.10.0" + checksum: 10c0/29dedf0866837425258eae3b12b72c1de435ea7caddef94ac13044b3a04c4abd8dd238a81fd6e0a4afdbf10c9cb4674df41f50af79554c34c736cd2ecf3752da + languageName: node + linkType: hard + +"jss-plugin-default-unit@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-default-unit@npm:10.10.0" + dependencies: + "@babel/runtime": "npm:^7.3.1" + jss: "npm:10.10.0" + checksum: 10c0/f394d5411114fde7056249f4650de51e6f3e47c64a3d48cee80180a6e75876f0d0d68c96d81458880e1024ca880ed53baade682d36a5f7177046bfef0b280572 + languageName: node + linkType: hard + +"jss-plugin-global@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-global@npm:10.10.0" + dependencies: + "@babel/runtime": "npm:^7.3.1" + jss: "npm:10.10.0" + checksum: 10c0/2d24ef0e16cd6ebcce59f132756716ae37fdffe3f59461018636a57ef68298e649f43bd5c346041f1642872aa2cc0629f5ecfb48a20bfb471813318cb8f3935f + languageName: node + linkType: hard + +"jss-plugin-nested@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-nested@npm:10.10.0" + dependencies: + "@babel/runtime": "npm:^7.3.1" + jss: "npm:10.10.0" + tiny-warning: "npm:^1.0.2" + checksum: 10c0/868ac4e4bea9dc02fac33f15e3165c008669d69e6b87201f1d8574eb213408b67366302288b49f46acda1320164460daa50e6aac817d34ae3b1c256a03f4ebba + languageName: node + linkType: hard + +"jss-plugin-props-sort@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-props-sort@npm:10.10.0" + dependencies: + "@babel/runtime": "npm:^7.3.1" + jss: "npm:10.10.0" + checksum: 10c0/5579bb21bfe514c12f43bd5e57458badc37c8e5676a47109f45195466a3aed633c61609daef079622421ef7c902b8342d1f96578543fefcb729f0b8dcfd2fe37 + languageName: node + linkType: hard + +"jss-plugin-rule-value-function@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-rule-value-function@npm:10.10.0" + dependencies: + "@babel/runtime": "npm:^7.3.1" + jss: "npm:10.10.0" + tiny-warning: "npm:^1.0.2" + checksum: 10c0/678bedb49da3b5e93fc1971d691f7f3ad2d7cf15dfc220edab934b70c7571fc383a435371a687a8ae125ab5ccd7bada9712574620959a3d1cd961fbca1583c29 + languageName: node + linkType: hard + +"jss-plugin-vendor-prefixer@npm:^10.10.0": + version: 10.10.0 + resolution: "jss-plugin-vendor-prefixer@npm:10.10.0" + dependencies: + "@babel/runtime": "npm:^7.3.1" + css-vendor: "npm:^2.0.8" + jss: "npm:10.10.0" + checksum: 10c0/e3ad2dfe93d126f722586782aebddcd68dc46c0ad59f99edd65e164ecbb6e4cad6ce85c874f90553fa5fec50c2fd2b1f5984abfc4e3dd49d24033bbc378a2e11 + languageName: node + linkType: hard + +"jss@npm:10.10.0, jss@npm:^10.10.0": + version: 10.10.0 + resolution: "jss@npm:10.10.0" + dependencies: + "@babel/runtime": "npm:^7.3.1" + csstype: "npm:^3.0.2" + is-in-browser: "npm:^1.1.3" + tiny-warning: "npm:^1.0.2" + checksum: 10c0/aa5e743a3f40d6df05ae951c6913b6495ef42b3e9539f6875c32bf01c42ab405bd91038d6feca2ed5c67a2947111b0137213983089e2a310ee11fc563208ad61 + languageName: node + linkType: hard + +"keyv@npm:^4.5.4": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: "npm:^3.0.0 || ^4.0.0" + bin: + loose-envify: cli.js + checksum: 10c0/655d110220983c1a4b9c0c679a2e8016d4b67f6e9c7b5435ff5979ecdb20d0813f4dec0a08674fcbdd4846a3f07edbb50a36811fd37930b94aaa0d9daceb017e + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"magic-string@npm:^0.30.3": + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10c0/16826e415d04b88378f200fe022b53e638e3838b9e496edda6c0e086d7753a44a6ed187adc72d19f3623810589bf139af1a315541cd6a26ae0771a0193eaf7b8 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"md5.js@npm:^1.3.4": + version: 1.3.5 + resolution: "md5.js@npm:1.3.5" + dependencies: + hash-base: "npm:^3.0.0" + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.1.2" + checksum: 10c0/b7bd75077f419c8e013fc4d4dada48be71882e37d69a44af65a2f2804b91e253441eb43a0614423a1c91bb830b8140b0dc906bc797245e2e275759584f4efcc5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"miller-rabin@npm:^4.0.0": + version: 4.0.1 + resolution: "miller-rabin@npm:4.0.1" + dependencies: + bn.js: "npm:^4.0.0" + brorand: "npm:^1.0.1" + bin: + miller-rabin: bin/miller-rabin + checksum: 10c0/26b2b96f6e49dbcff7faebb78708ed2f5f9ae27ac8cbbf1d7c08f83cf39bed3d418c0c11034dce997da70d135cc0ff6f3a4c15dc452f8e114c11986388a64346 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 10c0/790ecec8c5c73973a4fbf2c663d911033e8494d5fb0960a4500634766ab05d6107d20af896ca2132e7031741f19888154d44b2408ada0852446705441383e9f8 + languageName: node + linkType: hard + +"minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "minipass-fetch@npm:4.0.0" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/7fa30ce7c373fb6f94c086b374fff1589fd7e78451855d2d06c2e2d9df936d131e73e952163063016592ed3081444bd8d1ea608533313b0149156ce23311da4b + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.1 + resolution: "minizlib@npm:3.0.1" + dependencies: + minipass: "npm:^7.0.4" + rimraf: "npm:^5.0.5" + checksum: 10c0/82f8bf70da8af656909a8ee299d7ed3b3372636749d29e105f97f20e88971be31f5ed7642f2e898f00283b68b701cc01307401cdc209b0efc5dd3818220e5093 + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d + languageName: node + linkType: hard + +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.7": + version: 3.3.8 + resolution: "nanoid@npm:3.3.8" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.0.0 + resolution: "node-gyp@npm:11.0.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/a3b885bbee2d271f1def32ba2e30ffcf4562a3db33af06b8b365e053153e2dd2051b9945783c3c8e852d26a0f20f65b251c7e83361623383a99635c0280ee573 + languageName: node + linkType: hard + +"node-stdlib-browser@npm:^1.2.0": + version: 1.3.0 + resolution: "node-stdlib-browser@npm:1.3.0" + dependencies: + assert: "npm:^2.0.0" + browser-resolve: "npm:^2.0.0" + browserify-zlib: "npm:^0.2.0" + buffer: "npm:^5.7.1" + console-browserify: "npm:^1.1.0" + constants-browserify: "npm:^1.0.0" + create-require: "npm:^1.1.1" + crypto-browserify: "npm:^3.11.0" + domain-browser: "npm:4.22.0" + events: "npm:^3.0.0" + https-browserify: "npm:^1.0.0" + isomorphic-timers-promises: "npm:^1.0.1" + os-browserify: "npm:^0.3.0" + path-browserify: "npm:^1.0.1" + pkg-dir: "npm:^5.0.0" + process: "npm:^0.11.10" + punycode: "npm:^1.4.1" + querystring-es3: "npm:^0.2.1" + readable-stream: "npm:^3.6.0" + stream-browserify: "npm:^3.0.0" + stream-http: "npm:^3.2.0" + string_decoder: "npm:^1.0.0" + timers-browserify: "npm:^2.0.4" + tty-browserify: "npm:0.0.1" + url: "npm:^0.11.4" + util: "npm:^0.12.4" + vm-browserify: "npm:^1.0.1" + checksum: 10c0/e617f92f6af5a031fb9e670a04e1cf5d74e09ac46e182c784c5d5fff44c36d47f208ac01f267ec75d83c125a30e2c006090f676cd71d35e99a4c8a196a90cfff + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.0.0 + resolution: "nopt@npm:8.0.0" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/19cb986f79abaca2d0f0b560021da7b32ee6fcc3de48f3eaeb0c324d36755c17754f886a754c091f01f740c17caf7d6aea8237b7fbaf39f476ae5e30a249f18f + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3": + version: 1.13.3 + resolution: "object-inspect@npm:1.13.3" + checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 + languageName: node + linkType: hard + +"object-is@npm:^1.1.5": + version: 1.1.6 + resolution: "object-is@npm:1.1.6" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + checksum: 10c0/506af444c4dce7f8e31f34fc549e2fb8152d6b9c4a30c6e62852badd7f520b579c679af433e7a072f9d78eb7808d230dc12e1cf58da9154dfbf8813099ea0fe0 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"object.assign@npm:^4.1.4": + version: 4.1.7 + resolution: "object.assign@npm:4.1.7" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"os-browserify@npm:^0.3.0": + version: 0.3.0 + resolution: "os-browserify@npm:0.3.0" + checksum: 10c0/6ff32cb1efe2bc6930ad0fd4c50e30c38010aee909eba8d65be60af55efd6cbb48f0287e3649b4e3f3a63dce5a667b23c187c4293a75e557f0d5489d735bcf52 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"pako@npm:~1.0.5": + version: 1.0.11 + resolution: "pako@npm:1.0.11" + checksum: 10c0/86dd99d8b34c3930345b8bbeb5e1cd8a05f608eeb40967b293f72fe469d0e9c88b783a8777e4cc7dc7c91ce54c5e93d88ff4b4f060e6ff18408fd21030d9ffbe + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.7": + version: 5.1.7 + resolution: "parse-asn1@npm:5.1.7" + dependencies: + asn1.js: "npm:^4.10.1" + browserify-aes: "npm:^1.2.0" + evp_bytestokey: "npm:^1.0.3" + hash-base: "npm:~3.0" + pbkdf2: "npm:^3.1.2" + safe-buffer: "npm:^5.2.1" + checksum: 10c0/05eb5937405c904eb5a7f3633bab1acc11f4ae3478a07ef5c6d81ce88c3c0e505ff51f9c7b935ebc1265c868343793698fc91025755a895d0276f620f95e8a82 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + error-ex: "npm:^1.3.1" + json-parse-even-better-errors: "npm:^2.3.0" + lines-and-columns: "npm:^1.1.6" + checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 + languageName: node + linkType: hard + +"path-browserify@npm:^1.0.1": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: 10c0/8b8c3fd5c66bd340272180590ae4ff139769e9ab79522e2eb82e3d571a89b8117c04147f65ad066dccfb42fcad902e5b7d794b3d35e0fd840491a8ddbedf8c66 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"pbkdf2@npm:^3.1.2": + version: 3.1.2 + resolution: "pbkdf2@npm:3.1.2" + dependencies: + create-hash: "npm:^1.1.2" + create-hmac: "npm:^1.1.4" + ripemd160: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + sha.js: "npm:^2.4.8" + checksum: 10c0/5a30374e87d33fa080a92734d778cf172542cc7e41b96198c4c88763997b62d7850de3fbda5c3111ddf79805ee7c1da7046881c90ac4920b5e324204518b05fd + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pkg-dir@npm:^5.0.0": + version: 5.0.0 + resolution: "pkg-dir@npm:5.0.0" + dependencies: + find-up: "npm:^5.0.0" + checksum: 10c0/793a496d685dc55bbbdbbb22d884535c3b29241e48e3e8d37e448113a71b9e42f5481a61fdc672d7322de12fbb2c584dd3a68bf89b18fffce5c48a390f911bc5 + languageName: node + linkType: hard + +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd + languageName: node + linkType: hard + +"postcss@npm:^8.4.49": + version: 8.4.49 + resolution: "postcss@npm:8.4.49" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/f1b3f17aaf36d136f59ec373459f18129908235e65dbdc3aee5eef8eba0756106f52de5ec4682e29a2eab53eb25170e7e871b3e4b52a8f1de3d344a514306be3 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: "npm:^1.4.0" + object-assign: "npm:^4.1.1" + react-is: "npm:^16.13.1" + checksum: 10c0/59ece7ca2fb9838031d73a48d4becb9a7cc1ed10e610517c7d8f19a1e02fa47f7c27d557d8a5702bec3cfeccddc853579832b43f449e54635803f277b1c78077 + languageName: node + linkType: hard + +"public-encrypt@npm:^4.0.3": + version: 4.0.3 + resolution: "public-encrypt@npm:4.0.3" + dependencies: + bn.js: "npm:^4.1.0" + browserify-rsa: "npm:^4.0.0" + create-hash: "npm:^1.1.0" + parse-asn1: "npm:^5.0.0" + randombytes: "npm:^2.0.1" + safe-buffer: "npm:^5.1.2" + checksum: 10c0/6c2cc19fbb554449e47f2175065d6b32f828f9b3badbee4c76585ac28ae8641aafb9bb107afc430c33c5edd6b05dbe318df4f7d6d7712b1093407b11c4280700 + languageName: node + linkType: hard + +"punycode@npm:^1.4.1": + version: 1.4.1 + resolution: "punycode@npm:1.4.1" + checksum: 10c0/354b743320518aef36f77013be6e15da4db24c2b4f62c5f1eb0529a6ed02fbaf1cb52925785f6ab85a962f2b590d9cd5ad730b70da72b5f180e2556b8bd3ca08 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"qs@npm:^6.12.3": + version: 6.13.1 + resolution: "qs@npm:6.13.1" + dependencies: + side-channel: "npm:^1.0.6" + checksum: 10c0/5ef527c0d62ffca5501322f0832d800ddc78eeb00da3b906f1b260ca0492721f8cdc13ee4b8fd8ac314a6ec37b948798c7b603ccc167e954088df392092f160c + languageName: node + linkType: hard + +"querystring-es3@npm:^0.2.1": + version: 0.2.1 + resolution: "querystring-es3@npm:0.2.1" + checksum: 10c0/476938c1adb45c141f024fccd2ffd919a3746e79ed444d00e670aad68532977b793889648980e7ca7ff5ffc7bfece623118d0fbadcaf217495eeb7059ae51580 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: "npm:^5.1.0" + checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 + languageName: node + linkType: hard + +"randomfill@npm:^1.0.4": + version: 1.0.4 + resolution: "randomfill@npm:1.0.4" + dependencies: + randombytes: "npm:^2.0.5" + safe-buffer: "npm:^5.1.0" + checksum: 10c0/11aeed35515872e8f8a2edec306734e6b74c39c46653607f03c68385ab8030e2adcc4215f76b5e4598e028c4750d820afd5c65202527d831d2a5f207fe2bc87c + languageName: node + linkType: hard + +"react-dom@npm:^18.3.1": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + scheduler: "npm:^0.23.2" + peerDependencies: + react: ^18.3.1 + checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 + languageName: node + linkType: hard + +"react-dropzone@npm:^10.2.1": + version: 10.2.2 + resolution: "react-dropzone@npm:10.2.2" + dependencies: + attr-accept: "npm:^2.0.0" + file-selector: "npm:^0.1.12" + prop-types: "npm:^15.7.2" + peerDependencies: + react: ">= 16.8" + checksum: 10c0/64d94db7c0ba6d21a69ded4cb383df8228f0e99ba4377da975c20432595ed53cb1ece47a1412a0378e1da8048066dae21b688dccd22adb9c46a18419a57a362d + languageName: node + linkType: hard + +"react-dropzone@npm:^14.3.5": + version: 14.3.5 + resolution: "react-dropzone@npm:14.3.5" + dependencies: + attr-accept: "npm:^2.2.4" + file-selector: "npm:^2.1.0" + prop-types: "npm:^15.8.1" + peerDependencies: + react: ">= 16.8 || 18.0.0" + checksum: 10c0/e3e5dddd3bead7c6410bd3fccc3a87e93086ceac47526a2d35421ef7e11a9e59f47c8af8da5c4600a58ef238a5af87c751a71b6391d5c6f77f1f2857946c07cc + languageName: node + linkType: hard + +"react-is@npm:^16.13.1, react-is@npm:^16.7.0": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 + languageName: node + linkType: hard + +"react-is@npm:^19.0.0": + version: 19.0.0 + resolution: "react-is@npm:19.0.0" + checksum: 10c0/d1be8e8500cf04f76df71942a21ef3a71266397a383d7ec8885f35190df818d35c65efd35aed7be47a89ad99aaff2c52e0c4e39e8930844a6b997622e50625a8 + languageName: node + linkType: hard + +"react-mui-dropzone@npm:^4.0.7": + version: 4.0.7 + resolution: "react-mui-dropzone@npm:4.0.7" + dependencies: + "@babel/runtime": "npm:^7.4.4" + clsx: "npm:^1.0.2" + react-dropzone: "npm:^10.2.1" + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/styled": ^11.3.0 + "@mui/icons-material": ^5.0.1 + "@mui/material": ^5.0.2 + "@mui/styles": ^5.0.1 + prop-types: ^15.7.2 + react: ^18.2.0 + react-dom: ^18.2.0 + checksum: 10c0/7006eacc47a3b8c00cafb1cfb346230a98704071a2ec0515aa76f957a5e06f15a26b65673ae0367d57749691700df6c88d3221b4a4053998b75b4367ad151772 + languageName: node + linkType: hard + +"react-toastify@npm:^10.0.6": + version: 10.0.6 + resolution: "react-toastify@npm:10.0.6" + dependencies: + clsx: "npm:^2.1.0" + peerDependencies: + react: ">=18" + react-dom: ">=18" + checksum: 10c0/4042b716d008295d0feab32488d1e88ec655a1b7a9176fa7d253c70387578a8a0c04aca0ff86d20e1722f3b4baadae8970f50f462940d67a90453c307dd350a9 + languageName: node + linkType: hard + +"react-transition-group@npm:^4.4.5": + version: 4.4.5 + resolution: "react-transition-group@npm:4.4.5" + dependencies: + "@babel/runtime": "npm:^7.5.5" + dom-helpers: "npm:^5.0.1" + loose-envify: "npm:^1.4.0" + prop-types: "npm:^15.6.2" + peerDependencies: + react: ">=16.6.0" + react-dom: ">=16.6.0" + checksum: 10c0/2ba754ba748faefa15f87c96dfa700d5525054a0141de8c75763aae6734af0740e77e11261a1e8f4ffc08fd9ab78510122e05c21c2d79066c38bb6861a886c82 + languageName: node + linkType: hard + +"react@npm:^18.3.1": + version: 18.3.1 + resolution: "react@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 + languageName: node + linkType: hard + +"readable-stream@npm:^2.3.8": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.3" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~2.0.0" + safe-buffer: "npm:~5.1.1" + string_decoder: "npm:~1.1.1" + util-deprecate: "npm:~1.0.1" + checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa + languageName: node + linkType: hard + +"readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 10c0/1b16eb2c4bceb1665c89de70dcb64126a22bc8eb958feef3cd68fe11ac6d2a4899b5cd1b80b0774c7c03591dc57d16631a7f69d2daa2ec98100e2f29f7ec4cc4 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"resolve@npm:^1.17.0, resolve@npm:^1.19.0": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"rimraf@npm:^5.0.5": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" + dependencies: + glob: "npm:^10.3.7" + bin: + rimraf: dist/esm/bin.mjs + checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc + languageName: node + linkType: hard + +"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": + version: 2.0.2 + resolution: "ripemd160@npm:2.0.2" + dependencies: + hash-base: "npm:^3.0.0" + inherits: "npm:^2.0.1" + checksum: 10c0/f6f0df78817e78287c766687aed4d5accbebc308a8e7e673fb085b9977473c1f139f0c5335d353f172a915bb288098430755d2ad3c4f30612f4dd0c901cd2c3a + languageName: node + linkType: hard + +"rollup@npm:^4.23.0": + version: 4.30.1 + resolution: "rollup@npm:4.30.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.30.1" + "@rollup/rollup-android-arm64": "npm:4.30.1" + "@rollup/rollup-darwin-arm64": "npm:4.30.1" + "@rollup/rollup-darwin-x64": "npm:4.30.1" + "@rollup/rollup-freebsd-arm64": "npm:4.30.1" + "@rollup/rollup-freebsd-x64": "npm:4.30.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.30.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.30.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.30.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.30.1" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.30.1" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.30.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.30.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.30.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.30.1" + "@rollup/rollup-linux-x64-musl": "npm:4.30.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.30.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.30.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.30.1" + "@types/estree": "npm:1.0.6" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/a318c57e2ca9741e1503bcd75483949c6e83edd72234a468010a3098a34248f523e44f7ad4fde90dc5c2da56abc1b78ac42a9329e1dbd708682728adbd8df7cc + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex-test@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.2.1" + checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 + languageName: node + linkType: hard + +"semver@npm:^7.3.5, semver@npm:^7.6.0": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.2": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.4": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: 10c0/5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 + languageName: node + linkType: hard + +"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + bin: + sha.js: ./bin.js + checksum: 10c0/b7a371bca8821c9cc98a0aeff67444a03d48d745cb103f17228b96793f455f0eb0a691941b89ea1e60f6359207e36081d9be193252b0f128e0daf9cfea2815a5 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.6": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map@npm:^0.5.7": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 10c0/904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d + languageName: node + linkType: hard + +"stream-browserify@npm:^3.0.0": + version: 3.0.0 + resolution: "stream-browserify@npm:3.0.0" + dependencies: + inherits: "npm:~2.0.4" + readable-stream: "npm:^3.5.0" + checksum: 10c0/ec3b975a4e0aa4b3dc5e70ffae3fc8fd29ac725353a14e72f213dff477b00330140ad014b163a8cbb9922dfe90803f81a5ea2b269e1bbfd8bd71511b88f889ad + languageName: node + linkType: hard + +"stream-http@npm:^3.2.0": + version: 3.2.0 + resolution: "stream-http@npm:3.2.0" + dependencies: + builtin-status-codes: "npm:^3.0.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.6.0" + xtend: "npm:^4.0.2" + checksum: 10c0/f128fb8076d60cd548f229554b6a1a70c08a04b7b2afd4dbe7811d20f27f7d4112562eb8bce86d72a8691df3b50573228afcf1271e55e81f981536c67498bc41 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: "npm:~5.1.0" + checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"stylis@npm:4.2.0": + version: 4.2.0 + resolution: "stylis@npm:4.2.0" + checksum: 10c0/a7128ad5a8ed72652c6eba46bed4f416521bc9745a460ef5741edc725252cebf36ee45e33a8615a7057403c93df0866ab9ee955960792db210bb80abd5ac6543 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d + languageName: node + linkType: hard + +"timers-browserify@npm:^2.0.4": + version: 2.0.12 + resolution: "timers-browserify@npm:2.0.12" + dependencies: + setimmediate: "npm:^1.0.4" + checksum: 10c0/98e84db1a685bc8827c117a8bc62aac811ad56a995d07938fc7ed8cdc5bf3777bfe2d4e5da868847194e771aac3749a20f6cdd22091300fe889a76fe214a4641 + languageName: node + linkType: hard + +"tiny-warning@npm:^1.0.2": + version: 1.0.3 + resolution: "tiny-warning@npm:1.0.3" + checksum: 10c0/ef8531f581b30342f29670cb41ca248001c6fd7975ce22122bd59b8d62b4fc84ad4207ee7faa95cde982fa3357cd8f4be650142abc22805538c3b1392d7084fa + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"ts-api-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "ts-api-utils@npm:2.0.0" + peerDependencies: + typescript: ">=4.8.4" + checksum: 10c0/6165e29a5b75bd0218e3cb0f9ee31aa893dbd819c2e46dbb086c841121eb0436ed47c2c18a20cb3463d74fd1fb5af62e2604ba5971cc48e5b38ebbdc56746dfc + languageName: node + linkType: hard + +"tslib@npm:^2.0.1, tslib@npm:^2.7.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"tty-browserify@npm:0.0.1": + version: 0.0.1 + resolution: "tty-browserify@npm:0.0.1" + checksum: 10c0/5e34883388eb5f556234dae75b08e069b9e62de12bd6d87687f7817f5569430a6dfef550b51dbc961715ae0cd0eb5a059e6e3fc34dc127ea164aa0f9b5bb033d + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"typescript-eslint@npm:^8.11.0": + version: 8.19.1 + resolution: "typescript-eslint@npm:8.19.1" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.19.1" + "@typescript-eslint/parser": "npm:8.19.1" + "@typescript-eslint/utils": "npm:8.19.1" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/59cdb590a0b38bfca1634c421c1acd2d1bfc8a7325af8fb1332421103dd98d454d349d4f82175088cf06216c1540dc1a73d1dca44cff16dd1d08f969feeb0c0b + languageName: node + linkType: hard + +"typescript@npm:~5.7.3": + version: 5.7.3 + resolution: "typescript@npm:5.7.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A~5.7.3#optional!builtin": + version: 5.7.3 + resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4 + languageName: node + linkType: hard + +"undici-types@npm:~6.20.0": + version: 6.20.0 + resolution: "undici-types@npm:6.20.0" + checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"url@npm:^0.11.4": + version: 0.11.4 + resolution: "url@npm:0.11.4" + dependencies: + punycode: "npm:^1.4.1" + qs: "npm:^6.12.3" + checksum: 10c0/cc93405ae4a9b97a2aa60ca67f1cb1481c0221cb4725a7341d149be5e2f9cfda26fd432d64dbbec693d16593b68b8a46aad8e5eab21f814932134c9d8620c662 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"util@npm:^0.12.4, util@npm:^0.12.5": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: "npm:^2.0.3" + is-arguments: "npm:^1.0.4" + is-generator-function: "npm:^1.0.7" + is-typed-array: "npm:^1.1.3" + which-typed-array: "npm:^1.1.2" + checksum: 10c0/c27054de2cea2229a66c09522d0fa1415fb12d861d08523a8846bf2e4cbf0079d4c3f725f09dcb87493549bcbf05f5798dce1688b53c6c17201a45759e7253f3 + languageName: node + linkType: hard + +"uuid@npm:^10.0.0": + version: 10.0.0 + resolution: "uuid@npm:10.0.0" + bin: + uuid: dist/bin/uuid + checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe + languageName: node + linkType: hard + +"vite-plugin-node-polyfills@npm:^0.22.0": + version: 0.22.0 + resolution: "vite-plugin-node-polyfills@npm:0.22.0" + dependencies: + "@rollup/plugin-inject": "npm:^5.0.5" + node-stdlib-browser: "npm:^1.2.0" + peerDependencies: + vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + checksum: 10c0/f8ddc452eb6fba280977d037f8a6406aa522e69590641ce72ce5bb31c3498856a9f63ab3671bc6a822dcd1ff9ba5cac02cacef4a0e170fd8500cdeeb38c81675 + languageName: node + linkType: hard + +"vite-plugin-top-level-await@npm:^1.4.4": + version: 1.4.4 + resolution: "vite-plugin-top-level-await@npm:1.4.4" + dependencies: + "@rollup/plugin-virtual": "npm:^3.0.2" + "@swc/core": "npm:^1.7.0" + uuid: "npm:^10.0.0" + peerDependencies: + vite: ">=2.8" + checksum: 10c0/013e7b2e28632d93d04c4061187198e699064fc208a1657c100354b32da30921fa835879fc17779d5e0b074855237408da2fadd720fa0f4571137427a1efd5e3 + languageName: node + linkType: hard + +"vite@npm:^6.0.7": + version: 6.0.7 + resolution: "vite@npm:6.0.7" + dependencies: + esbuild: "npm:^0.24.2" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.49" + rollup: "npm:^4.23.0" + peerDependencies: + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: ">=1.21.0" + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/ae81047b4290a7206b9394a39a782d509e9610462e7946422ba22d5bc615b5a322c07e33d7bf9dd0b3312ec3f5c63353b725913d1519324bfdf539b4f1e03f52 + languageName: node + linkType: hard + +"vite@workspace:.": + version: 0.0.0-use.local + resolution: "vite@workspace:." + dependencies: + "@aztec/accounts": "link:../yarn-project/accounts" + "@aztec/aztec.js": "link:../yarn-project/aztec.js" + "@aztec/bb-prover": "link:../yarn-project/bb-prover" + "@aztec/circuit-types": "link:../yarn-project/circuit-types" + "@aztec/circuits.js": "link:../yarn-project/circuits.js" + "@aztec/foundation": "link:../yarn-project/foundation" + "@aztec/key-store": "link:../yarn-project/key-store" + "@aztec/kv-store": "link:../yarn-project/kv-store" + "@aztec/pxe": "link:../yarn-project/pxe" + "@aztec/simulator": "link:../yarn-project/simulator" + "@emotion/react": "npm:^11.14.0" + "@emotion/styled": "npm:^11.14.0" + "@eslint/js": "npm:^9.18.0" + "@fontsource/roboto": "npm:^5.1.1" + "@mui/icons-material": "npm:^6.3.1" + "@mui/material": "npm:^6.3.1" + "@mui/styles": "npm:^6.3.1" + "@types/node": "npm:^22.10.5" + "@types/react": "npm:^19.0.6" + "@types/react-dom": "npm:^19.0.3" + "@vitejs/plugin-react-swc": "npm:^3.7.2" + eslint: "npm:^9.13.0" + eslint-plugin-react-hooks: "npm:^5.1.0" + eslint-plugin-react-refresh: "npm:^0.4.18" + globals: "npm:^15.14.0" + react: "npm:^18.3.1" + react-dom: "npm:^18.3.1" + react-dropzone: "npm:^14.3.5" + react-mui-dropzone: "npm:^4.0.7" + react-toastify: "npm:^10.0.6" + typescript: "npm:~5.7.3" + typescript-eslint: "npm:^8.11.0" + vite: "npm:^6.0.7" + vite-plugin-node-polyfills: "npm:^0.22.0" + vite-plugin-top-level-await: "npm:^1.4.4" + languageName: unknown + linkType: soft + +"vm-browserify@npm:^1.0.1": + version: 1.1.2 + resolution: "vm-browserify@npm:1.1.2" + checksum: 10c0/0cc1af6e0d880deb58bc974921320c187f9e0a94f25570fca6b1bd64e798ce454ab87dfd797551b1b0cc1849307421aae0193cedf5f06bdb5680476780ee344b + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.2": + version: 1.1.18 + resolution: "which-typed-array@npm:1.1.18" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/0412f4a91880ca1a2a63056187c2e3de6b129b2b5b6c17bc3729f0f7041047ae48fb7424813e51506addb2c97320003ee18b8c57469d2cde37983ef62126143c + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"xtend@npm:^4.0.2": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard From c26ea545699d387424568415212cbf962722ea02 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 14 Jan 2025 10:49:19 +0000 Subject: [PATCH 02/23] wip --- gaztec/src/App.tsx | 7 +- gaztec/src/common.styles.tsx | 34 +- gaztec/src/components/common/fnParameter.tsx | 71 ++++ .../components/deployContractDialog.tsx | 186 +++++++++++ gaztec/src/components/contract/contract.tsx | 311 +++++++++++++++++- .../components/createAccountDialog.tsx | 10 +- gaztec/src/components/sidebar/sidebar.tsx | 42 +-- gaztec/src/utils/addresses.ts | 18 + gaztec/src/utils/interactions.ts | 31 ++ gaztec/src/utils/storage.ts | 15 +- yarn-project/cli-wallet/src/cmds/deploy.ts | 1 - 11 files changed, 667 insertions(+), 59 deletions(-) create mode 100644 gaztec/src/components/common/fnParameter.tsx create mode 100644 gaztec/src/components/contract/components/deployContractDialog.tsx create mode 100644 gaztec/src/utils/addresses.ts create mode 100644 gaztec/src/utils/interactions.ts diff --git a/gaztec/src/App.tsx b/gaztec/src/App.tsx index bf60c6e93de1..6bc5df4ddbb7 100644 --- a/gaztec/src/App.tsx +++ b/gaztec/src/App.tsx @@ -3,15 +3,16 @@ import "react-toastify/dist/ReactToastify.css"; import "./App.css"; import { Home } from "./components/home/home"; import { Global } from "@emotion/react"; -import { globalStyle } from "./common.styles"; +import { ThemeProvider } from "@mui/material/styles"; +import { globalStyle, theme } from "./common.styles"; function App() { return ( - <> + - + ); } diff --git a/gaztec/src/common.styles.tsx b/gaztec/src/common.styles.tsx index 6a506992ea62..78d0926a19c0 100644 --- a/gaztec/src/common.styles.tsx +++ b/gaztec/src/common.styles.tsx @@ -5,17 +5,31 @@ import "@fontsource/roboto/700.css"; import { css } from "@emotion/react"; +import { ThemeOptions, createTheme } from "@mui/material/styles"; + +const themeOptions: ThemeOptions & { cssVariables: boolean } = { + palette: { + mode: "light", + primary: { + main: "#646cff", + }, + secondary: { + main: "#f50057", + }, + }, + cssVariables: true, +}; + +export const theme = createTheme(themeOptions); + export const globalStyle = css({ ":root": { - fontFamily: "Inter, system-ui, Avenir, Helvetica, Arial, sans-serif", lineHeight: 1.5, fontWeight: 400, margin: 0, padding: 0, colorScheme: "light dark", - "--main-text-color": "rgba(255, 255, 255, 0.87)", - color: "var(--main-text-color)", "--main-accent-color": "#646cff", @@ -27,24 +41,10 @@ export const globalStyle = css({ MozOsxFontSmoothing: "grayscale", }, - a: { - fontWeight: 500, - color: "#646cff", - textDecoration: "inherit", - }, - "a:hover": { - color: "#535bf2", - }, - body: { margin: 0, display: "flex", minWidth: "100vw", minHeight: "100vh", }, - - h1: { - fontSize: "3.2em", - lineHeight: 1.1, - }, }); diff --git a/gaztec/src/components/common/fnParameter.tsx b/gaztec/src/components/common/fnParameter.tsx new file mode 100644 index 000000000000..52952e06a636 --- /dev/null +++ b/gaztec/src/components/common/fnParameter.tsx @@ -0,0 +1,71 @@ +import { ABIParameter, isAddressStruct } from "@aztec/foundation/abi"; +import { + Autocomplete, + IconButton, + TextField, + capitalize, + css, +} from "@mui/material"; +import { formatAddressAsString } from "../../utils/addresses"; +import { useState } from "react"; +import EditIcon from "@mui/icons-material/Edit"; + +const container = css({ + display: "flex", + flexDirection: "row", + alignItems: "center", + justifyContent: "center", +}); + +export function FunctionParameter({ + aliasedAddresses, + parameter, + onParameterChange, +}: { + aliasedAddresses: { key: string; value: string }[]; + parameter: ABIParameter; + onParameterChange: (value: string) => void; +}) { + const [manualInput, setManualInput] = useState(false); + return ( +
+ {isAddressStruct(parameter.type) && !manualInput ? ( + ({ + id: alias.value, + label: `${alias.key} (${formatAddressAsString(alias.value)})`, + }))} + onChange={(_, newValue) => onParameterChange(newValue.id)} + sx={{ width: 300, marginTop: "1rem" }} + renderInput={(params) => ( + + )} + /> + ) : ( + onParameterChange(e.target.value)} + sx={{ marginTop: "1rem" }} + fullWidth + /> + )} + {isAddressStruct(parameter.type) && ( + <> +
+ + setManualInput(!manualInput)} + > + + + + )} +
+ ); +} diff --git a/gaztec/src/components/contract/components/deployContractDialog.tsx b/gaztec/src/components/contract/components/deployContractDialog.tsx new file mode 100644 index 000000000000..e686f3b3910e --- /dev/null +++ b/gaztec/src/components/contract/components/deployContractDialog.tsx @@ -0,0 +1,186 @@ +import DialogTitle from "@mui/material/DialogTitle"; +import Dialog from "@mui/material/Dialog"; +import { + AccountWalletWithSecretKey, + ContractDeployer, + Fr, +} from "@aztec/aztec.js"; +import { + Autocomplete, + Button, + CircularProgress, + FormControl, + FormGroup, + InputLabel, + MenuItem, + Select, + TextField, + css, +} from "@mui/material"; +import { useContext, useEffect, useState } from "react"; +import { ContractInstanceWithAddress, PublicKeys } from "@aztec/circuits.js"; +import { + ContractArtifact, + FunctionArtifact, + encodeArguments, + getDefaultInitializer, + getInitializer, + isAddressStruct, +} from "@aztec/foundation/abi"; +import { GITHUB_TAG_PREFIX } from "../../../utils/interactions"; +import { PrivateContext } from "../../home/home"; +import { + formatAddressAsString, + parseAliasedAddresses, +} from "../../../utils/addresses"; +import { FunctionParameter } from "../../common/fnParameter"; + +const creationForm = css({ + display: "flex", + flexDirection: "column", + gap: "1rem", + padding: "1rem", + alignItems: "center", +}); + +export function DeployContractDialog({ + open, + wallet, + contractArtifact, + onClose, +}: { + open: boolean; + wallet: AccountWalletWithSecretKey; + contractArtifact: ContractArtifact; + onClose: (contract?: ContractInstanceWithAddress, alias?: string) => void; +}) { + const [alias, setAlias] = useState(""); + const [initializer, setInitializer] = useState(null); + const [parameters, setParameters] = useState([]); + const [deploying, setDeploying] = useState(false); + const [aliasedAddresses, setAliasedAddresses] = useState([]); + const { walletDB } = useContext(PrivateContext); + + useEffect(() => { + const defaultInitializer = getDefaultInitializer(contractArtifact); + setInitializer(defaultInitializer); + const setAliases = async () => { + const accountAliases = await walletDB.listAliases("accounts"); + const contractAliases = await walletDB.listAliases("contracts"); + setAliasedAddresses( + parseAliasedAddresses([...accountAliases, ...contractAliases]) + ); + }; + setAliases(); + }, [contractArtifact]); + + const handleParameterChange = (index, value) => { + parameters[index] = value; + setParameters(parameters); + }; + + const handleClose = () => { + onClose(); + }; + + const deploy = async () => { + setDeploying(true); + + const nodeInfo = await wallet.getNodeInfo(); + const expectedAztecNrVersion = `${GITHUB_TAG_PREFIX}-v${nodeInfo.nodeVersion}`; + if ( + contractArtifact.aztecNrVersion && + contractArtifact.aztecNrVersion !== expectedAztecNrVersion + ) { + throw new Error( + `Contract was compiled with a different version of Aztec.nr: ${contractArtifact.aztecNrVersion}. Consider updating Aztec.nr to ${expectedAztecNrVersion}` + ); + } + + const deployer = new ContractDeployer( + contractArtifact, + wallet, + PublicKeys.default(), + initializer?.name + ); + + let args = []; + + if (initializer && parameters.length > 0) { + args = encodeArguments(initializer, parameters); + } + + const deployed = await deployer + .deploy(...args) + .send() + .wait(); + + onClose(deployed.contract.instance, alias); + }; + + return ( + + Deploy contract +
+ {deploying ? ( + <> + Deploying... + + + ) : ( + <> + + + Initializer + + {initializer && + initializer.parameters.map((param, i) => ( + { + handleParameterChange(i, newValue); + }} + aliasedAddresses={aliasedAddresses} + /> + ))} + + + { + setAlias(event.target.value); + }} + /> + + + + + )} +
+
+ ); +} diff --git a/gaztec/src/components/contract/contract.tsx b/gaztec/src/components/contract/contract.tsx index 809d5f87309b..85c12fa84a33 100644 --- a/gaztec/src/components/contract/contract.tsx +++ b/gaztec/src/components/contract/contract.tsx @@ -1,8 +1,37 @@ import { css } from "@emotion/react"; import { useDropzone } from "react-dropzone"; import "./dropzone.css"; -import { useState } from "react"; -import { ContractArtifact, loadContractArtifact } from "@aztec/aztec.js"; +import { useContext, useState } from "react"; +import { + AztecAddress, + Contract, + ContractArtifact, + ContractInstanceWithAddress, + loadContractArtifact, +} from "@aztec/aztec.js"; +import { PrivateContext } from "../home/home"; +import { + Accordion, + AccordionDetails, + AccordionSummary, + Button, + Card, + CardActions, + CardContent, + Checkbox, + Divider, + FormControlLabel, + FormGroup, + Input, + InputAdornment, + Typography, +} from "@mui/material"; +import FindInPageIcon from "@mui/icons-material/FindInPage"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import { ABIParameter } from "@aztec/foundation/abi"; +import { prepTx } from "../../utils/interactions"; +import { formatAddressAsString } from "../../utils/addresses"; +import { DeployContractDialog } from "./components/deployContractDialog"; const container = css({ display: "flex", @@ -23,36 +52,304 @@ const dropZoneContainer = css({ margin: "5rem", }); -const contractFnContainer = css({}); +const contractFnContainer = css({ + display: "block", + width: "100%", + overflowY: "auto", + color: "black", + height: "100%", +}); + +const header = css({ + display: "flex", + alignItems: "center", + justifyContent: "space-around", +}); + +const visibilityFilters = css({ + display: "flex", + flexDirection: "column", +}); + +const FORBIDDEN_FUNCTIONS = [ + "compute_note_hash_and_optionally_a_nullifier", + "sync_notes", +]; export function ContractComponent() { const [contractArtifact, setContractArtifact] = useState(null); + + const [filters, setFilters] = useState({ + searchTerm: "", + private: true, + public: true, + unconstrained: true, + }); + + const [isWorking, setIsWorking] = useState(false); + + const [simulationResults, setSimulationResults] = useState({}); + const [parameters, setParameters] = useState({}); + + const [contractAddress, setContractAddress] = useState(AztecAddress.ZERO); + const [openDeployContractDialog, setOpenDeployContractDialog] = + useState(false); + + const { wallet, walletDB } = useContext(PrivateContext); + const { getRootProps, getInputProps } = useDropzone({ - onDrop: (files) => { + onDrop: async (files) => { const file = files[0]; const reader = new FileReader(); - reader.onload = (e) => { + reader.onload = async (e) => { const contractArtifact = loadContractArtifact( JSON.parse(e.target?.result as string) ); setContractArtifact(contractArtifact); + setContractAddress(AztecAddress.ZERO); }; reader.readAsText(file); }, }); + const handleParameterChange = ( + fnName: string, + param: ABIParameter, + value: any + ) => { + const fnParameters = parameters[fnName] || {}; + fnParameters[param.name] = value; + setParameters({ ...parameters, [fnName]: fnParameters }); + }; + + const simulate = async (fnName: string) => { + setIsWorking(true); + const { encodedArgs } = await prepTx( + contractArtifact, + fnName, + parameters[fnName] + ); + const contract = await Contract.at( + contractAddress, + contractArtifact, + wallet + ); + const call = contract.methods[fnName](...encodedArgs); + const result = await call.simulate(); + setSimulationResults({ ...simulationResults, ...{ [fnName]: result } }); + setIsWorking(false); + }; + + const handleContractDeployment = async ( + contract?: ContractInstanceWithAddress, + alias?: string + ) => { + if (!contract || !alias) { + return; + } + await walletDB.storeContract( + contract.address, + contractArtifact, + undefined, + alias + ); + setContractAddress(contract.address); + setOpenDeployContractDialog(false); + }; + return (
{!contractArtifact ? (
-

Drag 'n' drop some files here, or click to select files

+ + Drag 'n' drop some files here, or click to select files +
) : ( -
{contractArtifact?.name}
+
+
+ {contractArtifact.name} + + setFilters({ ...filters, searchTerm: e.target.value }) + } + endAdornment={ + + + + } + /> + + + setFilters({ ...filters, private: e.target.checked }) + } + /> + } + label="Private" + /> + + setFilters({ ...filters, public: e.target.checked }) + } + /> + } + label="Public" + /> + + setFilters({ + ...filters, + unconstrained: e.target.checked, + }) + } + /> + } + label="Unconstrained" + /> + + {contractAddress === AztecAddress.ZERO && wallet ? ( + <> + + + + + ) : ( + + {formatAddressAsString(contractAddress.toString())} + + )} +
+ {contractArtifact.functions + .filter( + (fn) => + !FORBIDDEN_FUNCTIONS.includes(fn.name) && + ((filters.private && fn.functionType === "private") || + (filters.public && fn.functionType === "public") || + (filters.unconstrained && + fn.functionType === "unconstrained")) && + (filters.searchTerm === "" || + fn.name.includes(filters.searchTerm)) + ) + .map((fn) => ( + + + + {fn.functionType} + + + {fn.name} + + + Parameters + + + {fn.parameters.map((param) => ( + + handleParameterChange(fn.name, param, e.target.value) + } + sx={{ marginRight: "1rem" }} + /> + ))} + + + }> + + Simulation results + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Suspendisse malesuada lacus ex, sit amet blandit leo + lobortis eget. + + + + } + aria-controls="panel2-content" + id="panel2-header" + > + Tx History + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Suspendisse malesuada lacus ex, sit amet blandit leo + lobortis eget. + + + + + + + + + ))} +
)}
); diff --git a/gaztec/src/components/sidebar/components/createAccountDialog.tsx b/gaztec/src/components/sidebar/components/createAccountDialog.tsx index 0b87a2539904..492ff5cd3c0f 100644 --- a/gaztec/src/components/sidebar/components/createAccountDialog.tsx +++ b/gaztec/src/components/sidebar/components/createAccountDialog.tsx @@ -2,7 +2,13 @@ import DialogTitle from "@mui/material/DialogTitle"; import Dialog from "@mui/material/Dialog"; import { AccountWalletWithSecretKey, Fr, PXE } from "@aztec/aztec.js"; import { getSchnorrAccount } from "@aztec/accounts/schnorr"; -import { Button, CircularProgress, TextField, css } from "@mui/material"; +import { + Button, + CircularProgress, + TextField, + Typography, + css, +} from "@mui/material"; import { useState } from "react"; import { deriveSigningKey } from "@aztec/circuits.js"; @@ -56,7 +62,7 @@ export function CreateAccountDialog({
{deployingAccount ? ( <> - Deploying... + Deploying... ) : ( diff --git a/gaztec/src/components/sidebar/sidebar.tsx b/gaztec/src/components/sidebar/sidebar.tsx index a3ca13875e46..c976e7524a0b 100644 --- a/gaztec/src/components/sidebar/sidebar.tsx +++ b/gaztec/src/components/sidebar/sidebar.tsx @@ -14,13 +14,18 @@ import { getSchnorrAccount } from "@aztec/accounts/schnorr"; import { AztecAddress, deriveSigningKey } from "@aztec/circuits.js"; import AddIcon from "@mui/icons-material/Add"; import logoURL from "../../assets/Aztec_logo.png"; +import { Typography } from "@mui/material"; +import { + formatAddressAsString, + parseAliasedAddresses, +} from "../../utils/addresses"; const container = css({ display: "flex", flexDirection: "column", height: "100%", width: "25vw", - backgroundColor: "var(--main-accent-color)", + backgroundColor: "var(--mui-palette-primary-light)", overflow: "hidden", padding: "0 0.5rem", }); @@ -34,12 +39,14 @@ const header = css({ display: "flex", flexDirection: "row", height: "5rem", + width: "100%", alignItems: "center", + marginBottom: "1rem", }); const logo = css({ height: "90%", - margin: "0.5rem 0.5rem 0rem 0rem", + margin: "0.5rem 1rem 0rem 0rem", }); const NETWORKS = [ @@ -50,25 +57,6 @@ const NETWORKS = [ { nodeURL: "http://34.145.98.34:8080", name: "Devnet" }, ]; -const convertAztecAddressFromUTF8BufferAsString = (bufferAsString: string) => { - return String.fromCharCode(...bufferAsString.split(",").map((x) => +x)); -}; - -const parseAliasedAccounts = ( - aliasedAccounts: { key: string; value: string }[] -) => { - return aliasedAccounts - .filter((account) => account.key !== "accounts:last") - .map(({ key, value }) => ({ - key, - value: convertAztecAddressFromUTF8BufferAsString(value), - })); -}; - -const formatAddressAsString = (addressAsString: string) => { - return `${addressAsString.slice(0, 4)}...${addressAsString.slice(-4)}`; -}; - export function SidebarComponent() { const { setPXE, @@ -101,7 +89,7 @@ export function SidebarComponent() { const walletDB = WalletDB.getInstance(); walletDB.init(walletDBStore, walletLogger.info); const aliasedAccounts = await walletDB.listAliases("accounts"); - setAccounts(parseAliasedAccounts(aliasedAccounts)); + setAccounts(parseAliasedAddresses(aliasedAccounts)); setWalletDB(walletDB); setPXE(pxe); setPXEInitialized(true); @@ -137,7 +125,7 @@ export function SidebarComponent() { salt, }); const aliasedAccounts = await walletDB.listAliases("accounts"); - setAccounts(parseAliasedAccounts(aliasedAccounts)); + setAccounts(parseAliasedAddresses(aliasedAccounts)); setOpenCreateAccountDialog(false); }; @@ -145,8 +133,12 @@ export function SidebarComponent() {
- -

GAztec

+ + GAztec +
Network diff --git a/gaztec/src/utils/addresses.ts b/gaztec/src/utils/addresses.ts new file mode 100644 index 000000000000..3cdc1e8c0bfc --- /dev/null +++ b/gaztec/src/utils/addresses.ts @@ -0,0 +1,18 @@ +export const formatAddressAsString = (addressAsString: string) => { + return `${addressAsString.slice(0, 4)}...${addressAsString.slice(-4)}`; +}; + +const convertAztecAddressFromUTF8BufferAsString = (bufferAsString: string) => { + return String.fromCharCode(...bufferAsString.split(",").map((x) => +x)); +}; + +export const parseAliasedAddresses = ( + aliasedAddreses: { key: string; value: string }[] +) => { + return aliasedAddreses + .filter((account) => account.key !== "accounts:last") + .map(({ key, value }) => ({ + key, + value: convertAztecAddressFromUTF8BufferAsString(value), + })); +}; diff --git a/gaztec/src/utils/interactions.ts b/gaztec/src/utils/interactions.ts new file mode 100644 index 000000000000..aea23b3337af --- /dev/null +++ b/gaztec/src/utils/interactions.ts @@ -0,0 +1,31 @@ +import { + ContractArtifact, + FunctionArtifact, + encodeArguments, +} from "@aztec/aztec.js"; +import { FunctionType } from "@aztec/foundation/abi"; + +export const GITHUB_TAG_PREFIX = "aztec-packages"; + +function getFunctionArtifact( + artifact: ContractArtifact, + fnName: string +): FunctionArtifact { + const fn = artifact.functions.find(({ name }) => name === fnName); + if (!fn) { + throw Error(`Function ${fnName} not found in contract ABI.`); + } + return fn; +} + +export async function prepTx( + contractArtifact: ContractArtifact, + functionName: string, + functionArgs: string[] +) { + const functionArtifact = getFunctionArtifact(contractArtifact, functionName); + const encodedArgs = encodeArguments(functionArtifact, functionArgs); + const isPrivate = functionArtifact.functionType === FunctionType.PRIVATE; + + return { encodedArgs, contractArtifact, isPrivate }; +} diff --git a/gaztec/src/utils/storage.ts b/gaztec/src/utils/storage.ts index 073e155d6440..f50ee7110e7b 100644 --- a/gaztec/src/utils/storage.ts +++ b/gaztec/src/utils/storage.ts @@ -1,3 +1,4 @@ +import { ContractArtifact } from "@aztec/aztec.js"; import { type AuthWitness, type TxHash } from "@aztec/circuit-types"; import { type AztecAddress, Fr, GasSettings } from "@aztec/circuits.js"; import { type LogFn } from "@aztec/foundation/log"; @@ -153,7 +154,7 @@ export class WalletDB { async storeContract( address: AztecAddress, - artifactPath: string, + artifact: ContractArtifact, log: LogFn = this.#userLog, alias?: string ) { @@ -162,13 +163,19 @@ export class WalletDB { `contracts:${alias}`, Buffer.from(address.toString()) ); - await this.#aliases.set(`artifacts:${alias}`, Buffer.from(artifactPath)); + await this.#aliases.set( + `artifacts:${alias}`, + Buffer.from(JSON.stringify(artifact)) + ); } await this.#aliases.set(`contracts:last`, Buffer.from(address.toString())); - await this.#aliases.set(`artifacts:last`, Buffer.from(artifactPath)); + await this.#aliases.set( + `artifacts:last`, + Buffer.from(JSON.stringify(artifact)) + ); await this.#aliases.set( `artifacts:${address.toString()}`, - Buffer.from(artifactPath) + Buffer.from(JSON.stringify(artifact)) ); log( `Contract stored in database with alias${ diff --git a/yarn-project/cli-wallet/src/cmds/deploy.ts b/yarn-project/cli-wallet/src/cmds/deploy.ts index a4e28b78a8e1..df49a1a678a1 100644 --- a/yarn-project/cli-wallet/src/cmds/deploy.ts +++ b/yarn-project/cli-wallet/src/cmds/deploy.ts @@ -65,7 +65,6 @@ export async function deploy( return; } - await deploy.create(deployOpts); const tx = deploy.send(deployOpts); const txHash = await tx.getTxHash(); From bffbb9d0e5b468aa380a5b7a959fb1aa3a9614e9 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 14 Jan 2025 17:42:28 +0000 Subject: [PATCH 03/23] working tx history --- gaztec/src/components/common/fnParameter.tsx | 7 +- .../components/deployContractDialog.tsx | 10 +- gaztec/src/components/contract/contract.tsx | 244 ++++++++++++------ gaztec/src/components/home/home.tsx | 21 +- gaztec/src/components/sidebar/sidebar.tsx | 166 +++++++++++- gaztec/src/config.ts | 3 + gaztec/src/utils/addresses.ts | 18 -- gaztec/src/utils/conversion.ts | 21 ++ gaztec/src/utils/storage.ts | 86 +++--- gaztec/src/utils/txs.ts | 10 + gaztec/vite.config.ts | 10 +- gaztec/yarn.lock | 90 +++---- 12 files changed, 467 insertions(+), 219 deletions(-) delete mode 100644 gaztec/src/utils/addresses.ts create mode 100644 gaztec/src/utils/conversion.ts create mode 100644 gaztec/src/utils/txs.ts diff --git a/gaztec/src/components/common/fnParameter.tsx b/gaztec/src/components/common/fnParameter.tsx index 52952e06a636..c4ad96f06ec2 100644 --- a/gaztec/src/components/common/fnParameter.tsx +++ b/gaztec/src/components/common/fnParameter.tsx @@ -6,7 +6,7 @@ import { capitalize, css, } from "@mui/material"; -import { formatAddressAsString } from "../../utils/addresses"; +import { formatFrAsString } from "../../utils/conversion"; import { useState } from "react"; import EditIcon from "@mui/icons-material/Edit"; @@ -35,7 +35,7 @@ export function FunctionParameter({ key={parameter.name} options={aliasedAddresses.map((alias) => ({ id: alias.value, - label: `${alias.key} (${formatAddressAsString(alias.value)})`, + label: `${alias.key} (${formatFrAsString(alias.value)})`, }))} onChange={(_, newValue) => onParameterChange(newValue.id)} sx={{ width: 300, marginTop: "1rem" }} @@ -50,14 +50,13 @@ export function FunctionParameter({ type="text" label={capitalize(parameter.name)} onChange={(e) => onParameterChange(e.target.value)} - sx={{ marginTop: "1rem" }} + sx={{ marginTop: "1rem", marginRight: "1rem" }} fullWidth /> )} {isAddressStruct(parameter.type) && ( <>
- setManualInput(!manualInput)} diff --git a/gaztec/src/components/contract/components/deployContractDialog.tsx b/gaztec/src/components/contract/components/deployContractDialog.tsx index e686f3b3910e..b5fd5425e018 100644 --- a/gaztec/src/components/contract/components/deployContractDialog.tsx +++ b/gaztec/src/components/contract/components/deployContractDialog.tsx @@ -15,6 +15,7 @@ import { MenuItem, Select, TextField, + Typography, css, } from "@mui/material"; import { useContext, useEffect, useState } from "react"; @@ -25,14 +26,10 @@ import { encodeArguments, getDefaultInitializer, getInitializer, - isAddressStruct, } from "@aztec/foundation/abi"; import { GITHUB_TAG_PREFIX } from "../../../utils/interactions"; import { PrivateContext } from "../../home/home"; -import { - formatAddressAsString, - parseAliasedAddresses, -} from "../../../utils/addresses"; +import { parseAliasedBufferAsString } from "../../../utils/conversion"; import { FunctionParameter } from "../../common/fnParameter"; const creationForm = css({ @@ -68,7 +65,7 @@ export function DeployContractDialog({ const accountAliases = await walletDB.listAliases("accounts"); const contractAliases = await walletDB.listAliases("contracts"); setAliasedAddresses( - parseAliasedAddresses([...accountAliases, ...contractAliases]) + parseAliasedBufferAsString([...accountAliases, ...contractAliases]) ); }; setAliases(); @@ -156,6 +153,7 @@ export function DeployContractDialog({ initializer.parameters.map((param, i) => ( { handleParameterChange(i, newValue); }} diff --git a/gaztec/src/components/contract/contract.tsx b/gaztec/src/components/contract/contract.tsx index 85c12fa84a33..22348806195b 100644 --- a/gaztec/src/components/contract/contract.tsx +++ b/gaztec/src/components/contract/contract.tsx @@ -1,9 +1,8 @@ import { css } from "@emotion/react"; import { useDropzone } from "react-dropzone"; import "./dropzone.css"; -import { useContext, useState } from "react"; +import { useContext, useEffect, useState } from "react"; import { - AztecAddress, Contract, ContractArtifact, ContractInstanceWithAddress, @@ -11,27 +10,29 @@ import { } from "@aztec/aztec.js"; import { PrivateContext } from "../home/home"; import { - Accordion, - AccordionDetails, - AccordionSummary, Button, Card, CardActions, CardContent, Checkbox, + CircularProgress, Divider, FormControlLabel, FormGroup, + IconButton, Input, InputAdornment, Typography, } from "@mui/material"; import FindInPageIcon from "@mui/icons-material/FindInPage"; -import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; -import { ABIParameter } from "@aztec/foundation/abi"; import { prepTx } from "../../utils/interactions"; -import { formatAddressAsString } from "../../utils/addresses"; +import { + formatFrAsString, + parseAliasedBufferAsString, +} from "../../utils/conversion"; import { DeployContractDialog } from "./components/deployContractDialog"; +import { FunctionParameter } from "../common/fnParameter"; +import ClearIcon from "@mui/icons-material/Clear"; const container = css({ display: "flex", @@ -63,12 +64,13 @@ const contractFnContainer = css({ const header = css({ display: "flex", alignItems: "center", - justifyContent: "space-around", + justifyContent: "space-between", + margin: "0 1rem", }); -const visibilityFilters = css({ +const simulationContainer = css({ display: "flex", - flexDirection: "column", + flexDirection: "row", }); const FORBIDDEN_FUNCTIONS = [ @@ -92,11 +94,36 @@ export function ContractComponent() { const [simulationResults, setSimulationResults] = useState({}); const [parameters, setParameters] = useState({}); - const [contractAddress, setContractAddress] = useState(AztecAddress.ZERO); const [openDeployContractDialog, setOpenDeployContractDialog] = useState(false); - const { wallet, walletDB } = useContext(PrivateContext); + const { + wallet, + walletDB, + currentContract, + setCurrentContract, + setCurrentTx, + } = useContext(PrivateContext); + const [aliasedAddresses, setAliasedAddresses] = useState([]); + + useEffect(() => { + const setAliases = async () => { + const accountAliases = await walletDB.listAliases("accounts"); + const contractAliases = await walletDB.listAliases("contracts"); + setAliasedAddresses( + parseAliasedBufferAsString([...accountAliases, ...contractAliases]) + ); + }; + if (walletDB) { + setAliases(); + } + }, [walletDB, wallet]); + + useEffect(() => { + if (currentContract) { + setContractArtifact(currentContract.artifact); + } + }, [currentContract]); const { getRootProps, getInputProps } = useDropzone({ onDrop: async (files) => { @@ -107,37 +134,94 @@ export function ContractComponent() { JSON.parse(e.target?.result as string) ); setContractArtifact(contractArtifact); - setContractAddress(AztecAddress.ZERO); }; reader.readAsText(file); }, }); - const handleParameterChange = ( - fnName: string, - param: ABIParameter, - value: any - ) => { - const fnParameters = parameters[fnName] || {}; - fnParameters[param.name] = value; + const handleParameterChange = (fnName: string, index: number, value: any) => { + const fnParameters = parameters[fnName] || []; + fnParameters[index] = value; setParameters({ ...parameters, [fnName]: fnParameters }); }; const simulate = async (fnName: string) => { setIsWorking(true); - const { encodedArgs } = await prepTx( - contractArtifact, - fnName, - parameters[fnName] - ); - const contract = await Contract.at( - contractAddress, - contractArtifact, - wallet - ); - const call = contract.methods[fnName](...encodedArgs); - const result = await call.simulate(); - setSimulationResults({ ...simulationResults, ...{ [fnName]: result } }); + let result; + try { + const { encodedArgs } = await prepTx( + contractArtifact, + fnName, + parameters[fnName] + ); + const call = currentContract.methods[fnName](...encodedArgs); + + result = await call.simulate(); + setSimulationResults({ + ...simulationResults, + ...{ [fnName]: { success: true, data: result } }, + }); + } catch (e) { + setSimulationResults({ + ...simulationResults, + ...{ [fnName]: { success: false, error: e.message } }, + }); + } + + setIsWorking(false); + }; + + const send = async (fnName: string) => { + setIsWorking(true); + let receipt; + let txHash; + const currentTx = { + status: "proving" as const, + fnName: fnName, + contractAddress: currentContract.address, + }; + setCurrentTx(currentTx); + try { + const { encodedArgs } = await prepTx( + contractArtifact, + fnName, + parameters[fnName] + ); + const call = currentContract.methods[fnName](...encodedArgs); + + const provenCall = await call.prove(); + txHash = provenCall.getTxHash(); + setCurrentTx({ + ...currentTx, + ...{ txHash, status: "sending" }, + }); + receipt = await provenCall.send().wait({ dontThrowOnRevert: true }); + await walletDB.storeTx({ + contractAddress: currentContract.address, + txHash, + fnName, + receipt, + }); + setCurrentTx({ + ...currentTx, + ...{ + txHash, + status: receipt.status, + receipt, + error: receipt.error, + }, + }); + } catch (e) { + setCurrentTx({ + ...currentTx, + ...{ + txHash, + status: "error", + error: e.message, + }, + }); + } + setIsWorking(false); }; @@ -154,7 +238,9 @@ export function ContractComponent() { undefined, alias ); - setContractAddress(contract.address); + setCurrentContract( + await Contract.at(contract.address, contractArtifact, wallet) + ); setOpenDeployContractDialog(false); }; @@ -223,7 +309,7 @@ export function ContractComponent() { label="Unconstrained" /> - {contractAddress === AztecAddress.ZERO && wallet ? ( + {!currentContract && wallet ? ( <>
{contractArtifact.functions @@ -283,52 +379,42 @@ export function ContractComponent() { Parameters - {fn.parameters.map((param) => ( - ( + - handleParameterChange(fn.name, param, e.target.value) - } - sx={{ marginRight: "1rem" }} + onParameterChange={(newValue) => { + handleParameterChange(fn.name, i, newValue); + }} + aliasedAddresses={aliasedAddresses} /> ))} - - }> - - Simulation results + {!isWorking && simulationResults?.[fn.name] !== undefined ? ( +
+ + Simulation results: - - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Suspendisse malesuada lacus ex, sit amet blandit leo - lobortis eget. - - - - } - aria-controls="panel2-content" - id="panel2-header" - > - Tx History - - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Suspendisse malesuada lacus ex, sit amet blandit leo - lobortis eget. - - + {simulationResults[fn.name].success ? ( + + {simulationResults?.[fn.name]?.data.length === 0 + ? "-" + : simulationResults?.[fn.name].data.toString()} + + ) : ( + + {simulationResults?.[fn.name]?.error} + + )} +
+ ) : ( + <> + )} + {isWorking ? : <>} diff --git a/gaztec/src/components/home/home.tsx b/gaztec/src/components/home/home.tsx index 34baf38c0850..41fcd9f0af71 100644 --- a/gaztec/src/components/home/home.tsx +++ b/gaztec/src/components/home/home.tsx @@ -2,8 +2,13 @@ import { css } from "@emotion/react"; import { ContractComponent } from "../contract/contract"; import { SidebarComponent } from "../sidebar/sidebar"; import { createContext, useState } from "react"; -import { type PXE, type AccountWalletWithSecretKey } from "@aztec/aztec.js"; +import { + type PXE, + type AccountWalletWithSecretKey, + Contract, +} from "@aztec/aztec.js"; import { type WalletDB } from "../../utils/storage"; +import { ContractFunctionInteractionTx } from "../../utils/txs"; const layout = css({ display: "flex", @@ -17,22 +22,30 @@ export const PrivateContext = createContext<{ wallet: AccountWalletWithSecretKey | null; isPXEInitialized: boolean; walletDB: WalletDB | null; + currentContract: Contract; + currentTx: ContractFunctionInteractionTx; setWalletDB: (walletDB: WalletDB) => void; setPXEInitialized: (isPXEInitialized: boolean) => void; setWallet: (wallet: AccountWalletWithSecretKey) => void; setPXE: (pxe: PXE) => void; setNodeURL: (nodeURL: string) => void; + setCurrentTx: (currentTx: ContractFunctionInteractionTx) => void; + setCurrentContract: (currentContract: Contract) => void; }>({ pxe: null, nodeURL: "", wallet: null, isPXEInitialized: false, walletDB: null, + currentContract: null, + currentTx: null, setWalletDB: (walletDB: WalletDB) => {}, setPXEInitialized: (isPXEInitialized: boolean) => {}, setWallet: (wallet: AccountWalletWithSecretKey) => {}, setNodeURL: (nodeURL: string) => {}, setPXE: (pxe: PXE) => {}, + setCurrentTx: (currentTx: ContractFunctionInteractionTx) => {}, + setCurrentContract: (currentContract: Contract) => {}, }); export function Home() { @@ -42,6 +55,8 @@ export function Home() { const [isPXEInitialized, setPXEInitialized] = useState(false); const [walletAlias, setWalletAlias] = useState(""); const [walletDB, setWalletDB] = useState(null); + const [currentContract, setCurrentContract] = useState(null); + const [currentTx, setCurrentTx] = useState(null); const privateContextInitialValue = { pxe, @@ -50,12 +65,16 @@ export function Home() { isPXEInitialized, walletAlias, walletDB, + currentContract, + currentTx, + setCurrentTx, setWalletDB, setPXEInitialized, setWallet, setPXE, setNodeURL, setWalletAlias, + setCurrentContract, }; return ( diff --git a/gaztec/src/components/sidebar/sidebar.tsx b/gaztec/src/components/sidebar/sidebar.tsx index c976e7524a0b..82b639de0f0f 100644 --- a/gaztec/src/components/sidebar/sidebar.tsx +++ b/gaztec/src/components/sidebar/sidebar.tsx @@ -6,19 +6,28 @@ import Select, { SelectChangeEvent } from "@mui/material/Select"; import { PrivateContext } from "../home/home"; import { PrivateEnv } from "../../config"; import { createStore } from "@aztec/kv-store/indexeddb"; -import { AccountWalletWithSecretKey, Fr, createLogger } from "@aztec/aztec.js"; +import { + AccountWalletWithSecretKey, + Contract, + Fr, + TxHash, + createLogger, + loadContractArtifact, +} from "@aztec/aztec.js"; import { WalletDB } from "../../utils/storage"; -import { useContext, useState } from "react"; +import { useContext, useEffect, useState } from "react"; import { CreateAccountDialog } from "./components/createAccountDialog"; import { getSchnorrAccount } from "@aztec/accounts/schnorr"; import { AztecAddress, deriveSigningKey } from "@aztec/circuits.js"; import AddIcon from "@mui/icons-material/Add"; import logoURL from "../../assets/Aztec_logo.png"; -import { Typography } from "@mui/material"; +import { Divider, Typography } from "@mui/material"; import { - formatAddressAsString, - parseAliasedAddresses, -} from "../../utils/addresses"; + formatFrAsString, + parseAliasedBufferAsString, +} from "../../utils/conversion"; +import { convertFromUTF8BufferAsString } from "../../utils/conversion"; +import { ContractFunctionInteractionTx } from "../../utils/txs"; const container = css({ display: "flex", @@ -49,6 +58,26 @@ const logo = css({ margin: "0.5rem 1rem 0rem 0rem", }); +const txPanel = css({ + marginTop: "auto", + marginBottom: "0.5rem", + width: "100%", + backgroundColor: "var(--mui-palette-primary-main)", + maxHeight: "50vh", + overflowY: "auto", + borderRadius: "0.5rem", +}); + +const txData = css({ + display: "flex", + flexDirection: "column", + alignItems: "center", + padding: "0.5rem", + backgroundColor: "var(--mui-palette-primary-light)", + borderRadius: "0.5rem", + margin: "0.5rem", +}); + const NETWORKS = [ { nodeURL: "http://localhost:8080", @@ -64,6 +93,9 @@ export function SidebarComponent() { setPXEInitialized, setWalletDB, setWallet, + setCurrentContract, + currentTx, + currentContract, wallet, walletDB, nodeURL, @@ -71,6 +103,8 @@ export function SidebarComponent() { pxe, } = useContext(PrivateContext); const [accounts, setAccounts] = useState([]); + const [contracts, setContracts] = useState([]); + const [transactions, setTransactions] = useState([]); const [openCreateAccountDialog, setOpenCreateAccountDialog] = useState(false); const handleNetworkChange = async (event: SelectChangeEvent) => { @@ -89,12 +123,63 @@ export function SidebarComponent() { const walletDB = WalletDB.getInstance(); walletDB.init(walletDBStore, walletLogger.info); const aliasedAccounts = await walletDB.listAliases("accounts"); - setAccounts(parseAliasedAddresses(aliasedAccounts)); + const aliasedContracts = await walletDB.listAliases("contracts"); + setContracts(parseAliasedBufferAsString(aliasedContracts)); + setAccounts(parseAliasedBufferAsString(aliasedAccounts)); setWalletDB(walletDB); setPXE(pxe); setPXEInitialized(true); }; + useEffect(() => { + const refreshContracts = async () => { + const aliasedContracts = await walletDB.listAliases("contracts"); + setContracts(parseAliasedBufferAsString(aliasedContracts)); + }; + if (walletDB) { + refreshContracts(); + } + }, [currentContract]); + + useEffect(() => { + const refreshAccounts = async () => { + const aliasedAccounts = await walletDB.listAliases("accounts"); + setAccounts(parseAliasedBufferAsString(aliasedAccounts)); + }; + if (walletDB) { + refreshAccounts(); + } + }, [wallet]); + + useEffect(() => { + const refreshTransactions = async () => { + const txsPerContract = await walletDB.retrieveTxsPerContract( + currentContract.address + ); + const txHashes = txsPerContract.map((txHash) => + TxHash.fromString(convertFromUTF8BufferAsString(txHash)) + ); + const txs: ContractFunctionInteractionTx[] = await Promise.all( + txHashes.map(async (txHash) => { + const txData = await walletDB.retrieveTxData(txHash); + return { + contractAddress: currentContract.address, + txHash: txData.txHash, + status: convertFromUTF8BufferAsString(txData.status), + fnName: convertFromUTF8BufferAsString(txData.fnName), + } as ContractFunctionInteractionTx; + }) + ); + if (currentTx && !txs.find((tx) => tx.txHash === currentTx.txHash)) { + txs.unshift(currentTx); + } + setTransactions(txs); + }; + if (currentContract && walletDB) { + refreshTransactions(); + } + }, [currentContract, currentTx]); + const handleAccountChange = async (event: SelectChangeEvent) => { if (event.target.value == "") { return; @@ -125,10 +210,30 @@ export function SidebarComponent() { salt, }); const aliasedAccounts = await walletDB.listAliases("accounts"); - setAccounts(parseAliasedAddresses(aliasedAccounts)); + setAccounts(parseAliasedBufferAsString(aliasedAccounts)); + setWallet(account); setOpenCreateAccountDialog(false); }; + const handleContractChange = async (event: SelectChangeEvent) => { + if (event.target.value == "") { + return; + } + const contractAddress = AztecAddress.fromString(event.target.value); + const artifactAsString = await walletDB.retrieveAlias( + `artifacts:${contractAddress}` + ); + const contractArtifact = loadContractArtifact( + JSON.parse(convertFromUTF8BufferAsString(artifactAsString)) + ); + const contract = await Contract.at( + contractAddress, + contractArtifact, + wallet + ); + setCurrentContract(contract); + }; + return (
@@ -162,7 +267,7 @@ export function SidebarComponent() { {accounts.map((account) => ( {account.key.split(":")[1]} ( - {formatAddressAsString(account.value)}) + {formatFrAsString(account.value)}) ))} )} + {wallet && ( + + Contracts + + + )} +
+ Transactions + + {transactions.map((tx) => ( +
+
+ + {tx.txHash ? formatFrAsString(tx.txHash.toString()) : "()"} +  -  + + + {tx.receipt + ? tx.receipt.status.toUpperCase() + : tx.status.toUpperCase()} + {tx.receipt?.error} + +
+ + {tx.fnName}@{formatFrAsString(tx.contractAddress.toString())} + +
+ ))} +
); } diff --git a/gaztec/src/config.ts b/gaztec/src/config.ts index e3a009976e4c..63f0c0bf5ec6 100644 --- a/gaztec/src/config.ts +++ b/gaztec/src/config.ts @@ -7,12 +7,15 @@ import { L2TipsStore } from "@aztec/kv-store/stores"; import { createStore } from "@aztec/kv-store/indexeddb"; import { BBWASMLazyPrivateKernelProver } from "@aztec/bb-prover/wasm/lazy"; import { WASMSimulator } from "@aztec/simulator/client"; +import { debug } from "debug"; process.env = Object.keys(import.meta.env).reduce((acc, key) => { acc[key.replace("VITE_", "")] = import.meta.env[key]; return acc; }, {}); +debug.enable("*"); + export class PrivateEnv { static async initPXE(nodeURL: string): Promise { const config = getPXEServiceConfig(); diff --git a/gaztec/src/utils/addresses.ts b/gaztec/src/utils/addresses.ts deleted file mode 100644 index 3cdc1e8c0bfc..000000000000 --- a/gaztec/src/utils/addresses.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const formatAddressAsString = (addressAsString: string) => { - return `${addressAsString.slice(0, 4)}...${addressAsString.slice(-4)}`; -}; - -const convertAztecAddressFromUTF8BufferAsString = (bufferAsString: string) => { - return String.fromCharCode(...bufferAsString.split(",").map((x) => +x)); -}; - -export const parseAliasedAddresses = ( - aliasedAddreses: { key: string; value: string }[] -) => { - return aliasedAddreses - .filter((account) => account.key !== "accounts:last") - .map(({ key, value }) => ({ - key, - value: convertAztecAddressFromUTF8BufferAsString(value), - })); -}; diff --git a/gaztec/src/utils/conversion.ts b/gaztec/src/utils/conversion.ts new file mode 100644 index 000000000000..4606537c1b69 --- /dev/null +++ b/gaztec/src/utils/conversion.ts @@ -0,0 +1,21 @@ +export const formatFrAsString = (addressAsString: string) => { + return `${addressAsString.slice(0, 4)}...${addressAsString.slice(-4)}`; +}; + +export const parseAliasedBufferAsString = ( + aliasedAddreses: { key: string; value: string }[] +) => { + return aliasedAddreses + .filter((account) => account.key !== "accounts:last") + .map(({ key, value }) => ({ + key, + value: convertFromUTF8BufferAsString(value), + })); +}; + +export const convertFromUTF8BufferAsString = (bufferAsString: string) => { + return bufferAsString + .split(",") + .map((x) => String.fromCharCode(+x)) + .join(""); +}; diff --git a/gaztec/src/utils/storage.ts b/gaztec/src/utils/storage.ts index f50ee7110e7b..067035b540a8 100644 --- a/gaztec/src/utils/storage.ts +++ b/gaztec/src/utils/storage.ts @@ -1,8 +1,12 @@ import { ContractArtifact } from "@aztec/aztec.js"; -import { type AuthWitness, type TxHash } from "@aztec/circuit-types"; +import { TxReceipt, type AuthWitness, type TxHash } from "@aztec/circuit-types"; import { type AztecAddress, Fr, GasSettings } from "@aztec/circuits.js"; import { type LogFn } from "@aztec/foundation/log"; -import { type AztecAsyncMap, type AztecAsyncKVStore } from "@aztec/kv-store"; +import { + type AztecAsyncMap, + type AztecAsyncKVStore, + AztecAsyncMultiMap, +} from "@aztec/kv-store"; export const Aliases = [ "accounts", @@ -26,6 +30,7 @@ export class WalletDB { #aliases!: AztecAsyncMap; #bridgedFeeJuice!: AztecAsyncMap; #transactions!: AztecAsyncMap; + #transactionsPerContract!: AztecAsyncMultiMap; #userLog!: LogFn; private static instance: WalletDB; @@ -43,6 +48,9 @@ export class WalletDB { this.#aliases = store.openMap("aliases"); this.#bridgedFeeJuice = store.openMap("bridgedFeeJuice"); this.#transactions = store.openMap("transactions"); + this.#transactionsPerContract = store.openMultiMap( + "transactionsPerContract" + ); this.#userLog = userLog; } @@ -132,7 +140,6 @@ export class WalletDB { await this.#accounts.set(`${address.toString()}:type`, Buffer.from(type)); await this.#accounts.set(`${address.toString()}:sk`, secretKey.toBuffer()); await this.#accounts.set(`${address.toString()}:salt`, salt.toBuffer()); - await this.#aliases.set("accounts:last", Buffer.from(address.toString())); log( `Account stored in database with alias${ alias ? `es last & ${alias}` : " last" @@ -168,11 +175,6 @@ export class WalletDB { Buffer.from(JSON.stringify(artifact)) ); } - await this.#aliases.set(`contracts:last`, Buffer.from(address.toString())); - await this.#aliases.set( - `artifacts:last`, - Buffer.from(JSON.stringify(artifact)) - ); await this.#aliases.set( `artifacts:${address.toString()}`, Buffer.from(JSON.stringify(artifact)) @@ -195,7 +197,6 @@ export class WalletDB { Buffer.from(authWit.toString()) ); } - await this.#aliases.set(`authwits:last`, Buffer.from(authWit.toString())); log( `Authorization witness stored in database with alias${ alias ? `es last & ${alias}` : " last" @@ -205,15 +206,15 @@ export class WalletDB { async storeTx( { + contractAddress, txHash, - nonce, - cancellable, - gasSettings, + fnName, + receipt, }: { + contractAddress: AztecAddress; txHash: TxHash; - nonce: Fr; - cancellable: boolean; - gasSettings: GasSettings; + fnName: string; + receipt: TxReceipt; }, log: LogFn = this.#userLog, alias?: string @@ -224,21 +225,18 @@ export class WalletDB { Buffer.from(txHash.toString()) ); } - await this.#transactions.set( - `${txHash.toString()}:nonce`, - nonce.toBuffer() + await this.#transactionsPerContract.set( + `${contractAddress.toString()}`, + Buffer.from(txHash.toString()) ); + await this.#transactions.set( - `${txHash.toString()}:cancellable`, - Buffer.from(cancellable ? "true" : "false") + `${txHash.toString()}:fnName`, + Buffer.from(fnName) ); await this.#transactions.set( - `${txHash.toString()}:gasSettings`, - gasSettings.toBuffer() - ); - await this.#aliases.set( - `transactions:last`, - Buffer.from(txHash.toString()) + `${txHash.toString()}:status`, + Buffer.from(receipt.status.toString()) ); log( `Transaction hash stored in database with alias${ @@ -247,28 +245,34 @@ export class WalletDB { ); } + async retrieveTxsPerContract(contractAddress: AztecAddress) { + const result = []; + for await (const txHash of this.#transactionsPerContract.getValuesAsync( + contractAddress.toString() + )) { + result.push(txHash.toString()); + } + return result; + } + async retrieveTxData(txHash: TxHash) { - const nonceBuffer = await this.#transactions.getAsync( - `${txHash.toString()}:nonce` + const fnNameBuffer = await this.#transactions.getAsync( + `${txHash.toString()}:fnName` ); - if (!nonceBuffer) { + if (!fnNameBuffer) { throw new Error( - `Could not find ${txHash.toString()}:nonce. Transaction with hash "${txHash.toString()}" does not exist on this wallet.` + `Could not find ${txHash.toString()}:fnName. Transaction with hash "${txHash.toString()}" does not exist on this wallet.` ); } - const nonce = Fr.fromBuffer(nonceBuffer); - const cancellable = - (await this.#transactions - .getAsync(`${txHash.toString()}:cancellable`)! - .toString()) === "true"; - const gasBuffer = await this.#transactions.getAsync( - `${txHash.toString()}:gasSettings` - )!; + const fnName = fnNameBuffer.toString(); + const status = (await this.#transactions.getAsync( + `${txHash.toString()}:status` + ))!.toString(); + return { txHash, - nonce, - cancellable, - gasSettings: GasSettings.fromBuffer(gasBuffer), + fnName, + status, }; } diff --git a/gaztec/src/utils/txs.ts b/gaztec/src/utils/txs.ts new file mode 100644 index 000000000000..3ea887a22b90 --- /dev/null +++ b/gaztec/src/utils/txs.ts @@ -0,0 +1,10 @@ +import { TxHash, TxReceipt, TxStatus } from "@aztec/circuit-types"; +import { AztecAddress } from "@aztec/circuits.js"; + +export type ContractFunctionInteractionTx = { + txHash?: TxHash; + receipt?: TxReceipt; + status: "error" | "simulating" | "proving" | "sending" | TxStatus; + fnName: string; + contractAddress: AztecAddress; +}; diff --git a/gaztec/vite.config.ts b/gaztec/vite.config.ts index 00beeebc448b..f8767f650719 100644 --- a/gaztec/vite.config.ts +++ b/gaztec/vite.config.ts @@ -1,7 +1,6 @@ import { defineConfig, searchForWorkspaceRoot } from "vite"; import react from "@vitejs/plugin-react-swc"; import { PolyfillOptions, nodePolyfills } from "vite-plugin-node-polyfills"; -import topLevelAwait from "vite-plugin-top-level-await"; // Unfortunate, but needed due to https://github.com/davidmyersdev/vite-plugin-node-polyfills/issues/81 // Suspected to be because of the yarn workspace setup, but not sure @@ -15,7 +14,7 @@ const nodePolyfillsFix = (options?: PolyfillOptions | undefined): Plugin => { source ); if (m) { - return `../../node_modules/vite-plugin-node-polyfills/shims/${m[1]}/dist/index.cjs`; + return `./node_modules/vite-plugin-node-polyfills/shims/${m[1]}/dist/index.cjs`; } }, }; @@ -40,14 +39,9 @@ export default defineConfig({ plugins: [ react({ jsxImportSource: "@emotion/react" }), nodePolyfillsFix({ include: ["buffer", "process", "path"] }), - topLevelAwait(), ], - css: { - modules: { - localsConvention: "camelCase", - }, - }, build: { + target: "esnext", rollupOptions: { output: { manualChunks(id: string) { diff --git a/gaztec/yarn.lock b/gaztec/yarn.lock index 1639d02c479d..7894119dae87 100644 --- a/gaztec/yarn.lock +++ b/gaztec/yarn.lock @@ -124,7 +124,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.7": +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.7": version: 7.26.0 resolution: "@babel/runtime@npm:7.26.0" dependencies: @@ -1241,6 +1241,13 @@ __metadata: languageName: node linkType: hard +"@types/browser-util-inspect@npm:^0": + version: 0.2.4 + resolution: "@types/browser-util-inspect@npm:0.2.4" + checksum: 10c0/a607d56970a9a25909cdb6fdd9d2b7b3394d86bdc8913545e7101f0f984427df8f9a4a08af9cb2901df925eebeef4dcc706f760b4703ebf50acf90b30d2ae90a + languageName: node + linkType: hard + "@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": version: 1.0.6 resolution: "@types/estree@npm:1.0.6" @@ -1248,6 +1255,13 @@ __metadata: languageName: node linkType: hard +"@types/format-util@npm:^1": + version: 1.0.4 + resolution: "@types/format-util@npm:1.0.4" + checksum: 10c0/173d1f67155c82311aaa5e90467351a18db17253c7d10174dc5a54d942415f1aa1f693f33ac4b15855e6f90363becb925651337692b3817271037f3d86b6e9f5 + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.15": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" @@ -1533,7 +1547,7 @@ __metadata: languageName: node linkType: hard -"attr-accept@npm:^2.0.0, attr-accept@npm:^2.2.4": +"attr-accept@npm:^2.2.4": version: 2.2.5 resolution: "attr-accept@npm:2.2.5" checksum: 10c0/9b4cb82213925cab2d568f71b3f1c7a7778f9192829aac39a281e5418cd00c04a88f873eb89f187e0bf786fa34f8d52936f178e62cbefb9254d57ecd88ada99b @@ -1632,6 +1646,13 @@ __metadata: languageName: node linkType: hard +"browser-util-inspect@npm:^0.2.0": + version: 0.2.0 + resolution: "browser-util-inspect@npm:0.2.0" + checksum: 10c0/712a8df6b91edebc3c7eb9e7492f6566c798beb8195697949df299faee036a18fe6b8de6fe58dea280b30d2ed37021cb2d4b2c4fa0976eb511c3fa4420927d37 + languageName: node + linkType: hard + "browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": version: 1.2.0 resolution: "browserify-aes@npm:1.2.0" @@ -1817,13 +1838,6 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.0.2": - version: 1.2.1 - resolution: "clsx@npm:1.2.1" - checksum: 10c0/34dead8bee24f5e96f6e7937d711978380647e936a22e76380290e35486afd8634966ce300fc4b74a32f3762c7d4c0303f442c3e259f4ce02374eb0c82834f27 - languageName: node - linkType: hard - "clsx@npm:^2.1.0, clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" @@ -2479,15 +2493,6 @@ __metadata: languageName: node linkType: hard -"file-selector@npm:^0.1.12": - version: 0.1.19 - resolution: "file-selector@npm:0.1.19" - dependencies: - tslib: "npm:^2.0.1" - checksum: 10c0/6ed76fd91b77f05c0f3d089aa67d198e4c6096b5752796f1875cd9302664acaccfa35bf2fb6f4c6bcf5527775d9ef80f6d2dc6197d6a5eee91ef26c2160853c1 - languageName: node - linkType: hard - "file-selector@npm:^2.1.0": version: 2.1.2 resolution: "file-selector@npm:2.1.2" @@ -2559,6 +2564,13 @@ __metadata: languageName: node linkType: hard +"format-util@npm:^1.0.5": + version: 1.0.5 + resolution: "format-util@npm:1.0.5" + checksum: 10c0/89b9d73799bb51fba141029bbc358d6c5e591863156a806d0eece4718e9c8c7daacf3b0581ddde481e5183dd530072fc2cca8630434122b328bc3110d16ab38e + languageName: node + linkType: hard + "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" @@ -3823,7 +3835,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:^15.6.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -3916,19 +3928,6 @@ __metadata: languageName: node linkType: hard -"react-dropzone@npm:^10.2.1": - version: 10.2.2 - resolution: "react-dropzone@npm:10.2.2" - dependencies: - attr-accept: "npm:^2.0.0" - file-selector: "npm:^0.1.12" - prop-types: "npm:^15.7.2" - peerDependencies: - react: ">= 16.8" - checksum: 10c0/64d94db7c0ba6d21a69ded4cb383df8228f0e99ba4377da975c20432595ed53cb1ece47a1412a0378e1da8048066dae21b688dccd22adb9c46a18419a57a362d - languageName: node - linkType: hard - "react-dropzone@npm:^14.3.5": version: 14.3.5 resolution: "react-dropzone@npm:14.3.5" @@ -3956,26 +3955,6 @@ __metadata: languageName: node linkType: hard -"react-mui-dropzone@npm:^4.0.7": - version: 4.0.7 - resolution: "react-mui-dropzone@npm:4.0.7" - dependencies: - "@babel/runtime": "npm:^7.4.4" - clsx: "npm:^1.0.2" - react-dropzone: "npm:^10.2.1" - peerDependencies: - "@emotion/react": ^11.4.1 - "@emotion/styled": ^11.3.0 - "@mui/icons-material": ^5.0.1 - "@mui/material": ^5.0.2 - "@mui/styles": ^5.0.1 - prop-types: ^15.7.2 - react: ^18.2.0 - react-dom: ^18.2.0 - checksum: 10c0/7006eacc47a3b8c00cafb1cfb346230a98704071a2ec0515aa76f957a5e06f15a26b65673ae0367d57749691700df6c88d3221b4a4053998b75b4367ad151772 - languageName: node - linkType: hard - "react-toastify@npm:^10.0.6": version: 10.0.6 resolution: "react-toastify@npm:10.0.6" @@ -4564,7 +4543,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.1, tslib@npm:^2.7.0": +"tslib@npm:^2.7.0": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 @@ -4792,18 +4771,21 @@ __metadata: "@mui/icons-material": "npm:^6.3.1" "@mui/material": "npm:^6.3.1" "@mui/styles": "npm:^6.3.1" + "@types/browser-util-inspect": "npm:^0" + "@types/format-util": "npm:^1" "@types/node": "npm:^22.10.5" "@types/react": "npm:^19.0.6" "@types/react-dom": "npm:^19.0.3" "@vitejs/plugin-react-swc": "npm:^3.7.2" + browser-util-inspect: "npm:^0.2.0" eslint: "npm:^9.13.0" eslint-plugin-react-hooks: "npm:^5.1.0" eslint-plugin-react-refresh: "npm:^0.4.18" + format-util: "npm:^1.0.5" globals: "npm:^15.14.0" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" react-dropzone: "npm:^14.3.5" - react-mui-dropzone: "npm:^4.0.7" react-toastify: "npm:^10.0.6" typescript: "npm:~5.7.3" typescript-eslint: "npm:^8.11.0" From 9ad2c566c3779462ea06196b8b4b6ee41e0adf65 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 14 Jan 2025 17:45:47 +0000 Subject: [PATCH 04/23] maybe im dumb --- gaztec/src/components/sidebar/sidebar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gaztec/src/components/sidebar/sidebar.tsx b/gaztec/src/components/sidebar/sidebar.tsx index 82b639de0f0f..d6fc6721005b 100644 --- a/gaztec/src/components/sidebar/sidebar.tsx +++ b/gaztec/src/components/sidebar/sidebar.tsx @@ -170,7 +170,7 @@ export function SidebarComponent() { } as ContractFunctionInteractionTx; }) ); - if (currentTx && !txs.find((tx) => tx.txHash === currentTx.txHash)) { + if (currentTx && !txs.find((tx) => tx.txHash.equals(currentTx.txHash))) { txs.unshift(currentTx); } setTransactions(txs); From 8292150778db94c4b174b0b40bb37992f182aa42 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 14 Jan 2025 17:55:38 +0000 Subject: [PATCH 05/23] fix --- .../components/contract/components/deployContractDialog.tsx | 2 +- .../components/sidebar/components/createAccountDialog.tsx | 2 +- gaztec/src/components/sidebar/sidebar.tsx | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gaztec/src/components/contract/components/deployContractDialog.tsx b/gaztec/src/components/contract/components/deployContractDialog.tsx index b5fd5425e018..ce8ce1134b61 100644 --- a/gaztec/src/components/contract/components/deployContractDialog.tsx +++ b/gaztec/src/components/contract/components/deployContractDialog.tsx @@ -174,7 +174,7 @@ export function DeployContractDialog({ )} diff --git a/gaztec/src/components/sidebar/components/createAccountDialog.tsx b/gaztec/src/components/sidebar/components/createAccountDialog.tsx index 492ff5cd3c0f..b6acc846178e 100644 --- a/gaztec/src/components/sidebar/components/createAccountDialog.tsx +++ b/gaztec/src/components/sidebar/components/createAccountDialog.tsx @@ -75,7 +75,7 @@ export function CreateAccountDialog({ }} /> )} diff --git a/gaztec/src/components/sidebar/sidebar.tsx b/gaztec/src/components/sidebar/sidebar.tsx index d6fc6721005b..652b6127e89c 100644 --- a/gaztec/src/components/sidebar/sidebar.tsx +++ b/gaztec/src/components/sidebar/sidebar.tsx @@ -170,7 +170,11 @@ export function SidebarComponent() { } as ContractFunctionInteractionTx; }) ); - if (currentTx && !txs.find((tx) => tx.txHash.equals(currentTx.txHash))) { + if ( + currentTx && + (!currentTx.txHash || + !txs.find((tx) => tx.txHash.equals(currentTx.txHash))) + ) { txs.unshift(currentTx); } setTransactions(txs); From f2cf0d6288b41e87ad8e68d12e0144a11489f866 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 14 Jan 2025 19:32:17 +0000 Subject: [PATCH 06/23] fixed encoding --- gaztec/src/components/common/fnParameter.tsx | 25 ++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/gaztec/src/components/common/fnParameter.tsx b/gaztec/src/components/common/fnParameter.tsx index c4ad96f06ec2..908668a1c4bb 100644 --- a/gaztec/src/components/common/fnParameter.tsx +++ b/gaztec/src/components/common/fnParameter.tsx @@ -9,6 +9,7 @@ import { import { formatFrAsString } from "../../utils/conversion"; import { useState } from "react"; import EditIcon from "@mui/icons-material/Edit"; +import { AbiType } from "@noir-lang/types"; const container = css({ display: "flex", @@ -27,6 +28,21 @@ export function FunctionParameter({ onParameterChange: (value: string) => void; }) { const [manualInput, setManualInput] = useState(false); + + const handleParameterChange = (value: string, type: AbiType) => { + switch (type.kind) { + case "field": { + console.log(BigInt(value).toString(16)); + onParameterChange(BigInt(value).toString(16)); + break; + } + default: { + onParameterChange(value); + break; + } + } + }; + return (
{isAddressStruct(parameter.type) && !manualInput ? ( @@ -37,7 +53,9 @@ export function FunctionParameter({ id: alias.value, label: `${alias.key} (${formatFrAsString(alias.value)})`, }))} - onChange={(_, newValue) => onParameterChange(newValue.id)} + onChange={(_, newValue) => + handleParameterChange(newValue.id, parameter.type) + } sx={{ width: 300, marginTop: "1rem" }} renderInput={(params) => ( @@ -46,10 +64,13 @@ export function FunctionParameter({ ) : ( onParameterChange(e.target.value)} + onChange={(e) => + handleParameterChange(e.target.value, parameter.type) + } sx={{ marginTop: "1rem", marginRight: "1rem" }} fullWidth /> From 3583d1eaa4280a7cd3f57b7e509ce5411930d6cd Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 14 Jan 2025 19:54:56 +0000 Subject: [PATCH 07/23] fix --- gaztec/src/components/common/fnParameter.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gaztec/src/components/common/fnParameter.tsx b/gaztec/src/components/common/fnParameter.tsx index 908668a1c4bb..3555352099b2 100644 --- a/gaztec/src/components/common/fnParameter.tsx +++ b/gaztec/src/components/common/fnParameter.tsx @@ -1,4 +1,4 @@ -import { ABIParameter, isAddressStruct } from "@aztec/foundation/abi"; +import { ABIParameter, AbiType, isAddressStruct } from "@aztec/foundation/abi"; import { Autocomplete, IconButton, @@ -9,7 +9,6 @@ import { import { formatFrAsString } from "../../utils/conversion"; import { useState } from "react"; import EditIcon from "@mui/icons-material/Edit"; -import { AbiType } from "@noir-lang/types"; const container = css({ display: "flex", From 0d62c494778e0bdb280e8b58686e211ec1bf9845 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 15 Jan 2025 12:47:59 +0000 Subject: [PATCH 08/23] cleanup --- gaztec/index.html | 15 +- gaztec/package.json | 3 +- gaztec/src/App.css | 6 - gaztec/src/App.tsx | 4 - gaztec/src/common.styles.tsx | 23 +-- .../common/copyToClipboardButton.tsx | 27 +++ gaztec/src/components/common/fnParameter.tsx | 8 +- .../components/deployContractDialog.tsx | 7 +- .../components/registerContractDialog.tsx | 128 ++++++++++++ gaztec/src/components/contract/contract.tsx | 186 +++++++++++------- gaztec/src/components/home/home.tsx | 16 +- .../components/createAccountDialog.tsx | 2 +- gaztec/src/components/sidebar/sidebar.tsx | 72 ++++--- gaztec/src/config.ts | 18 +- 14 files changed, 353 insertions(+), 162 deletions(-) delete mode 100644 gaztec/src/App.css create mode 100644 gaztec/src/components/common/copyToClipboardButton.tsx create mode 100644 gaztec/src/components/contract/components/registerContractDialog.tsx diff --git a/gaztec/index.html b/gaztec/index.html index f6f53a86ef90..89ed3ef775f5 100644 --- a/gaztec/index.html +++ b/gaztec/index.html @@ -3,20 +3,7 @@ - Private Token Noir Smart Contract - + GAztec
diff --git a/gaztec/package.json b/gaztec/package.json index c6d2094f3f41..e06d6922da4b 100644 --- a/gaztec/package.json +++ b/gaztec/package.json @@ -29,8 +29,7 @@ "@mui/styles": "^6.3.1", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-dropzone": "^14.3.5", - "react-toastify": "^10.0.6" + "react-dropzone": "^14.3.5" }, "devDependencies": { "@eslint/js": "^9.18.0", diff --git a/gaztec/src/App.css b/gaztec/src/App.css deleted file mode 100644 index 3288e8e40a3a..000000000000 --- a/gaztec/src/App.css +++ /dev/null @@ -1,6 +0,0 @@ -#root { - height: 100vh; - width: 100vw; - margin: 0; - text-align: center; -} \ No newline at end of file diff --git a/gaztec/src/App.tsx b/gaztec/src/App.tsx index 6bc5df4ddbb7..abc9bf85996f 100644 --- a/gaztec/src/App.tsx +++ b/gaztec/src/App.tsx @@ -1,6 +1,3 @@ -import { ToastContainer } from "react-toastify"; -import "react-toastify/dist/ReactToastify.css"; -import "./App.css"; import { Home } from "./components/home/home"; import { Global } from "@emotion/react"; import { ThemeProvider } from "@mui/material/styles"; @@ -11,7 +8,6 @@ function App() { - ); } diff --git a/gaztec/src/common.styles.tsx b/gaztec/src/common.styles.tsx index 78d0926a19c0..102748133c23 100644 --- a/gaztec/src/common.styles.tsx +++ b/gaztec/src/common.styles.tsx @@ -23,28 +23,15 @@ const themeOptions: ThemeOptions & { cssVariables: boolean } = { export const theme = createTheme(themeOptions); export const globalStyle = css({ - ":root": { - lineHeight: 1.5, - fontWeight: 400, - margin: 0, - padding: 0, - - colorScheme: "light dark", - - "--main-accent-color": "#646cff", - - backgroundColor: "#242424", - - fontSynthesis: "none", - textRendering: "optimizeLegibility", - WebkitFontSmoothing: "antialiased", - MozOsxFontSmoothing: "grayscale", - }, - body: { margin: 0, display: "flex", minWidth: "100vw", minHeight: "100vh", + background: "linear-gradient(#f6fbfc, #d8d4e7)" }, + + "#root": { + width: "100%", + } }); diff --git a/gaztec/src/components/common/copyToClipboardButton.tsx b/gaztec/src/components/common/copyToClipboardButton.tsx new file mode 100644 index 000000000000..77581a721da0 --- /dev/null +++ b/gaztec/src/components/common/copyToClipboardButton.tsx @@ -0,0 +1,27 @@ +import { useState } from "react"; +import { IconButton, Snackbar } from "@mui/material"; +import ContentPasteIcon from "@mui/icons-material/ContentPaste"; + +export function CopyToClipboardButton({ data }: { data: string }) { + const [open, setOpen] = useState(false); + + const handleClick = () => { + setOpen(true); + navigator.clipboard.writeText(data); + }; + + return ( + <> + + + + setOpen(false)} + open={open} + /> + + ); +} diff --git a/gaztec/src/components/common/fnParameter.tsx b/gaztec/src/components/common/fnParameter.tsx index 3555352099b2..04a2c6075e65 100644 --- a/gaztec/src/components/common/fnParameter.tsx +++ b/gaztec/src/components/common/fnParameter.tsx @@ -52,9 +52,11 @@ export function FunctionParameter({ id: alias.value, label: `${alias.key} (${formatFrAsString(alias.value)})`, }))} - onChange={(_, newValue) => - handleParameterChange(newValue.id, parameter.type) - } + onChange={(_, newValue) => { + if (newValue) { + handleParameterChange(newValue.id, parameter.type); + } + }} sx={{ width: 300, marginTop: "1rem" }} renderInput={(params) => ( diff --git a/gaztec/src/components/contract/components/deployContractDialog.tsx b/gaztec/src/components/contract/components/deployContractDialog.tsx index ce8ce1134b61..bd57d570f43b 100644 --- a/gaztec/src/components/contract/components/deployContractDialog.tsx +++ b/gaztec/src/components/contract/components/deployContractDialog.tsx @@ -28,7 +28,7 @@ import { getInitializer, } from "@aztec/foundation/abi"; import { GITHUB_TAG_PREFIX } from "../../../utils/interactions"; -import { PrivateContext } from "../../home/home"; +import { AztecContext } from "../../home/home"; import { parseAliasedBufferAsString } from "../../../utils/conversion"; import { FunctionParameter } from "../../common/fnParameter"; @@ -56,7 +56,7 @@ export function DeployContractDialog({ const [parameters, setParameters] = useState([]); const [deploying, setDeploying] = useState(false); const [aliasedAddresses, setAliasedAddresses] = useState([]); - const { walletDB } = useContext(PrivateContext); + const { walletDB } = useContext(AztecContext); useEffect(() => { const defaultInitializer = getDefaultInitializer(contractArtifact); @@ -176,6 +176,9 @@ export function DeployContractDialog({ + )}
diff --git a/gaztec/src/components/contract/components/registerContractDialog.tsx b/gaztec/src/components/contract/components/registerContractDialog.tsx new file mode 100644 index 000000000000..9fce58df5ddf --- /dev/null +++ b/gaztec/src/components/contract/components/registerContractDialog.tsx @@ -0,0 +1,128 @@ +import DialogTitle from "@mui/material/DialogTitle"; +import Dialog from "@mui/material/Dialog"; +import { AccountWalletWithSecretKey, Contract } from "@aztec/aztec.js"; +import { + Button, + CircularProgress, + FormControl, + FormGroup, + InputLabel, + MenuItem, + Select, + TextField, + Typography, + css, +} from "@mui/material"; +import { useContext, useState } from "react"; +import { AztecAddress, ContractInstanceWithAddress } from "@aztec/circuits.js"; +import { ContractArtifact, getInitializer } from "@aztec/foundation/abi"; +import { GITHUB_TAG_PREFIX } from "../../../utils/interactions"; +import { FunctionParameter } from "../../common/fnParameter"; +import { AztecContext } from "../../home/home"; + +const creationForm = css({ + display: "flex", + flexDirection: "column", + gap: "1rem", + padding: "1rem", + alignItems: "center", +}); + +export function RegisterContractDialog({ + open, + contractArtifact, + onClose, +}: { + open: boolean; + contractArtifact: ContractArtifact; + onClose: (contract?: ContractInstanceWithAddress, alias?: string) => void; +}) { + const [alias, setAlias] = useState(""); + const [address, setAddress] = useState(""); + const [registering, setRegistering] = useState(false); + + const { wallet, node } = useContext(AztecContext); + + const handleClose = () => { + onClose(); + }; + + const register = async () => { + setRegistering(true); + + const nodeInfo = await wallet.getNodeInfo(); + const expectedAztecNrVersion = `${GITHUB_TAG_PREFIX}-v${nodeInfo.nodeVersion}`; + if ( + contractArtifact.aztecNrVersion && + contractArtifact.aztecNrVersion !== expectedAztecNrVersion + ) { + throw new Error( + `Contract was compiled with a different version of Aztec.nr: ${contractArtifact.aztecNrVersion}. Consider updating Aztec.nr to ${expectedAztecNrVersion}` + ); + } + + const contractInstance = await node.getContract( + AztecAddress.fromString(address) + ); + + await wallet.registerContract({ + instance: contractInstance, + artifact: contractArtifact, + }); + + const contract = await Contract.at( + AztecAddress.fromString(address), + contractArtifact, + wallet + ); + + onClose(contract.instance, alias); + }; + + return ( + + Deploy contract +
+ {registering ? ( + <> + Registering... + + + ) : ( + <> + + + { + setAddress(event.target.value); + }} + /> + + + { + setAlias(event.target.value); + }} + /> + + + + + + )} +
+
+ ); +} diff --git a/gaztec/src/components/contract/contract.tsx b/gaztec/src/components/contract/contract.tsx index 22348806195b..2a10a2c2d450 100644 --- a/gaztec/src/components/contract/contract.tsx +++ b/gaztec/src/components/contract/contract.tsx @@ -8,7 +8,7 @@ import { ContractInstanceWithAddress, loadContractArtifact, } from "@aztec/aztec.js"; -import { PrivateContext } from "../home/home"; +import { AztecContext } from "../home/home"; import { Button, Card, @@ -33,6 +33,8 @@ import { import { DeployContractDialog } from "./components/deployContractDialog"; import { FunctionParameter } from "../common/fnParameter"; import ClearIcon from "@mui/icons-material/Clear"; +import { RegisterContractDialog } from "./components/registerContractDialog"; +import { CopyToClipboardButton } from "../common/copyToClipboardButton"; const container = css({ display: "flex", @@ -64,8 +66,8 @@ const contractFnContainer = css({ const header = css({ display: "flex", alignItems: "center", - justifyContent: "space-between", margin: "0 1rem", + padding: "1rem", }); const simulationContainer = css({ @@ -73,6 +75,10 @@ const simulationContainer = css({ flexDirection: "row", }); +const checkBoxLabel = css({ + height: "1.5rem", +}); + const FORBIDDEN_FUNCTIONS = [ "compute_note_hash_and_optionally_a_nullifier", "sync_notes", @@ -96,6 +102,8 @@ export function ContractComponent() { const [openDeployContractDialog, setOpenDeployContractDialog] = useState(false); + const [openRegisterContractDialog, setOpenRegisterContractDialog] = + useState(false); const { wallet, @@ -103,7 +111,7 @@ export function ContractComponent() { currentContract, setCurrentContract, setCurrentTx, - } = useContext(PrivateContext); + } = useContext(AztecContext); const [aliasedAddresses, setAliasedAddresses] = useState([]); useEffect(() => { @@ -225,23 +233,23 @@ export function ContractComponent() { setIsWorking(false); }; - const handleContractDeployment = async ( + const handleContractCreation = async ( contract?: ContractInstanceWithAddress, alias?: string ) => { - if (!contract || !alias) { - return; + if (contract && alias) { + await walletDB.storeContract( + contract.address, + contractArtifact, + undefined, + alias + ); + setCurrentContract( + await Contract.at(contract.address, contractArtifact, wallet) + ); } - await walletDB.storeContract( - contract.address, - contractArtifact, - undefined, - alias - ); - setCurrentContract( - await Contract.at(contract.address, contractArtifact, wallet) - ); setOpenDeployContractDialog(false); + setOpenRegisterContractDialog(false); }; return ( @@ -258,75 +266,109 @@ export function ContractComponent() { ) : (
- {contractArtifact.name} - - setFilters({ ...filters, searchTerm: e.target.value }) - } - endAdornment={ - - - - } - /> - - - setFilters({ ...filters, private: e.target.checked }) - } - /> - } - label="Private" - /> - - setFilters({ ...filters, public: e.target.checked }) - } - /> + + {contractArtifact.name} + + + + + setFilters({ ...filters, searchTerm: e.target.value }) } - label="Public" - /> - - setFilters({ - ...filters, - unconstrained: e.target.checked, - }) - } - /> + endAdornment={ + + + } - label="Unconstrained" /> +
+ + setFilters({ ...filters, private: e.target.checked }) + } + /> + } + label="Private" + /> + + setFilters({ ...filters, public: e.target.checked }) + } + /> + } + label="Public" + /> + + setFilters({ + ...filters, + unconstrained: e.target.checked, + }) + } + /> + } + label="Unconstrained" + /> +
- {!currentContract && wallet ? ( +
+ {!currentContract && wallet && ( <> - - + + - ) : ( + )} + {currentContract && ( <> {formatFrAsString(currentContract.address.toString())} + { setCurrentContract(null); @@ -365,9 +407,7 @@ export function ContractComponent() { > {fn.functionType} - - {fn.name} - + {fn.name} {!isWorking && simulationResults?.[fn.name] !== undefined ? (
- - Simulation results: - + Simulation results: {simulationResults[fn.name].success ? ( {simulationResults?.[fn.name]?.data.length === 0 @@ -402,7 +440,7 @@ export function ContractComponent() { : simulationResults?.[fn.name].data.toString()} ) : ( - + {simulationResults?.[fn.name]?.error} )} diff --git a/gaztec/src/components/home/home.tsx b/gaztec/src/components/home/home.tsx index 41fcd9f0af71..a20c6a9d7b09 100644 --- a/gaztec/src/components/home/home.tsx +++ b/gaztec/src/components/home/home.tsx @@ -6,6 +6,7 @@ import { type PXE, type AccountWalletWithSecretKey, Contract, + AztecNode, } from "@aztec/aztec.js"; import { type WalletDB } from "../../utils/storage"; import { ContractFunctionInteractionTx } from "../../utils/txs"; @@ -16,9 +17,10 @@ const layout = css({ height: "100%", }); -export const PrivateContext = createContext<{ +export const AztecContext = createContext<{ pxe: PXE | null; nodeURL: string; + node: AztecNode; wallet: AccountWalletWithSecretKey | null; isPXEInitialized: boolean; walletDB: WalletDB | null; @@ -27,6 +29,7 @@ export const PrivateContext = createContext<{ setWalletDB: (walletDB: WalletDB) => void; setPXEInitialized: (isPXEInitialized: boolean) => void; setWallet: (wallet: AccountWalletWithSecretKey) => void; + setAztecNode: (node: AztecNode) => void; setPXE: (pxe: PXE) => void; setNodeURL: (nodeURL: string) => void; setCurrentTx: (currentTx: ContractFunctionInteractionTx) => void; @@ -34,6 +37,7 @@ export const PrivateContext = createContext<{ }>({ pxe: null, nodeURL: "", + node: null, wallet: null, isPXEInitialized: false, walletDB: null, @@ -44,6 +48,7 @@ export const PrivateContext = createContext<{ setWallet: (wallet: AccountWalletWithSecretKey) => {}, setNodeURL: (nodeURL: string) => {}, setPXE: (pxe: PXE) => {}, + setAztecNode: (node: AztecNode) => {}, setCurrentTx: (currentTx: ContractFunctionInteractionTx) => {}, setCurrentContract: (currentContract: Contract) => {}, }); @@ -52,13 +57,14 @@ export function Home() { const [pxe, setPXE] = useState(null); const [wallet, setWallet] = useState(null); const [nodeURL, setNodeURL] = useState(""); + const [node, setAztecNode] = useState(null); const [isPXEInitialized, setPXEInitialized] = useState(false); const [walletAlias, setWalletAlias] = useState(""); const [walletDB, setWalletDB] = useState(null); const [currentContract, setCurrentContract] = useState(null); const [currentTx, setCurrentTx] = useState(null); - const privateContextInitialValue = { + const AztecContextInitialValue = { pxe, nodeURL, wallet, @@ -67,6 +73,8 @@ export function Home() { walletDB, currentContract, currentTx, + node, + setAztecNode, setCurrentTx, setWalletDB, setPXEInitialized, @@ -79,10 +87,10 @@ export function Home() { return (
- + - +
); } diff --git a/gaztec/src/components/sidebar/components/createAccountDialog.tsx b/gaztec/src/components/sidebar/components/createAccountDialog.tsx index b6acc846178e..fde6f3249243 100644 --- a/gaztec/src/components/sidebar/components/createAccountDialog.tsx +++ b/gaztec/src/components/sidebar/components/createAccountDialog.tsx @@ -68,8 +68,8 @@ export function CreateAccountDialog({ ) : ( <> { setAlias(event.target.value); }} diff --git a/gaztec/src/components/sidebar/sidebar.tsx b/gaztec/src/components/sidebar/sidebar.tsx index 652b6127e89c..4e0b037e5bc6 100644 --- a/gaztec/src/components/sidebar/sidebar.tsx +++ b/gaztec/src/components/sidebar/sidebar.tsx @@ -3,8 +3,8 @@ import InputLabel from "@mui/material/InputLabel"; import MenuItem from "@mui/material/MenuItem"; import FormControl from "@mui/material/FormControl"; import Select, { SelectChangeEvent } from "@mui/material/Select"; -import { PrivateContext } from "../home/home"; -import { PrivateEnv } from "../../config"; +import { AztecContext } from "../home/home"; +import { AztecEnv } from "../../config"; import { createStore } from "@aztec/kv-store/indexeddb"; import { AccountWalletWithSecretKey, @@ -21,13 +21,14 @@ import { getSchnorrAccount } from "@aztec/accounts/schnorr"; import { AztecAddress, deriveSigningKey } from "@aztec/circuits.js"; import AddIcon from "@mui/icons-material/Add"; import logoURL from "../../assets/Aztec_logo.png"; -import { Divider, Typography } from "@mui/material"; +import { Button, Divider, Typography } from "@mui/material"; import { formatFrAsString, parseAliasedBufferAsString, } from "../../utils/conversion"; import { convertFromUTF8BufferAsString } from "../../utils/conversion"; import { ContractFunctionInteractionTx } from "../../utils/txs"; +import ContactsIcon from "@mui/icons-material/Contacts"; const container = css({ display: "flex", @@ -37,6 +38,7 @@ const container = css({ backgroundColor: "var(--mui-palette-primary-light)", overflow: "hidden", padding: "0 0.5rem", + textAlign: "center", }); const select = css({ @@ -59,11 +61,10 @@ const logo = css({ }); const txPanel = css({ - marginTop: "auto", marginBottom: "0.5rem", width: "100%", backgroundColor: "var(--mui-palette-primary-main)", - maxHeight: "50vh", + maxHeight: "30vh", overflowY: "auto", borderRadius: "0.5rem", }); @@ -94,6 +95,7 @@ export function SidebarComponent() { setWalletDB, setWallet, setCurrentContract, + setAztecNode, currentTx, currentContract, wallet, @@ -101,7 +103,7 @@ export function SidebarComponent() { nodeURL, isPXEInitialized, pxe, - } = useContext(PrivateContext); + } = useContext(AztecContext); const [accounts, setAccounts] = useState([]); const [contracts, setContracts] = useState([]); const [transactions, setTransactions] = useState([]); @@ -111,7 +113,9 @@ export function SidebarComponent() { setPXEInitialized(false); const nodeURL = event.target.value; setNodeURL(nodeURL); - const pxe = await PrivateEnv.initPXE(nodeURL); + const node = await AztecEnv.connectToNode(nodeURL); + setAztecNode(node); + const pxe = await AztecEnv.initPXE(node); const rollupAddress = (await pxe.getNodeInfo()).l1ContractAddresses .rollupAddress; const walletLogger = createLogger("wallet:data:indexeddb"); @@ -249,6 +253,7 @@ export function SidebarComponent() { GAztec
+ Connect Network - {contracts.map((contract) => ( - - {contract.key.split(":")[1]} ( - {formatFrAsString(contract.value)}) - - ))} - - + <> + Tools + + Contracts + + + + )} +
+ Transactions +
- Transactions - {transactions.map((tx) => (
- + {tx.txHash ? formatFrAsString(tx.txHash.toString()) : "()"}  -  - + {tx.receipt ? tx.receipt.status.toUpperCase() : tx.status.toUpperCase()} {tx.receipt?.error}
- + {tx.fnName}@{formatFrAsString(tx.contractAddress.toString())}
diff --git a/gaztec/src/config.ts b/gaztec/src/config.ts index 63f0c0bf5ec6..f2d2d8224535 100644 --- a/gaztec/src/config.ts +++ b/gaztec/src/config.ts @@ -1,4 +1,9 @@ -import { createLogger, createAztecNodeClient, type PXE } from "@aztec/aztec.js"; +import { + createLogger, + createAztecNodeClient, + type PXE, + AztecNode, +} from "@aztec/aztec.js"; import { PXEService } from "@aztec/pxe/service"; import { PXEServiceConfig, getPXEServiceConfig } from "@aztec/pxe/config"; import { KVPxeDatabase } from "@aztec/pxe/database"; @@ -16,12 +21,17 @@ process.env = Object.keys(import.meta.env).reduce((acc, key) => { debug.enable("*"); -export class PrivateEnv { - static async initPXE(nodeURL: string): Promise { +export class AztecEnv { + static async connectToNode(nodeURL: string): Promise { + const aztecNode = await createAztecNodeClient(nodeURL); + return aztecNode; + } + + static async initPXE(aztecNode: AztecNode): Promise { const config = getPXEServiceConfig(); config.dataDirectory = "pxe"; config.proverEnabled = true; - const aztecNode = await createAztecNodeClient(nodeURL); + const simulationProvider = new WASMSimulator(); const proofCreator = new BBWASMLazyPrivateKernelProver( simulationProvider, From 6207afb26577d39a6a50b2a8923981bb102f01f5 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 15 Jan 2025 15:47:33 +0000 Subject: [PATCH 09/23] cleanup --- gaztec/src/components/common/fnParameter.tsx | 1 - gaztec/yarn.lock | 47 +------------------- 2 files changed, 1 insertion(+), 47 deletions(-) diff --git a/gaztec/src/components/common/fnParameter.tsx b/gaztec/src/components/common/fnParameter.tsx index 04a2c6075e65..1054fbe6cfd6 100644 --- a/gaztec/src/components/common/fnParameter.tsx +++ b/gaztec/src/components/common/fnParameter.tsx @@ -31,7 +31,6 @@ export function FunctionParameter({ const handleParameterChange = (value: string, type: AbiType) => { switch (type.kind) { case "field": { - console.log(BigInt(value).toString(16)); onParameterChange(BigInt(value).toString(16)); break; } diff --git a/gaztec/yarn.lock b/gaztec/yarn.lock index 7894119dae87..d16b3bcc3feb 100644 --- a/gaztec/yarn.lock +++ b/gaztec/yarn.lock @@ -1241,13 +1241,6 @@ __metadata: languageName: node linkType: hard -"@types/browser-util-inspect@npm:^0": - version: 0.2.4 - resolution: "@types/browser-util-inspect@npm:0.2.4" - checksum: 10c0/a607d56970a9a25909cdb6fdd9d2b7b3394d86bdc8913545e7101f0f984427df8f9a4a08af9cb2901df925eebeef4dcc706f760b4703ebf50acf90b30d2ae90a - languageName: node - linkType: hard - "@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": version: 1.0.6 resolution: "@types/estree@npm:1.0.6" @@ -1255,13 +1248,6 @@ __metadata: languageName: node linkType: hard -"@types/format-util@npm:^1": - version: 1.0.4 - resolution: "@types/format-util@npm:1.0.4" - checksum: 10c0/173d1f67155c82311aaa5e90467351a18db17253c7d10174dc5a54d942415f1aa1f693f33ac4b15855e6f90363becb925651337692b3817271037f3d86b6e9f5 - languageName: node - linkType: hard - "@types/json-schema@npm:^7.0.15": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" @@ -1646,13 +1632,6 @@ __metadata: languageName: node linkType: hard -"browser-util-inspect@npm:^0.2.0": - version: 0.2.0 - resolution: "browser-util-inspect@npm:0.2.0" - checksum: 10c0/712a8df6b91edebc3c7eb9e7492f6566c798beb8195697949df299faee036a18fe6b8de6fe58dea280b30d2ed37021cb2d4b2c4fa0976eb511c3fa4420927d37 - languageName: node - linkType: hard - "browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": version: 1.2.0 resolution: "browserify-aes@npm:1.2.0" @@ -1838,7 +1817,7 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^2.1.0, clsx@npm:^2.1.1": +"clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 @@ -2564,13 +2543,6 @@ __metadata: languageName: node linkType: hard -"format-util@npm:^1.0.5": - version: 1.0.5 - resolution: "format-util@npm:1.0.5" - checksum: 10c0/89b9d73799bb51fba141029bbc358d6c5e591863156a806d0eece4718e9c8c7daacf3b0581ddde481e5183dd530072fc2cca8630434122b328bc3110d16ab38e - languageName: node - linkType: hard - "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" @@ -3955,18 +3927,6 @@ __metadata: languageName: node linkType: hard -"react-toastify@npm:^10.0.6": - version: 10.0.6 - resolution: "react-toastify@npm:10.0.6" - dependencies: - clsx: "npm:^2.1.0" - peerDependencies: - react: ">=18" - react-dom: ">=18" - checksum: 10c0/4042b716d008295d0feab32488d1e88ec655a1b7a9176fa7d253c70387578a8a0c04aca0ff86d20e1722f3b4baadae8970f50f462940d67a90453c307dd350a9 - languageName: node - linkType: hard - "react-transition-group@npm:^4.4.5": version: 4.4.5 resolution: "react-transition-group@npm:4.4.5" @@ -4771,22 +4731,17 @@ __metadata: "@mui/icons-material": "npm:^6.3.1" "@mui/material": "npm:^6.3.1" "@mui/styles": "npm:^6.3.1" - "@types/browser-util-inspect": "npm:^0" - "@types/format-util": "npm:^1" "@types/node": "npm:^22.10.5" "@types/react": "npm:^19.0.6" "@types/react-dom": "npm:^19.0.3" "@vitejs/plugin-react-swc": "npm:^3.7.2" - browser-util-inspect: "npm:^0.2.0" eslint: "npm:^9.13.0" eslint-plugin-react-hooks: "npm:^5.1.0" eslint-plugin-react-refresh: "npm:^0.4.18" - format-util: "npm:^1.0.5" globals: "npm:^15.14.0" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" react-dropzone: "npm:^14.3.5" - react-toastify: "npm:^10.0.6" typescript: "npm:~5.7.3" typescript-eslint: "npm:^8.11.0" vite: "npm:^6.0.7" From 957801476e14ccf12402205566fc13822a738ae6 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 15 Jan 2025 19:54:48 +0000 Subject: [PATCH 10/23] mostly done --- .../common/copyToClipboardButton.tsx | 12 ++- .../components/deployContractDialog.tsx | 8 +- .../components/registerContractDialog.tsx | 1 - gaztec/src/components/contract/contract.tsx | 16 +-- .../sidebar/components/addSenderDialog.tsx | 61 ++++++++++++ .../components/createAccountDialog.tsx | 6 +- gaztec/src/components/sidebar/sidebar.tsx | 99 ++++++++++++++----- gaztec/src/utils/conversion.ts | 6 +- gaztec/src/utils/storage.ts | 7 +- 9 files changed, 167 insertions(+), 49 deletions(-) create mode 100644 gaztec/src/components/sidebar/components/addSenderDialog.tsx diff --git a/gaztec/src/components/common/copyToClipboardButton.tsx b/gaztec/src/components/common/copyToClipboardButton.tsx index 77581a721da0..fc1482aae2ec 100644 --- a/gaztec/src/components/common/copyToClipboardButton.tsx +++ b/gaztec/src/components/common/copyToClipboardButton.tsx @@ -2,7 +2,13 @@ import { useState } from "react"; import { IconButton, Snackbar } from "@mui/material"; import ContentPasteIcon from "@mui/icons-material/ContentPaste"; -export function CopyToClipboardButton({ data }: { data: string }) { +export function CopyToClipboardButton({ + data, + disabled, +}: { + data: string; + disabled: boolean; +}) { const [open, setOpen] = useState(false); const handleClick = () => { @@ -12,11 +18,11 @@ export function CopyToClipboardButton({ data }: { data: string }) { return ( <> - + setOpen(false)} diff --git a/gaztec/src/components/contract/components/deployContractDialog.tsx b/gaztec/src/components/contract/components/deployContractDialog.tsx index bd57d570f43b..674912fd3a79 100644 --- a/gaztec/src/components/contract/components/deployContractDialog.tsx +++ b/gaztec/src/components/contract/components/deployContractDialog.tsx @@ -29,7 +29,7 @@ import { } from "@aztec/foundation/abi"; import { GITHUB_TAG_PREFIX } from "../../../utils/interactions"; import { AztecContext } from "../../home/home"; -import { parseAliasedBufferAsString } from "../../../utils/conversion"; +import { parseAliasedBuffersAsString } from "../../../utils/conversion"; import { FunctionParameter } from "../../common/fnParameter"; const creationForm = css({ @@ -42,12 +42,10 @@ const creationForm = css({ export function DeployContractDialog({ open, - wallet, contractArtifact, onClose, }: { open: boolean; - wallet: AccountWalletWithSecretKey; contractArtifact: ContractArtifact; onClose: (contract?: ContractInstanceWithAddress, alias?: string) => void; }) { @@ -56,7 +54,7 @@ export function DeployContractDialog({ const [parameters, setParameters] = useState([]); const [deploying, setDeploying] = useState(false); const [aliasedAddresses, setAliasedAddresses] = useState([]); - const { walletDB } = useContext(AztecContext); + const { walletDB, wallet } = useContext(AztecContext); useEffect(() => { const defaultInitializer = getDefaultInitializer(contractArtifact); @@ -65,7 +63,7 @@ export function DeployContractDialog({ const accountAliases = await walletDB.listAliases("accounts"); const contractAliases = await walletDB.listAliases("contracts"); setAliasedAddresses( - parseAliasedBufferAsString([...accountAliases, ...contractAliases]) + parseAliasedBuffersAsString([...accountAliases, ...contractAliases]) ); }; setAliases(); diff --git a/gaztec/src/components/contract/components/registerContractDialog.tsx b/gaztec/src/components/contract/components/registerContractDialog.tsx index 9fce58df5ddf..40af59325b9b 100644 --- a/gaztec/src/components/contract/components/registerContractDialog.tsx +++ b/gaztec/src/components/contract/components/registerContractDialog.tsx @@ -67,7 +67,6 @@ export function RegisterContractDialog({ await wallet.registerContract({ instance: contractInstance, - artifact: contractArtifact, }); const contract = await Contract.at( diff --git a/gaztec/src/components/contract/contract.tsx b/gaztec/src/components/contract/contract.tsx index 2a10a2c2d450..289b14a92de8 100644 --- a/gaztec/src/components/contract/contract.tsx +++ b/gaztec/src/components/contract/contract.tsx @@ -16,7 +16,6 @@ import { CardContent, Checkbox, CircularProgress, - Divider, FormControlLabel, FormGroup, IconButton, @@ -28,7 +27,7 @@ import FindInPageIcon from "@mui/icons-material/FindInPage"; import { prepTx } from "../../utils/interactions"; import { formatFrAsString, - parseAliasedBufferAsString, + parseAliasedBuffersAsString, } from "../../utils/conversion"; import { DeployContractDialog } from "./components/deployContractDialog"; import { FunctionParameter } from "../common/fnParameter"; @@ -119,7 +118,7 @@ export function ContractComponent() { const accountAliases = await walletDB.listAliases("accounts"); const contractAliases = await walletDB.listAliases("contracts"); setAliasedAddresses( - parseAliasedBufferAsString([...accountAliases, ...contractAliases]) + parseAliasedBuffersAsString([...accountAliases, ...contractAliases]) ); }; if (walletDB) { @@ -350,13 +349,11 @@ export function ContractComponent() { @@ -367,6 +364,7 @@ export function ContractComponent() { {formatFrAsString(currentContract.address.toString())} {!isWorking && simulationResults?.[fn.name] !== undefined ? (
- Simulation results: + + Simulation results: + {simulationResults[fn.name].success ? ( - + {simulationResults?.[fn.name]?.data.length === 0 ? "-" : simulationResults?.[fn.name].data.toString()} ) : ( - + {simulationResults?.[fn.name]?.error} )} diff --git a/gaztec/src/components/sidebar/components/addSenderDialog.tsx b/gaztec/src/components/sidebar/components/addSenderDialog.tsx new file mode 100644 index 000000000000..ce3512517357 --- /dev/null +++ b/gaztec/src/components/sidebar/components/addSenderDialog.tsx @@ -0,0 +1,61 @@ +import DialogTitle from "@mui/material/DialogTitle"; +import Dialog from "@mui/material/Dialog"; +import { Button, TextField, css } from "@mui/material"; +import { useState } from "react"; +import { AztecAddress } from "@aztec/circuits.js"; + +const creationForm = css({ + display: "flex", + flexDirection: "column", + gap: "1rem", + padding: "1rem", + alignItems: "center", +}); + +export function AddSendersDialog({ + open, + onClose, +}: { + open: boolean; + onClose: (sender?: AztecAddress, alias?: string) => void; +}) { + const [alias, setAlias] = useState(""); + const [sender, setSender] = useState(""); + + const addSender = async () => { + const parsed = AztecAddress.fromString(sender); + onClose(parsed, alias); + }; + + const handleClose = () => { + onClose(); + }; + + return ( + + Create account +
+ { + setSender(event.target.value); + }} + /> + { + setAlias(event.target.value); + }} + /> + + +
+
+ ); +} diff --git a/gaztec/src/components/sidebar/components/createAccountDialog.tsx b/gaztec/src/components/sidebar/components/createAccountDialog.tsx index fde6f3249243..83eb19dafcc1 100644 --- a/gaztec/src/components/sidebar/components/createAccountDialog.tsx +++ b/gaztec/src/components/sidebar/components/createAccountDialog.tsx @@ -9,8 +9,9 @@ import { Typography, css, } from "@mui/material"; -import { useState } from "react"; +import { useContext, useState } from "react"; import { deriveSigningKey } from "@aztec/circuits.js"; +import { AztecContext } from "../../home/home"; const creationForm = css({ display: "flex", @@ -22,11 +23,9 @@ const creationForm = css({ export function CreateAccountDialog({ open, - pxe, onClose, }: { open: boolean; - pxe: PXE; onClose: ( account?: AccountWalletWithSecretKey, salt?: Fr, @@ -36,6 +35,7 @@ export function CreateAccountDialog({ const [alias, setAlias] = useState(""); const [secretKey] = useState(Fr.random()); const [deployingAccount, setDeployingAccount] = useState(false); + const { pxe } = useContext(AztecContext); const createAccount = async () => { setDeployingAccount(true); diff --git a/gaztec/src/components/sidebar/sidebar.tsx b/gaztec/src/components/sidebar/sidebar.tsx index 4e0b037e5bc6..7fdc9499be61 100644 --- a/gaztec/src/components/sidebar/sidebar.tsx +++ b/gaztec/src/components/sidebar/sidebar.tsx @@ -10,6 +10,7 @@ import { AccountWalletWithSecretKey, Contract, Fr, + PXE, TxHash, createLogger, loadContractArtifact, @@ -24,11 +25,13 @@ import logoURL from "../../assets/Aztec_logo.png"; import { Button, Divider, Typography } from "@mui/material"; import { formatFrAsString, - parseAliasedBufferAsString, + parseAliasedBuffersAsString, } from "../../utils/conversion"; import { convertFromUTF8BufferAsString } from "../../utils/conversion"; import { ContractFunctionInteractionTx } from "../../utils/txs"; import ContactsIcon from "@mui/icons-material/Contacts"; +import { CopyToClipboardButton } from "../common/copyToClipboardButton"; +import { AddSendersDialog } from "./components/addSenderDialog"; const container = css({ display: "flex", @@ -42,6 +45,8 @@ const container = css({ }); const select = css({ + display: "flex", + flexDirection: "row", width: "100%", margin: "0.5rem 0rem", }); @@ -108,6 +113,27 @@ export function SidebarComponent() { const [contracts, setContracts] = useState([]); const [transactions, setTransactions] = useState([]); const [openCreateAccountDialog, setOpenCreateAccountDialog] = useState(false); + const [openAddSendersDialog, setOpenAddSendersDialog] = useState(false); + + const getAccountsAndSenders = async () => { + const aliasedBuffers = await walletDB.listAliases("accounts"); + const aliasedAccounts = parseAliasedBuffersAsString(aliasedBuffers); + const pxeAccounts = await pxe.getRegisteredAccounts(); + const ourAccounts = []; + const senders = []; + aliasedAccounts.forEach(({ key, value }) => { + if ( + pxeAccounts.find((account) => + account.address.equals(AztecAddress.fromString(value)) + ) + ) { + ourAccounts.push({ key, value }); + } else { + senders.push(key, value); + } + }); + return { ourAccounts, senders }; + }; const handleNetworkChange = async (event: SelectChangeEvent) => { setPXEInitialized(false); @@ -126,34 +152,30 @@ export function SidebarComponent() { ); const walletDB = WalletDB.getInstance(); walletDB.init(walletDBStore, walletLogger.info); - const aliasedAccounts = await walletDB.listAliases("accounts"); - const aliasedContracts = await walletDB.listAliases("contracts"); - setContracts(parseAliasedBufferAsString(aliasedContracts)); - setAccounts(parseAliasedBufferAsString(aliasedAccounts)); - setWalletDB(walletDB); setPXE(pxe); + setWalletDB(walletDB); setPXEInitialized(true); }; useEffect(() => { const refreshContracts = async () => { const aliasedContracts = await walletDB.listAliases("contracts"); - setContracts(parseAliasedBufferAsString(aliasedContracts)); + setContracts(parseAliasedBuffersAsString(aliasedContracts)); }; if (walletDB) { refreshContracts(); } - }, [currentContract]); + }, [currentContract, walletDB]); useEffect(() => { const refreshAccounts = async () => { - const aliasedAccounts = await walletDB.listAliases("accounts"); - setAccounts(parseAliasedBufferAsString(aliasedAccounts)); + const { ourAccounts } = await getAccountsAndSenders(); + setAccounts(ourAccounts); }; - if (walletDB) { + if (walletDB && walletDB && pxe) { refreshAccounts(); } - }, [wallet]); + }, [wallet, walletDB, pxe]); useEffect(() => { const refreshTransactions = async () => { @@ -176,6 +198,7 @@ export function SidebarComponent() { ); if ( currentTx && + currentTx.contractAddress === currentContract.address && (!currentTx.txHash || !txs.find((tx) => tx.txHash.equals(currentTx.txHash))) ) { @@ -208,18 +231,18 @@ export function SidebarComponent() { salt?: Fr, alias?: string ) => { - if (!account || !salt || !alias) { - return; + if (account && salt && alias) { + await walletDB.storeAccount(account.getAddress(), { + type: "schnorr", + secretKey: account.getSecretKey(), + alias, + salt, + }); + const aliasedAccounts = await walletDB.listAliases("accounts"); + setAccounts(parseAliasedBuffersAsString(aliasedAccounts)); + setWallet(account); } - await walletDB.storeAccount(account.getAddress(), { - type: "schnorr", - secretKey: account.getSecretKey(), - alias, - salt, - }); - const aliasedAccounts = await walletDB.listAliases("accounts"); - setAccounts(parseAliasedBufferAsString(aliasedAccounts)); - setWallet(account); + setOpenCreateAccountDialog(false); }; @@ -242,6 +265,18 @@ export function SidebarComponent() { setCurrentContract(contract); }; + const handleSenderAdded = async (sender?: AztecAddress, alias?: string) => { + if (sender && alias) { + await wallet.registerSender(sender); + await walletDB.storeAlias( + "accounts", + alias, + Buffer.from(sender.toString()) + ); + } + setOpenAddSendersDialog(false); + }; + return (
@@ -256,7 +291,12 @@ export function SidebarComponent() { Connect Network - {NETWORKS.map((network) => ( {network.name} ({network.nodeURL}) @@ -269,6 +309,7 @@ export function SidebarComponent() { Account + @@ -307,6 +351,7 @@ export function SidebarComponent() { value={currentContract?.address.toString() ?? ""} label="Contract" onChange={handleContractChange} + fullWidth > {contracts.map((contract) => ( }> Senders + )}
diff --git a/gaztec/src/utils/conversion.ts b/gaztec/src/utils/conversion.ts index 4606537c1b69..5a06461cab6d 100644 --- a/gaztec/src/utils/conversion.ts +++ b/gaztec/src/utils/conversion.ts @@ -2,10 +2,10 @@ export const formatFrAsString = (addressAsString: string) => { return `${addressAsString.slice(0, 4)}...${addressAsString.slice(-4)}`; }; -export const parseAliasedBufferAsString = ( - aliasedAddreses: { key: string; value: string }[] +export const parseAliasedBuffersAsString = ( + aliasedBuffers: { key: string; value: string }[] ) => { - return aliasedAddreses + return aliasedBuffers .filter((account) => account.key !== "accounts:last") .map(({ key, value }) => ({ key, diff --git a/gaztec/src/utils/storage.ts b/gaztec/src/utils/storage.ts index 067035b540a8..681975921129 100644 --- a/gaztec/src/utils/storage.ts +++ b/gaztec/src/utils/storage.ts @@ -356,7 +356,12 @@ export class WalletDB { return { address, secretKey, salt, type }; } - async storeAlias(type: AliasType, key: string, value: Buffer, log: LogFn) { + async storeAlias( + type: AliasType, + key: string, + value: Buffer, + log: LogFn = this.#userLog + ) { await this.#aliases.set(`${type}:${key}`, value); log(`Data stored in database with alias ${type}:${key}`); } From a4fd20becac8993dddfdbf4414c6656befb13f65 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 15 Jan 2025 21:06:24 +0000 Subject: [PATCH 11/23] more fixes --- .../contract/components/registerContractDialog.tsx | 11 ++++------- .../components/sidebar/components/addSenderDialog.tsx | 4 ++-- gaztec/src/components/sidebar/sidebar.tsx | 10 ++++++++-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/gaztec/src/components/contract/components/registerContractDialog.tsx b/gaztec/src/components/contract/components/registerContractDialog.tsx index 40af59325b9b..e65d840b4159 100644 --- a/gaztec/src/components/contract/components/registerContractDialog.tsx +++ b/gaztec/src/components/contract/components/registerContractDialog.tsx @@ -1,23 +1,19 @@ import DialogTitle from "@mui/material/DialogTitle"; import Dialog from "@mui/material/Dialog"; -import { AccountWalletWithSecretKey, Contract } from "@aztec/aztec.js"; +import { Contract } from "@aztec/aztec.js"; import { Button, CircularProgress, FormControl, FormGroup, - InputLabel, - MenuItem, - Select, TextField, Typography, css, } from "@mui/material"; import { useContext, useState } from "react"; import { AztecAddress, ContractInstanceWithAddress } from "@aztec/circuits.js"; -import { ContractArtifact, getInitializer } from "@aztec/foundation/abi"; +import { ContractArtifact } from "@aztec/foundation/abi"; import { GITHUB_TAG_PREFIX } from "../../../utils/interactions"; -import { FunctionParameter } from "../../common/fnParameter"; import { AztecContext } from "../../home/home"; const creationForm = css({ @@ -67,6 +63,7 @@ export function RegisterContractDialog({ await wallet.registerContract({ instance: contractInstance, + artifact: contractArtifact, }); const contract = await Contract.at( @@ -80,7 +77,7 @@ export function RegisterContractDialog({ return ( - Deploy contract + Register contract
{registering ? ( <> diff --git a/gaztec/src/components/sidebar/components/addSenderDialog.tsx b/gaztec/src/components/sidebar/components/addSenderDialog.tsx index ce3512517357..58ba8d31b3da 100644 --- a/gaztec/src/components/sidebar/components/addSenderDialog.tsx +++ b/gaztec/src/components/sidebar/components/addSenderDialog.tsx @@ -33,11 +33,11 @@ export function AddSendersDialog({ return ( - Create account + Add contact
{ setSender(event.target.value); }} diff --git a/gaztec/src/components/sidebar/sidebar.tsx b/gaztec/src/components/sidebar/sidebar.tsx index 7fdc9499be61..d20200178354 100644 --- a/gaztec/src/components/sidebar/sidebar.tsx +++ b/gaztec/src/components/sidebar/sidebar.tsx @@ -273,6 +273,8 @@ export function SidebarComponent() { alias, Buffer.from(sender.toString()) ); + const { ourAccounts } = await getAccountsAndSenders(); + setAccounts(ourAccounts); } setOpenAddSendersDialog(false); }; @@ -364,8 +366,12 @@ export function SidebarComponent() { ))} - Date: Thu, 16 Jan 2025 09:03:22 +0000 Subject: [PATCH 12/23] shine and polish --- gaztec/src/components/common/fnParameter.tsx | 64 +++++++++--- gaztec/src/components/contract/contract.tsx | 101 +++++++++---------- gaztec/src/components/sidebar/sidebar.tsx | 2 + gaztec/src/utils/storage.ts | 9 ++ gaztec/src/utils/txs.ts | 1 + 5 files changed, 110 insertions(+), 67 deletions(-) diff --git a/gaztec/src/components/common/fnParameter.tsx b/gaztec/src/components/common/fnParameter.tsx index 1054fbe6cfd6..8cdcdf0be4e6 100644 --- a/gaztec/src/components/common/fnParameter.tsx +++ b/gaztec/src/components/common/fnParameter.tsx @@ -1,32 +1,39 @@ import { ABIParameter, AbiType, isAddressStruct } from "@aztec/foundation/abi"; import { Autocomplete, + CircularProgress, IconButton, TextField, capitalize, css, } from "@mui/material"; -import { formatFrAsString } from "../../utils/conversion"; -import { useState } from "react"; +import { + formatFrAsString, + parseAliasedBuffersAsString, +} from "../../utils/conversion"; +import { Fragment, useContext, useState } from "react"; import EditIcon from "@mui/icons-material/Edit"; +import { AztecContext } from "../home/home"; const container = css({ display: "flex", flexDirection: "row", alignItems: "center", justifyContent: "center", + marginRight: "1rem", }); export function FunctionParameter({ - aliasedAddresses, parameter, onParameterChange, }: { - aliasedAddresses: { key: string; value: string }[]; parameter: ABIParameter; onParameterChange: (value: string) => void; }) { + const { walletDB } = useContext(AztecContext); + const [manualInput, setManualInput] = useState(false); + const [loading, setLoading] = useState(false); const handleParameterChange = (value: string, type: AbiType) => { switch (type.kind) { @@ -41,6 +48,23 @@ export function FunctionParameter({ } }; + const [aliasedAddresses, setAliasedAddresses] = useState([]); + + const handleOpen = () => { + const setAliases = async () => { + setLoading(true); + const accountAliases = await walletDB.listAliases("accounts"); + const contractAliases = await walletDB.listAliases("contracts"); + setAliasedAddresses( + parseAliasedBuffersAsString([...accountAliases, ...contractAliases]) + ); + setLoading(false); + }; + if (walletDB) { + setAliases(); + } + }; + return (
{isAddressStruct(parameter.type) && !manualInput ? ( @@ -56,13 +80,33 @@ export function FunctionParameter({ handleParameterChange(newValue.id, parameter.type); } }} - sx={{ width: 300, marginTop: "1rem" }} + onOpen={handleOpen} + loading={loading} + fullWidth + sx={{ width: "226px" }} renderInput={(params) => ( - + + {loading ? ( + + ) : null} + {params.InputProps.endAdornment} + + ), + }, + }} + /> )} /> ) : ( handleParameterChange(e.target.value, parameter.type) } - sx={{ marginTop: "1rem", marginRight: "1rem" }} - fullWidth /> )} {isAddressStruct(parameter.type) && ( <> -
- setManualInput(!manualInput)} - > + setManualInput(!manualInput)}> diff --git a/gaztec/src/components/contract/contract.tsx b/gaztec/src/components/contract/contract.tsx index 289b14a92de8..fe31294a6aee 100644 --- a/gaztec/src/components/contract/contract.tsx +++ b/gaztec/src/components/contract/contract.tsx @@ -72,6 +72,7 @@ const header = css({ const simulationContainer = css({ display: "flex", flexDirection: "row", + alignItems: "center", }); const checkBoxLabel = css({ @@ -111,20 +112,6 @@ export function ContractComponent() { setCurrentContract, setCurrentTx, } = useContext(AztecContext); - const [aliasedAddresses, setAliasedAddresses] = useState([]); - - useEffect(() => { - const setAliases = async () => { - const accountAliases = await walletDB.listAliases("accounts"); - const contractAliases = await walletDB.listAliases("contracts"); - setAliasedAddresses( - parseAliasedBuffersAsString([...accountAliases, ...contractAliases]) - ); - }; - if (walletDB) { - setAliases(); - } - }, [walletDB, wallet]); useEffect(() => { if (currentContract) { @@ -405,50 +392,56 @@ export function ContractComponent() { > {fn.functionType} - {fn.name} - - Parameters + + {fn.name} - - {fn.parameters.map((param, i) => ( - { - handleParameterChange(fn.name, i, newValue); + {fn.parameters.length > 0 && ( + <> + - ))} - - {!isWorking && simulationResults?.[fn.name] !== undefined ? ( -
- - Simulation results: + > + Parameters - {simulationResults[fn.name].success ? ( - - {simulationResults?.[fn.name]?.data.length === 0 - ? "-" - : simulationResults?.[fn.name].data.toString()} - - ) : ( - - {simulationResults?.[fn.name]?.error} - - )} -
- ) : ( - <> + + {fn.parameters.map((param, i) => ( + { + handleParameterChange(fn.name, i, newValue); + }} + /> + ))} + + )} - {isWorking ? : <>} + +
+ + Simulation results:  + + {!isWorking && simulationResults[fn.name] !== undefined && ( + <> + {simulationResults[fn.name].success ? ( + + {simulationResults?.[fn.name]?.data.length === 0 + ? "-" + : simulationResults?.[fn.name].data.toString()} + + ) : ( + + {simulationResults?.[fn.name]?.error} + + )} + + )} + {isWorking ? : <>} +
+ + + )} +
+
+ ); +} diff --git a/gaztec/src/components/contract/contract.tsx b/gaztec/src/components/contract/contract.tsx index 087d8d61e7a6..d6942d0172a0 100644 --- a/gaztec/src/components/contract/contract.tsx +++ b/gaztec/src/components/contract/contract.tsx @@ -3,6 +3,8 @@ import { useDropzone } from "react-dropzone"; import "./dropzone.css"; import { useContext, useEffect, useState } from "react"; import { + AuthWitness, + AztecAddress, Contract, ContractArtifact, ContractInstanceWithAddress, @@ -31,6 +33,10 @@ import { FunctionParameter } from "../common/fnParameter"; import ClearIcon from "@mui/icons-material/Clear"; import { RegisterContractDialog } from "./components/registerContractDialog"; import { CopyToClipboardButton } from "../common/copyToClipboardButton"; +import VpnKeyIcon from "@mui/icons-material/VpnKey"; +import SendIcon from "@mui/icons-material/Send"; +import PsychologyIcon from "@mui/icons-material/Psychology"; +import { CreateAuthwitDialog } from "./components/createAuthwitDialog"; const container = css({ display: "flex", @@ -101,6 +107,12 @@ export function ContractComponent() { useState(false); const [openRegisterContractDialog, setOpenRegisterContractDialog] = useState(false); + const [openCreateAuthwitDialog, setOpenCreateAuthwitDialog] = useState(false); + const [authwitFnData, setAuthwitFnData] = useState({ + name: "", + parameters: [], + isPrivate: false, + }); const { wallet, @@ -136,6 +148,25 @@ export function ContractComponent() { setParameters({ ...parameters, [fnName]: fnParameters }); }; + const handleContractCreation = async ( + contract?: ContractInstanceWithAddress, + alias?: string + ) => { + if (contract && alias) { + await walletDB.storeContract( + contract.address, + contractArtifact, + undefined, + alias + ); + setCurrentContract( + await Contract.at(contract.address, contractArtifact, wallet) + ); + } + setOpenDeployContractDialog(false); + setOpenRegisterContractDialog(false); + }; + const simulate = async (fnName: string) => { setIsWorking(true); let result; @@ -216,23 +247,25 @@ export function ContractComponent() { setIsWorking(false); }; - const handleContractCreation = async ( - contract?: ContractInstanceWithAddress, + const handleAuthwitFnDataChanged = ( + fnName: string, + parameters: any[], + isPrivate: boolean + ) => { + setAuthwitFnData({ name: fnName, parameters, isPrivate }); + setOpenCreateAuthwitDialog(true); + }; + + const handleAuthwitCreation = async ( + witness?: AuthWitness, alias?: string ) => { - if (contract && alias) { - await walletDB.storeContract( - contract.address, - contractArtifact, - undefined, - alias - ); - setCurrentContract( - await Contract.at(contract.address, contractArtifact, wallet) - ); + if (witness && alias) { + await wallet.addAuthWitness(witness); + await walletDB.storeAuthwitness(witness, undefined, alias); } - setOpenDeployContractDialog(false); - setOpenRegisterContractDialog(false); + setAuthwitFnData({ name: "", parameters: [], isPrivate: false }); + setOpenCreateAuthwitDialog(false); }; return ( @@ -444,6 +477,7 @@ export function ContractComponent() { color="secondary" variant="contained" onClick={() => simulate(fn.name)} + endIcon={} > Simulate @@ -457,14 +491,42 @@ export function ContractComponent() { color="secondary" variant="contained" onClick={() => send(fn.name)} + endIcon={} > Send + ))}
)} +
); } diff --git a/gaztec/src/components/sidebar/components/addSenderDialog.tsx b/gaztec/src/components/sidebar/components/addSenderDialog.tsx index 58ba8d31b3da..f4f40b35966c 100644 --- a/gaztec/src/components/sidebar/components/addSenderDialog.tsx +++ b/gaztec/src/components/sidebar/components/addSenderDialog.tsx @@ -24,10 +24,14 @@ export function AddSendersDialog({ const addSender = async () => { const parsed = AztecAddress.fromString(sender); + setAlias(""); + setSender(""); onClose(parsed, alias); }; const handleClose = () => { + setAlias(""); + setSender(""); onClose(); }; diff --git a/gaztec/src/components/sidebar/components/createAccountDialog.tsx b/gaztec/src/components/sidebar/components/createAccountDialog.tsx index 83eb19dafcc1..3f9b107ca541 100644 --- a/gaztec/src/components/sidebar/components/createAccountDialog.tsx +++ b/gaztec/src/components/sidebar/components/createAccountDialog.tsx @@ -77,6 +77,9 @@ export function CreateAccountDialog({ + )}
diff --git a/gaztec/src/components/sidebar/sidebar.tsx b/gaztec/src/components/sidebar/sidebar.tsx index e852afd7f863..6e03a007eef4 100644 --- a/gaztec/src/components/sidebar/sidebar.tsx +++ b/gaztec/src/components/sidebar/sidebar.tsx @@ -339,10 +339,6 @@ export function SidebarComponent() { data={wallet?.getAddress().toString()} /> - ) : ( <> @@ -406,6 +402,10 @@ export function SidebarComponent() {
))}
+
); } diff --git a/gaztec/src/utils/storage.ts b/gaztec/src/utils/storage.ts index 81d9a85bd0f4..b50625eacf68 100644 --- a/gaztec/src/utils/storage.ts +++ b/gaztec/src/utils/storage.ts @@ -1,6 +1,6 @@ import { ContractArtifact } from "@aztec/aztec.js"; import { TxReceipt, type AuthWitness, type TxHash } from "@aztec/circuit-types"; -import { type AztecAddress, Fr, GasSettings } from "@aztec/circuits.js"; +import { type AztecAddress, Fr } from "@aztec/circuits.js"; import { type LogFn } from "@aztec/foundation/log"; import { type AztecAsyncMap, diff --git a/gaztec/yarn.lock b/gaztec/yarn.lock index d16b3bcc3feb..e51605c6ff97 100644 --- a/gaztec/yarn.lock +++ b/gaztec/yarn.lock @@ -948,18 +948,6 @@ __metadata: languageName: node linkType: hard -"@rollup/plugin-virtual@npm:^3.0.2": - version: 3.0.2 - resolution: "@rollup/plugin-virtual@npm:3.0.2" - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - checksum: 10c0/7115edb7989096d1ce334939fcf6e1ba365586b487bf61b2dd4f915386197f350db70904030342c0720fe58f5a52828975c645c4d415c1d432d9b1b6760a22ef - languageName: node - linkType: hard - "@rollup/pluginutils@npm:^5.0.1": version: 5.1.4 resolution: "@rollup/pluginutils@npm:5.1.4" @@ -1179,7 +1167,7 @@ __metadata: languageName: node linkType: hard -"@swc/core@npm:^1.7.0, @swc/core@npm:^1.7.26": +"@swc/core@npm:^1.7.26": version: 1.10.7 resolution: "@swc/core@npm:1.10.7" dependencies: @@ -4624,15 +4612,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^10.0.0": - version: 10.0.0 - resolution: "uuid@npm:10.0.0" - bin: - uuid: dist/bin/uuid - checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe - languageName: node - linkType: hard - "vite-plugin-node-polyfills@npm:^0.22.0": version: 0.22.0 resolution: "vite-plugin-node-polyfills@npm:0.22.0" @@ -4645,19 +4624,6 @@ __metadata: languageName: node linkType: hard -"vite-plugin-top-level-await@npm:^1.4.4": - version: 1.4.4 - resolution: "vite-plugin-top-level-await@npm:1.4.4" - dependencies: - "@rollup/plugin-virtual": "npm:^3.0.2" - "@swc/core": "npm:^1.7.0" - uuid: "npm:^10.0.0" - peerDependencies: - vite: ">=2.8" - checksum: 10c0/013e7b2e28632d93d04c4061187198e699064fc208a1657c100354b32da30921fa835879fc17779d5e0b074855237408da2fadd720fa0f4571137427a1efd5e3 - languageName: node - linkType: hard - "vite@npm:^6.0.7": version: 6.0.7 resolution: "vite@npm:6.0.7" @@ -4746,7 +4712,6 @@ __metadata: typescript-eslint: "npm:^8.11.0" vite: "npm:^6.0.7" vite-plugin-node-polyfills: "npm:^0.22.0" - vite-plugin-top-level-await: "npm:^1.4.4" languageName: unknown linkType: soft From 331f1d3f46bd7d72bbce3510685d0fe04cfd4a8c Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 16 Jan 2025 21:45:05 +0000 Subject: [PATCH 17/23] fixes --- boxes/boxes/vite/package.json | 16 +++++----- boxes/yarn.lock | 37 +---------------------- gaztec/src/components/sidebar/sidebar.tsx | 5 ++- 3 files changed, 13 insertions(+), 45 deletions(-) diff --git a/boxes/boxes/vite/package.json b/boxes/boxes/vite/package.json index 5b777e4a9540..ea74b1670f67 100644 --- a/boxes/boxes/vite/package.json +++ b/boxes/boxes/vite/package.json @@ -14,14 +14,14 @@ "preview": "vite preview" }, "dependencies": { - "@aztec/accounts": "latest", - "@aztec/aztec.js": "latest", - "@aztec/bb-prover": "latest", - "@aztec/circuit-types": "latest", - "@aztec/key-store": "latest", - "@aztec/kv-store": "latest", - "@aztec/pxe": "latest", - "@aztec/simulator": "latest", + "@aztec/accounts": "portal:../../../yarn-project/accounts", + "@aztec/aztec.js": "portal:../../../yarn-project/aztec.js", + "@aztec/bb-prover": "link:../../../yarn-project/bb-prover", + "@aztec/circuit-types": "portal:../../../yarn-project/circuit-types", + "@aztec/key-store": "link:../../../yarn-project/key-store", + "@aztec/kv-store": "portal:../../../yarn-project/kv-store", + "@aztec/pxe": "link:../../../yarn-project/pxe", + "@aztec/simulator": "link:../../../yarn-project/simulator", "react": "^18.3.1", "react-dom": "^18.3.1", "react-toastify": "^10.0.6" diff --git a/boxes/yarn.lock b/boxes/yarn.lock index 6f430a0fd089..60a32655c1aa 100644 --- a/boxes/yarn.lock +++ b/boxes/yarn.lock @@ -1740,18 +1740,6 @@ __metadata: languageName: node linkType: hard -"@rollup/plugin-virtual@npm:^3.0.2": - version: 3.0.2 - resolution: "@rollup/plugin-virtual@npm:3.0.2" - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - checksum: 10c0/7115edb7989096d1ce334939fcf6e1ba365586b487bf61b2dd4f915386197f350db70904030342c0720fe58f5a52828975c645c4d415c1d432d9b1b6760a22ef - languageName: node - linkType: hard - "@rollup/pluginutils@npm:^5.0.1": version: 5.1.3 resolution: "@rollup/pluginutils@npm:5.1.3" @@ -2115,7 +2103,7 @@ __metadata: languageName: node linkType: hard -"@swc/core@npm:^1.7.0, @swc/core@npm:^1.7.26": +"@swc/core@npm:^1.7.26": version: 1.9.3 resolution: "@swc/core@npm:1.9.3" dependencies: @@ -11967,15 +11955,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^10.0.0": - version: 10.0.0 - resolution: "uuid@npm:10.0.0" - bin: - uuid: dist/bin/uuid - checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe - languageName: node - linkType: hard - "uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" @@ -12037,19 +12016,6 @@ __metadata: languageName: node linkType: hard -"vite-plugin-top-level-await@npm:^1.4.4": - version: 1.4.4 - resolution: "vite-plugin-top-level-await@npm:1.4.4" - dependencies: - "@rollup/plugin-virtual": "npm:^3.0.2" - "@swc/core": "npm:^1.7.0" - uuid: "npm:^10.0.0" - peerDependencies: - vite: ">=2.8" - checksum: 10c0/013e7b2e28632d93d04c4061187198e699064fc208a1657c100354b32da30921fa835879fc17779d5e0b074855237408da2fadd720fa0f4571137427a1efd5e3 - languageName: node - linkType: hard - "vite@npm:^5.0.0": version: 5.4.11 resolution: "vite@npm:5.4.11" @@ -12172,7 +12138,6 @@ __metadata: typescript-eslint: "npm:^8.11.0" vite: "npm:^6.0.3" vite-plugin-node-polyfills: "npm:^0.22.0" - vite-plugin-top-level-await: "npm:^1.4.4" languageName: unknown linkType: soft diff --git a/gaztec/src/components/sidebar/sidebar.tsx b/gaztec/src/components/sidebar/sidebar.tsx index 6e03a007eef4..3df800e6b349 100644 --- a/gaztec/src/components/sidebar/sidebar.tsx +++ b/gaztec/src/components/sidebar/sidebar.tsx @@ -10,7 +10,6 @@ import { AccountWalletWithSecretKey, Contract, Fr, - PXE, TxHash, createLogger, loadContractArtifact, @@ -364,6 +363,10 @@ export function SidebarComponent() { ))} +