diff --git a/.eslintrc.js b/.eslintrc.js index a051f27..4ed74d4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -42,5 +42,7 @@ module.exports = { '**/build', '**/public', '**/.cache', + 'packages/transeptor/**', + '**/packages/transeptor/**/', ], }; diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..c135606 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "packages/transeptor"] + path = packages/transeptor + url = https://github.com/transeptorlabs/transeptor-bundler.git diff --git a/.nvmrc b/.nvmrc index 6f7f377..62ccda5 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v16 +v19 diff --git a/.sample.env b/.sample.env index 959d057..96252c3 100644 --- a/.sample.env +++ b/.sample.env @@ -1 +1,3 @@ -SNAP_ORIGIN=prod:http://localhost:8080 \ No newline at end of file +SNAP_ORIGIN=local:http://localhost:8080 +MNEMONIC=test test test test test test test test test test test junk +BENEFICIARY=0xd21934eD8eAf27a67f0A70042Af50A1D6d195E81 \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 792016b..4f931c8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,8 @@ -# Contributing to ERC-4337 Relayer Snap +# Contributing to SmartHub Snap ## Why Contribute -ERC-4337 Relayer Snap is an open source project that welcomes contributions from anyone in the community. By contributing to this project, you can: +SmartHub Snap is an open source project that welcomes contributions from anyone in the community. By contributing to this project, you can: - Help improve the quality of the software for everyone who uses it. - Learn new skills and gain experience working on a real-world project. @@ -14,7 +14,7 @@ ERC-4337 Relayer Snap is an open source project that welcomes contributions from ## How to Contribute -1. Clone the repo to your local machine. `git clone https://github.com/transeptorlabs/erc-4337-snap.git` +1. Clone the repo to your local machine. `git clone https://github.com/transeptorlabs/smarthub-snap.git` 2. Install dependencies with `npm install`. 3. Create a new branch for your changes with `git checkout -b my-branch-name`. 4. Make your changes and commit them with descriptive commit messages. @@ -44,4 +44,4 @@ When you submit a pull request, please make sure to include a description of you ## Thank You -Thank you for considering contributing to ERC-4337 Relayer Snap! Your contributions help make our project better, and we appreciate your time and effort. +Thank you for considering contributing to SmartHub Snap! Your contributions help make our project better, and we appreciate your time and effort. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0ecca88 --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +# Simple local development makefile. + +bundler: + chmod +x ./start-bundler.sh + ./start-bundler.sh + +start: + @echo "Start snap and site." + yarn start + +snap: + @echo "Start snap and site." + yarn start-snap + +site: + @echo "Start site and site." + yarn start-site \ No newline at end of file diff --git a/README.md b/README.md index 55dee7d..6043274 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,21 @@ -# ERC-4337 Relayer Snap +# SmartHub ![Node Version](https://img.shields.io/badge/node-16.x-green) [![codecov](https://img.shields.io/codecov/c/github/transeptorlabs/erc-4337-relayer.svg?style=flat-square)](https://app.codecov.io/gh/transeptorlabs/erc-4337-relayer) ![Github workflow build status(main)](https://img.shields.io/github/actions/workflow/status/transeptorlabs/erc-4337-relayer/build-test.yml?branch=main) -This is the core repository for the development of the ERC-4337 Relayer +## Overview + +- **Why**: ERC-4337(aka: Account abstraction) introduces new core components to make managing crypto simple. It has potential, but it can be difficult for developers and users to use all its core components. We have a solution that simplifies interacting with those core components. +- **What**: SmartHub is a snap that makes it easy for developers and MetaMask wallet users to use ERC-4337 without dealing with its complexity. +- **How**: The snap adds extra features to MetaMask by including RPC methods that work with ERC-4337 core components. Please take a look at the [SmartHub Snap Architecture page](https://transeptorlabs.io/snap/concepts/architecture). + +This is the core repository for the development of the SmartHub MetaMask Snap. Roadmap [here](https://hackmd.io/@V00D00-child/SJOnAnxF2#Roadmap) -> :warning: **This repository is currently under active development.** +> :warning: **This repository is currently under active development, and contracts/snap is not audited.** -## Features +### Features - In dapp transaction flow. You don't need to confirm transactions/user operations in the browser extension window. Enjoy a web2-like experience with full in-dapp confirm/reject transaction flow. - Access and control smart accounts with MetaMask. Enjoy smart contract functionality with ease and convenience. @@ -18,108 +24,64 @@ MetaMask Snap. Roadmap [here](https://hackmd.io/@V00D00-child/SJOnAnxF2#Roadmap) - Sign/send regular Ethereum transactions with the owner EOA of the smart account. - Get wallet notifications when transactions/user operations and confirmed onchain. -## Preview video - -[![How to use Transeptor Labs ERC-4337 Relayer MetaMask Snap](https://img.youtube.com/vi/yP091c8tKrE/0.jpg)](https://www.youtube.com/watch?v=yP091c8tKrE) - -## Why - -ERC-4337: Account abstraction introduces new core components to make managing crypto simple. It has potential, but it can be difficult for developers and users to use all its core components. We have a solution that simplifies interacting with those core components. - -## What - -ERC-4337 Relayer is a snap that makes it easy for developers and MetaMask wallet users to use ERC-4337 without dealing with its complexity. - -## How - -The snap adds extra features to MetaMask by including RPC methods that work with ERC-4337 core components. Please take a look at the [ERC-4337 Relayer Snap Architecture page](https://transeptorlabs.io/snap/concepts/architecture). - -## Snaps is pre-release software +## Requirements To interact with the Snaps, you must install [MetaMask Flask](https://metamask.io/flask/), a canary distribution for developers that provides access to upcoming features. -### Requirements +- MetaMask Flask +- Docker +- yarn +- npm -- A version od MetaMask Flask to `=> 10.34.4-flask.0` -- Uses this page to [Revert back to earlier version flask](https://support.metamask.io/hc/en-us/articles/360016336611-Revert-back-to-earlier-version-or-add-custom-build-to-Chrome): +## Set up -## Contributing +The snap requires a connection to ERC4337 Bundler. We will use Transeptor Bundler running alongside a geth client to set up the local ERC-4337 environment. Follow the steps below to set up the local environment: -We welcome contributions to enhance our ERC-4337 Relayer Snap. If you would like to contribute, please follow these guidelines [here](https://github.com/transeptorlabs/erc-4337-snap/blob/main/CONTRIBUTING.md). +1. Create a `.env` file and copy values in `.env.sample` to a the `.env` file. +2. `git submodule update --init` +3. Run `make bundler` to start the bundler. -## Getting Started - -The snap requires a connection to ERC4337 Bundler. We will use Transeptor Bundler running alongside a geth client to set up the local ERC-4337 environment. +The Bundler will start running on [http://localhost:3000/rpc](http://localhost:3000/rpc). You will +need to have [Metamask Flask](https://metamask.io/flask/) installed and listening to +`localhost:8545` network. -### Running ERC 4337 Bundler node locally +## Start up snap and React app -The first things you need to do are clone this repository and install its -dependencies: +Make sure you follow the steps in `Set up` before starting the snap -```sh -git clone https://github.com/transeptorlabs/account-abstraction-boilerplate.git -cd account-abstraction-boilerplate -npm install +```shell +nvm use ``` -Once installed, let's run an ETH client on your local network: - -```sh -npm run node +```shell +yarn set version 3.2.1 ``` -Next, on a new terminal, go to the repository's root folder and run this to -deploy Account Abstraction and your contract: - -```sh -npm run deploy:all +```shell +yarn install ``` -Next, we can use use `.env.sample` to create .env file with your `MNEMONIC` and `BENEFICIARY`. - -- `MNEMONIC`: and is set to the default seend phrase of hardhat accounts. The first account of the hardhat accounts is used as the bundler signer. -- `BENEFICIARY`: is set to the second account of the hardhat accounts. - -Then, we can fund the bundler signer account with some ETH: +Set `SNAP_ORIGIN=prod:http://localhost:8080` in local `.env` file -```sh -npm run fund 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 +```shell +yarn start ``` -Finally, we can run the ERC-4337 Bundler(Transeptor) +Site will be running on [http://localhost:8000](http://localhost:8000) -```sh -npm run bundler -``` +## Testing and Linting -The Bundler will start running on [http://localhost:3000/rpc](http://localhost:3000/rpc). You will -need to have [Metamask Flask](https://metamask.io/flask/) installed and listening to -`localhost:8545`. +Run `yarn test` to run the tests once. -#### Troubleshooting +Run `yarn lint` to run the linter, or run `yarn lint:fix` to run the linter and fix any automatically fixable issues. + +## Troubleshooting - `Invalid nonce` errors: if you are seeing this error on the `npx hardhat node` console, try resetting your Metamask account. This will reset the account's transaction history and also the nonce. Open Metamask, click on your account followed by `Settings > Advanced > Clear activity tab data`. -### Start up snap and React app - -Make sure you follow the steps in `Running ERC 4337 Bundler locally` before starting the snap - -```shell -yarn install && yarn start -``` - -Set `SNAP_ORIGIN=prod:http://localhost:8080` in local `.env` file - -#### Testing and Linting - -Run `yarn test` to run the tests once. - -Run `yarn lint` to run the linter, or run `yarn lint:fix` to run the linter and fix any automatically fixable issues. - -#### Notes +## Contributing -- Babel is used for transpiling TypeScript to JavaScript, so when building with the CLI, - `transpilationMode` must be set to `localOnly` (default) or `localAndDeps`. +We welcome contributions to enhance our SmartHub Snap. If you would like to contribute, please follow these guidelines [here](https://github.com/transeptorlabs/smarthub-snap/blob/main/CONTRIBUTING.md). diff --git a/package.json b/package.json index 0f7e2d9..584aa54 100644 --- a/package.json +++ b/package.json @@ -1,24 +1,25 @@ { - "name": "erc-4337-relayer-monorepo", + "name": "root", "version": "1.0.0", "private": true, - "description": "A MetaMask snap the wraps ERC-4337 eth namespace methods.", - "homepage": "https://github.com/transeptorlabs/erc-4337-snap#readme", + "description": "", + "homepage": "https://github.com/transeptorlabs/smarthub-snap#readme", "bugs": { - "url": "https://github.com/transeptorlabs/erc-4337-snap/issues" + "url": "https://github.com/transeptorlabs/smarthub-snap/issues" }, "repository": { "type": "git", - "url": "git+https://github.com/transeptorlabs/erc-4337-snap.git" + "url": "git+https://github.com/transeptorlabs/smarthub-snap.git" }, - "license": "(MIT-0 OR Apache-2.0)", + "license": "MIT", "author": { "name": "Transeptor Labs", "email": "transeptorhq@gmail.com", "url": "https://transeptorlabs.io" }, "workspaces": [ - "packages/*" + "packages/snap", + "packages/site" ], "scripts": { "build": "yarn workspaces foreach --parallel --topological --verbose run build", @@ -27,6 +28,8 @@ "lint:fix": "yarn lint:eslint --fix && yarn lint:misc --write", "lint:misc": "prettier '**/*.json' '**/*.md' '!**/CHANGELOG.md' '**/*.yml' --ignore-path .gitignore", "start": "yarn workspaces foreach --parallel --interlaced --verbose run start", + "start-site": "yarn workspace @transeptor-labs/smarthub-site run start", + "start-snap": "yarn workspace @transeptor-labs/smarthub-snap run start", "test": "yarn workspaces foreach --parallel --topological --verbose run test" }, "devDependencies": { diff --git a/packages/site/.env.production.dist b/packages/site/.env.production.dist index 3845350..77f27c5 100644 --- a/packages/site/.env.production.dist +++ b/packages/site/.env.production.dist @@ -1 +1 @@ -SNAP_ORIGIN= +SNAP_ORIGIN=npm:@transeptor-labs/smarthub-snap diff --git a/packages/site/gatsby-config.ts b/packages/site/gatsby-config.ts index 8d7c98f..5d3c6de 100644 --- a/packages/site/gatsby-config.ts +++ b/packages/site/gatsby-config.ts @@ -10,7 +10,7 @@ const config: GatsbyConfig = { { resolve: 'gatsby-plugin-manifest', options: { - name: 'ERC-4337 Relayer', + name: 'SmartHub', icon: 'src/assets/logo.svg', theme_color: '#8093ff', background_color: '#FFFFFF', diff --git a/packages/site/package.json b/packages/site/package.json index 1b390c8..37883b9 100644 --- a/packages/site/package.json +++ b/packages/site/package.json @@ -1,5 +1,5 @@ { - "name": "@transeptor/site", + "name": "@transeptor-labs/smarthub-site", "version": "0.1.0", "private": true, "license": "(MIT-0 OR Apache-2.0)", @@ -32,8 +32,8 @@ }, "dependencies": { "@account-abstraction/contracts": "^0.6.0", - "@metamask/keyring-api": "^0.1.3", - "@metamask/providers": "^11.0.0", + "@metamask/keyring-api": "^1.0.0", + "@metamask/providers": "^13.0.0", "ethers": "^5.7.0", "react": "^18.2.0", "react-blockies": "1.4.1", diff --git a/packages/site/src/components/Account.tsx b/packages/site/src/components/Account.tsx index 0c708c9..1d664a2 100644 --- a/packages/site/src/components/Account.tsx +++ b/packages/site/src/components/Account.tsx @@ -153,7 +153,7 @@ export const AccountHeaderDisplay = () => { MetaMask @ {SupportedChainIdMap[state.chainId] ? SupportedChainIdMap[state.chainId].name : 'Not Supported'} - Connect ERC-4337 Relayer + Connect SmartHub snap ); @@ -170,7 +170,7 @@ export const AccountHeaderDisplay = () => { {state.selectedSnapKeyringAccount.address === '' ? 'No account selected' : - state.selectedSnapKeyringAccount.name + state.selectedSnapKeyringAccount.options.name as string } @@ -185,7 +185,7 @@ export const AccountModalDropdown = ({ }) => { const [state, dispatch] = useContext(MetaMaskContext); const [selectedAccount, setSelectedAccount] = useState(state.selectedSnapKeyringAccount); - const {selectKeyringSnapAccount, getSmartAccount, createAccount, updateAccountBalance, getAccountActivity} = useAcount(); + const {selectKeyringSnapAccount, getSmartAccount, createAccount, getAccountActivity} = useAcount(); const [accountName, setAccountName] = useState(''); const featureList: {feature: string; description: string }[] = [ @@ -223,11 +223,10 @@ export const AccountModalDropdown = ({ const handleAccountChange = async (event: any, account: KeyringAccount) => { event.preventDefault(); setSelectedAccount(account); + closeModal(); await selectKeyringSnapAccount(account); await getSmartAccount(account.id); - await updateAccountBalance(account.address); await getAccountActivity(account.id); - closeModal(); } const handleCreateAccount = async (event: any) => { @@ -326,7 +325,7 @@ export const AccountModalDropdown = ({ - {account.name} + {account.options.name as string} @@ -597,11 +596,11 @@ export const AccountRequestDisplay = ({ <> {state.snapKeyring.pendingRequests && ( filterPendingRequests(state.snapKeyring.pendingRequests, state.selectedSnapKeyringAccount.id).map((item: KeyringRequest) => ( - + {renderRequestDetails(item)} - {rejectRequestClick(e, item.request.id)}}> - {approveRequestClick(e, item.request.id)}}> + {rejectRequestClick(e, item.id)}}> + {approveRequestClick(e, item.id)}}> )) diff --git a/packages/site/src/components/Buttons.tsx b/packages/site/src/components/Buttons.tsx index 3d64bf2..584a2ff 100644 --- a/packages/site/src/components/Buttons.tsx +++ b/packages/site/src/components/Buttons.tsx @@ -68,7 +68,7 @@ export const ConnectSnapButton = (props: ComponentProps) => { return ( ); }; diff --git a/packages/site/src/components/Header.tsx b/packages/site/src/components/Header.tsx index 5e13fe6..d5a61bb 100644 --- a/packages/site/src/components/Header.tsx +++ b/packages/site/src/components/Header.tsx @@ -50,9 +50,6 @@ const LogoContainer = styled.div` display: flex; flex-direction: row; align-items: center; - ${({ theme }) => theme.mediaQueries.small} { - display: none; - } ` export const Header = ({ @@ -99,7 +96,7 @@ export const Header = ({ - ERC-4337 Relayer + SmartHub diff --git a/packages/site/src/components/Transaction.tsx b/packages/site/src/components/Transaction.tsx index 38e7369..5d64c33 100644 --- a/packages/site/src/components/Transaction.tsx +++ b/packages/site/src/components/Transaction.tsx @@ -3,14 +3,15 @@ import styled from 'styled-components'; import { ClipLoader } from 'react-spinners'; import { CommonInputForm } from './Form'; import { FaRegTimesCircle, FaCheckCircle } from 'react-icons/fa'; -import { MetaMaskContext, MetamaskActions, useAcount } from '../hooks'; +import { MetaMaskContext, useAcount } from '../hooks'; import { AccountRequestDisplay } from './Account'; import { convertToEth, convertToWei, estimateGas, parseChainId, trimAccount } from '../utils/eth'; import { BlockieAccountModal } from './Blockie-Icon'; import { BigNumber, ethers } from 'ethers'; -import { calcPreVerificationGas, estimatCreationGas, estimateUserOperationGas, getDummySignature, getMMProvider, getSignedTxs, getUserOpCallData, notify, storeTxHash } from '../utils'; +import { calcPreVerificationGas, estimatCreationGas, estimateUserOperationGas, getDummySignature, getMMProvider, getSignedTxs, getUserOpCallData, handleCopyToClipboard, notify, storeTxHash } from '../utils'; import { EntryPoint__factory } from '@account-abstraction/contracts'; import { UserOperation } from '../types'; +import { FaCopy } from "react-icons/fa"; const Body = styled.div` padding: 2rem 0; @@ -36,6 +37,11 @@ const FlexCol = styled.div` align-items: left; `; +const FlexRow = styled.div` + display: flex; + flex-direction: row; +`; + const AccountContainer = styled.div` display: flex; flex-direction: row; @@ -84,6 +90,17 @@ const TextBold = styled.p` margin-bottom: .5rem; `; +const AccountCopy = styled.div` + margin-left: 4rem; + margin-top: auto; + margin-bottom: 0; + margin-right: 5rem; + &:hover { + color: ${({ theme }) => theme.colors.primary.main}; + cursor: pointer; + } +`; + enum Stage { EnterAmount = 'Enter Amount', Review = 'Review', @@ -107,14 +124,21 @@ export const EthereumTransactionModalComponent = ({ const [amount, setAmount] = useState(''); const [failMessage, setFailMessage] = useState('User denied the transaction signature.'); const [successMessage, setSuccessMessage] = useState(''); - const { sendRequest, approveRequest, rejectRequest, getSmartAccount, getAccountActivity, updateAccountBalance, getKeyringSnapAccounts } = useAcount(); + const { + sendRequestSync, + approveRequest, + rejectRequest, + getSmartAccount, + getAccountActivity, + getKeyringSnapAccounts, + } = useAcount(); const handleDepositSubmit = async () => { const depositInWei = convertToWei(amount); // check the owner account has enough balance - if (BigNumber.from(depositInWei).gte(state.selectedAccountBalance)) { - throw new Error('Owner account has, insufficient funds.') + if (BigNumber.from(depositInWei).gte(state.scAccount.owner.balance)) { + throw new Error('Owner account has, insufficient funds.') } const provider = new ethers.providers.Web3Provider(getMMProvider() as any); @@ -130,21 +154,24 @@ export const EthereumTransactionModalComponent = ({ ); // set transation data (eth transaction type 2) - const transactionData = await entryPointContract.populateTransaction.depositTo(state.scAccount.address, { - type: 2, - nonce: await provider.getTransactionCount(state.selectedSnapKeyringAccount.address, 'latest'), - gasLimit: estimateGasAmount.toNumber(), - maxPriorityFeePerGas: feeData.maxPriorityFeePerGas ?? BigNumber.from(0), - maxFeePerGas: feeData.maxFeePerGas ?? BigNumber.from(0), - value: depositInWei.toString(), - }) + const transactionData = await entryPointContract.populateTransaction.depositTo(state.scAccount.address, + { + // Type 2 Transactions (EIP-1559) + from: state.selectedSnapKeyringAccount.address, + nonce: await provider.getTransactionCount(state.selectedSnapKeyringAccount.address, 'latest'), + gasLimit: estimateGasAmount.toNumber(), + maxPriorityFeePerGas: feeData.maxPriorityFeePerGas ?? BigNumber.from(0), + maxFeePerGas: feeData.maxFeePerGas ?? BigNumber.from(0), + value: depositInWei.toString(), + } + ) transactionData.chainId = parseChainId(state.chainId) // send request to keyring for approval - await sendRequest( - state.selectedSnapKeyringAccount.id, - 'eth_signTransaction', - [state.selectedSnapKeyringAccount.address, transactionData] // [from, transactionData] + const result = await sendRequestSync( + state.selectedSnapKeyringAccount.id, + 'eth_signTransaction', + [state.selectedSnapKeyringAccount.address, 'eoa', transactionData] // [from, type, transactionData] ); } @@ -161,10 +188,10 @@ export const EthereumTransactionModalComponent = ({ // get call data const callData = await getUserOpCallData( - state.selectedSnapKeyringAccount.id, - entryPointContract.address, - BigNumber.from(0), - entryPointContract.interface.encodeFunctionData('withdrawTo', [state.selectedSnapKeyringAccount.address, withdrawAmountInWei.toString()]) // users intent(contract they want to interact with) + state.selectedSnapKeyringAccount.id, + entryPointContract.address, + BigNumber.from(0), + entryPointContract.interface.encodeFunctionData('withdrawTo', [state.selectedSnapKeyringAccount.address, withdrawAmountInWei.toString()]) // users intent(contract they want to interact with) ) // set transation data (user operation) @@ -195,44 +222,44 @@ export const EthereumTransactionModalComponent = ({ userOpToSign.callGasLimit = estimatGasResult.callGasLimit.toHexString() if (initGas.eq(0)) { - userOpToSign.verificationGasLimit = BigNumber.from(100000).toHexString() - userOpToSign.preVerificationGas = estimatGasResult.preVerificationGas.add(initGas).toHexString() + userOpToSign.verificationGasLimit = BigNumber.from(100000).toHexString() + userOpToSign.preVerificationGas = estimatGasResult.preVerificationGas.add(initGas).toHexString() - // add gas buffer - const preVerificationGasWithBuffer = calcPreVerificationGas(userOpToSign) - userOpToSign.preVerificationGas = BigNumber.from(preVerificationGasWithBuffer).toHexString() + // add gas buffer + const preVerificationGasWithBuffer = calcPreVerificationGas(userOpToSign) + userOpToSign.preVerificationGas = BigNumber.from(preVerificationGasWithBuffer).toHexString() } else { - userOpToSign.verificationGasLimit = estimatGasResult.verificationGas.add(initGas).toHexString() - userOpToSign.preVerificationGas = estimatGasResult.preVerificationGas.add(initGas).toHexString() + userOpToSign.verificationGasLimit = estimatGasResult.verificationGas.add(initGas).toHexString() + userOpToSign.preVerificationGas = estimatGasResult.preVerificationGas.add(initGas).toHexString() } // send request to keyring for approval - await sendRequest( - state.selectedSnapKeyringAccount.id, - 'eth_sendTransaction', - [state.selectedSnapKeyringAccount.address, userOpToSign] // [from, transactionData] + await sendRequestSync( + state.selectedSnapKeyringAccount.id, + 'eth_sendTransaction', + [state.selectedSnapKeyringAccount.address, 'eip4337', userOpToSign] // [from, type, transactionData] ); } const handleSubmit = async (e: React.FormEvent) => { try { - e.preventDefault(); + e.preventDefault(); - setStatus(Stage.Loading); - - if (transactionType === TransactionType.Deposit) { - await handleDepositSubmit() - } else if (transactionType === TransactionType.Withdraw) { - await handleWithdrawSubmit() - } else { - throw new Error('Invalid transaction type'); - } - - setStatus(Stage.Review); + setStatus(Stage.Loading); + + if (transactionType === TransactionType.Deposit) { + await handleDepositSubmit(); + } else if (transactionType === TransactionType.Withdraw) { + await handleWithdrawSubmit(); + } else { + throw new Error('Invalid transaction type'); + } + + setStatus(Stage.Review); } catch (e) { - setAmount(''); - setFailMessage(e.message) - setStatus(Stage.Failed); + setAmount(''); + setFailMessage(e.message); + setStatus(Stage.Failed); } }; @@ -275,7 +302,6 @@ export const EthereumTransactionModalComponent = ({ await getAccountActivity(state.selectedSnapKeyringAccount.id); await getSmartAccount(state.selectedSnapKeyringAccount.id); - await updateAccountBalance(state.selectedSnapKeyringAccount.address); } catch (e) { setFailMessage(e.message) setStatus(Stage.Failed); @@ -298,96 +324,125 @@ export const EthereumTransactionModalComponent = ({ const renderStage = () => { switch (status) { - case Stage.EnterAmount: - return ( - - {transactionType === TransactionType.Deposit ? - ( - - - - - (owner EOA) - {trimAccount(state.selectedSnapKeyringAccount.address)} - - - Available to deposit {convertToEth(state.selectedAccountBalance)} ETH - - ) - : - ( - - - - - (smart account) - {trimAccount(state.scAccount.address)} - - - Available to withdraw {convertToEth(state.scAccount.deposit)} ETH - - ) - } - + {transactionType === TransactionType.Deposit ? ( + + + + + (owner) + + + {trimAccount(state.selectedSnapKeyringAccount.options.owner as string)} + + + handleCopyToClipboard( + e, + state.selectedSnapKeyringAccount.options.owner as string, + ) + } + > + + + + Balance:{' '}{convertToEth(state.scAccount.owner.balance)} ETH + + + + + + ) : ( + + + + + (smart account) + + {trimAccount(state.scAccount.address)} + + handleCopyToClipboard(e, state.scAccount.address) } - /> - - - ); - case Stage.Review: - return ( - - ) - case Stage.Loading: - return ( - - - - ); - case Stage.Failed: - return ( - - - - - Transaction Failed - {failMessage} - - ) - case Stage.Sent: - return ( - - - - - {transactionType === TransactionType.Deposit ? 'Deposit' : 'Withdraw'} successfully sent - {successMessage} - - ) + > + + + + Total deposit: {convertToEth(state.scAccount.deposit)}{' '}ETH + + + + )} + + + ); + case Stage.Review: + return ( + <> +

Review..

+ + // + ); + case Stage.Loading: + return ( + + + + ); + case Stage.Failed: + return ( + + + + + Transaction Failed + {failMessage} + + ); + case Stage.Sent: + return ( + + + + + + {transactionType === TransactionType.Deposit + ? 'Deposit' + : 'Withdraw'}{' '} + successfully sent + + {successMessage} + + ); } }; return ( - - {status !== Stage.Loading && ( - {status}: {transactionType} - )} - {renderStage()} - + + {status !== Stage.Loading && ( + {status}: {transactionType} + )} + {renderStage()} + ); }; \ No newline at end of file diff --git a/packages/site/src/hooks/Accounts.tsx b/packages/site/src/hooks/Accounts.tsx index e16b51e..3da4d2d 100644 --- a/packages/site/src/hooks/Accounts.tsx +++ b/packages/site/src/hooks/Accounts.tsx @@ -4,6 +4,7 @@ import { AccountActivity, AccountActivityType, BundlerUrls, SmartContractAccount import { bundlerUrls, fetchUserOpHashes, getAccountBalance, getChainId, getKeyringSnapRpcClient, getMMProvider, getNextRequestId, getScAccount, getTxHashes, getUserOperationReceipt, parseChainId, sendSupportedEntryPoints } from "../utils"; import { KeyringAccount } from "@metamask/keyring-api"; import { KeyringSnapRpcClient } from '@metamask/keyring-api'; +import type { Json } from '@metamask/utils'; export const useAcount = () => { const [state, dispatch] = useContext(MetaMaskContext); @@ -30,17 +31,10 @@ export const useAcount = () => { return selectedKeyringAccount; }; - const updateAccountBalance = async (account: string): Promise => { - const balance = await getAccountBalance(account) - dispatch({ - type: MetamaskActions.SetSelectedAccountBalance, - payload: balance, - }); - return balance; - }; - const createAccount = async (accountName: string) => { - const newAccount = await snapRpcClient.createAccount(accountName); + const newAccount = await snapRpcClient.createAccount({ + name: accountName, + }); await getKeyringSnapAccounts() return newAccount }; @@ -50,19 +44,60 @@ export const useAcount = () => { await getKeyringSnapAccounts() }; - const sendRequest = async (keyringAccountId: string, method: string, params: any[] = []) => { - const id = await getNextRequestId() - await snapRpcClient.submitRequest({ + const sendRequestAsync = async ( + keyringAccountId: string, + method: string, + params: any[] = [], + ): Promise<{ + pending: boolean; + redirect?: { + url: string; + message: string; + }; + }> => { + const id = await getNextRequestId(); + const result = await snapRpcClient.submitRequest({ + id: id.toString(), account: keyringAccountId, - scope: `eip155:${parseChainId(state.chainId)}`, + scope: 'async', request: { - id: id.toString(), - jsonrpc: '2.0', method, params: params, - } + }, }); - await getKeyringSnapAccounts() + await getKeyringSnapAccounts(); + + return result as { + pending: boolean; + redirect?: { + url: string; + message: string; + }; + }; + }; + + const sendRequestSync = async ( + keyringAccountId: string, + method: string, + params: any[] = [], + ): Promise<{ + pending: false; + result: Json; + }> => { + const id = await getNextRequestId(); + const result = await snapRpcClient.submitRequest({ + id: id.toString(), + account: keyringAccountId, + scope: 'sync', + request: { + method, + params: params, + }, + }); + return result as { + pending: false; + result: Json; + }; }; const approveRequest = async (requestId: string) => { @@ -78,7 +113,7 @@ export const useAcount = () => { const rejectAllPendingRequests = async () => { const pendingRequests = await snapRpcClient.listRequests(); for (const rq of pendingRequests) { - await snapRpcClient.rejectRequest(rq.request.id); + await snapRpcClient.rejectRequest(rq.id); } await getKeyringSnapAccounts() } @@ -186,10 +221,10 @@ export const useAcount = () => { getBundlerUrls, updateChainId, getWalletChainId, - sendRequest, + sendRequestAsync, + sendRequestSync, approveRequest, rejectRequest, - updateAccountBalance, rejectAllPendingRequests, } } \ No newline at end of file diff --git a/packages/site/src/hooks/MetamaskContext.tsx b/packages/site/src/hooks/MetamaskContext.tsx index bbad5b9..690bf8f 100644 --- a/packages/site/src/hooks/MetamaskContext.tsx +++ b/packages/site/src/hooks/MetamaskContext.tsx @@ -9,7 +9,7 @@ import { import { AppTab, BundlerUrls, Snap } from '../types'; import { isFlask, getSnap, KeyringState } from '../utils'; import { AccountActivity, SmartContractAccount } from '../types/erc-4337'; -import { KeyringAccount } from "@metamask/keyring-api"; +import { KeyringAccount, EthAccountType } from "@metamask/keyring-api"; import { BigNumber, ethers } from 'ethers'; export type MetamaskState = { @@ -21,7 +21,6 @@ export type MetamaskState = { activeTab: AppTab; snapKeyring: KeyringState; selectedSnapKeyringAccount: KeyringAccount; - selectedAccountBalance: string; scAccount: SmartContractAccount; accountActivity: AccountActivity[]; bundlerUrls?: BundlerUrls; @@ -40,13 +39,14 @@ const initialState: MetamaskState = { }, selectedSnapKeyringAccount: { id: '', - name: '', address: '', - options: {}, - supportedMethods: [], - type: 'eip155:erc4337', + options: { + name: '', + owner: '', + }, + methods: [], + type: EthAccountType.Eip4337, }, - selectedAccountBalance: '0', // in wei scAccount: { initCode: '', connected: false, @@ -57,7 +57,10 @@ const initialState: MetamaskState = { entryPoint: '', deposit: '', factoryAddress: '', - ownerAddress: '', + owner: { + address: '', + balance: '', // in wei + } }, accountActivity: [], bundlerUrls: undefined, @@ -85,7 +88,6 @@ export enum MetamaskActions { SetSelectedSnapKeyringAccount = "SetSelectedKeyringAccount", SetScAccount = "SetScAccount", SetAccountActivity = 'SetAccountActivity', - SetSelectedAccountBalance = 'SetSelectedAccountBalance', SetClearAccount = 'SetClearAccount', SetBundlerUrls = 'SetBundlerUrls', SetSupportedEntryPoints = 'SetSupportedEntryPoints', @@ -123,12 +125,6 @@ const reducer: Reducer = (state, action) => { selectedSnapKeyringAccount: action.payload, }; - case MetamaskActions.SetSelectedAccountBalance: - return { - ...state, - selectedAccountBalance: action.payload, - }; - case MetamaskActions.SetScAccount: return { ...state, @@ -176,11 +172,13 @@ const reducer: Reducer = (state, action) => { ...state, selectedSnapKeyringAccount: { id: '', - name: '', address: '', - options: {}, - supportedMethods: [], - type: 'eip155:erc4337', + options: { + name: '', + owner: '', + }, + methods: [], + type: EthAccountType.Eip4337, }, scAccount: { initCode: '', diff --git a/packages/site/src/pages/index.tsx b/packages/site/src/pages/index.tsx index 27b4851..1c36637 100644 --- a/packages/site/src/pages/index.tsx +++ b/packages/site/src/pages/index.tsx @@ -29,6 +29,8 @@ import { ModalType, } from '../components'; import { AppTab, BundlerUrls, SupportedChainIdMap } from '../types'; +import snapPackageInfo from '../../../snap/package.json'; +import packageInfo from '../../package.json'; const Container = styled.div` display: flex; @@ -141,7 +143,6 @@ const Index = () => { getBundlerUrls, updateChainId, setChainIdListener, - updateAccountBalance, } = useAcount(); useEffect(() => { @@ -163,7 +164,6 @@ const Index = () => { if (account.length > 0) { await selectKeyringSnapAccount(account[0]); await getSmartAccount(account[0].id); - await updateAccountBalance(account[0].address); await getAccountActivity(account[0].id); } } @@ -202,7 +202,7 @@ const Index = () => { }; } catch (e) { - console.error('[ERROR] refreaher:', e.message); + console.error('[ERROR] refresher:', e.message); dispatch({ type: MetamaskActions.SetError, payload: e }); } }, [state.accountActivity]); @@ -214,7 +214,6 @@ const Index = () => { interval = setInterval(async () => { if (state.scAccount.connected === true) { await getSmartAccount(state.selectedSnapKeyringAccount.id); - await updateAccountBalance(state.selectedSnapKeyringAccount.address); } }, 5000) // 5 seconds @@ -223,7 +222,7 @@ const Index = () => { }; } catch (e) { - console.error('[ERROR] refreaher:', e.message); + console.error('[ERROR] refresher:', e.message); dispatch({ type: MetamaskActions.SetError, payload: e }); } }, [state.selectedSnapKeyringAccount, state.scAccount]); @@ -269,64 +268,88 @@ const Index = () => { }; const handleCreateAccount = async (event: any) => { - event.preventDefault(); - const newAccount = await createAccount(accountName) - await selectKeyringSnapAccount(newAccount); - await getSmartAccount(newAccount.id); - await updateAccountBalance(newAccount.address); - setAccountName('') + try { + event.preventDefault(); + const newAccount = await createAccount(accountName) + await selectKeyringSnapAccount(newAccount); + await getSmartAccount(newAccount.id); + setAccountName('') + } catch (e) { + dispatch({ type: MetamaskActions.SetError, payload: e }); + } }; const handleDeleteAccount = async (event: any) => { - event.preventDefault(); - let keyringAccountIdFound = '' - state.snapKeyring.accounts.forEach(account => { - if (account.name === accountNameDelete) - keyringAccountIdFound = account.id - }) - - if (keyringAccountIdFound === '') { - dispatch({ type: MetamaskActions.SetError, payload: new Error('Account name not found.') }); - } else { - await deleteAccount(keyringAccountIdFound) - - // update selected to first account when the deleted account it the current selected account - if(keyringAccountIdFound === state.selectedSnapKeyringAccount.id) { - const accounts = await getKeyringSnapAccounts() - if (accounts.length > 0) { - await selectKeyringSnapAccount(accounts[0]); - await getSmartAccount(accounts[0].id); - await getAccountActivity(accounts[0].id); - } else { - dispatch({ type: MetamaskActions.SetClearAccount, payload: true }) + try { + event.preventDefault(); + let keyringAccountIdFound = '' + state.snapKeyring.accounts.forEach(account => { + if (account.options.name as string === accountNameDelete) + keyringAccountIdFound = account.id + }) + + if (keyringAccountIdFound === '') { + dispatch({ type: MetamaskActions.SetError, payload: new Error('Account name not found.') }); + } else { + await deleteAccount(keyringAccountIdFound) + + // update selected to first account when the deleted account it the current selected account + if(keyringAccountIdFound === state.selectedSnapKeyringAccount.id) { + const accounts = await getKeyringSnapAccounts() + console.log('accounts after delet:', accounts) + if (accounts.length > 0) { + await selectKeyringSnapAccount(accounts[0]); + await getSmartAccount(accounts[0].id); + await getAccountActivity(accounts[0].id); + } else { + dispatch({ type: MetamaskActions.SetClearAccount, payload: true }) + } } + setAccountNameDelete('') } - setAccountNameDelete('') + } catch (e) { + dispatch({ type: MetamaskActions.SetError, payload: e }); } }; const handleDepositClick = async (e: any) => { - e.preventDefault(); - setTransactionType(TransactionType.Deposit) - setModalOpenTransaction(true) + try { + e.preventDefault(); + setTransactionType(TransactionType.Deposit) + setModalOpenTransaction(true) + } catch (e) { + dispatch({ type: MetamaskActions.SetError, payload: e }); + } } const handleWithdrawClick = async (e: any) => { - e.preventDefault(); - setTransactionType(TransactionType.Withdraw) - setModalOpenTransaction(true) + try { + e.preventDefault(); + setTransactionType(TransactionType.Withdraw) + setModalOpenTransaction(true) + } catch (e) { + dispatch({ type: MetamaskActions.SetError, payload: e }); + } } const handleClearActivity = async (e: any) => { - e.preventDefault(); - await clearActivityData(); - await handleFetchBundlerUrls(); + try { + e.preventDefault(); + await clearActivityData(); + await handleFetchBundlerUrls(); + } catch (e) { + dispatch({ type: MetamaskActions.SetError, payload: e }); + } } const handleBundlerUrlSubmit = async (e: any, chainId: string) => { - e.preventDefault(); - await addBundlerUrl(chainId, formBundlerUrls[chainId]); - await handleFetchBundlerUrls(); + try { + e.preventDefault(); + await addBundlerUrl(chainId, formBundlerUrls[chainId]); + await handleFetchBundlerUrls(); + } catch (e) { + dispatch({ type: MetamaskActions.SetError, payload: e }); + } } // Form input handlers @@ -372,7 +395,7 @@ const Index = () => { {!state.installedSnap && ( { { ], custom: - {handleDepositClick(e)}}> - {handleWithdrawClick(e)}}> + {/* TODO: Comment for now until we can support these features */} + {/* {handleDepositClick(e)}}> */} + {/* {handleWithdrawClick(e)}}> */} + {/* {() =>{}}}> + {() =>{}}}> */} }} disabled={!state.isFlask} @@ -471,16 +497,43 @@ const Index = () => { )} FAQ + + custom: }} fullWidth /> + custom: + }} + fullWidth + /> + + + }} + fullWidth + /> + + }} + fullWidth + /> + + }} + fullWidth + /> + + }} fullWidth /> @@ -549,9 +602,12 @@ const Index = () => { {state.installedSnap && ( { {state.installedSnap && ( {

- Please note that this snap is only available in MetaMask Flask, + Please note that this SmartHub snap is only available in MetaMask Flask, and is actively being developed by{' '} - Transeptor Labs + Transeptor Labs. + + {' '}Learn more about ERC4337 at {' '} + + https://www.erc4337.io/

+ ); }; diff --git a/packages/site/src/types/app.ts b/packages/site/src/types/app.ts index 920d1f2..3742da4 100644 --- a/packages/site/src/types/app.ts +++ b/packages/site/src/types/app.ts @@ -15,6 +15,7 @@ export const SupportedChainIdMap: { } = { '0x539': { name: 'Private', icon: PrivateLogo, id: '0x539' }, '0x5': { name: 'Goerli', icon: PrivateLogo, id: '0x5' }, + '0xaa36a7': { name: 'Sepolia', icon: PrivateLogo, id: '0xaa36a7' }, // '0x1': { name: 'Ethereum', icon: EthereumLogo, id: '0x1' }, // '0x89': { name: 'Polygon', icon: PolygonLogo, id: '0x89' }, // '0x13881': { name: 'Polygon Mumbai', icon: PolygonLogo, id: '0x13881' }, diff --git a/packages/site/src/types/erc-4337.ts b/packages/site/src/types/erc-4337.ts index deeeb1f..7d4179f 100644 --- a/packages/site/src/types/erc-4337.ts +++ b/packages/site/src/types/erc-4337.ts @@ -16,7 +16,10 @@ export enum ReputationStatus { export type SmartContractAccount = { initCode: string; address: string; - ownerAddress: string; + owner: { + address: string; + balance: string; + }; balance: string; nonce: BigNumber; index: BigNumber; diff --git a/packages/site/src/utils/snap.ts b/packages/site/src/utils/snap.ts index 5030d66..7cf0a72 100644 --- a/packages/site/src/utils/snap.ts +++ b/packages/site/src/utils/snap.ts @@ -124,9 +124,14 @@ export const getScAccount = async ( deposit: BigNumber.from(parsedResult.deposit).toString(), connected: true, ownerAddress: parsedResult.ownerAddress, + owner: { + address: parsedResult.owner.address, + balance: BigNumber.from(parsedResult.owner.balance).toString(), + }, } as SmartContractAccount; }; +// TODO: remove this method export const getSignedTxs = async (): Promise => { const result = (await getMMProvider().request({ method: 'wallet_invokeSnap', @@ -139,6 +144,7 @@ export const getSignedTxs = async (): Promise => { return parsedResult as SignedTxs; }; +// TODO: Update this method export const storeTxHash = async ( keyringAccountId: string, txHash: string, @@ -164,6 +170,7 @@ export const storeTxHash = async ( })) as boolean; }; +// TODO: Update this method export const getTxHashes = async ( keyringAccountId: string, chainId: string, diff --git a/packages/snap/README.md b/packages/snap/README.md index 1045352..a96c4be 100644 --- a/packages/snap/README.md +++ b/packages/snap/README.md @@ -1,10 +1,373 @@ -# @transeptor/erc-4337-relayer +# SmartHub -ERC-4337 Relayer is a snap that makes it easy for developers and MetaMask wallet users to use ERC-4337 without dealing with its complexity. +This repository contains Transeptor Labs SmartHub Snap. -## Snap Methods +SmartHub is a snap that makes it easy for developers and MetaMask wallet users to use ERC-4337 without dealing with its complexity. Our snap adds extra features to MetaMask by including RPC methods that work with ERC-4337 core components. Allowing users to easily create and manage their smart accounts. -## Notes +## What is a snap -- Babel is used for transpiling TypeScript to JavaScript, so when building with the CLI, - `transpilationMode` must be set to `localOnly` (default) or `localAndDeps`. +[MetaMask Snaps](https://metamask.io/snaps/) allows anyone to safely expand the capabilities of MetaMask. A snap is a program that isolated environment that can customize the wallet experience. + +## Custom Methods + +SmartHub snap adds extra features to MetaMask by including custom RPC methods that work with ERC-4337 core components. Allowing users to easily create and manage their smart accounts. Dapps can invoke these methods using the `wallet_invokeSnap` RPC method. The Snap must be installed and the caller must have the permission to communicate with the Snap, or the request is rejected. + +### ERC-4337 account management + +Custom RPC method that allows dapps to manage smart accounts. + +#### notify + +Notifies users with a custom copyable message via `snap_dialog` alert UI. + +```TS +await window.ethereum.request({ + method: 'wallet_invokeSnap', + params: { + snapId: 'npm:@transeptor-labs/smarthub-snap', + request: { + method: 'notify', + params: [ + { + heading: 'alert UI title', + message: 'your message', + copyable: 'copyable text', + }, + ], + }, + }, +}); +``` + +#### get_next_request_id + +Get the next keyring request ID. + +```TS +const result = await window.ethereum.request({ + method: 'wallet_invokeSnap', + params: { + snapId: 'npm:@transeptor-labs/smarthub-snap', + request: { + method: 'get_next_request_id', + params: [], + }, + }, +}); +console.log(result); +``` + +#### sc_account + +Returns information about the smart account with the given keyring Account Id. + +```TS +type SmartContractAccount = { + initCode: string; + address: string; + owner: { + address: string; + balance: string; + } + balance: string; + nonce: BigNumber; + index: BigNumber; + entryPoint: string; + factoryAddress: string; + deposit: string; + connected: boolean; +}; + +const result: SmartContractAccount = await window.ethereum.request({ + method: 'wallet_invokeSnap', + params: { + snapId: 'npm:@transeptor-labs/smarthub-snap', + request: { + method: 'sc_account', + params: [{ 'keyringAccountId' }], + }, + }, +}); +console.log(result); +``` + +#### get_user_ops_hashes + +Returns a list of confirmed operations hashes for the given keyring Account Id. + +```TS +const result: string[] = await window.ethereum.request({ + method: 'wallet_invokeSnap', + params: { + snapId: 'npm:@transeptor-labs/smarthub-snap', + request: { + method: 'get_user_ops_hashes', + params: [ + { + keyringAccountId: 'keyringAccountId', + }, + ], + }, + }, +}); + +console.log(result); +``` + +#### clear_activity_data + +Clears all the smart account activity data from the snap storage. + +```TS +await window.ethereum.request({ + method: 'wallet_invokeSnap', + params: { + snapId: 'npm:@transeptor-labs/smarthub-snap', + request: { + method: 'clear_activity_data', + params: [], + }, + }, +}); +``` + +#### add_bundler_url + +Add a new bundler url to the snap storage. + +```TS +await window.ethereum.request({ + method: 'wallet_invokeSnap', + params: { + snapId: 'npm:@transeptor-labs/smarthub-snap', + request: { + method: 'add_bundler_url', + params: ['chainId', 'url'], + }, + }, +}); +``` + +#### get_bundler_urls + +Returns a list of all the bundler urls in the snap storage. + +```TS +type BundlerUrls = { [chainId: string]: string }; + +const result: BundlerUrls = await window.ethereum.request({ + method: 'wallet_invokeSnap', + params: { + snapId: 'npm:@transeptor-labs/smarthub-snap', + request: { + method: 'get_bundler_urls', + params: [], + }, + }, +}); + +console.log(result); +``` + +### Build ERC-4337 + +Custom RPC method that helps dapps build ERC-4337 user operations. + +#### get_user_op_call_data + +Generates the call data for the given user operation. + +```TS +const result: string = await window.ethereum.request({ + method: 'wallet_invokeSnap', + params: { + snapId: 'npm:@transeptor-labs/smarthub-snap', + request: { + method: 'get_user_op_call_data', + params: [ + { + keyringAccountId: 'keyringAccountId', + to: 'to address', + value: BigNumber.from('0'), + data: 'encoded data', + }, + ], + }, + }, +}); + +console.log(result); +``` + +#### estimate_creation_gas + +Estimates the gas cost for creating a new counter factual smart account. + +```TS +const result: string = await window.ethereum.request({ + method: 'wallet_invokeSnap', + params: { + snapId: 'npm:@transeptor-labs/smarthub-snap', + request: { + method: 'estimate_creation_gas', + params: [ + { + keyringAccountId: 'keyringAccountId', + } + ], + }, + }, +}); +const parsedResult = JSON.parse(result as string); +console.log(BigNumber.from(parsedResult) as BigNumber); +``` + +### ERC-4337 eth and debug methods + +Wraps all the eth and debug methods for [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337). + +Methods supported by the snap: + +- eth_supportedEntryPoints +- eth_estimateUserOperationGas +- eth_getUserOperationByHash +- eth_getUserOperationReceipt +- web3_clientVersion +- debug_bundler_clearState +- debug_bundler_dumpMempool +- debug_bundler_sendBundleNow +- debug_bundler_setBundlingMode +- debug_bundler_setReputation +- debug_bundler_dumpReputation + +To invoke any of these methods use the `wallet_invokeSnap` RPC method. + +This example shows how to invoke the `eth_supportedEntryPoints` method, but the same applies to all the other methods. + +```TS +await window.ethereum.request({ + method: 'wallet_invokeSnap', + params: { + snapId: 'npm:@transeptor-labs/smarthub-snap', + request: { + method: 'eth_supportedEntryPoints', // replace with your desired ERC-4337 method + params: [], // add the required params for the method + }, + }, +}); +``` + +## Keyring methods + +Used MetaMask keyring to create and manage accounts that are natively supported within the extension, appearing in MetaMask's UI, and can be used with dapps. Dapps can invoke these methods using the `KeyringSnapRpcClient` instance. + +### Create Account + +Creates a new ERC-4337 smart account and adds it to the keyring. Returns the new account's address. + +```TS +import { KeyringSnapRpcClient } from '@metamask/keyring-api'; + +const client: KeyringSnapRpcClient = new KeyringSnapRpcClient('npm:@transeptor-labs/smarthub-snap', window.ethereum); + +const newAccount = await client.createAccount({ + name: 'my new account', +}); +``` + +### Delete Account + +Deletes the smart account with the given ID from the keyring. + +```TS +import { KeyringSnapRpcClient } from '@metamask/keyring-api'; + +const client: KeyringSnapRpcClient = new KeyringSnapRpcClient('npm:@transeptor-labs/smarthub-snap', window.ethereum); +await client.deleteAccount(keyringAccountId); +``` + +### List Accounts + +Returns a list of all the smart accounts in the keyring. + +```TS +import { KeyringSnapRpcClient } from '@metamask/keyring-api'; + +const client: KeyringSnapRpcClient = new KeyringSnapRpcClient('npm:@transeptor-labs/smarthub-snap', window.ethereum); +const accounts = await client.listAccounts(); +``` + +### List Request + +Returns a list of all the smart account pending requests in the keyring. + +```TS +import { KeyringSnapRpcClient } from '@metamask/keyring-api'; + +const client: KeyringSnapRpcClient = new KeyringSnapRpcClient('npm:@transeptor-labs/smarthub-snap', window.ethereum); +const pendingRequests = await client.listRequests(); +``` + +### Approve Request + +Approves a smart account pending request in the keyring. + +```TS +import { KeyringSnapRpcClient } from '@metamask/keyring-api'; + +const client: KeyringSnapRpcClient = new KeyringSnapRpcClient('npm:@transeptor-labs/smarthub-snap', window.ethereum); + +await client.approveRequest('requestId'); +``` + +### Reject Request + +Rejects a smart account pending request in the keyring. + +```TS +import { KeyringSnapRpcClient } from '@metamask/keyring-api'; + +const client: KeyringSnapRpcClient = new KeyringSnapRpcClient('npm:@transeptor-labs/smarthub-snap', window.ethereum); + +await client.rejectRequest(requestId); +``` + +### Send Request Async + +Sends a request to the keyring that will be handled asynchronously waiting for the user to approve or reject it. + +```TS +import { KeyringSnapRpcClient } from '@metamask/keyring-api'; + +const client: KeyringSnapRpcClient = new KeyringSnapRpcClient('npm:@transeptor-labs/smarthub-snap', window.ethereum); + +const result = await snapRpcClient.submitRequest({ + id: '0', + account: 'youKeyringAccountId', + scope: 'async', + request: { + method: 'personal_sign', + params: [], + }, +}); +``` + +### Send Request Sync + +Sends a request to the keyring that will be handled synchronously(immediately) returning the result of the request. + +```TS +import { KeyringSnapRpcClient } from '@metamask/keyring-api'; + +const client: KeyringSnapRpcClient = new KeyringSnapRpcClient('npm:@transeptor-labs/smarthub-snap', window.ethereum); + +const result: = await snapRpcClient.submitRequest({ + id: '0', + account: 'youKeyringAccountId', + scope: 'sync', + request: { + method: 'personal_sign', + params: [], + }, +}); +``` diff --git a/packages/snap/package.json b/packages/snap/package.json index 4d5b74c..c123a82 100644 --- a/packages/snap/package.json +++ b/packages/snap/package.json @@ -1,19 +1,29 @@ { - "name": "@transeptor/erc-4337-relayer", + "name": "@transeptor-labs/smarthub-snap", "version": "0.1.0", - "private": true, - "description": "A MetaMask snap the wraps ERC-4337 eth namespace methods", + "description": "A MetaMask snap the helps you manage ERC-4337 smart account", + "keywords": [ + "metamask", + "snap", + "keyring", + "smart account", + "ERC-4337" + ], + "homepage": "https://github.com/transeptorlabs/smarthub-snap/#readme", + "bugs": { + "url": "https://github.com/transeptorlabs/smarthub-snap/issues" + }, "repository": { "type": "git", - "url": "https://github.com/transeptorlabs/erc-4337-snap.git" + "url": "https://github.com/transeptorlabs/smarthub-snap.git" }, - "license": "(MIT-0 OR Apache-2.0)", + "license": "MIT", "author": { "name": "Transeptor Labs", "email": "transeptorhq@gmail.com", "url": "https://transeptorlabs.io" }, - "main": "src/index.ts", + "main": "dist/bundle.js", "files": [ "dist/", "images/", @@ -59,14 +69,11 @@ "@ethereumjs/tx": "^4.1.2", "@ethereumjs/util": "^8.0.5", "@metamask/eth-sig-util": "^5.0.2", - "@metamask/key-tree": "^6.0.0", - "@metamask/keyring-api": "^0.1.3", - "@metamask/rpc-methods": "^0.30.0", - "@metamask/snaps-types": "0.38.0-flask.1", + "@metamask/keyring-api": "^1.0.0", + "@metamask/snaps-types": "^3.0.0", "@metamask/snaps-ui": "^0.32.2", "@metamask/utils": "^3.3.0", "buffer": "^6.0.3", - "eth-rpc-errors": "^4.0.3", "ethers": "^5.7.0", "uuid": "^9.0.0" }, @@ -77,7 +84,7 @@ "@metamask/eslint-config-jest": "^10.0.0", "@metamask/eslint-config-nodejs": "^10.0.0", "@metamask/eslint-config-typescript": "^10.0.0", - "@metamask/snaps-cli": "^0.32.2", + "@metamask/snaps-cli": "^3.0.0", "@types/jest": "^29.5.2", "@typescript-eslint/eslint-plugin": "^5.33.0", "@typescript-eslint/parser": "^5.33.0", @@ -100,7 +107,7 @@ }, "packageManager": "yarn@3.2.1", "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "publishConfig": { "access": "public", diff --git a/packages/snap/snap.config.js b/packages/snap/snap.config.js deleted file mode 100644 index 13e5bc9..0000000 --- a/packages/snap/snap.config.js +++ /dev/null @@ -1,24 +0,0 @@ -const through = require('through2'); - -module.exports = { - cliOptions: { - src: './src/index.ts', - port: 8080, - }, - bundlerCustomizer: (bundler) => { - bundler.transform(function () { - let data = ''; - return through( - function (buffer, _encoding, callback) { - data += buffer; - callback(); - }, - function (callback) { - this.push("globalThis.Buffer = require('buffer/').Buffer;"); - this.push(data); - callback(); - }, - ); - }); - }, -}; diff --git a/packages/snap/snap.config.ts b/packages/snap/snap.config.ts new file mode 100644 index 0000000..9268575 --- /dev/null +++ b/packages/snap/snap.config.ts @@ -0,0 +1,34 @@ +import type { SnapConfig } from '@metamask/snaps-cli'; + +const config: SnapConfig = { + bundler: 'webpack', + input: 'src/index.ts', + server: { port: 8080 }, + polyfills: { + buffer: true, + stream: true, + crypto: true, + }, + environment: { + DAPP_ORIGIN_PRODUCTION: 'https://transeptorlabs.github.io/smarthub', + DAPP_ORIGIN_DEVELOPMENT: 'http://localhost:8000/', + }, + stats: { + builtIns: { + // The following builtins can be ignored. They are used by some of the + // dependencies, but are not required by this snap. + ignore: [ + 'events', + 'http', + 'https', + 'zlib', + 'util', + 'url', + 'string_decoder', + 'punycode', + ], + }, + }, +}; + +export default config; diff --git a/packages/snap/snap.manifest.json b/packages/snap/snap.manifest.json index f853685..ab032b0 100644 --- a/packages/snap/snap.manifest.json +++ b/packages/snap/snap.manifest.json @@ -1,18 +1,18 @@ { "version": "0.1.0", - "description": "A MetaMask snap the wraps ERC-4337 eth namespace methods.", - "proposedName": "ERC-4337 Relayer", + "description": "A snap the helps you manage ERC-4337 smart account", + "proposedName": "SmartHub", "repository": { "type": "git", - "url": "https://github.com/transeptorlabs/erc-4337-snap.git" + "url": "https://github.com/transeptorlabs/smarthub-snap.git" }, "source": { - "shasum": "pzjrsPDQ9FhkEXf/5NqGi+3G6G92E3/L2Lh134QsOKA=", + "shasum": "VdbGSpRmEPAgnbLMmvYcAfvYeoKgJHC1v2kknbsLV0M=", "location": { "npm": { "filePath": "dist/bundle.js", "iconPath": "images/icon.svg", - "packageName": "@transeptor/erc-4337-relayer", + "packageName": "@transeptor-labs/smarthub-snap", "registry": "https://registry.npmjs.org/" } } @@ -20,13 +20,18 @@ "initialPermissions": { "snap_dialog": {}, "endowment:rpc": { - "dapps": true, - "snaps": false + "dapps": true }, "endowment:ethereum-provider": {}, "endowment:network-access": {}, "snap_manageState": {}, "snap_manageAccounts": {}, + "endowment:keyring": { + "allowedOrigins": [ + "https://transeptorlabs.github.io", + "http://localhost:8000" + ] + }, "snap_getEntropy": {} }, "manifestVersion": "0.1" diff --git a/packages/snap/src/index.ts b/packages/snap/src/index.ts index 5093cf0..8b92b5f 100644 --- a/packages/snap/src/index.ts +++ b/packages/snap/src/index.ts @@ -1,8 +1,10 @@ -import { OnRpcRequestHandler } from '@metamask/snaps-types'; +import type { + OnRpcRequestHandler, + OnKeyringRequestHandler, +} from '@metamask/snaps-types'; import { KeyringAccount, MethodNotSupportedError, - buildHandlersChain, handleKeyringRequest, } from '@metamask/keyring-api'; import { BigNumber } from 'ethers'; @@ -49,28 +51,15 @@ import { let keyring: SimpleKeyring; /** - * Handle execution permissions. + * Verify if the caller can call the requested method. * - * @param args - Request arguments. - * @param args.origin - Caller origin. - * @param args.request - Request to execute. - * @returns Nothing, throws `MethodNotSupportedError` if the caller IS allowed - * to call the method, throws an `Error` otherwise. + * @param origin - Caller origin. + * @param method - Method being called. + * @returns True if the caller is allowed to call the method, false otherwise. */ -const permissionsHandler: OnRpcRequestHandler = async ({ - origin, - request, -}): Promise => { - const hasPermission = Boolean( - PERMISSIONS.get(origin)?.includes(request.method), - ); - console.log('SNAPS/', 'hasPermission check', hasPermission); - - if (!hasPermission) { - throw new Error(`origin ${origin} cannot call method ${request.method}`); - } - throw new MethodNotSupportedError(request.method); -}; +function hasPermission(origin: string, method: string): boolean { + return PERMISSIONS.get(origin)?.includes(method) ?? false; +} const intitKeyRing = async () => { const keyringState: KeyringState = await getKeyRing(); @@ -78,26 +67,30 @@ const intitKeyRing = async () => { }; /** - * Handle keyring requests. + * Handle incoming JSON-RPC requests, sent through `wallet_invokeSnap`. * * @param args - Request arguments. * @param args.request - Request to execute. + * @param args.origin - Caller origin. * @returns The execution result. */ -const keyringHandler: OnRpcRequestHandler = async ({ request }) => { - await intitKeyRing(); - return await handleKeyringRequest(keyring, request); -}; +export const onRpcRequest: OnRpcRequestHandler = async ({ + origin, + request, +}) => { + console.log( + `SNAPS/RPC request (origin="${origin}"):`, + JSON.stringify(request, undefined, 2), + ); -/** - * Handle incoming JSON-RPC requests, sent through `wallet_invokeSnap`. - * - * @param args - The request handler args as object. - * invoked the snap. - * @param args.request - A validated JSON-RPC request object. - * @throws If the request method is not valid for this snap. - */ -const erc4337Handler: OnRpcRequestHandler = async ({ request }) => { + // Check if origin is allowed to call method. + if (!hasPermission(origin, request.method)) { + throw new Error( + `Origin '${origin}' is not allowed to call '${request.method}'`, + ); + } + + // Handle custom methods. const [bundlerUrls, chainId] = await Promise.all([ getBundlerUrls(), ethereum.request({ method: 'eth_chainId' }), @@ -138,30 +131,40 @@ const erc4337Handler: OnRpcRequestHandler = async ({ request }) => { request.params as any[] )[0] as SmartAccountParams; - const ownerAccount: KeyringAccount | undefined = await keyring.getAccount( - params.keyringAccountId, - ); - if (!ownerAccount) { + const keyringAccount: KeyringAccount | undefined = + await keyring.getAccount(params.keyringAccountId); + if (!keyringAccount) { throw new Error('Account not found'); } - const scAddress = await getSmartAccountAddress(ownerAccount.address); - const [balance, nonce, deposit] = await Promise.all([ - await getBalance(scAddress), - await getNonce(scAddress), - await getDeposit(scAddress), - ]); + const owner = keyringAccount.options.owner as string | undefined; + if (!owner) { + throw new Error('Owner not found'); + } + + const scAddress = await getSmartAccountAddress(owner); + const [smartAcountBalance, ownerBalance, nonce, deposit] = + await Promise.all([ + await getBalance(scAddress), + await getBalance(owner), + await getNonce(scAddress), + await getDeposit(scAddress), + ]); result = JSON.stringify({ - initCode: await getAccountInitCode(ownerAccount.address), + initCode: await getAccountInitCode(owner), address: scAddress, - balance, + balance: smartAcountBalance, // in wei nonce, index: BigNumber.from(0), entryPoint: DEFAULT_ENTRY_POINT, factoryAddress: DEFAULT_ACCOUNT_FACTORY, deposit, - ownerAddress: ownerAccount.address, + ownerAddress: owner, + owner: { + address: owner, + balance: ownerBalance, // in wei + }, }); return result; @@ -238,17 +241,11 @@ const erc4337Handler: OnRpcRequestHandler = async ({ request }) => { result = await storeTxHash( params.keyringAccountId, params.txHash, - params.keyringRequestId, params.chainId, ); return result; } - case InternalMethod.GetSignedTxs: { - result = await getKeyRing(); - return JSON.stringify(result.signedTx); - } - case InternalMethod.AddBundlerUrl: { result = await storeBundlerUrl( (request.params as any[])[0], @@ -351,12 +348,35 @@ const erc4337Handler: OnRpcRequestHandler = async ({ request }) => { return await rpcClient.send(request.method, request.params as any[]); } default: - throw new Error('Method not found.'); + throw new MethodNotSupportedError(request.method); } }; -export const onRpcRequest: OnRpcRequestHandler = buildHandlersChain( - permissionsHandler, - keyringHandler, - erc4337Handler, -); +/** + * Handle keyring requests. + * + * @param args - Request arguments. + * @param args.request - Request to execute. + * @param args.origin - Caller origin. + * @returns The execution result. + */ +export const onKeyringRequest: OnKeyringRequestHandler = async ({ + origin, + request, +}) => { + console.log( + `SNAPS/Keyring request (origin="${origin}"):`, + JSON.stringify(request, undefined, 2), + ); + + // Check if origin is allowed to call method. + if (!hasPermission(origin, request.method)) { + throw new Error( + `Origin '${origin}' is not allowed to call '${request.method}'`, + ); + } + + // Handle keyring methods. + await intitKeyRing(); + return await handleKeyringRequest(keyring, request); +}; diff --git a/packages/snap/src/keyring/keyring.ts b/packages/snap/src/keyring/keyring.ts index 6eac873..e525c0f 100644 --- a/packages/snap/src/keyring/keyring.ts +++ b/packages/snap/src/keyring/keyring.ts @@ -17,32 +17,36 @@ import { recoverPersonalSignature, signTypedData, } from '@metamask/eth-sig-util'; -import { +import type { Keyring, KeyringAccount, KeyringRequest, SubmitRequestResponse, } from '@metamask/keyring-api'; +import { + EthAccountType, + EthMethod, + emitSnapKeyringEvent, +} from '@metamask/keyring-api'; +import { KeyringEvent } from '@metamask/keyring-api/dist/events'; import type { Json, JsonRpcRequest } from '@metamask/utils'; import { v4 as uuid } from 'uuid'; - import { Wallet as EthersWallet, ethers } from 'ethers'; import { EntryPoint__factory } from '@account-abstraction/contracts'; import { deepHexlify } from '@account-abstraction/utils'; -import { HttpRpcClient } from '../client'; -import { getBundlerUrls, storeKeyRing, storeUserOpHash } from '../state/state'; +import { storeKeyRing } from '../state/state'; import { isEvmChain, serializeTransaction, isUniqueAccountName, } from '../utils'; -import { DEFAULT_ENTRY_POINT } from '../4337'; +import { DEFAULT_ENTRY_POINT, getSmartAccountAddress } from '../4337'; import { UserOperation } from '../types'; +import packageInfo from '../../package.json'; export type KeyringState = { wallets: Record; pendingRequests: Record; - signedTx: Record; }; export type Wallet = { @@ -55,12 +59,55 @@ export class SimpleKeyring implements Keyring { #pendingRequests: Record; - #signedTx: Record; - constructor(state: KeyringState) { this.#wallets = state.wallets; this.#pendingRequests = state.pendingRequests; - this.#signedTx = state.signedTx; + } + + /* + Will generate a private key using a deterministic 256-bit value specific to the Snap and the user’s MetaMask account(i.e., snapId + MetaMask secret recovery phrase + account name as salt). + This private key will be used to sign userOps for eip155:erc4337 type keyring account. + Since the private key is generated deterministically, the user will be able to recover the same account for a given Snap version account name(human readable) and MetaMask SRP. + */ + async #generateKeyPair( + name: string, + ): Promise<{ privateKey: string; address: string }> { + const privKey = await snap.request({ + method: 'snap_getEntropy', + params: { + version: 1, + salt: name, + }, + }); + + const privateKeyBuffer = Buffer.from(stripHexPrefix(privKey), 'hex'); + const address = toChecksumAddress( + Address.fromPrivateKey(privateKeyBuffer).toString(), + ); + return { privateKey: privateKeyBuffer.toString('hex'), address }; + } + + #getWalletByAddress(address: string): Wallet { + const walletMatch = Object.values(this.#wallets).find( + (wallet) => + wallet.account.address.toLowerCase() === address.toLowerCase(), + ); + + if (walletMatch === undefined) { + throw new Error(`Cannot find wallet for address: ${address}`); + } + return walletMatch; + } + + #getWalletById(accountId: string): Wallet { + const walletMatch = Object.values(this.#wallets).find( + (wallet) => wallet.account.id.toLowerCase() === accountId.toLowerCase(), + ); + + if (walletMatch === undefined) { + throw new Error(`Cannot find wallet for accountId: ${accountId}`); + } + return walletMatch; } async listAccounts(): Promise { @@ -72,44 +119,44 @@ export class SimpleKeyring implements Keyring { } async createAccount( - name: string, - options: Record | null = null, + options: Record = {}, ): Promise { - const { privateKey, address } = await this.#generateKeyPair(name); + console.log( + `SNAPS/Keyring handler (createAccount):`, + JSON.stringify(options, undefined, 2), + ); + + // extract name from options + const name = options?.name as string | undefined; + if (!name) { + throw new Error('Account name is required'); + } if (!isUniqueAccountName(name, Object.values(this.#wallets))) { throw new Error(`Account name already in use: ${name}`); } - + const { privateKey, address } = await this.#generateKeyPair(name); const account: KeyringAccount = { id: uuid(), - name, - options, - address, - supportedMethods: [ - 'eth_sendTransaction', - 'eth_signTransaction', - 'eth_sign', - 'eth_signTypedData_v1', - 'eth_signTypedData_v2', - 'eth_signTypedData_v3', - 'eth_signTypedData_v4', - 'eth_signTypedData', - 'personal_sign', + options: { + name, + owner: address, + }, // only include name and owner in options + address: await getSmartAccountAddress(address), + methods: [ + EthMethod.PersonalSign, + EthMethod.Sign, + EthMethod.SignTransaction, + EthMethod.SignTypedDataV1, + EthMethod.SignTypedDataV3, + EthMethod.SignTypedDataV4, ], - type: 'eip155:erc4337', + type: EthAccountType.Eip4337, }; this.#wallets[account.id] = { account, privateKey }; await this.#saveState(); - - await snap.request({ - method: 'snap_manageAccounts', - params: { - method: 'createAccount', - params: { account }, - }, - }); + await this.#emitEvent(KeyringEvent.AccountCreated, { account }); return account; } @@ -121,43 +168,39 @@ export class SimpleKeyring implements Keyring { async updateAccount(account: KeyringAccount): Promise { const currentAccount = this.#wallets[account.id].account; + if (currentAccount === undefined) { + throw new Error(`Account '${account.id}' not found`); + } + const newAccount: KeyringAccount = { ...currentAccount, ...account, // Restore read-only properties. address: currentAccount.address, - supportedMethods: currentAccount.supportedMethods, + methods: currentAccount.methods, type: currentAccount.type, options: currentAccount.options, }; - if (!isUniqueAccountName(account.name, Object.values(this.#wallets))) { - throw new Error(`Account name already in use: ${account.name}`); + if (account.options.name !== currentAccount.options.name) { + throw new Error(`Account name can not change: ${account.options.name}`); + } + + if (account.type !== currentAccount.type) { + throw new Error(`Account type can not change: ${account.type}`); } this.#wallets[account.id].account = newAccount; await this.#saveState(); - - await snap.request({ - method: 'snap_manageAccounts', - params: { - method: 'updateAccount', - params: { account }, - }, + await this.#emitEvent(KeyringEvent.AccountUpdated, { + account: newAccount, }); } async deleteAccount(id: string): Promise { delete this.#wallets[id]; await this.#saveState(); - - await snap.request({ - method: 'snap_manageAccounts', - params: { - method: 'deleteAccount', - params: { id }, - }, - }); + await this.#emitEvent(KeyringEvent.AccountDeleted, { id }); } async listRequests(): Promise { @@ -168,174 +211,156 @@ export class SimpleKeyring implements Keyring { return this.#pendingRequests[id]; } - /* - This snap implements asynchronous implementation, the request is stored in queue of pending requests to be approved or rejected by the user. - */ async submitRequest(request: KeyringRequest): Promise { - console.log('SNAPS/', ' submitRequest requests', JSON.stringify(request)); + console.log( + 'SNAPS/submitRequest requests:', + JSON.stringify(request, undefined, 2), + ); + + if (request.scope !== 'async' && request.scope !== 'sync') { + throw new Error( + `Invalid request scope: ${request.scope}, must be 'async' or 'sync'`, + ); + } + return request.scope === 'sync' + ? this.#syncSubmitRequest(request) + : this.#asyncSubmitRequest(request); + } - if (request.request.id === '') { - throw new Error('Request id is required'); + #getCurrentUrl(): string { + const dappUrlPrefix = + process.env.NODE_ENV === 'production' + ? process.env.DAPP_ORIGIN_PRODUCTION + : process.env.DAPP_ORIGIN_DEVELOPMENT; + const dappVersion: string = packageInfo.version; + + // Ensuring that both dappUrlPrefix and dappVersion are truthy + if (dappUrlPrefix && dappVersion && process.env.NODE_ENV === 'production') { + return `${dappUrlPrefix}${dappVersion}/`; } + // Default URL if dappUrlPrefix or dappVersion are falsy, or if URL construction fails + return dappUrlPrefix as string; + } - this.#pendingRequests[request.request.id] = request; + /* + Asynchronous request are stored in queue of pending requests to be approved or rejected by the user. + */ + async #asyncSubmitRequest( + request: KeyringRequest, + ): Promise { + this.#pendingRequests[request.id] = request; await this.#saveState(); + const dappUrl = this.#getCurrentUrl(); return { pending: true, + redirect: { + url: dappUrl, + message: 'Redirecting to Snap Simple Keyring to sign transaction', + }, }; } - async approveRequest(_id: string): Promise { + /* + Synchronous request are not stored and the result is return to the user. + */ + async #syncSubmitRequest( + request: KeyringRequest, + ): Promise { + const { method, params = [] } = request.request as JsonRpcRequest; + const result = await this.#handleSigningRequest(method, params); + return { + pending: false, + result, + }; + } + + async approveRequest(id: string): Promise { try { - const request: KeyringRequest = await this.getRequest(_id); + const { request } = await this.getRequest(id); + if (request === undefined) { + throw new Error(`Request '${id}' not found`); + } + console.log( 'SNAPS/', ' approveRequest requests', JSON.stringify(request), ); - const { method, params } = request.request as JsonRpcRequest; - const signature = await this.#handleSigningRequest( - method, - params as Json, + + const result = await this.#handleSigningRequest( + request.method, + (request.params as Json) ?? [], ); - await snap.request({ - method: 'snap_manageAccounts', - params: { - method: 'submitResponse', - params: { id: _id, result: signature }, - }, - }); - - delete this.#pendingRequests[_id]; - if (method === 'eth_signTransaction') { - this.#signedTx[_id] = signature as string; - } + delete this.#pendingRequests[id]; await this.#saveState(); + await this.#emitEvent(KeyringEvent.RequestApproved, { id, result }); } catch (e) { - delete this.#pendingRequests[_id]; + delete this.#pendingRequests[id]; await this.#saveState(); throw e; } } - async rejectRequest(_id: string): Promise { - const request: KeyringRequest = await this.getRequest(_id); - console.log('SNAPS/', ' rejectRequest requests', JSON.stringify(request)); - - await snap.request({ - method: 'snap_manageAccounts', - params: { - method: 'submitResponse', - params: { id: _id, result: null }, - }, - }); - - delete this.#pendingRequests[_id]; - await this.#saveState(); - } - - #getWalletByAddress(address: string): Wallet { - const walletMatch = Object.values(this.#wallets).find( - (wallet) => - wallet.account.address.toLowerCase() === address.toLowerCase(), - ); - - if (walletMatch === undefined) { - throw new Error(`Cannot find wallet for address: ${address}`); - } - return walletMatch; - } - - #getWalletById(accountId: string): Wallet { - const walletMatch = Object.values(this.#wallets).find( - (wallet) => wallet.account.id.toLowerCase() === accountId.toLowerCase(), + async rejectRequest(id: string): Promise { + const request: KeyringRequest = await this.getRequest(id); + console.log( + 'SNAPS/rejectRequest requests:', + JSON.stringify(request, undefined, 2), ); - if (walletMatch === undefined) { - throw new Error(`Cannot find wallet for accountId: ${accountId}`); + if (request === undefined) { + throw new Error(`Request '${id}' not found`); } - return walletMatch; - } - /* - Will generate a private key using a deterministic 256-bit value specific to the Snap and the user’s MetaMask account(i.e., snapId + MetaMask secret recovery phrase + account name as salt). - This private key will be used to sign userOps for eip155:erc4337 type keyring account. - Since the private key is generated deterministically, the user will be able to recover the same account for a given Snap version account name(human readable) and MetaMask SRP. - */ - async #generateKeyPair( - name: string, - ): Promise<{ privateKey: string; address: string }> { - const privKey = await snap.request({ - method: 'snap_getEntropy', - params: { - version: 1, - salt: name, - }, - }); - - const privateKeyBuffer = Buffer.from(stripHexPrefix(privKey), 'hex'); - const address = toChecksumAddress( - Address.fromPrivateKey(privateKeyBuffer).toString(), - ); - return { privateKey: privateKeyBuffer.toString('hex'), address }; + delete this.#pendingRequests[id]; + await this.#saveState(); + await this.#emitEvent(KeyringEvent.RequestRejected, { id }); } async #handleSigningRequest(method: string, params: Json): Promise { switch (method) { - case 'personal_sign': { - const [from, message] = params as string[]; + case EthMethod.PersonalSign: { + const [from, message] = params as [string, string]; return this.#signPersonalMessage(from, message); } - case 'eth_sendTransaction': { - const [from, userOperation] = params as [string, UserOperation]; - const provider = new ethers.providers.Web3Provider(ethereum as any); - const entryPointContract = new ethers.Contract( - DEFAULT_ENTRY_POINT, - EntryPoint__factory.abi, - provider, - ); - - // sign the userOp - const { privateKey, account } = this.#getWalletByAddress(from); - const wallet = new EthersWallet(privateKey); - userOperation.signature = '0x'; - const userOpHash = ethers.utils.arrayify( - await entryPointContract.getUserOpHash(userOperation), - ); - const signature = await wallet.signMessage(userOpHash); - userOperation.signature = signature; - - // send the userOp - const hexifiedUserOp: UserOperation = deepHexlify(userOperation); - await this.#handleSendUserOp(account.id, hexifiedUserOp); - - return signature; + case EthMethod.SignTransaction: { + const [from, type, tx] = params as [ + string, + string, + JsonTx | UserOperation, + ]; + if (type === 'eoa') { + return await this.#signTransactionEthers(from, tx as JsonTx); + } else if (type === 'eip4337') { + return (await this.#signUserOp(from, tx as UserOperation)) as Json; + } + throw new Error(`Unknown account type: ${type}`); } - case 'eth_signTransaction': { - const [from, tx] = params as [string, JsonTx, Json]; - const provider = new ethers.providers.Web3Provider(ethereum as any); - const { privateKey } = this.#getWalletByAddress(from); - const wallet = new EthersWallet(privateKey, provider); - return await wallet.signTransaction(tx as any); + case EthMethod.SignTypedDataV1: { + const [from, data] = params as [string, Json]; + return this.#signTypedData(from, data, { + version: SignTypedDataVersion.V1, + }); } - case 'eth_signTypedData': - case 'eth_signTypedData_v1': - case 'eth_signTypedData_v2': - case 'eth_signTypedData_v3': - case 'eth_signTypedData_v4': { - const [from, data, opts] = params as [ - string, - Json, - { version: SignTypedDataVersion }, - ]; - return this.#signTypedData(from, data, opts); + case EthMethod.SignTypedDataV3: { + const [from, data] = params as [string, Json]; + return this.#signTypedData(from, data, { + version: SignTypedDataVersion.V3, + }); + } + + case EthMethod.SignTypedDataV4: { + const [from, data] = params as [string, Json]; + return this.#signTypedData(from, data, { + version: SignTypedDataVersion.V4, + }); } - case 'eth_sign': { + case EthMethod.Sign: { const [from, data] = params as [string, string]; return this.#signMessage(from, data); } @@ -346,33 +371,33 @@ export class SimpleKeyring implements Keyring { } } - async #handleSendUserOp( - accountId: string, - signedUserOp: UserOperation, - ): Promise { - console.log('SNAPS/', 'handle handleSendUserOp ', accountId, signedUserOp); - - // connect to rpc - const [bundlerUrls, chainId] = await Promise.all([ - getBundlerUrls(), - ethereum.request({ method: 'eth_chainId' }), - ]); - const rpcClient = new HttpRpcClient(bundlerUrls, chainId as string); - const rpcResult = await rpcClient.send('eth_sendUserOperation', [ - signedUserOp, + async #signUserOp( + from: string, + userOp: UserOperation, + ): Promise { + const provider = new ethers.providers.Web3Provider(ethereum as any); + const entryPointContract = new ethers.Contract( DEFAULT_ENTRY_POINT, - ]); - - // store userOp hash pending - if (rpcResult.sucess === true) { - await storeUserOpHash( - accountId, - chainId as string, - rpcResult.data as string, - ); - } else { - throw new Error(`Failed to send user op: ${rpcResult.data}`); - } + EntryPoint__factory.abi, + provider, + ); + + // sign the userOp + const { privateKey } = this.#getWalletByAddress(from); + const wallet = new EthersWallet(privateKey); + userOp.signature = '0x'; + const userOpHash = ethers.utils.arrayify( + await entryPointContract.getUserOpHash(userOp), + ); + const signature = await wallet.signMessage(userOpHash); + return deepHexlify({ ...userOp, signature }); + } + + async #signTransactionEthers(from: string, tx: JsonTx): Promise { + const provider = new ethers.providers.Web3Provider(ethereum as any); + const { privateKey } = this.#getWalletByAddress(from); + const wallet = new EthersWallet(privateKey, provider); + return await wallet.signTransaction(tx as any); } #signTransaction(from: string, tx: JsonTx): Json { @@ -457,7 +482,13 @@ export class SimpleKeyring implements Keyring { await storeKeyRing({ wallets: this.#wallets, pendingRequests: this.#pendingRequests, - signedTx: this.#signedTx, } as KeyringState); } + + async #emitEvent( + event: KeyringEvent, + data: Record, + ): Promise { + await emitSnapKeyringEvent(snap, event, data); + } } diff --git a/packages/snap/src/keyring/permissions.ts b/packages/snap/src/keyring/permissions.ts index ab6840c..5c5a9fc 100644 --- a/packages/snap/src/keyring/permissions.ts +++ b/packages/snap/src/keyring/permissions.ts @@ -1,27 +1,10 @@ -export enum SnapKeyringMethod { - ListAccounts = 'keyring_listAccounts', - CreateAccount = 'keyring_createAccount', - GetAccount = 'keyring_getAccount', - UpdateAccount = 'keyring_updateAccount', - DeleteAccount = 'keyring_deleteAccount', - ExportAccount = 'keyring_exportAccount', -} - -export enum RequestMethods { - GetRequest = 'keyring_getRequest', - SubmitRequest = 'keyring_submitRequest', - ListRequests = 'keyring_listRequests', - DeleteRequest = 'keyring_deleteRequest', - ApproveRequest = 'keyring_approveRequest', - RejectRequest = 'keyring_rejectRequest', -} +import { KeyringRpcMethod } from '@metamask/keyring-api'; export enum InternalMethod { // Smart account management GetNextRequestId = 'get_next_request_id', SmartAccount = 'sc_account', GetUserOpsHashes = 'get_user_ops_hashes', - GetSignedTxs = 'get_signed_txs', GetTxHashes = 'get_tx_hashes', StoreTxHash = 'store_tx_hash', GetUserOpCallData = 'get_user_op_call_data', @@ -51,54 +34,44 @@ export enum InternalMethod { ClearActivityData = 'clear_activity_data', } -// Not used yet -export enum SigningMethods { - SignTransaction = 'sign_transaction', - SignTypedData = 'eth_signTypedData', - SignPersonalMessage = 'personal_sign', - EthSign = 'eth_sign', -} - export const PERMISSIONS = new Map([ [ 'metamask', [ - // Snap keyring methods - SnapKeyringMethod.ListAccounts, - SnapKeyringMethod.CreateAccount, - SnapKeyringMethod.DeleteAccount, - SnapKeyringMethod.UpdateAccount, - - // Snap request methods - RequestMethods.ListRequests, - RequestMethods.SubmitRequest, - RequestMethods.ApproveRequest, - RequestMethods.RejectRequest, + // Keyring methods + KeyringRpcMethod.ListAccounts, + KeyringRpcMethod.CreateAccount, + KeyringRpcMethod.DeleteAccount, + KeyringRpcMethod.UpdateAccount, + KeyringRpcMethod.ListRequests, + KeyringRpcMethod.SubmitRequest, + KeyringRpcMethod.ApproveRequest, + KeyringRpcMethod.RejectRequest, ], ], [ 'http://localhost:8000', [ - // Snap keyring methods - SnapKeyringMethod.ListAccounts, - SnapKeyringMethod.CreateAccount, - SnapKeyringMethod.GetAccount, - SnapKeyringMethod.UpdateAccount, - SnapKeyringMethod.DeleteAccount, - SnapKeyringMethod.ExportAccount, - - // Snap request methods - RequestMethods.ListRequests, - RequestMethods.SubmitRequest, - RequestMethods.ApproveRequest, - RequestMethods.DeleteRequest, - RequestMethods.RejectRequest, + // keyring methods + KeyringRpcMethod.ListAccounts, + KeyringRpcMethod.CreateAccount, + KeyringRpcMethod.GetAccount, + KeyringRpcMethod.UpdateAccount, + KeyringRpcMethod.DeleteAccount, + KeyringRpcMethod.ExportAccount, + KeyringRpcMethod.ListRequests, + KeyringRpcMethod.SubmitRequest, + KeyringRpcMethod.ApproveRequest, + KeyringRpcMethod.RejectRequest, + + // ****************************** + // Custom methods + // ****************************** // Smart account management methods InternalMethod.GetNextRequestId, InternalMethod.SmartAccount, InternalMethod.GetUserOpsHashes, - InternalMethod.GetSignedTxs, InternalMethod.GetTxHashes, InternalMethod.StoreTxHash, InternalMethod.GetUserOpCallData, @@ -129,28 +102,28 @@ export const PERMISSIONS = new Map([ ], ], [ - 'https://snap.transeptorlabs.io', + 'https://transeptorlabs.github.io', [ - // Snap keyring methods - SnapKeyringMethod.ListAccounts, - SnapKeyringMethod.CreateAccount, - SnapKeyringMethod.GetAccount, - SnapKeyringMethod.UpdateAccount, - SnapKeyringMethod.DeleteAccount, - SnapKeyringMethod.ExportAccount, - - // Snap request methods - RequestMethods.SubmitRequest, - RequestMethods.ListRequests, - RequestMethods.ApproveRequest, - RequestMethods.DeleteRequest, - RequestMethods.RejectRequest, + // keyring methods + KeyringRpcMethod.ListAccounts, + KeyringRpcMethod.CreateAccount, + KeyringRpcMethod.GetAccount, + KeyringRpcMethod.UpdateAccount, + KeyringRpcMethod.DeleteAccount, + KeyringRpcMethod.ExportAccount, + KeyringRpcMethod.ListRequests, + KeyringRpcMethod.SubmitRequest, + KeyringRpcMethod.ApproveRequest, + KeyringRpcMethod.RejectRequest, + + // ****************************** + // Custom methods + // ****************************** // Smart account management methods InternalMethod.GetNextRequestId, InternalMethod.SmartAccount, InternalMethod.GetUserOpsHashes, - InternalMethod.GetSignedTxs, InternalMethod.GetTxHashes, InternalMethod.StoreTxHash, InternalMethod.GetUserOpCallData, diff --git a/packages/snap/src/state/state.contants.ts b/packages/snap/src/state/state.contants.ts index 8c985fc..5d018e5 100644 --- a/packages/snap/src/state/state.contants.ts +++ b/packages/snap/src/state/state.contants.ts @@ -1,6 +1,7 @@ export const DEFAULT_BUNDLER_URLS = { - '0x539': 'http://localhost:3000/rpc', // 1337 - private + '0x539': 'http://localhost:4337/rpc', // 1337 - private '0x5': '', // goerli + '0xaa36a7': '', // 11155111 - sepolia // '0x1': '', // ethereum mainnet // '0x89': '', // polygon mainnet // '0x13881': '', // polygon mumbai @@ -12,7 +13,6 @@ export const DEFAULT_STATE = { keyringState: { wallets: {}, pendingRequests: {}, - signedTx: {}, }, requestIdCounter: 0, bundlerUrls: DEFAULT_BUNDLER_URLS, diff --git a/packages/snap/src/state/state.ts b/packages/snap/src/state/state.ts index ac208be..a45bebd 100644 --- a/packages/snap/src/state/state.ts +++ b/packages/snap/src/state/state.ts @@ -145,12 +145,9 @@ export const getTxHashes = async ( export const storeTxHash = async ( keyringAccountId: string, txHash: string, - keyringRequestId: string, chainId: string, ): Promise => { const state = await getState(keyringAccountId); - - delete state.keyringState.signedTx[keyringRequestId]; state.smartAccountActivity[keyringAccountId].scAccount[chainId].txHashes.push( txHash, ); diff --git a/packages/snap/src/types/request.types.ts b/packages/snap/src/types/request.types.ts index dd298f8..7e85931 100644 --- a/packages/snap/src/types/request.types.ts +++ b/packages/snap/src/types/request.types.ts @@ -20,7 +20,6 @@ export type GetTxHashesParams = { export type StoreTxHashParams = { keyringAccountId: string; txHash: string; - keyringRequestId: string; chainId: string; }; diff --git a/packages/snap/src/utils/keyring-utils.ts b/packages/snap/src/utils/keyring-utils.ts index 019456b..d887769 100644 --- a/packages/snap/src/utils/keyring-utils.ts +++ b/packages/snap/src/utils/keyring-utils.ts @@ -1,25 +1,6 @@ import { JsonTx } from '@ethereumjs/tx'; import type { Json } from '@metamask/utils'; - -import { - Wallet, - InternalMethod, - RequestMethods, - SnapKeyringMethod, -} from '../keyring'; - -/** - * Logs a request with the specified request method and payload. - * - * @param requestMethod - The request method. - * @param payload - The payload of the request. - */ -export function logRequest( - requestMethod: SnapKeyringMethod | RequestMethods | InternalMethod, - payload: any, -): void { - console.log(`[Snap] ${requestMethod} Payload: ${JSON.stringify(payload)}`); -} +import { Wallet } from '../keyring'; /** * Serializes a transaction by removing undefined properties and converting them to null. @@ -52,7 +33,7 @@ export function serializeTransaction(tx: JsonTx, type: number): Json { * @returns Returns true if no duplicate names are found, otherwise false. */ export function isUniqueAccountName(name: string, wallets: Wallet[]): boolean { - return !wallets.find((wallet) => wallet.account.name === name); + return !wallets.find((wallet) => wallet.account.options.name === name); } /** diff --git a/packages/snap/test/state.test.ts b/packages/snap/test/state.test.ts index 8914bb7..9f1464d 100644 --- a/packages/snap/test/state.test.ts +++ b/packages/snap/test/state.test.ts @@ -200,15 +200,12 @@ describe('state module - State', () => { }); describe('storeTxHash', () => { - it('should store a user confirmed userOpHash', async () => { + it('should store a user confirmed txHash', async () => { const keyringAccountId = uuid(); const mockState = { keyringState: { wallets: {}, pendingRequests: {}, - signedTx: { - '1': 'mockSignedTx', - }, }, requestIdCounter: 0, bundlerUrls: DEFAULT_BUNDLER_URLS, @@ -230,18 +227,12 @@ describe('state module - State', () => { (global as any).snap.request.mockReturnValue(Promise.resolve(mockState)); - const stateBefore = await getState(); - expect(stateBefore.keyringState.signedTx['1']).toBe('mockSignedTx'); - - let result = await getTxHashes(keyringAccountId, '0x1'); - expect(result).toStrictEqual(['hash1', 'hash2']); + const stateBefore = await getTxHashes(keyringAccountId, '0x1'); + expect(stateBefore).toStrictEqual(['hash1', 'hash2']); - await storeTxHash(keyringAccountId, 'hash5', '1', '0x1'); - result = await getTxHashes(keyringAccountId, '0x1'); + await storeTxHash(keyringAccountId, 'hash5', '0x1'); + const result = await getTxHashes(keyringAccountId, '0x1'); expect(result).toStrictEqual(['hash1', 'hash2', 'hash5']); - - const stateAfter = await getState(); - expect(stateAfter.keyringState.signedTx['1']).toBeUndefined(); }); }); @@ -290,9 +281,6 @@ describe('state module - State', () => { keyringState: { wallets: {}, pendingRequests: {}, - signedTx: { - '1': 'mockSignedTx', - }, }, requestIdCounter: 0, bundlerUrls: DEFAULT_BUNDLER_URLS, @@ -302,7 +290,7 @@ describe('state module - State', () => { (global as any).snap.request.mockReturnValue(Promise.resolve(mockState)); const keyring = await getKeyRing(); - expect(keyring.signedTx['1']).toBe('mockSignedTx'); + expect(keyring).toStrictEqual(mockState.keyringState); }); }); @@ -312,9 +300,6 @@ describe('state module - State', () => { keyringState: { wallets: {}, pendingRequests: {}, - signedTx: { - '1': 'mockSignedTx', - }, }, requestIdCounter: 0, bundlerUrls: DEFAULT_BUNDLER_URLS, @@ -326,10 +311,6 @@ describe('state module - State', () => { await storeKeyRing({ wallets: {}, pendingRequests: {}, - signedTx: { - '1': 'mockSignedTx', - '2': 'mockSignedTx2', - }, }); expect((global as any).snap.request).toHaveBeenCalledWith({ @@ -338,7 +319,7 @@ describe('state module - State', () => { }); const keyringAfter = await getKeyRing(); - expect(keyringAfter.signedTx['2']).toBe('mockSignedTx2'); + expect(keyringAfter).toStrictEqual(mockState.keyringState); }); }); diff --git a/packages/snap/tsconfig.json b/packages/snap/tsconfig.json index 596e2cf..cb1d937 100644 --- a/packages/snap/tsconfig.json +++ b/packages/snap/tsconfig.json @@ -1,4 +1,8 @@ { "extends": "../../tsconfig.json", - "include": ["src"] + "compilerOptions": { + "skipLibCheck": true, + "resolveJsonModule": true + }, + "include": ["src/", "snap.config.ts"] } diff --git a/packages/transeptor b/packages/transeptor new file mode 160000 index 0000000..a000ea7 --- /dev/null +++ b/packages/transeptor @@ -0,0 +1 @@ +Subproject commit a000ea77c42aa699d88232dfe84352909caefb5f diff --git a/screen-shot.jpg b/screen-shot.jpg deleted file mode 100644 index dfcfab4..0000000 Binary files a/screen-shot.jpg and /dev/null differ diff --git a/start-bundler.sh b/start-bundler.sh new file mode 100755 index 0000000..98cefae --- /dev/null +++ b/start-bundler.sh @@ -0,0 +1,130 @@ +#!/bin/bash + +# Check if .env file exists +if [ ! -f .env ]; then + echo "Error: .env file not found. Please make sure the .env file exists." + exit 1 +fi + +# Load the environment variables from the .env file +source .env + +# first 3 accounts default hardhat accounts +DEFAULT_ADDRESS_1="0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" +DEFAULT_ADDRESS_2="0x70997970C51812dc3A010C7d01b50e0d17dc79C8" +DEFAULT_ADDRESS_3="0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC" +GETH_PORT=8545 +TRANSEPTOR_PORT=4337 +NETWORK_ID=1337 + +# Check if the container exists and remove it if it does +if docker ps -a | grep -q geth-relayer-snap; then + echo -e "Removing existing geth container\n" + docker rm -f geth-relayer-snap +fi + +# ######################################################## +# STAGE 0: start geth +# ######################################################## +geth_container_id=$(docker run -d --name geth-relayer-snap -p $GETH_PORT:$GETH_PORT ethereum/client-go:latest \ + --verbosity 1 \ + --http.vhosts '*,localhost,host.docker.internal' \ + --http \ + --http.api eth,net,web3,debug \ + --http.corsdomain '*' \ + --http.addr "0.0.0.0" \ + --nodiscover --maxpeers 0 --mine \ + --networkid $NETWORK_ID \ + --dev \ + --allow-insecure-unlock \ + --rpc.allow-unprotected-txs \ + --dev.gaslimit 20000000) + +echo -e "Geth started with container ID: $geth_container_id\n" +sleep 3 + +# Fund default accounts in a loop +echo -e "Funding default accounts\n" +for ACCOUNT in $DEFAULT_ADDRESS_1 $DEFAULT_ADDRESS_2 $DEFAULT_ADDRESS_3; do + docker exec $geth_container_id geth \ + --exec "eth.sendTransaction({from: eth.accounts[0], to: \"$ACCOUNT\", value: web3.toWei(4337, \"ether\")})" \ + attach http://localhost:$GETH_PORT/ + + balance=$(docker exec $geth_container_id geth --exec "eth.getBalance(\"$ACCOUNT\")" attach http://localhost:$GETH_PORT/) + echo -e "Balance of $ACCOUNT: $balance wei\n" +done + +# ######################################################## +# STAGE 1: Deploy ERC4337 entrypoint and account factory contracts +# ######################################################## + +cd $PWD/packages/transeptor +if [ ! -d "node_modules" ]; then + echo "Installing transeptor tools package dependencies" + cd packages/tools + npm install --no-package-lock + cd ../../ +fi +cd packages/tools +npm run deploy:scf +npm run deploy:ep +cd ../../../../ + +# ######################################################## +# STAGE 2: Start the bundler +# ######################################################## + +# Check if the container exists and remove it if it does +if docker ps -a | grep -q transeptor-relayer-snap; then + echo -e "Removing existing transeptor container\n" + docker rm -f transeptor-relayer-snap +fi + +echo -e "Starting transeptor...\n" + +transeptor_container_id=$(docker run -d --name transeptor-relayer-snap -p $TRANSEPTOR_PORT:$TRANSEPTOR_PORT --env-file $PWD/.env transeptorlabs/bundler:latest \ + --port $TRANSEPTOR_PORT \ + --network http://host.docker.internal:$GETH_PORT \ + --txMode base \ + --unsafe \ + --httpApi web3,eth,debug \ + --auto \ + --autoBundleInterval 12000) + +echo -e "Transeptor started with container ID: $transeptor_container_id\n" + +# Define a function to stop the bundler and geth +stop_all() { + echo -e "Stopping transeptor...\n" + docker stop $transeptor_container_id + docker rm $transeptor_container_id + + echo -e "Stopping geth...\n" + docker stop $geth_container_id + docker rm $geth_container_id + exit 0 +} + +# ping the bundler to make sure it is up using curl rpc request +sleep 8 +curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' http://localhost:$TRANSEPTOR_PORT/rpc + +if [ $? -ne 0 ]; then + echo "Bundler failed to start correctly, please run the script again." + stop_all + exit 1 +fi + +echo -e " -> Bundler ready to process requests on http://localhost:$TRANSEPTOR_PORT/rpc\n" + +# ######################################################## +# STAGE32: (Ctrl+C) to stop the bundler +# ######################################################## +trap stop_all SIGINT + +echo -e "Press Ctrl+C to stop the bundler." + +# Keep the bundler running in the background +while true; do + sleep 1 +done diff --git a/yarn.lock b/yarn.lock index 5d292eb..36d7016 100644 --- a/yarn.lock +++ b/yarn.lock @@ -91,6 +91,16 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.22.13": + version: 7.22.13 + resolution: "@babel/code-frame@npm:7.22.13" + dependencies: + "@babel/highlight": ^7.22.13 + chalk: ^2.4.2 + checksum: 22e342c8077c8b77eeb11f554ecca2ba14153f707b85294fcf6070b6f6150aae88a7b7436dd88d8c9289970585f3fe5b9b941c5aa3aa26a6d5a8ef3f292da058 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.22.5, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": version: 7.22.9 resolution: "@babel/compat-data@npm:7.22.9" @@ -98,7 +108,14 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.14.0, @babel/core@npm:^7.15.5, @babel/core@npm:^7.16.7, @babel/core@npm:^7.18.6, @babel/core@npm:^7.19.6, @babel/core@npm:^7.20.12": +"@babel/compat-data@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/compat-data@npm:7.23.3" + checksum: 52fff649d4e25b10e29e8a9b1c9ef117f44d354273c17b5ef056555f8e5db2429b35df4c38bdfb6865d23133e0fba92e558d31be87bb8457db4ac688646fdbf1 + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.14.0, @babel/core@npm:^7.15.5, @babel/core@npm:^7.19.6": version: 7.22.10 resolution: "@babel/core@npm:7.22.10" dependencies: @@ -121,6 +138,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.23.2": + version: 7.23.3 + resolution: "@babel/core@npm:7.23.3" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.3 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helpers": ^7.23.2 + "@babel/parser": ^7.23.3 + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.3 + "@babel/types": ^7.23.3 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: d306c1fa68972f4e085e9e7ad165aee80eb801ef331f6f07808c86309f03534d638b82ad00a3bc08f4d3de4860ccd38512b2790a39e6acc2caf9ea21e526afe7 + languageName: node + linkType: hard + "@babel/eslint-parser@npm:^7.15.4": version: 7.22.10 resolution: "@babel/eslint-parser@npm:7.22.10" @@ -147,6 +187,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/generator@npm:7.23.3" + dependencies: + "@babel/types": ^7.23.3 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: b6e71cca852d4e1aa01a28a30b8c74ffc3b8d56ccb7ae3ee783028ee015f63ad861a2e386c3eb490a9a8634db485a503a33521680f4af510151e90346c46da17 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" @@ -156,6 +208,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15" + dependencies: + "@babel/types": ^7.22.15 + checksum: 639c697a1c729f9fafa2dd4c9af2e18568190299b5907bd4c2d0bc818fcbd1e83ffeecc2af24327a7faa7ac4c34edd9d7940510a5e66296c19bad17001cf5c7a + languageName: node + linkType: hard + "@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5": version: 7.22.10 resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.10" @@ -178,6 +239,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-compilation-targets@npm:7.22.15" + dependencies: + "@babel/compat-data": ^7.22.9 + "@babel/helper-validator-option": ^7.22.15 + browserslist: ^4.21.9 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: ce85196769e091ae54dd39e4a80c2a9df1793da8588e335c383d536d54f06baf648d0a08fc873044f226398c4ded15c4ae9120ee18e7dfd7c639a68e3cdc9980 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.22.10, @babel/helper-create-class-features-plugin@npm:^7.22.5": version: 7.22.10 resolution: "@babel/helper-create-class-features-plugin@npm:7.22.10" @@ -197,6 +271,25 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-create-class-features-plugin@npm:7.22.15" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-member-expression-to-functions": ^7.22.15 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 52c500d8d164abb3a360b1b7c4b8fff77bc4a5920d3a2b41ae6e1d30617b0dc0b972c1f5db35b1752007e04a748908b4a99bc872b73549ae837e87dcdde005a3 + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": version: 7.22.9 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.9" @@ -210,6 +303,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-regexp-features-plugin@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + regexpu-core: ^5.3.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 0243b8d4854f1dc8861b1029a46d3f6393ad72f366a5a08e36a4648aa682044f06da4c6e87a456260e1e1b33c999f898ba591a0760842c1387bcc93fbf2151a6 + languageName: node + linkType: hard + "@babel/helper-define-polyfill-provider@npm:^0.4.2": version: 0.4.2 resolution: "@babel/helper-define-polyfill-provider@npm:0.4.2" @@ -225,6 +331,28 @@ __metadata: languageName: node linkType: hard +"@babel/helper-define-polyfill-provider@npm:^0.4.3": + version: 0.4.3 + resolution: "@babel/helper-define-polyfill-provider@npm:0.4.3" + dependencies: + "@babel/helper-compilation-targets": ^7.22.6 + "@babel/helper-plugin-utils": ^7.22.5 + debug: ^4.1.1 + lodash.debounce: ^4.0.8 + resolve: ^1.14.2 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 5d21e3f47b320e4b5b644195ec405e7ebc3739e48e65899efc808c5fa9c3bf5b06ce0d8ff5246ca99d1411e368f4557bc66730196c5781a5c4e986ee703bee79 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 + languageName: node + linkType: hard + "@babel/helper-environment-visitor@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-environment-visitor@npm:7.22.5" @@ -242,6 +370,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" + dependencies: + "@babel/template": ^7.22.15 + "@babel/types": ^7.23.0 + checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-hoist-variables@npm:7.22.5" @@ -251,6 +389,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" + dependencies: + "@babel/types": ^7.23.0 + checksum: 494659361370c979ada711ca685e2efe9460683c36db1b283b446122596602c901e291e09f2f980ecedfe6e0f2bd5386cb59768285446530df10c14df1024e75 + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-member-expression-to-functions@npm:7.22.5" @@ -269,6 +416,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-module-imports@npm:7.22.15" + dependencies: + "@babel/types": ^7.22.15 + checksum: ecd7e457df0a46f889228f943ef9b4a47d485d82e030676767e6a2fdcbdaa63594d8124d4b55fd160b41c201025aec01fc27580352b1c87a37c9c6f33d116702 + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9": version: 7.22.9 resolution: "@babel/helper-module-transforms@npm:7.22.9" @@ -284,6 +440,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/helper-module-transforms@npm:7.23.3" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-validator-identifier": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" @@ -300,6 +471,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-remap-async-to-generator@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-wrap-function": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2fe6300a6f1b58211dffa0aed1b45d4958506d096543663dba83bd9251fe8d670fa909143a65b45e72acb49e7e20fbdb73eae315d9ddaced467948c3329986e7 + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.22.5, @babel/helper-remap-async-to-generator@npm:^7.22.9": version: 7.22.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.22.9" @@ -313,6 +497,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-replace-supers@npm:7.22.20" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-member-expression-to-functions": ^7.22.15 + "@babel/helper-optimise-call-expression": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a0008332e24daedea2e9498733e3c39b389d6d4512637e000f96f62b797e702ee24a407ccbcd7a236a551590a38f31282829a8ef35c50a3c0457d88218cae639 + languageName: node + linkType: hard + "@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9": version: 7.22.9 resolution: "@babel/helper-replace-supers@npm:7.22.9" @@ -360,6 +557,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-validator-identifier@npm:7.22.5" @@ -367,6 +571,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-validator-option@npm:7.22.15" + checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-validator-option@npm:7.22.5" @@ -374,6 +585,17 @@ __metadata: languageName: node linkType: hard +"@babel/helper-wrap-function@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-wrap-function@npm:7.22.20" + dependencies: + "@babel/helper-function-name": ^7.22.5 + "@babel/template": ^7.22.15 + "@babel/types": ^7.22.19 + checksum: 221ed9b5572612aeb571e4ce6a256f2dee85b3c9536f1dd5e611b0255e5f59a3d0ec392d8d46d4152149156a8109f92f20379b1d6d36abb613176e0e33f05fca + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.22.9": version: 7.22.10 resolution: "@babel/helper-wrap-function@npm:7.22.10" @@ -396,6 +618,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.23.2": + version: 7.23.2 + resolution: "@babel/helpers@npm:7.23.2" + dependencies: + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.2 + "@babel/types": ^7.23.0 + checksum: aaf4828df75ec460eaa70e5c9f66e6dadc28dae3728ddb7f6c13187dbf38030e142194b83d81aa8a31bbc35a5529a5d7d3f3cf59d5d0b595f5dd7f9d8f1ced8e + languageName: node + linkType: hard + "@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.22.10": version: 7.22.10 resolution: "@babel/highlight@npm:7.22.10" @@ -407,6 +640,17 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.22.13": + version: 7.22.20 + resolution: "@babel/highlight@npm:7.22.20" + dependencies: + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + checksum: 84bd034dca309a5e680083cd827a766780ca63cef37308404f17653d32366ea76262bd2364b2d38776232f2d01b649f26721417d507e8b4b6da3e4e739f6d134 + languageName: node + linkType: hard + "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.15.5, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.10, @babel/parser@npm:^7.22.5": version: 7.22.10 resolution: "@babel/parser@npm:7.22.10" @@ -416,6 +660,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/parser@npm:7.23.3" + bin: + parser: ./bin/babel-parser.js + checksum: 4aa7366e401b5467192c1dbf2bef99ac0958c45ef69ed6704abbae68f98fab6409a527b417d1528fddc49d7664450670528adc7f45abb04db5fafca7ed766d57 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.5" @@ -427,6 +680,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: ddbaf2c396b7780f15e80ee01d6dd790db076985f3dfeb6527d1a8d4cacf370e49250396a3aa005b2c40233cac214a106232f83703d5e8491848bde273938232 + languageName: node + linkType: hard + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.5" @@ -440,7 +704,32 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.14.0, @babel/plugin-proposal-class-properties@npm:^7.16.7": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/plugin-transform-optional-chaining": ^7.23.3 + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 434b9d710ae856fa1a456678cc304fbc93915af86d581ee316e077af746a709a741ea39d7e1d4f5b98861b629cc7e87f002d3138f5e836775632466d4c74aef2 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.23.3" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 4690123f0ef7c11d6bf1a9579e4f463ce363563b75ec3f6ca66cf68687e39d8d747a82c833847653962f79da367eca895d9095c60d8ebb224a1d4277003acc11 + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.14.0": version: 7.18.6 resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" dependencies: @@ -452,7 +741,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.14.5, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.7": +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.14.5": version: 7.18.6 resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" dependencies: @@ -476,7 +765,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.16.7": +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0": version: 7.20.7 resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" dependencies: @@ -491,7 +780,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.14.5, @babel/plugin-proposal-optional-chaining@npm:^7.16.7": +"@babel/plugin-proposal-optional-chaining@npm:^7.14.5": version: 7.21.0 resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" dependencies: @@ -601,6 +890,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-import-assertions@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 883e6b35b2da205138caab832d54505271a3fee3fc1e8dc0894502434fc2b5d517cbe93bbfbfef8068a0fb6ec48ebc9eef3f605200a489065ba43d8cddc1c9a7 + languageName: node + linkType: hard + "@babel/plugin-syntax-import-attributes@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.5" @@ -612,6 +912,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-import-attributes@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9aed7661ffb920ca75df9f494757466ca92744e43072e0848d87fa4aa61a3f2ee5a22198ac1959856c036434b5614a8f46f1fb70298835dbe28220cdd1d4c11e + languageName: node + linkType: hard + "@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" @@ -645,6 +956,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 89037694314a74e7f0e7a9c8d3793af5bf6b23d80950c29b360db1c66859d67f60711ea437e70ad6b5b4b29affe17eababda841b6c01107c2b638e0493bafb4e + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -744,6 +1066,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-typescript@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: abfad3a19290d258b028e285a1f34c9b8a0cbe46ef79eafed4ed7ffce11b5d0720b5e536c82f91cbd8442cde35a3dd8e861fa70366d87ff06fdc0d4756e30876 + languageName: node + linkType: hard + "@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" @@ -767,6 +1100,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-arrow-functions@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1e99118176e5366c2636064d09477016ab5272b2a92e78b8edb571d20bc3eaa881789a905b20042942c3c2d04efc530726cf703f937226db5ebc495f5d067e66 + languageName: node + linkType: hard + "@babel/plugin-transform-async-generator-functions@npm:^7.22.10": version: 7.22.10 resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.10" @@ -781,6 +1125,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-async-generator-functions@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.3" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-remap-async-to-generator": ^7.22.20 + "@babel/plugin-syntax-async-generators": ^7.8.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 39407e5d92905a824d6ef115af70755b26a6b458639686092d7e05d0701f7ff42e995e2c5aab28d6ab5311752190667766417e58834b54c98fac78c857e30320 + languageName: node + linkType: hard + "@babel/plugin-transform-async-to-generator@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-async-to-generator@npm:7.22.5" @@ -794,6 +1152,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-async-to-generator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.23.3" + dependencies: + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-remap-async-to-generator": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2e9d9795d4b3b3d8090332104e37061c677f29a1ce65bcbda4099a32d243e5d9520270a44bbabf0fb1fb40d463bd937685b1a1042e646979086c546d55319c3c + languageName: node + linkType: hard + "@babel/plugin-transform-block-scoped-functions@npm:^7.0.0, @babel/plugin-transform-block-scoped-functions@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.22.5" @@ -805,6 +1176,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoped-functions@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e63b16d94ee5f4d917e669da3db5ea53d1e7e79141a2ec873c1e644678cdafe98daa556d0d359963c827863d6b3665d23d4938a94a4c5053a1619c4ebd01d020 + languageName: node + linkType: hard + "@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.22.10": version: 7.22.10 resolution: "@babel/plugin-transform-block-scoping@npm:7.22.10" @@ -816,6 +1198,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoping@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-block-scoping@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2bad9491502942266ddacd76e026ee2095e71c2a6aa3d038343d65f8db67a2a2262701b2db23a30b7f06ab49710cbf0ab5bedbb930a9f39780cb366aecd30540 + languageName: node + linkType: hard + "@babel/plugin-transform-class-properties@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-class-properties@npm:7.22.5" @@ -828,6 +1221,31 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-class-properties@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-class-properties@npm:7.23.3" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9c6f8366f667897541d360246de176dd29efc7a13d80a5b48361882f7173d9173be4646c3b7d9b003ccc0e01e25df122330308f33db921fa553aa17ad544b3fc + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.22.11, @babel/plugin-transform-class-static-block@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-class-static-block@npm:7.23.3" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 1325e1d1989efbef4d48505e5c0c416d118be0e615c12a8d5581af032d0bc6ae00525c8fb4af68ba9098fa1578ec7738db0a9d362193b8507660d2a24124ddf4 + languageName: node + linkType: hard + "@babel/plugin-transform-class-static-block@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-class-static-block@npm:7.22.5" @@ -860,6 +1278,25 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-classes@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-classes@npm:7.23.3" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.20 + "@babel/helper-split-export-declaration": ^7.22.6 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1b90b40d729d14466415a1de2d427ede6ec0e401e8dc00e84d309f2e6a1f09ef16d43983f378b51d34251f6c36f7275959477cb2e89b04afc7f248356642fc6d + languageName: node + linkType: hard + "@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5" @@ -872,6 +1309,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-computed-properties@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-computed-properties@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/template": ^7.22.15 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 80452661dc25a0956f89fe98cb562e8637a9556fb6c00d312c57653ce7df8798f58d138603c7e1aad96614ee9ccd10c47e50ab9ded6b6eded5adeb230d2a982e + languageName: node + linkType: hard + "@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.22.10": version: 7.22.10 resolution: "@babel/plugin-transform-destructuring@npm:7.22.10" @@ -883,8 +1332,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.22.5": - version: 7.22.5 +"@babel/plugin-transform-destructuring@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-destructuring@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9e015099877272501162419bfe781689aec5c462cd2aec752ee22288f209eec65969ff11b8fdadca2eaddea71d705d3bba5b9c60752fcc1be67874fcec687105 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.22.5": + version: 7.22.5 resolution: "@babel/plugin-transform-dotall-regex@npm:7.22.5" dependencies: "@babel/helper-create-regexp-features-plugin": ^7.22.5 @@ -895,6 +1355,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-dotall-regex@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.23.3" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a2dbbf7f1ea16a97948c37df925cb364337668c41a3948b8d91453f140507bd8a3429030c7ce66d09c299987b27746c19a2dd18b6f17dcb474854b14fd9159a3 + languageName: node + linkType: hard + "@babel/plugin-transform-duplicate-keys@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-duplicate-keys@npm:7.22.5" @@ -906,6 +1378,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-duplicate-keys@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c2a21c34dc0839590cd945192cbc46fde541a27e140c48fe1808315934664cdbf18db64889e23c4eeb6bad9d3e049482efdca91d29de5734ffc887c4fbabaa16 + languageName: node + linkType: hard + "@babel/plugin-transform-dynamic-import@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-dynamic-import@npm:7.22.5" @@ -918,6 +1401,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-dynamic-import@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d1d379dbb1c22c02aa2f5a3f2f1885840aabc21b42e3d42746599f66004239f1ac830012552e6d42113e4defe0625fbf4865864ee3d52963e80125f8c9dad406 + languageName: node + linkType: hard + "@babel/plugin-transform-exponentiation-operator@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.22.5" @@ -930,6 +1425,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-exponentiation-operator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.23.3" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 00d05ab14ad0f299160fcf9d8f55a1cc1b740e012ab0b5ce30207d2365f091665115557af7d989cd6260d075a252d9e4283de5f2b247dfbbe0e42ae586e6bf66 + languageName: node + linkType: hard + "@babel/plugin-transform-export-namespace-from@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.5" @@ -942,6 +1449,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-export-namespace-from@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c65e21e5b54135378cfbe7563e884d778ea0864b5950c7db85f984170f20c2e110675c8407b1803ffe587401e5990fbd53eb159c3b3a6d7593ae6f9ffdb83cc4 + languageName: node + linkType: hard + "@babel/plugin-transform-flow-strip-types@npm:^7.0.0": version: 7.22.5 resolution: "@babel/plugin-transform-flow-strip-types@npm:7.22.5" @@ -965,6 +1484,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-for-of@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-for-of@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a6288122a5091d96c744b9eb23dc1b2d4cce25f109ac1e26a0ea03c4ea60330e6f3cc58530b33ba7369fa07163b71001399a145238b7e92bff6270ef3b9c32a0 + languageName: node + linkType: hard + "@babel/plugin-transform-function-name@npm:^7.0.0, @babel/plugin-transform-function-name@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-function-name@npm:7.22.5" @@ -978,6 +1508,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-function-name@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-function-name@npm:7.23.3" + dependencies: + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 355c6dbe07c919575ad42b2f7e020f320866d72f8b79181a16f8e0cd424a2c761d979f03f47d583d9471b55dcd68a8a9d829b58e1eebcd572145b934b48975a6 + languageName: node + linkType: hard + "@babel/plugin-transform-json-strings@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-json-strings@npm:7.22.5" @@ -990,6 +1533,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-json-strings@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-json-strings@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-json-strings": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a5949613b8883a64ad2a0eb41d26a80ac226ea03db7cef8f57f4ca18045fdc834aee420548272a633510e7aa88ec3cb4e15d2e27ddc45f9ef5db09228f0478c1 + languageName: node + linkType: hard + "@babel/plugin-transform-literals@npm:^7.0.0, @babel/plugin-transform-literals@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-literals@npm:7.22.5" @@ -1001,6 +1556,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-literals@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-literals@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 519a544cd58586b9001c4c9b18da25a62f17d23c48600ff7a685d75ca9eb18d2c5e8f5476f067f0a8f1fea2a31107eff950b9864833061e6076dcc4bdc3e71ed + languageName: node + linkType: hard + "@babel/plugin-transform-logical-assignment-operators@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.5" @@ -1013,6 +1579,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-logical-assignment-operators@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cbab57a2bb6d5ddd621b91684845e576664862a6d7697fa9dddb796238330dd3dac21cda223f7b1553c9f650e0eebcd5d9bb1e478ed9ba937ce06dc6d0fbd0f6 + languageName: node + linkType: hard + "@babel/plugin-transform-member-expression-literals@npm:^7.0.0, @babel/plugin-transform-member-expression-literals@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.22.5" @@ -1024,6 +1602,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-member-expression-literals@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 95cec13c36d447c5aa6b8e4c778b897eeba66dcb675edef01e0d2afcec9e8cb9726baf4f81b4bbae7a782595aed72e6a0d44ffb773272c3ca180fada99bf92db + languageName: node + linkType: hard + "@babel/plugin-transform-modules-amd@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-modules-amd@npm:7.22.5" @@ -1036,6 +1625,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-amd@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-modules-amd@npm:7.23.3" + dependencies: + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d163737b6a3d67ea579c9aa3b83d4df4b5c34d9dcdf25f415f027c0aa8cded7bac2750d2de5464081f67a042ad9e1c03930c2fab42acd79f9e57c00cf969ddff + languageName: node + linkType: hard + "@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.22.5" @@ -1049,6 +1650,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-commonjs@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" + dependencies: + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-simple-access": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 720a231ceade4ae4d2632478db4e7fecf21987d444942b72d523487ac8d715ca97de6c8f415c71e939595e1a4776403e7dc24ed68fe9125ad4acf57753c9bff7 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-systemjs@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.22.5" @@ -1063,6 +1677,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-systemjs@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.3" + dependencies: + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0d2fdd993c785aecac9e0850cd5ed7f7d448f0fbb42992a950cc0590167144df25d82af5aac9a5c99ef913d2286782afa44e577af30c10901c5ee8984910fa1f + languageName: node + linkType: hard + "@babel/plugin-transform-modules-umd@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-modules-umd@npm:7.22.5" @@ -1075,6 +1703,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-umd@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-modules-umd@npm:7.23.3" + dependencies: + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 586a7a2241e8b4e753a37af9466a9ffa8a67b4ba9aa756ad7500712c05d8fa9a8c1ed4f7bd25fae2a8265e6cf8fe781ec85a8ee885dd34cf50d8955ee65f12dc + languageName: node + linkType: hard + "@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" @@ -1098,6 +1738,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-new-target@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-new-target@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e5053389316fce73ad5201b7777437164f333e24787fbcda4ae489cd2580dbbbdfb5694a7237bad91fabb46b591d771975d69beb1c740b82cb4761625379f00b + languageName: node + linkType: hard + "@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.5" @@ -1110,6 +1761,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ea844a12a3ae5647d6d2ae0685fde48ae53e724ef9ce5d9fbf36e8f1ff0107f76a5349ef34c2a06984b3836c001748caf9701afb172bd7ba71a5dff79e16b434 + languageName: node + linkType: hard + "@babel/plugin-transform-numeric-separator@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.5" @@ -1122,6 +1785,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-numeric-separator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f5515532fac2bbf9da082eedc16fd597fb8b787e7a6d256d53dcd9daa054b8f695a312bfec888dd34c03d63dcc2c65c8249ac33c2e23bd3d4d246ce4d44d141d + languageName: node + linkType: hard + "@babel/plugin-transform-object-rest-spread@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.5" @@ -1137,6 +1812,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-object-rest-spread@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.23.3" + dependencies: + "@babel/compat-data": ^7.23.3 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.23.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: acd42344a1be3abaf0a4ece15d6445df34d281f3be797c94c16a382799d4567995aad16406265b992ba43115a34721f67a3f0898360f7e26bce55fa9720dad7a + languageName: node + linkType: hard + "@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-object-super@npm:7.22.5" @@ -1149,6 +1839,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-object-super@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-object-super@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e495497186f621fa79026e183b4f1fbb172fd9df812cbd2d7f02c05b08adbe58012b1a6eb6dd58d11a30343f6ec80d0f4074f9b501d70aa1c94df76d59164c53 + languageName: node + linkType: hard + "@babel/plugin-transform-optional-catch-binding@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.5" @@ -1161,6 +1863,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-optional-catch-binding@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2c59c78cf8c7070be84f1087116508211323dacd93581529b95b31927b2fab67dd11aca363584e99bebc7e4e20720f2b59d99ade7e8cf1577732eef609a34c45 + languageName: node + linkType: hard + "@babel/plugin-transform-optional-chaining@npm:^7.22.10, @babel/plugin-transform-optional-chaining@npm:^7.22.5": version: 7.22.10 resolution: "@babel/plugin-transform-optional-chaining@npm:7.22.10" @@ -1174,6 +1888,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-optional-chaining@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 98529b9d10b5502ceb87259b538e5649d111ec1582c4c49c620f3181d53489c1ff887075fb208245baa43fa45ae85c9950f0db47be00e55b52c9bcd36271d701 + languageName: node + linkType: hard + "@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-parameters@npm:7.22.5" @@ -1185,6 +1912,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-parameters@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-parameters@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a735b3e85316d17ec102e3d3d1b6993b429bdb3b494651c9d754e3b7d270462ee1f1a126ccd5e3d871af5e683727e9ef98c9d34d4a42204fffaabff91052ed16 + languageName: node + linkType: hard + "@babel/plugin-transform-private-methods@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-private-methods@npm:7.22.5" @@ -1197,6 +1935,32 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-private-methods@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-private-methods@npm:7.23.3" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cedc1285c49b5a6d9a3d0e5e413b756ac40b3ac2f8f68bdfc3ae268bc8d27b00abd8bb0861c72756ff5dd8bf1eb77211b7feb5baf4fdae2ebbaabe49b9adc1d0 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.22.11, @babel/plugin-transform-private-property-in-object@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.23.3" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-create-class-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2d2edd9d1da4bf6b5e2c0894aa8782c3e035b18fcdc7a995a627cced121cab326d5a9f273eec8df6cba44ed7a9797f013e3e82f2a1ec59881037e57e990f2f2a + languageName: node + linkType: hard + "@babel/plugin-transform-private-property-in-object@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.5" @@ -1222,6 +1986,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-property-literals@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-property-literals@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 16b048c8e87f25095f6d53634ab7912992f78e6997a6ff549edc3cf519db4fca01c7b4e0798530d7f6a05228ceee479251245cdd850a5531c6e6f404104d6cc9 + languageName: node + linkType: hard + "@babel/plugin-transform-react-constant-elements@npm:^7.18.12": version: 7.22.5 resolution: "@babel/plugin-transform-react-constant-elements@npm:7.22.5" @@ -1294,6 +2069,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-regenerator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-regenerator@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + regenerator-transform: ^0.15.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7fdacc7b40008883871b519c9e5cdea493f75495118ccc56ac104b874983569a24edd024f0f5894ba1875c54ee2b442f295d6241c3280e61c725d0dd3317c8e6 + languageName: node + linkType: hard + "@babel/plugin-transform-reserved-words@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-reserved-words@npm:7.22.5" @@ -1305,7 +2092,34 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-runtime@npm:^7.15.0, @babel/plugin-transform-runtime@npm:^7.16.7": +"@babel/plugin-transform-reserved-words@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-reserved-words@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 298c4440ddc136784ff920127cea137168e068404e635dc946ddb5d7b2a27b66f1dd4c4acb01f7184478ff7d5c3e7177a127279479926519042948fb7fa0fa48 + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.13.2": + version: 7.23.3 + resolution: "@babel/plugin-transform-runtime@npm:7.23.3" + dependencies: + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + babel-plugin-polyfill-corejs2: ^0.4.6 + babel-plugin-polyfill-corejs3: ^0.8.5 + babel-plugin-polyfill-regenerator: ^0.5.3 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e8f8a49d69e2b7423587901564f243b98fdddf9c3186e48e9a02a65abe8f9a7dac097187c0f4df3ae1c40d43b56c66483da7da65af81d0254aee0d32075fba2c + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.15.0": version: 7.22.10 resolution: "@babel/plugin-transform-runtime@npm:7.22.10" dependencies: @@ -1332,6 +2146,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-shorthand-properties@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5d677a03676f9fff969b0246c423d64d77502e90a832665dc872a5a5e05e5708161ce1effd56bb3c0f2c20a1112fca874be57c8a759d8b08152755519281f326 + languageName: node + linkType: hard + "@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.14.6, @babel/plugin-transform-spread@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-spread@npm:7.22.5" @@ -1344,6 +2169,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-spread@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-spread@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8fd5cac201e77a0b4825745f4e07a25f923842f282f006b3a79223c00f61075c8868d12eafec86b2642cd0b32077cdd32314e27bcb75ee5e6a68c0144140dcf2 + languageName: node + linkType: hard + "@babel/plugin-transform-sticky-regex@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-sticky-regex@npm:7.22.5" @@ -1355,6 +2192,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-sticky-regex@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 53e55eb2575b7abfdb4af7e503a2bf7ef5faf8bf6b92d2cd2de0700bdd19e934e5517b23e6dfed94ba50ae516b62f3f916773ef7d9bc81f01503f585051e2949 + languageName: node + linkType: hard + "@babel/plugin-transform-template-literals@npm:^7.0.0, @babel/plugin-transform-template-literals@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-template-literals@npm:7.22.5" @@ -1366,6 +2214,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-template-literals@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-template-literals@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b16c5cb0b8796be0118e9c144d15bdc0d20a7f3f59009c6303a6e9a8b74c146eceb3f05186f5b97afcba7cfa87e34c1585a22186e3d5b22f2fd3d27d959d92b2 + languageName: node + linkType: hard + "@babel/plugin-transform-typeof-symbol@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-typeof-symbol@npm:7.22.5" @@ -1377,6 +2236,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typeof-symbol@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0af7184379d43afac7614fc89b1bdecce4e174d52f4efaeee8ec1a4f2c764356c6dba3525c0685231f1cbf435b6dd4ee9e738d7417f3b10ce8bbe869c32f4384 + languageName: node + linkType: hard + "@babel/plugin-transform-typescript@npm:^7.22.5": version: 7.22.10 resolution: "@babel/plugin-transform-typescript@npm:7.22.10" @@ -1391,6 +2261,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typescript@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-typescript@npm:7.23.3" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-create-class-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-typescript": ^7.23.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ba1d5d41c6b41c139fc6f2df744a82e7572335209976a75f0007ebbaea02dcb3265c44123afe09cc3f4aafb177bcb967a20af0218a95eae4fd883f6dd9d0d6 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-escapes@npm:^7.22.10": version: 7.22.10 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.10" @@ -1402,6 +2286,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-escapes@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 561c429183a54b9e4751519a3dfba6014431e9cdc1484fad03bdaf96582dfc72c76a4f8661df2aeeae7c34efd0fa4d02d3b83a2f63763ecf71ecc925f9cc1f60 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-property-regex@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.5" @@ -1414,6 +2309,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-property-regex@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.23.3" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2298461a194758086d17c23c26c7de37aa533af910f9ebf31ebd0893d4aa317468043d23f73edc782ec21151d3c46cf0ff8098a83b725c49a59de28a1d4d6225 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-regex@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-unicode-regex@npm:7.22.5" @@ -1426,6 +2333,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-regex@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.23.3" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c5f835d17483ba899787f92e313dfa5b0055e3deab332f1d254078a2bba27ede47574b6599fcf34d3763f0c048ae0779dc21d2d8db09295edb4057478dc80a9a + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-sets-regex@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.5" @@ -1438,7 +2357,19 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.15.4, @babel/preset-env@npm:^7.16.7, @babel/preset-env@npm:^7.19.4": +"@babel/plugin-transform-unicode-sets-regex@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.23.3" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 79d0b4c951955ca68235c87b91ab2b393c96285f8aeaa34d6db416d2ddac90000c9bd6e8c4d82b60a2b484da69930507245035f28ba63c6cae341cf3ba68fdef + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.15.4, @babel/preset-env@npm:^7.19.4": version: 7.22.10 resolution: "@babel/preset-env@npm:7.22.10" dependencies: @@ -1528,6 +2459,96 @@ __metadata: languageName: node linkType: hard +"@babel/preset-env@npm:^7.23.2": + version: 7.23.3 + resolution: "@babel/preset-env@npm:7.23.3" + dependencies: + "@babel/compat-data": ^7.23.3 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-option": ^7.22.15 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.23.3 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.23.3 + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.23.3 + "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-import-assertions": ^7.23.3 + "@babel/plugin-syntax-import-attributes": ^7.23.3 + "@babel/plugin-syntax-import-meta": ^7.10.4 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 + "@babel/plugin-transform-arrow-functions": ^7.23.3 + "@babel/plugin-transform-async-generator-functions": ^7.23.3 + "@babel/plugin-transform-async-to-generator": ^7.23.3 + "@babel/plugin-transform-block-scoped-functions": ^7.23.3 + "@babel/plugin-transform-block-scoping": ^7.23.3 + "@babel/plugin-transform-class-properties": ^7.23.3 + "@babel/plugin-transform-class-static-block": ^7.23.3 + "@babel/plugin-transform-classes": ^7.23.3 + "@babel/plugin-transform-computed-properties": ^7.23.3 + "@babel/plugin-transform-destructuring": ^7.23.3 + "@babel/plugin-transform-dotall-regex": ^7.23.3 + "@babel/plugin-transform-duplicate-keys": ^7.23.3 + "@babel/plugin-transform-dynamic-import": ^7.23.3 + "@babel/plugin-transform-exponentiation-operator": ^7.23.3 + "@babel/plugin-transform-export-namespace-from": ^7.23.3 + "@babel/plugin-transform-for-of": ^7.23.3 + "@babel/plugin-transform-function-name": ^7.23.3 + "@babel/plugin-transform-json-strings": ^7.23.3 + "@babel/plugin-transform-literals": ^7.23.3 + "@babel/plugin-transform-logical-assignment-operators": ^7.23.3 + "@babel/plugin-transform-member-expression-literals": ^7.23.3 + "@babel/plugin-transform-modules-amd": ^7.23.3 + "@babel/plugin-transform-modules-commonjs": ^7.23.3 + "@babel/plugin-transform-modules-systemjs": ^7.23.3 + "@babel/plugin-transform-modules-umd": ^7.23.3 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5 + "@babel/plugin-transform-new-target": ^7.23.3 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.23.3 + "@babel/plugin-transform-numeric-separator": ^7.23.3 + "@babel/plugin-transform-object-rest-spread": ^7.23.3 + "@babel/plugin-transform-object-super": ^7.23.3 + "@babel/plugin-transform-optional-catch-binding": ^7.23.3 + "@babel/plugin-transform-optional-chaining": ^7.23.3 + "@babel/plugin-transform-parameters": ^7.23.3 + "@babel/plugin-transform-private-methods": ^7.23.3 + "@babel/plugin-transform-private-property-in-object": ^7.23.3 + "@babel/plugin-transform-property-literals": ^7.23.3 + "@babel/plugin-transform-regenerator": ^7.23.3 + "@babel/plugin-transform-reserved-words": ^7.23.3 + "@babel/plugin-transform-shorthand-properties": ^7.23.3 + "@babel/plugin-transform-spread": ^7.23.3 + "@babel/plugin-transform-sticky-regex": ^7.23.3 + "@babel/plugin-transform-template-literals": ^7.23.3 + "@babel/plugin-transform-typeof-symbol": ^7.23.3 + "@babel/plugin-transform-unicode-escapes": ^7.23.3 + "@babel/plugin-transform-unicode-property-regex": ^7.23.3 + "@babel/plugin-transform-unicode-regex": ^7.23.3 + "@babel/plugin-transform-unicode-sets-regex": ^7.23.3 + "@babel/preset-modules": 0.1.6-no-external-plugins + babel-plugin-polyfill-corejs2: ^0.4.6 + babel-plugin-polyfill-corejs3: ^0.8.5 + babel-plugin-polyfill-regenerator: ^0.5.3 + core-js-compat: ^3.31.0 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a16780b7d7deeccf70796cd8467e4aa6ad86b33fc86f67e23a606ae6bd6f2f26a952ccd17cf3f6ffb72584ac70d6cd6a936910ee31dbe4ac9622583ad5c2ae30 + languageName: node + linkType: hard + "@babel/preset-modules@npm:0.1.6-no-external-plugins": version: 0.1.6-no-external-plugins resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" @@ -1572,6 +2593,21 @@ __metadata: languageName: node linkType: hard +"@babel/preset-typescript@npm:^7.23.2": + version: 7.23.3 + resolution: "@babel/preset-typescript@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-option": ^7.22.15 + "@babel/plugin-syntax-jsx": ^7.23.3 + "@babel/plugin-transform-modules-commonjs": ^7.23.3 + "@babel/plugin-transform-typescript": ^7.23.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 105a2d39bbc464da0f7e1ad7f535c77c5f62d6b410219355b20e552e7d29933567a5c55339b5d0aec1a5c7a0a7dfdf1b54aae601a4fe15a157d54dcbfcb3e854 + languageName: node + linkType: hard + "@babel/regjsgen@npm:^0.8.0": version: 0.8.0 resolution: "@babel/regjsgen@npm:0.8.0" @@ -1599,6 +2635,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/parser": ^7.22.15 + "@babel/types": ^7.22.15 + checksum: 1f3e7dcd6c44f5904c184b3f7fe280394b191f2fed819919ffa1e529c259d5b197da8981b6ca491c235aee8dbad4a50b7e31304aa531271cb823a4a24a0dd8fd + languageName: node + linkType: hard + "@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.15.4, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.22.10, @babel/traverse@npm:^7.4.5": version: 7.22.10 resolution: "@babel/traverse@npm:7.22.10" @@ -1617,7 +2664,25 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.15.4, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.7, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": +"@babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/traverse@npm:7.23.3" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.3 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.23.3 + "@babel/types": ^7.23.3 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: f4e0c05f2f82368b9be7e1fed38cfcc2e1074967a8b76ac837b89661adbd391e99d0b1fd8c31215ffc3a04d2d5d7ee5e627914a09082db84ec5606769409fe2b + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.15.4, @babel/types@npm:^7.16.8, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.22.10 resolution: "@babel/types@npm:7.22.10" dependencies: @@ -1628,6 +2693,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/types@npm:7.23.3" + dependencies: + "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 + to-fast-properties: ^2.0.0 + checksum: b96f1ec495351aeb2a5f98dd494aafa17df02a351548ae96999460f35c933261c839002a34c1e83552ff0d9f5e94d0b5b8e105d38131c7c9b0f5a6588676f35d + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1674,10 +2750,10 @@ __metadata: languageName: node linkType: hard -"@endo/env-options@npm:^0.1.3": - version: 0.1.3 - resolution: "@endo/env-options@npm:0.1.3" - checksum: da8c66865d4d30b0053a00960657dc36f022975a888f0dd6a2f6bb37b9fe731f45a02a2cf263d93b1a40fcb37b25f8ba7076cb8af9e93fd95f496365d9382930 +"@endo/env-options@npm:^0.1.4": + version: 0.1.4 + resolution: "@endo/env-options@npm:0.1.4" + checksum: 6099f0a6b700a60bee7b226aa2a39bb5748e22f25e9606d70e5a66a8e62cbd8c972b0fe578735a658f80bf2ebece62e28c20aa3f16417cbfe6c19a8689966dd3 languageName: node linkType: hard @@ -1770,7 +2846,7 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/tx@npm:^4.1.2": +"@ethereumjs/tx@npm:^4.1.2, @ethereumjs/tx@npm:^4.2.0": version: 4.2.0 resolution: "@ethereumjs/tx@npm:4.2.0" dependencies: @@ -2974,29 +4050,16 @@ __metadata: languageName: node linkType: hard -"@metamask/approval-controller@npm:^2.1.1": - version: 2.1.1 - resolution: "@metamask/approval-controller@npm:2.1.1" - dependencies: - "@metamask/base-controller": ^2.0.0 - "@metamask/controller-utils": ^3.4.0 - eth-rpc-errors: ^4.0.2 - immer: ^9.0.6 - nanoid: ^3.1.31 - checksum: 2e3798e67821660be7c7a35cbe5d001085fd2814fb58bc21e1525383fe2fba66ddb4074896c530de29407d929790ee3a036e180c5576962e3b50a85afe3fd9df - languageName: node - linkType: hard - -"@metamask/approval-controller@npm:^3.0.0, @metamask/approval-controller@npm:^3.5.0": - version: 3.5.0 - resolution: "@metamask/approval-controller@npm:3.5.0" +"@metamask/approval-controller@npm:^4.0.0, @metamask/approval-controller@npm:^4.1.0": + version: 4.1.0 + resolution: "@metamask/approval-controller@npm:4.1.0" dependencies: - "@metamask/base-controller": ^3.2.0 - "@metamask/utils": ^6.2.0 - eth-rpc-errors: ^4.0.2 + "@metamask/base-controller": ^3.2.3 + "@metamask/rpc-errors": ^6.1.0 + "@metamask/utils": ^8.1.0 immer: ^9.0.6 nanoid: ^3.1.31 - checksum: d555e2b1365fcbc6337ec0ba0a35f9b00485c92cc734e7d6457a77e4c4833eca46bf2950dbcfe4f4831d980af5457851bac522b23bd68c4dc44a58fd026d7674 + checksum: b75c900fc656cfc141f8954ccb48346970d561ba83852ec1d27cecddb6606033e03ea560d7253847bd09dfb8317548c9be9cb92c50d906e55134d892d3785806 languageName: node linkType: hard @@ -3014,17 +4077,7 @@ __metadata: languageName: node linkType: hard -"@metamask/base-controller@npm:^2.0.0": - version: 2.0.0 - resolution: "@metamask/base-controller@npm:2.0.0" - dependencies: - "@metamask/controller-utils": ^3.0.0 - immer: ^9.0.6 - checksum: afd7df59cbcd26261e3d015ac0669261efbfad8e106b55ae7184f7445979b867f78f0d56fe103566150236093847b3acc68473f979e46bd9c67f654857995458 - languageName: node - linkType: hard - -"@metamask/base-controller@npm:^3.0.0, @metamask/base-controller@npm:^3.2.0": +"@metamask/base-controller@npm:^3.2.0": version: 3.2.0 resolution: "@metamask/base-controller@npm:3.2.0" dependencies: @@ -3034,54 +4087,28 @@ __metadata: languageName: node linkType: hard -"@metamask/browser-passworder@npm:^4.0.2": - version: 4.1.0 - resolution: "@metamask/browser-passworder@npm:4.1.0" - checksum: f1edb3b75594b8e8d075b3134c9ce6c73573160eb48184ef722b9d96a5763db1e2e9acb166fc5c66c7c82936e134a02a3fb4c0022ca9a948857a30181cb84d7e - languageName: node - linkType: hard - -"@metamask/controller-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "@metamask/controller-utils@npm:3.0.0" - dependencies: - eth-ens-namehash: ^2.0.8 - eth-rpc-errors: ^4.0.0 - ethereumjs-util: ^7.0.10 - ethjs-unit: ^0.1.6 - fast-deep-equal: ^3.1.3 - checksum: 44227aa9f716f86373a1a4fb86b7ae1c51199dd819f30a3a310a9f87838b7e11c1a3bb024572253bd3cb0258281596cfab8fbf317c3fe90962fa6cf426aa6858 - languageName: node - linkType: hard - -"@metamask/controller-utils@npm:^3.4.0": - version: 3.4.0 - resolution: "@metamask/controller-utils@npm:3.4.0" +"@metamask/base-controller@npm:^3.2.3": + version: 3.2.3 + resolution: "@metamask/base-controller@npm:3.2.3" dependencies: - "@metamask/utils": ^5.0.1 - "@spruceid/siwe-parser": 1.1.3 - eth-ens-namehash: ^2.0.8 - eth-rpc-errors: ^4.0.2 - ethereumjs-util: ^7.0.10 - ethjs-unit: ^0.1.6 - fast-deep-equal: ^3.1.3 - checksum: c483a56a062118ad0b740ca65ec05810226af069bdcd7ff92adc250a9a4e8b9abf347876476ecd005f7890770b5bbf2f621a90b5a3698fdd059127d4337d7c6b + "@metamask/utils": ^8.1.0 + immer: ^9.0.6 + checksum: f49fcf2bf892ec25657c2d72a50b3c4f3cad59acb1b74d9fdcdf564107b8f38f73647c696aaa9699d94828b5797d8f1479dab44a2dbcda987c268b0088bb3b76 languageName: node linkType: hard -"@metamask/controller-utils@npm:^4.3.0": - version: 4.3.1 - resolution: "@metamask/controller-utils@npm:4.3.1" +"@metamask/controller-utils@npm:^5.0.2": + version: 5.0.2 + resolution: "@metamask/controller-utils@npm:5.0.2" dependencies: "@metamask/eth-query": ^3.0.1 - "@metamask/utils": ^6.2.0 + "@metamask/utils": ^8.1.0 "@spruceid/siwe-parser": 1.1.3 eth-ens-namehash: ^2.0.8 - eth-rpc-errors: ^4.0.2 ethereumjs-util: ^7.0.10 ethjs-unit: ^0.1.6 fast-deep-equal: ^3.1.3 - checksum: 5bb471df560a12fba1b7fa147fe0332e06b527637c04facff1774b1279dd388b4cf1d74340469adb13551c08cc156f204d90e36599ad69b54716b11e5842b348 + checksum: 2345ab9ee0ba900fe2249d80009acfcf458bc60b30418234d00f5f04247b1182a585050572237f8ab09aa23032a24b99ad96399fc0798a0e9a114a29c3bf90d6 languageName: node linkType: hard @@ -3158,31 +4185,14 @@ __metadata: languageName: node linkType: hard -"@metamask/key-tree@npm:^6.0.0, @metamask/key-tree@npm:^6.2.1": - version: 6.2.1 - resolution: "@metamask/key-tree@npm:6.2.1" - dependencies: - "@metamask/scure-bip39": ^2.1.0 - "@metamask/utils": ^3.3.0 - "@noble/ed25519": ^1.6.0 - "@noble/hashes": ^1.0.0 - "@noble/secp256k1": ^1.5.5 - "@scure/base": ^1.0.0 - checksum: 78931e20a2c933535c17d21e092dbc66e3e96f3c171a6814af51830b7774dd3b4059326180a3b1f52e48a258254a7ea70a31d0c335bf24a8c4250f8d196bc7ba - languageName: node - linkType: hard - -"@metamask/key-tree@npm:^7.1.1": - version: 7.1.1 - resolution: "@metamask/key-tree@npm:7.1.1" +"@metamask/json-rpc-engine@npm:^7.1.1, @metamask/json-rpc-engine@npm:^7.3.0": + version: 7.3.0 + resolution: "@metamask/json-rpc-engine@npm:7.3.0" dependencies: - "@metamask/scure-bip39": ^2.1.0 - "@metamask/utils": ^6.0.1 - "@noble/ed25519": ^1.6.0 - "@noble/hashes": ^1.0.0 - "@noble/secp256k1": ^1.5.5 - "@scure/base": ^1.0.0 - checksum: ddab7917e1214c51508f821a680f8e8819a8c866fd91244e0debf28464331dfcbf9a357e01716fc593cf00a8c71f95fd45ed4ff686ee6abc4c4061aed629537c + "@metamask/rpc-errors": ^6.1.0 + "@metamask/safe-event-emitter": ^3.0.0 + "@metamask/utils": ^8.2.0 + checksum: 7e12fb58ee2775269aa3e6e3a40d18d9053b6cefb6eaa2b80558a65986d0e451a9faf3935548d5b4eced857c6b569e768cb235ef10ff0feb72a23ccadaaff4bc languageName: node linkType: hard @@ -3200,18 +4210,19 @@ __metadata: languageName: node linkType: hard -"@metamask/keyring-api@npm:^0.1.3": - version: 0.1.3 - resolution: "@metamask/keyring-api@npm:0.1.3" +"@metamask/keyring-api@npm:^1.0.0": + version: 1.1.0 + resolution: "@metamask/keyring-api@npm:1.1.0" dependencies: - "@metamask/providers": ^11.0.0 - "@metamask/snaps-controllers": ^0.35.2-flask.1 - "@metamask/snaps-utils": ^0.35.2-flask.1 - "@metamask/utils": ^6.0.1 + "@metamask/providers": ^13.0.0 + "@metamask/snaps-controllers": ^3.1.0 + "@metamask/snaps-rpc-methods": ^3.1.0 + "@metamask/snaps-utils": ^3.0.0 + "@metamask/utils": ^8.1.0 "@types/uuid": ^9.0.1 superstruct: ^1.0.3 uuid: ^9.0.0 - checksum: 2307b5162dbb66d82f7d8ab8e9f1c3a0ef581b915702187b6b8fa5d8e8533838d0539d6f35853ef4f25096f13c9dbf4505fadff247b73f6d489d9c904015d21c + checksum: dd07db768861a4c4b9b5168dedac104c7e9a8fdd1de5520f81bf276f9923ea55f649d57e8eee1aa5dda06b6b82f163ec5447e32c614e920063baea06e130ecea languageName: node linkType: hard @@ -3226,153 +4237,75 @@ __metadata: languageName: node linkType: hard -"@metamask/permission-controller@npm:^3.0.0, @metamask/permission-controller@npm:^3.1.0": - version: 3.2.0 - resolution: "@metamask/permission-controller@npm:3.2.0" - dependencies: - "@metamask/approval-controller": ^2.1.1 - "@metamask/base-controller": ^2.0.0 - "@metamask/controller-utils": ^3.4.0 - "@metamask/types": ^1.1.0 +"@metamask/permission-controller@npm:^5.0.0": + version: 5.0.1 + resolution: "@metamask/permission-controller@npm:5.0.1" + dependencies: + "@metamask/approval-controller": ^4.1.0 + "@metamask/base-controller": ^3.2.3 + "@metamask/controller-utils": ^5.0.2 + "@metamask/json-rpc-engine": ^7.3.0 + "@metamask/rpc-errors": ^6.1.0 + "@metamask/utils": ^8.2.0 "@types/deep-freeze-strict": ^1.1.0 deep-freeze-strict: ^1.1.1 - eth-rpc-errors: ^4.0.2 immer: ^9.0.6 - json-rpc-engine: ^6.1.0 nanoid: ^3.1.31 peerDependencies: - "@metamask/approval-controller": ^2.1.1 - checksum: 34650f2d9b51170fc9b2a56d2004a2cd2ca3f427e9dad2e3229bbd0b1dfad40a98f639752b1bfe17946c39677e4c8fe52581b5dbbf42e4a18e83b72e8e06d9b0 + "@metamask/approval-controller": ^4.1.0 + checksum: fc61df3f5532b35b9ec26ca712848d680d616103e3d06470691412ee8b5a4b70e27d530065f601b64e0a5c2022aa129b8e6ddcc7c3e8325720aa0f639e3e10ba languageName: node linkType: hard -"@metamask/permission-controller@npm:^4.0.0": - version: 4.1.0 - resolution: "@metamask/permission-controller@npm:4.1.0" +"@metamask/phishing-controller@npm:^7.0.0": + version: 7.0.1 + resolution: "@metamask/phishing-controller@npm:7.0.1" dependencies: - "@metamask/approval-controller": ^3.5.0 - "@metamask/base-controller": ^3.2.0 - "@metamask/controller-utils": ^4.3.0 - "@metamask/utils": ^6.2.0 - "@types/deep-freeze-strict": ^1.1.0 - deep-freeze-strict: ^1.1.1 - eth-rpc-errors: ^4.0.2 - immer: ^9.0.6 - json-rpc-engine: ^6.1.0 - nanoid: ^3.1.31 - peerDependencies: - "@metamask/approval-controller": ^3.5.0 - checksum: dc0a78321d1331070eb3775928c4c0b0138515c6449c09a73c2243ca8d55801f5a97c4ce2229cdbf630d1a893ec373474d8c17cb35e06c26b0d5ea490c402c48 + "@metamask/base-controller": ^3.2.3 + "@metamask/controller-utils": ^5.0.2 + "@types/punycode": ^2.1.0 + eth-phishing-detect: ^1.2.0 + punycode: ^2.1.1 + checksum: 9d7b4db829ce78163bc308ef520382a4d3eb43597acf05b56e1f712c56dfc60b504f61f532ebdc656f9fbeb8c26f62b7cf075aef3c5d8263b993c628cc485d81 languageName: node linkType: hard -"@metamask/post-message-stream@npm:^6.1.2": - version: 6.1.2 - resolution: "@metamask/post-message-stream@npm:6.1.2" +"@metamask/post-message-stream@npm:^7.0.0": + version: 7.0.0 + resolution: "@metamask/post-message-stream@npm:7.0.0" dependencies: "@metamask/utils": ^5.0.0 - readable-stream: 2.3.3 - checksum: 3591ec9b7fd602806b07cbc0fed5075fb7a347c279c43ef1f25fbdd8634dfcad9ce192ae59457fb76554ef0bc15cbf25cfaa5875aee2d72668a273b7a6852c32 - languageName: node - linkType: hard - -"@metamask/providers@npm:^10.2.1": - version: 10.2.1 - resolution: "@metamask/providers@npm:10.2.1" - dependencies: - "@metamask/object-multiplex": ^1.1.0 - "@metamask/safe-event-emitter": ^2.0.0 - "@types/chrome": ^0.0.136 - detect-browser: ^5.2.0 - eth-rpc-errors: ^4.0.2 - extension-port-stream: ^2.0.1 - fast-deep-equal: ^2.0.1 - is-stream: ^2.0.0 - json-rpc-engine: ^6.1.0 - json-rpc-middleware-stream: ^4.2.1 - pump: ^3.0.0 - webextension-polyfill-ts: ^0.25.0 - checksum: e88b2db8c4673cc6a7e47d9f0531df3fac73f05f8e9ff6d02c3420dfb3c7a82335d9c44876f2d472c44eac36d66491d2022be4f39600bee561d5de8ad59c5b07 + readable-stream: 3.6.2 + checksum: a922874f00870e0c666216e592dff6c508e926fae122646d2792c9a7fac4f73323c65046a1eb9dc48a4b0e7de3bbcf753f5ad470688ed4ba2298b4d3a9b39c7d languageName: node linkType: hard -"@metamask/providers@npm:^11.0.0": - version: 11.1.1 - resolution: "@metamask/providers@npm:11.1.1" +"@metamask/providers@npm:^13.0.0": + version: 13.1.0 + resolution: "@metamask/providers@npm:13.1.0" dependencies: + "@metamask/json-rpc-engine": ^7.1.1 "@metamask/object-multiplex": ^1.1.0 + "@metamask/rpc-errors": ^6.0.0 "@metamask/safe-event-emitter": ^3.0.0 + "@metamask/utils": ^8.1.0 detect-browser: ^5.2.0 - eth-rpc-errors: ^4.0.2 - extension-port-stream: ^2.0.1 + extension-port-stream: ^2.1.1 fast-deep-equal: ^3.1.3 is-stream: ^2.0.0 - json-rpc-engine: ^6.1.0 json-rpc-middleware-stream: ^4.2.1 - pump: ^3.0.0 webextension-polyfill: ^0.10.0 - checksum: ca0339e5219ef43bccdf1debbf610f5f06c95d879c7bba124463c4c6e6dd34fae30c0cdf673985d85d9326a87e94a6ee7ad5d29ef154dca85a0c672fdab152d1 - languageName: node - linkType: hard - -"@metamask/rpc-methods@npm:^0.30.0": - version: 0.30.0 - resolution: "@metamask/rpc-methods@npm:0.30.0" - dependencies: - "@metamask/browser-passworder": ^4.0.2 - "@metamask/key-tree": ^6.2.1 - "@metamask/permission-controller": ^3.0.0 - "@metamask/snaps-ui": ^0.30.0 - "@metamask/snaps-utils": ^0.30.0 - "@metamask/types": ^1.1.0 - "@metamask/utils": ^3.4.1 - "@noble/hashes": ^1.1.3 - eth-rpc-errors: ^4.0.2 - nanoid: ^3.1.31 - superstruct: ^1.0.3 - checksum: ae584a2ea403653199c17e4fe43bdf26d25f2dbab8609e48f85d6a1def762526370e145cf69dc5649ee501f6e170ea27161b3d908c62ff1e9617af5e23564793 - languageName: node - linkType: hard - -"@metamask/rpc-methods@npm:^0.35.2-flask.1": - version: 0.35.2-flask.1 - resolution: "@metamask/rpc-methods@npm:0.35.2-flask.1" - dependencies: - "@metamask/key-tree": ^7.1.1 - "@metamask/permission-controller": ^4.0.0 - "@metamask/snaps-ui": ^0.35.2-flask.1 - "@metamask/snaps-utils": ^0.35.2-flask.1 - "@metamask/types": ^1.1.0 - "@metamask/utils": ^6.0.1 - "@noble/hashes": ^1.3.1 - eth-rpc-errors: ^4.0.3 - nanoid: ^3.1.31 - superstruct: ^1.0.3 - checksum: e949da37c7d3099c07fc3f110310a1f86dbfbdf0d3a84a584b697beb64dc4662ba93e843b7a28a41e41b6500128782a07a9884e14252ac98206b8ed58776034b + checksum: 0833859c459d4e832ca6afda0907f097e39e35b0f59c8f9248edcba1a2e4963ab80f1e9ae5a61eada8439884de72c3176cff46f48666f9e2267f1ebbb9ecf8e3 languageName: node linkType: hard -"@metamask/rpc-methods@npm:^0.37.2-flask.1": - version: 0.37.2-flask.1 - resolution: "@metamask/rpc-methods@npm:0.37.2-flask.1" +"@metamask/rpc-errors@npm:^6.0.0, @metamask/rpc-errors@npm:^6.1.0": + version: 6.1.0 + resolution: "@metamask/rpc-errors@npm:6.1.0" dependencies: - "@metamask/key-tree": ^9.0.0 - "@metamask/permission-controller": ^4.0.0 - "@metamask/snaps-ui": ^0.37.2-flask.1 - "@metamask/snaps-utils": ^0.37.2-flask.1 - "@metamask/types": ^1.1.0 - "@metamask/utils": ^6.0.1 - "@noble/hashes": ^1.3.1 - eth-rpc-errors: ^4.0.3 - superstruct: ^1.0.3 - checksum: f5b955c3a7b7c042c27aa5d9464ea5d9135104c20af3315ea00d8941c5c6379c12c82c0988bc5c21409f4dd8b740bb93b387e2ee115c914b434e28101cd9d877 - languageName: node - linkType: hard - -"@metamask/safe-event-emitter@npm:^2.0.0": - version: 2.0.0 - resolution: "@metamask/safe-event-emitter@npm:2.0.0" - checksum: 8b717ac5d53df0027c05509f03d0534700b5898dd1c3a53fb2dc4c0499ca5971b14aae67f522d09eb9f509e77f50afa95fdb3eda1afbff8b071c18a3d2905e93 + "@metamask/utils": ^8.1.0 + fast-safe-stringify: ^2.0.6 + checksum: 9f4821d804e2fcaa8987b0958d02c6d829b7c7db49740c811cb593f381d0c4b00dabb7f1802907f1b2f6126f7c0d83ec34219183d29650f5d24df014ac72906a languageName: node linkType: hard @@ -3393,320 +4326,200 @@ __metadata: languageName: node linkType: hard -"@metamask/snaps-browserify-plugin@npm:^0.32.2": - version: 0.32.2 - resolution: "@metamask/snaps-browserify-plugin@npm:0.32.2" +"@metamask/snaps-cli@npm:^3.0.0": + version: 3.0.1 + resolution: "@metamask/snaps-cli@npm:3.0.1" dependencies: - "@metamask/snaps-utils": ^0.32.2 - convert-source-map: ^1.8.0 - checksum: cfdf6c07b86a97cccefa1dd5d60d49e13a315fe3b6ab8235301813654b058e32c6872a36fbb81a1a46b237e16cff83b15d776c4fc2c1e87fea9160f27dd05097 - languageName: node - linkType: hard - -"@metamask/snaps-cli@npm:^0.32.2": - version: 0.32.2 - resolution: "@metamask/snaps-cli@npm:0.32.2" - dependencies: - "@babel/core": ^7.16.7 - "@babel/plugin-proposal-class-properties": ^7.16.7 - "@babel/plugin-proposal-nullish-coalescing-operator": ^7.16.7 - "@babel/plugin-proposal-object-rest-spread": ^7.16.7 - "@babel/plugin-proposal-optional-chaining": ^7.16.7 - "@babel/plugin-transform-runtime": ^7.16.7 - "@babel/preset-env": ^7.16.7 - "@babel/preset-typescript": ^7.16.7 - "@metamask/snaps-browserify-plugin": ^0.32.2 - "@metamask/snaps-utils": ^0.32.2 - "@metamask/utils": ^5.0.0 + "@babel/core": ^7.23.2 + "@babel/plugin-transform-class-properties": ^7.22.5 + "@babel/plugin-transform-class-static-block": ^7.22.11 + "@babel/plugin-transform-private-methods": ^7.22.5 + "@babel/plugin-transform-private-property-in-object": ^7.22.11 + "@babel/plugin-transform-runtime": ^7.13.2 + "@babel/preset-env": ^7.23.2 + "@babel/preset-typescript": ^7.23.2 + "@metamask/snaps-utils": ^3.1.0 + "@metamask/snaps-webpack-plugin": ^3.0.1 + "@metamask/utils": ^8.1.0 + "@swc/core": 1.3.78 + assert: ^2.0.0 babelify: ^10.0.0 browserify: ^17.0.0 + browserify-zlib: ^0.2.0 + buffer: ^6.0.3 + chalk: ^4.1.2 chokidar: ^3.5.2 - is-url: ^1.2.4 + console-browserify: ^1.2.0 + constants-browserify: ^1.0.0 + crypto-browserify: ^3.12.0 + domain-browser: ^4.22.0 + events: ^3.3.0 + https-browserify: ^1.0.0 + ora: ^5.4.1 + os-browserify: ^0.3.0 + path-browserify: ^1.0.1 + process: ^0.11.10 + punycode: ^2.3.0 + querystring-es3: ^0.2.1 + readable-stream: ^3.6.2 + semver: ^7.5.4 serve-handler: ^6.1.5 - ses: ^0.18.1 + stream-browserify: ^3.0.0 + stream-http: ^3.2.0 + string_decoder: ^1.3.0 superstruct: ^1.0.3 - yargs: ^16.2.0 - yargs-parser: ^20.2.2 + swc-loader: ^0.2.3 + terser-webpack-plugin: ^5.3.9 + timers-browserify: ^2.0.12 + tty-browserify: ^0.0.1 + url: ^0.11.1 + util: ^0.12.5 + vm-browserify: ^1.1.2 + webpack: ^5.88.0 + webpack-merge: ^5.9.0 + yargs: ^17.7.1 bin: - mm-snap: dist/main.js - checksum: da7d95dc67f23093deacd075c1803df8cb20735e1e37d11fec4aa0bb24e44026d51b7fe2851c1cdf0d327be9690f917dc1bebd5b827bb2776f5d2cffb21d03c1 + mm-snap: ./dist/cjs/main.js + checksum: 9dffe74889965a87bdc1c72d93f2a6aa27b00a6e3543e179ef4498b4c485c1dcba983dbfc860a6e7fbbcfcb30020af4b06a9f1896dc3452068f74d9d7f93acf3 languageName: node linkType: hard -"@metamask/snaps-controllers@npm:^0.35.2-flask.1": - version: 0.35.2-flask.1 - resolution: "@metamask/snaps-controllers@npm:0.35.2-flask.1" +"@metamask/snaps-controllers@npm:^3.1.0": + version: 3.3.0 + resolution: "@metamask/snaps-controllers@npm:3.3.0" dependencies: - "@metamask/approval-controller": ^3.0.0 - "@metamask/base-controller": ^3.0.0 + "@metamask/approval-controller": ^4.0.0 + "@metamask/base-controller": ^3.2.0 + "@metamask/json-rpc-engine": ^7.1.1 "@metamask/object-multiplex": ^1.2.0 - "@metamask/permission-controller": ^4.0.0 - "@metamask/post-message-stream": ^6.1.2 - "@metamask/rpc-methods": ^0.35.2-flask.1 - "@metamask/snaps-execution-environments": ^0.35.2-flask.1 - "@metamask/snaps-registry": ^1.2.1 - "@metamask/snaps-utils": ^0.35.2-flask.1 - "@metamask/utils": ^6.0.1 + "@metamask/permission-controller": ^5.0.0 + "@metamask/phishing-controller": ^7.0.0 + "@metamask/post-message-stream": ^7.0.0 + "@metamask/rpc-errors": ^6.1.0 + "@metamask/snaps-registry": ^2.1.0 + "@metamask/snaps-rpc-methods": ^3.3.0 + "@metamask/snaps-ui": ^3.1.0 + "@metamask/snaps-utils": ^3.3.0 + "@metamask/utils": ^8.1.0 "@xstate/fsm": ^2.0.0 concat-stream: ^2.0.0 - cron-parser: ^4.5.0 - eth-rpc-errors: ^4.0.3 + get-npm-tarball-url: ^2.0.3 gunzip-maybe: ^1.4.2 immer: ^9.0.6 - json-rpc-engine: ^6.1.0 - json-rpc-middleware-stream: ^4.2.0 + json-rpc-middleware-stream: ^5.0.0 nanoid: ^3.1.31 - pump: ^3.0.0 readable-web-to-node-stream: ^3.0.2 - tar-stream: ^2.2.0 - checksum: 8b20ed3176da02c2bb5be642db83912b484dd85a0e9cb36b2d4bca6a0058cd28d578c91c595f20bcc084c73e8802b289191ac41972bc17ae921010e1b05fd307 - languageName: node - linkType: hard - -"@metamask/snaps-execution-environments@npm:^0.35.2-flask.1": - version: 0.35.2-flask.1 - resolution: "@metamask/snaps-execution-environments@npm:0.35.2-flask.1" - dependencies: - "@metamask/object-multiplex": ^1.2.0 - "@metamask/post-message-stream": ^6.1.2 - "@metamask/providers": ^11.0.0 - "@metamask/rpc-methods": ^0.35.2-flask.1 - "@metamask/snaps-utils": ^0.35.2-flask.1 - "@metamask/utils": ^6.0.1 - eth-rpc-errors: ^4.0.3 - json-rpc-engine: ^6.1.0 - nanoid: ^3.1.31 - pump: ^3.0.0 - ses: ^0.18.1 - stream-browserify: ^3.0.0 - superstruct: ^1.0.3 - checksum: b112a25a5cd5574fd84dcc7a62b9076d59d0182d52c37645d44477efcb67d18a4dd40bef3778dcbd67009fe3b261ffe0e247def112737a16bac5e86bf16081e7 + tar-stream: ^3.1.6 + peerDependencies: + "@metamask/snaps-execution-environments": ^3.2.0 + peerDependenciesMeta: + "@metamask/snaps-execution-environments": + optional: true + checksum: 96671b0f6d5e42f87fb3697da5f7eb0b315bea5dd281cc4a7f11567a5f68dccf5534cb0c03c41f1073527dbd645d112058140d32890c8f925882a99f0b8f029c languageName: node linkType: hard -"@metamask/snaps-registry@npm:^1.0.0, @metamask/snaps-registry@npm:^1.2.0, @metamask/snaps-registry@npm:^1.2.1": - version: 1.2.1 - resolution: "@metamask/snaps-registry@npm:1.2.1" +"@metamask/snaps-registry@npm:^2.1.0": + version: 2.1.0 + resolution: "@metamask/snaps-registry@npm:2.1.0" dependencies: - "@metamask/utils": ^6.0.0 + "@metamask/utils": ^8.1.0 "@noble/secp256k1": ^1.7.1 superstruct: ^1.0.3 - checksum: d2d5b743a8b55b6f685708b2b694534585329585c6d94819328e270fd77c68c0bede88b866821db9c22a667eca1f4961ed860d83b438cf009bd1c4df6e75b78a - languageName: node - linkType: hard - -"@metamask/snaps-types@npm:0.38.0-flask.1": - version: 0.38.0-flask.1 - resolution: "@metamask/snaps-types@npm:0.38.0-flask.1" - dependencies: - "@metamask/providers": ^11.0.0 - "@metamask/rpc-methods": ^0.37.2-flask.1 - "@metamask/snaps-utils": ^0.38.0-flask.1 - "@metamask/utils": ^6.0.1 - checksum: ce3f0b91ea51136c4f1f91595bf1c88438655bc6710e02eff3d53b2d53ead02c2ea9d1539e7ce428086714a0053bb2659a3e351d18fcec7837b48b6ae99e4739 - languageName: node - linkType: hard - -"@metamask/snaps-ui@npm:^0.30.0": - version: 0.30.0 - resolution: "@metamask/snaps-ui@npm:0.30.0" - dependencies: - "@metamask/utils": ^3.4.1 - superstruct: ^1.0.3 - checksum: a4612e08e830542b094bf995023221a24dfa45861d3ca919c1c11ae1bd3d6933789d40c667780145bcd3ff3053d0593e654ae1812ea9f3c7cc973d500cfb0a96 - languageName: node - linkType: hard - -"@metamask/snaps-ui@npm:^0.32.2": - version: 0.32.2 - resolution: "@metamask/snaps-ui@npm:0.32.2" - dependencies: - "@metamask/utils": ^5.0.0 - superstruct: ^1.0.3 - checksum: 98e8900efb63a0f1ec4893624290a1bf2d0fa416f99d57f33532865063f4e4b9b3787b77630629c64d7dc041e3508cac81044eca067ed76a07aa380bc5997db2 - languageName: node - linkType: hard - -"@metamask/snaps-ui@npm:^0.35.2-flask.1": - version: 0.35.2-flask.1 - resolution: "@metamask/snaps-ui@npm:0.35.2-flask.1" - dependencies: - "@metamask/utils": ^6.0.1 - superstruct: ^1.0.3 - checksum: fb272068e04a9d4e0458aecef4df4091a9d9d9c0c3580d40c211a710566eb5610252456f0eb99533379d6d919c0c4156dda1ae6233693723e9227e54a4c5ddbf - languageName: node - linkType: hard - -"@metamask/snaps-ui@npm:^0.37.2-flask.1": - version: 0.37.2-flask.1 - resolution: "@metamask/snaps-ui@npm:0.37.2-flask.1" - dependencies: - "@metamask/utils": ^6.0.1 - superstruct: ^1.0.3 - checksum: a52a887411d689a7a0b017b3741c76819567416c7943ca3c71f5b5f8b623605689f370f70caa8a22531d711d10738c913b0d561fcda09a92c38e288d115e6bac - languageName: node - linkType: hard - -"@metamask/snaps-ui@npm:^0.37.3-flask.1": - version: 0.37.3-flask.1 - resolution: "@metamask/snaps-ui@npm:0.37.3-flask.1" - dependencies: - "@metamask/utils": ^6.0.1 - superstruct: ^1.0.3 - checksum: 0b93f6edeca18afc799f16be8b4e4d758800ea0d68298c70492dc85f74ec9f79c2aa32749f6725bb83a4896fdb1ec95a7d19a10a617484e0a7574ddad7969bd3 + checksum: 652e8c5cc0be43325ba6cf9382db982380f34d1710bfbcc27c9d58cf0e0c14bd354e112b2feb27c1ca7264a0793795d9020a4315ffcf10fa6fed8f38cf18fcde languageName: node linkType: hard -"@metamask/snaps-utils@npm:^0.30.0": - version: 0.30.0 - resolution: "@metamask/snaps-utils@npm:0.30.0" +"@metamask/snaps-rpc-methods@npm:^3.1.0, @metamask/snaps-rpc-methods@npm:^3.3.0": + version: 3.3.0 + resolution: "@metamask/snaps-rpc-methods@npm:3.3.0" dependencies: - "@babel/core": ^7.18.6 - "@babel/types": ^7.18.7 - "@metamask/permission-controller": ^3.0.0 - "@metamask/providers": ^10.2.1 - "@metamask/snaps-registry": ^1.0.0 - "@metamask/snaps-ui": ^0.30.0 - "@metamask/utils": ^3.4.1 - "@noble/hashes": ^1.1.3 - "@scure/base": ^1.1.1 - cron-parser: ^4.5.0 - eth-rpc-errors: ^4.0.3 - fast-deep-equal: ^3.1.3 - fast-json-stable-stringify: ^2.1.0 - rfdc: ^1.3.0 - semver: ^7.3.7 - ses: ^0.18.1 + "@metamask/key-tree": ^9.0.0 + "@metamask/permission-controller": ^5.0.0 + "@metamask/rpc-errors": ^6.1.0 + "@metamask/snaps-ui": ^3.1.0 + "@metamask/snaps-utils": ^3.3.0 + "@metamask/utils": ^8.1.0 + "@noble/hashes": ^1.3.1 superstruct: ^1.0.3 - validate-npm-package-name: ^5.0.0 - checksum: 56334795dee7deeddd63badd35870ebb51ba5336071146bd6f48a9f7c1d703515241ac9371d7a4e054d77d7c6d06f34530e7b9439074339a46fea89920d32bce + checksum: 5f830b22db427b4109411632fdd5108ff9c151a819bba35b9bfd0ac6cc70ff581407c91b2ffb34ee0f624869d65054bfde88396e2df13d3052262e29dabbaa05 languageName: node linkType: hard -"@metamask/snaps-utils@npm:^0.32.2": - version: 0.32.2 - resolution: "@metamask/snaps-utils@npm:0.32.2" - dependencies: - "@babel/core": ^7.18.6 - "@babel/types": ^7.18.7 - "@metamask/base-controller": ^2.0.0 - "@metamask/permission-controller": ^3.1.0 - "@metamask/providers": ^10.2.1 - "@metamask/snaps-registry": ^1.2.0 - "@metamask/snaps-ui": ^0.32.2 - "@metamask/utils": ^5.0.0 - "@noble/hashes": ^1.1.3 - "@scure/base": ^1.1.1 - cron-parser: ^4.5.0 - eth-rpc-errors: ^4.0.3 - fast-deep-equal: ^3.1.3 - fast-json-stable-stringify: ^2.1.0 - rfdc: ^1.3.0 - semver: ^7.3.7 - ses: ^0.18.1 - superstruct: ^1.0.3 - validate-npm-package-name: ^5.0.0 - checksum: 3568fb79cff8283eacb6e1bd498e20191f2c7c6774675be372f5305a4b5275512d1ded2a9fb36c106a8b10c5cbf480f6a87cdacfc70baf642b9bf3094ee3aefa +"@metamask/snaps-types@npm:^3.0.0": + version: 3.1.0 + resolution: "@metamask/snaps-types@npm:3.1.0" + dependencies: + "@metamask/providers": ^13.0.0 + "@metamask/snaps-rpc-methods": ^3.3.0 + "@metamask/snaps-utils": ^3.3.0 + "@metamask/utils": ^8.1.0 + checksum: 348d8699b3f2731e26b8ac17c38ecd23215b671b9168b8e9b6d84344e443413a5c425098c986bbe8bf9f23ab8325301aaa0c94bf3234f7c0a41caba12db9a374 languageName: node linkType: hard -"@metamask/snaps-utils@npm:^0.35.2-flask.1": - version: 0.35.2-flask.1 - resolution: "@metamask/snaps-utils@npm:0.35.2-flask.1" +"@metamask/snaps-ui@npm:^0.32.2": + version: 0.32.2 + resolution: "@metamask/snaps-ui@npm:0.32.2" dependencies: - "@babel/core": ^7.20.12 - "@babel/types": ^7.18.7 - "@metamask/base-controller": ^3.0.0 - "@metamask/key-tree": ^7.1.1 - "@metamask/permission-controller": ^4.0.0 - "@metamask/providers": ^11.0.0 - "@metamask/snaps-registry": ^1.2.1 - "@metamask/snaps-ui": ^0.35.2-flask.1 - "@metamask/utils": ^6.0.1 - "@noble/hashes": ^1.3.1 - "@scure/base": ^1.1.1 - cron-parser: ^4.5.0 - eth-rpc-errors: ^4.0.3 - fast-deep-equal: ^3.1.3 - fast-json-stable-stringify: ^2.1.0 - is-svg: ^4.4.0 - rfdc: ^1.3.0 - semver: ^7.3.7 - ses: ^0.18.1 + "@metamask/utils": ^5.0.0 superstruct: ^1.0.3 - validate-npm-package-name: ^5.0.0 - checksum: 4a22bf42512e2bdc944042cb05ef8b8f733ce902c0f374f7d36e22344700a3d0674a48ddacbe096a7e253c24f7ba05cff7ff30a05d3e48a840b63cbeeb46f0ce + checksum: 98e8900efb63a0f1ec4893624290a1bf2d0fa416f99d57f33532865063f4e4b9b3787b77630629c64d7dc041e3508cac81044eca067ed76a07aa380bc5997db2 languageName: node linkType: hard -"@metamask/snaps-utils@npm:^0.37.2-flask.1": - version: 0.37.2-flask.1 - resolution: "@metamask/snaps-utils@npm:0.37.2-flask.1" +"@metamask/snaps-ui@npm:^3.1.0": + version: 3.1.0 + resolution: "@metamask/snaps-ui@npm:3.1.0" dependencies: - "@babel/core": ^7.20.12 - "@babel/types": ^7.18.7 - "@metamask/base-controller": ^3.0.0 - "@metamask/key-tree": ^9.0.0 - "@metamask/permission-controller": ^4.0.0 - "@metamask/providers": ^11.0.0 - "@metamask/snaps-registry": ^1.2.1 - "@metamask/snaps-ui": ^0.37.2-flask.1 - "@metamask/utils": ^6.0.1 - "@noble/hashes": ^1.3.1 - "@scure/base": ^1.1.1 - chalk: ^4.1.2 - cron-parser: ^4.5.0 - eth-rpc-errors: ^4.0.3 - fast-deep-equal: ^3.1.3 - fast-json-stable-stringify: ^2.1.0 + "@metamask/utils": ^8.1.0 is-svg: ^4.4.0 - rfdc: ^1.3.0 - semver: ^7.3.7 - ses: ^0.18.1 superstruct: ^1.0.3 - validate-npm-package-name: ^5.0.0 - checksum: eeb31013a8af39b5488fdb8a6a72e11c54274e423e0f2560fd5cf4ea0278e278aff60be070c1e5b847d84220f15338e01c4725ce7ebb5f3fc614553ae4235f44 + checksum: a234217e961a103b89708d46732481e82c0778b3ebbecddabc9351eee48d082cdc231102442c3ae5c76aa33b24c24aad70e84fee9d7b492641f290a10c3211c1 languageName: node linkType: hard -"@metamask/snaps-utils@npm:^0.38.0-flask.1": - version: 0.38.0-flask.1 - resolution: "@metamask/snaps-utils@npm:0.38.0-flask.1" +"@metamask/snaps-utils@npm:^3.0.0, @metamask/snaps-utils@npm:^3.1.0, @metamask/snaps-utils@npm:^3.3.0": + version: 3.3.0 + resolution: "@metamask/snaps-utils@npm:3.3.0" dependencies: - "@babel/core": ^7.20.12 - "@babel/types": ^7.18.7 - "@metamask/base-controller": ^3.0.0 + "@babel/core": ^7.23.2 + "@babel/types": ^7.23.0 + "@metamask/base-controller": ^3.2.0 "@metamask/key-tree": ^9.0.0 - "@metamask/permission-controller": ^4.0.0 - "@metamask/providers": ^11.0.0 - "@metamask/snaps-registry": ^1.2.1 - "@metamask/snaps-ui": ^0.37.3-flask.1 - "@metamask/utils": ^6.0.1 + "@metamask/permission-controller": ^5.0.0 + "@metamask/rpc-errors": ^6.1.0 + "@metamask/snaps-registry": ^2.1.0 + "@metamask/snaps-ui": ^3.1.0 + "@metamask/utils": ^8.1.0 "@noble/hashes": ^1.3.1 "@scure/base": ^1.1.1 chalk: ^4.1.2 cron-parser: ^4.5.0 - eth-rpc-errors: ^4.0.3 fast-deep-equal: ^3.1.3 fast-json-stable-stringify: ^2.1.0 is-svg: ^4.4.0 rfdc: ^1.3.0 semver: ^7.5.4 - ses: ^0.18.1 + ses: ^0.18.8 superstruct: ^1.0.3 validate-npm-package-name: ^5.0.0 - checksum: 9b79feabcf3a99f0faa53c87711e0de155807d49dd3a9117933b9636d529fa3f3449bd563535f056fc7cbb3eaffcd9e9703b02985bdb6cfdc090d096d76dad8e + checksum: 3f106d8e290bc260ec0b7f8bcaff5077bd0505f586d3961ad953bae53bc12bc1dc3c4c666c15b58135489ff0b1b47d9630848842e0deee754527652a7ab77bbb languageName: node linkType: hard -"@metamask/types@npm:^1.1.0": - version: 1.1.0 - resolution: "@metamask/types@npm:1.1.0" - checksum: 500e8c076a2b0a6d688c8c465101256f090547d99c9a5585efe3d1db7a494b6b2712b127043fb316912caffc4fff78976b9a7780780abb68305e8a3bf812689c +"@metamask/snaps-webpack-plugin@npm:^3.0.1": + version: 3.0.1 + resolution: "@metamask/snaps-webpack-plugin@npm:3.0.1" + dependencies: + "@metamask/snaps-utils": ^3.1.0 + "@metamask/utils": ^8.1.0 + webpack-sources: ^3.2.3 + checksum: d07f1184e1db5dfd88888fc06d9f23f6af7c361846cfe5b50b94a983c5553c46b693812071bff5d796a40b87dc3fe52a6871c0e65b05e8ca8b05459a63e781ba languageName: node linkType: hard -"@metamask/utils@npm:^3.3.0, @metamask/utils@npm:^3.4.1": +"@metamask/utils@npm:^3.3.0": version: 3.6.0 resolution: "@metamask/utils@npm:3.6.0" dependencies: @@ -3718,7 +4531,7 @@ __metadata: languageName: node linkType: hard -"@metamask/utils@npm:^5.0.0, @metamask/utils@npm:^5.0.1": +"@metamask/utils@npm:^5.0.0": version: 5.0.2 resolution: "@metamask/utils@npm:5.0.2" dependencies: @@ -3731,7 +4544,7 @@ __metadata: languageName: node linkType: hard -"@metamask/utils@npm:^6.0.0, @metamask/utils@npm:^6.0.1, @metamask/utils@npm:^6.2.0": +"@metamask/utils@npm:^6.0.1, @metamask/utils@npm:^6.2.0": version: 6.2.0 resolution: "@metamask/utils@npm:6.2.0" dependencies: @@ -3745,6 +4558,22 @@ __metadata: languageName: node linkType: hard +"@metamask/utils@npm:^8.1.0, @metamask/utils@npm:^8.2.0": + version: 8.2.1 + resolution: "@metamask/utils@npm:8.2.1" + dependencies: + "@ethereumjs/tx": ^4.2.0 + "@noble/hashes": ^1.3.1 + "@scure/base": ^1.1.3 + "@types/debug": ^4.1.7 + debug: ^4.3.4 + pony-cause: ^2.1.10 + semver: ^7.5.4 + superstruct: ^1.0.3 + checksum: 36a714a17e4949d2040bedb28d4373a22e7e86bb797aa2d59223f9799fd76e662443bcede113719c4e200f5e9d90a9d62feafad5028fff8b9a7a85fface097ca + languageName: node + linkType: hard + "@mischnic/json-sourcemap@npm:^0.1.0": version: 0.1.0 resolution: "@mischnic/json-sourcemap@npm:0.1.0" @@ -3823,7 +4652,7 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.3.1, @noble/hashes@npm:^1.0.0, @noble/hashes@npm:^1.1.3, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1": +"@noble/hashes@npm:1.3.1, @noble/hashes@npm:^1.0.0, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1": version: 1.3.1 resolution: "@noble/hashes@npm:1.3.1" checksum: 7fdefc0f7a0c1ec27acc6ff88841793e3f93ec4ce6b8a6a12bfc0dd70ae6b7c4c82fe305fdfeda1735d5ad4a9eebe761e6693b3d355689c559e91242f4bc95b1 @@ -4458,6 +5287,13 @@ __metadata: languageName: node linkType: hard +"@scure/base@npm:^1.1.3": + version: 1.1.3 + resolution: "@scure/base@npm:1.1.3" + checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c + languageName: node + linkType: hard + "@scure/bip32@npm:1.3.1": version: 1.3.1 resolution: "@scure/bip32@npm:1.3.1" @@ -4733,6 +5569,120 @@ __metadata: languageName: node linkType: hard +"@swc/core-darwin-arm64@npm:1.3.78": + version: 1.3.78 + resolution: "@swc/core-darwin-arm64@npm:1.3.78" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-darwin-x64@npm:1.3.78": + version: 1.3.78 + resolution: "@swc/core-darwin-x64@npm:1.3.78" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@swc/core-linux-arm-gnueabihf@npm:1.3.78": + version: 1.3.78 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.78" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@swc/core-linux-arm64-gnu@npm:1.3.78": + version: 1.3.78 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.78" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-arm64-musl@npm:1.3.78": + version: 1.3.78 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.78" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-linux-x64-gnu@npm:1.3.78": + version: 1.3.78 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.78" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-x64-musl@npm:1.3.78": + version: 1.3.78 + resolution: "@swc/core-linux-x64-musl@npm:1.3.78" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-win32-arm64-msvc@npm:1.3.78": + version: 1.3.78 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.78" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-win32-ia32-msvc@npm:1.3.78": + version: 1.3.78 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.78" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@swc/core-win32-x64-msvc@npm:1.3.78": + version: 1.3.78 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.78" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@swc/core@npm:1.3.78": + version: 1.3.78 + resolution: "@swc/core@npm:1.3.78" + dependencies: + "@swc/core-darwin-arm64": 1.3.78 + "@swc/core-darwin-x64": 1.3.78 + "@swc/core-linux-arm-gnueabihf": 1.3.78 + "@swc/core-linux-arm64-gnu": 1.3.78 + "@swc/core-linux-arm64-musl": 1.3.78 + "@swc/core-linux-x64-gnu": 1.3.78 + "@swc/core-linux-x64-musl": 1.3.78 + "@swc/core-win32-arm64-msvc": 1.3.78 + "@swc/core-win32-ia32-msvc": 1.3.78 + "@swc/core-win32-x64-msvc": 1.3.78 + peerDependencies: + "@swc/helpers": ^0.5.0 + 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: b7494c4ca9a2e968cd00430c9dbb5cc4f0c3dd3baaf66d129185c5a8816caf6424a2da8e0f181ed94e7c0c39f76046ee995d6c5ec08198d5f5d6f60735ffb1ab + languageName: node + linkType: hard + "@swc/helpers@npm:^0.4.2": version: 0.4.36 resolution: "@swc/helpers@npm:0.4.36" @@ -4775,33 +5725,26 @@ __metadata: languageName: node linkType: hard -"@transeptor/erc-4337-relayer@workspace:packages/snap": +"@transeptor-labs/smarthub-site@workspace:packages/site": version: 0.0.0-use.local - resolution: "@transeptor/erc-4337-relayer@workspace:packages/snap" + resolution: "@transeptor-labs/smarthub-site@workspace:packages/site" dependencies: - "@account-abstraction/contracts": 0.6.0 - "@account-abstraction/utils": ^0.6.0 - "@ethereumjs/common": ^3.1.2 - "@ethereumjs/tx": ^4.1.2 - "@ethereumjs/util": ^8.0.5 - "@lavamoat/allow-scripts": ^2.0.3 - "@metamask/auto-changelog": ^2.6.0 + "@account-abstraction/contracts": ^0.6.0 "@metamask/eslint-config": ^10.0.0 "@metamask/eslint-config-jest": ^10.0.0 "@metamask/eslint-config-nodejs": ^10.0.0 "@metamask/eslint-config-typescript": ^10.0.0 - "@metamask/eth-sig-util": ^5.0.2 - "@metamask/key-tree": ^6.0.0 - "@metamask/keyring-api": ^0.1.3 - "@metamask/rpc-methods": ^0.30.0 - "@metamask/snaps-cli": ^0.32.2 - "@metamask/snaps-types": 0.38.0-flask.1 - "@metamask/snaps-ui": ^0.32.2 - "@metamask/utils": ^3.3.0 - "@types/jest": ^29.5.2 + "@metamask/keyring-api": ^1.0.0 + "@metamask/providers": ^13.0.0 + "@svgr/webpack": ^6.4.0 + "@types/jest": ^27.5.2 + "@types/react": ^18.0.15 + "@types/react-blockies": ^1.4.0 + "@types/react-dom": ^18.0.6 + "@types/styled-components": ^5.1.25 "@typescript-eslint/eslint-plugin": ^5.33.0 "@typescript-eslint/parser": ^5.33.0 - buffer: ^6.0.3 + cross-env: ^7.0.3 eslint: ^8.21.0 eslint-config-prettier: ^8.1.0 eslint-plugin-import: ^2.26.0 @@ -4809,41 +5752,50 @@ __metadata: eslint-plugin-jsdoc: ^39.2.9 eslint-plugin-node: ^11.1.0 eslint-plugin-prettier: ^4.2.1 - eth-rpc-errors: ^4.0.3 ethers: ^5.7.0 - jest: ^29.5.0 - jest-environment-jsdom: ^29.6.2 - jest-jasmine2: ^29.6.2 + gatsby: ^4.24.4 + gatsby-plugin-manifest: ^4.24.0 + gatsby-plugin-styled-components: ^5.24.0 + gatsby-plugin-svgr: ^3.0.0-beta.0 + null-loader: ^4.0.1 prettier: ^2.2.1 - prettier-plugin-packagejson: ^2.2.11 + prettier-plugin-packagejson: ^2.2.18 + react: ^18.2.0 + react-blockies: 1.4.1 + react-dom: ^18.2.0 + react-icons: ^4.3.1 + react-spinners: ^0.13.8 rimraf: ^3.0.2 - through2: ^4.0.2 - ts-jest: ^29.1.0 + styled-components: 5.3.3 typescript: ^4.7.4 - uuid: ^9.0.0 languageName: unknown linkType: soft -"@transeptor/site@workspace:packages/site": +"@transeptor-labs/smarthub-snap@workspace:packages/snap": version: 0.0.0-use.local - resolution: "@transeptor/site@workspace:packages/site" + resolution: "@transeptor-labs/smarthub-snap@workspace:packages/snap" dependencies: - "@account-abstraction/contracts": ^0.6.0 + "@account-abstraction/contracts": 0.6.0 + "@account-abstraction/utils": ^0.6.0 + "@ethereumjs/common": ^3.1.2 + "@ethereumjs/tx": ^4.1.2 + "@ethereumjs/util": ^8.0.5 + "@lavamoat/allow-scripts": ^2.0.3 + "@metamask/auto-changelog": ^2.6.0 "@metamask/eslint-config": ^10.0.0 "@metamask/eslint-config-jest": ^10.0.0 "@metamask/eslint-config-nodejs": ^10.0.0 "@metamask/eslint-config-typescript": ^10.0.0 - "@metamask/keyring-api": ^0.1.3 - "@metamask/providers": ^11.0.0 - "@svgr/webpack": ^6.4.0 - "@types/jest": ^27.5.2 - "@types/react": ^18.0.15 - "@types/react-blockies": ^1.4.0 - "@types/react-dom": ^18.0.6 - "@types/styled-components": ^5.1.25 + "@metamask/eth-sig-util": ^5.0.2 + "@metamask/keyring-api": ^1.0.0 + "@metamask/snaps-cli": ^3.0.0 + "@metamask/snaps-types": ^3.0.0 + "@metamask/snaps-ui": ^0.32.2 + "@metamask/utils": ^3.3.0 + "@types/jest": ^29.5.2 "@typescript-eslint/eslint-plugin": ^5.33.0 "@typescript-eslint/parser": ^5.33.0 - cross-env: ^7.0.3 + buffer: ^6.0.3 eslint: ^8.21.0 eslint-config-prettier: ^8.1.0 eslint-plugin-import: ^2.26.0 @@ -4852,21 +5804,16 @@ __metadata: eslint-plugin-node: ^11.1.0 eslint-plugin-prettier: ^4.2.1 ethers: ^5.7.0 - gatsby: ^4.24.4 - gatsby-plugin-manifest: ^4.24.0 - gatsby-plugin-styled-components: ^5.24.0 - gatsby-plugin-svgr: ^3.0.0-beta.0 - null-loader: ^4.0.1 + jest: ^29.5.0 + jest-environment-jsdom: ^29.6.2 + jest-jasmine2: ^29.6.2 prettier: ^2.2.1 - prettier-plugin-packagejson: ^2.2.18 - react: ^18.2.0 - react-blockies: 1.4.1 - react-dom: ^18.2.0 - react-icons: ^4.3.1 - react-spinners: ^0.13.8 + prettier-plugin-packagejson: ^2.2.11 rimraf: ^3.0.2 - styled-components: 5.3.3 + through2: ^4.0.2 + ts-jest: ^29.1.0 typescript: ^4.7.4 + uuid: ^9.0.0 languageName: unknown linkType: soft @@ -4957,16 +5904,6 @@ __metadata: languageName: node linkType: hard -"@types/chrome@npm:^0.0.136": - version: 0.0.136 - resolution: "@types/chrome@npm:0.0.136" - dependencies: - "@types/filesystem": "*" - "@types/har-format": "*" - checksum: af96fdc79fb019d827fdb6269f831921f8f36215ee05a2624436dd2ad4d84d7be12333cc6f54912fb8bae0ca49cbfde5a78de94723bfbd20d309d2e71e274a1b - languageName: node - linkType: hard - "@types/common-tags@npm:^1.8.1": version: 1.8.1 resolution: "@types/common-tags@npm:1.8.1" @@ -5057,22 +5994,6 @@ __metadata: languageName: node linkType: hard -"@types/filesystem@npm:*": - version: 0.0.32 - resolution: "@types/filesystem@npm:0.0.32" - dependencies: - "@types/filewriter": "*" - checksum: 4b9079d200a3b241722b90e1c5806c4b32c4dac87d42a1c7ef76a2c0dafdbe7d5f1a379b873ad5de73622b44de6599e1522908f67b938d54e785bd1c36e302a0 - languageName: node - linkType: hard - -"@types/filewriter@npm:*": - version: 0.0.29 - resolution: "@types/filewriter@npm:0.0.29" - checksum: 0c58aa875c2c245be7dbc42b20212f3203e13d11ec013a4a5cd0febf0e8b87214be5882c05ff9d7bdf0398f145a4fdbc24b7e6cf7b094e134a3b4c7a0598502f - languageName: node - linkType: hard - "@types/get-port@npm:^3.2.0": version: 3.2.0 resolution: "@types/get-port@npm:3.2.0" @@ -5109,13 +6030,6 @@ __metadata: languageName: node linkType: hard -"@types/har-format@npm:*": - version: 1.2.11 - resolution: "@types/har-format@npm:1.2.11" - checksum: f36add1ac253c99b594231783cc9ca75b6226df60ba2924351dcad4d0fcd0d7e62188c530a981b4dad8c2a9fcf10ea312f8c75ebc7ddbfae7e1a979635b04780 - languageName: node - linkType: hard - "@types/hoist-non-react-statics@npm:*": version: 3.3.1 resolution: "@types/hoist-non-react-statics@npm:3.3.1" @@ -5298,6 +6212,13 @@ __metadata: languageName: node linkType: hard +"@types/punycode@npm:^2.1.0": + version: 2.1.2 + resolution: "@types/punycode@npm:2.1.2" + checksum: 2cf4573bbdc28f9935154e0981acd2671e58d20ba9f61866e776295cf7b314c041bfe1aee8a1610de958fe4c1e46c8013908813fa23a28e361d256e823a56105 + languageName: node + linkType: hard + "@types/reach__router@npm:^1.3.10": version: 1.3.11 resolution: "@types/reach__router@npm:1.3.11" @@ -6383,6 +7304,19 @@ __metadata: languageName: node linkType: hard +"assert@npm:^2.0.0": + version: 2.1.0 + resolution: "assert@npm:2.1.0" + dependencies: + call-bind: ^1.0.2 + is-nan: ^1.3.2 + object-is: ^1.1.5 + object.assign: ^4.1.4 + util: ^0.12.5 + checksum: 1ed1cabba9abe55f4109b3f7292b4e4f3cf2953aad8dc148c0b3c3bd676675c31b1abb32ef563b7d5a19d1715bf90d1e5f09fad2a4ee655199468902da80f7c2 + languageName: node + linkType: hard + "ast-types-flow@npm:^0.0.7": version: 0.0.7 resolution: "ast-types-flow@npm:0.0.7" @@ -6493,6 +7427,13 @@ __metadata: languageName: node linkType: hard +"b4a@npm:^1.6.4": + version: 1.6.4 + resolution: "b4a@npm:1.6.4" + checksum: 81b086f9af1f8845fbef4476307236bda3d660c158c201db976f19cdce05f41f93110ab6b12fd7a2696602a490cc43d5410ee36a56d6eef93afb0d6ca69ac3b2 + languageName: node + linkType: hard + "babel-jest@npm:^29.6.2": version: 29.6.2 resolution: "babel-jest@npm:29.6.2" @@ -6603,6 +7544,19 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs2@npm:^0.4.6": + version: 0.4.6 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.6" + dependencies: + "@babel/compat-data": ^7.22.6 + "@babel/helper-define-polyfill-provider": ^0.4.3 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 08896811df31530be6a9bcdd630cb9fd4b5ae5181039d18db3796efbc54e38d57a42af460845c10a04434e1bc45c0d47743c7e6c860383cc6b141083cde22030 + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs3@npm:^0.8.3": version: 0.8.3 resolution: "babel-plugin-polyfill-corejs3@npm:0.8.3" @@ -6615,6 +7569,18 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs3@npm:^0.8.5": + version: 0.8.6 + resolution: "babel-plugin-polyfill-corejs3@npm:0.8.6" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.4.3 + core-js-compat: ^3.33.1 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 36951c2edac42ac0f05b200502e90d77bf66ccee5b52e2937d23496c6ef2372cce31b8c64144da374b77bd3eb65e2721703a52eac56cad16a152326c092cbf77 + languageName: node + linkType: hard + "babel-plugin-polyfill-regenerator@npm:^0.5.2": version: 0.5.2 resolution: "babel-plugin-polyfill-regenerator@npm:0.5.2" @@ -6626,6 +7592,17 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-regenerator@npm:^0.5.3": + version: 0.5.3 + resolution: "babel-plugin-polyfill-regenerator@npm:0.5.3" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.4.3 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 2bb546582cda1870d19e646a7183baeb2cccd56e0ef3e4eaeabd28e120daf17cb87399194a9ccdcf32506bcaa68d23e73440fc8ab990a7a0f8c5a77c12d5d4bc + languageName: node + linkType: hard + "babel-plugin-remove-graphql-queries@npm:^4.25.0": version: 4.25.0 resolution: "babel-plugin-remove-graphql-queries@npm:4.25.0" @@ -6854,7 +7831,7 @@ __metadata: languageName: node linkType: hard -"bl@npm:^4.0.0, bl@npm:^4.0.3": +"bl@npm:^4.0.0, bl@npm:^4.0.3, bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" dependencies: @@ -7101,7 +8078,7 @@ __metadata: languageName: node linkType: hard -"browserify-zlib@npm:~0.2.0": +"browserify-zlib@npm:^0.2.0, browserify-zlib@npm:~0.2.0": version: 0.2.0 resolution: "browserify-zlib@npm:0.2.0" dependencies: @@ -7182,6 +8159,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.22.1": + version: 4.22.1 + resolution: "browserslist@npm:4.22.1" + dependencies: + caniuse-lite: ^1.0.30001541 + electron-to-chromium: ^1.4.535 + node-releases: ^2.0.13 + update-browserslist-db: ^1.0.13 + bin: + browserslist: cli.js + checksum: 7e6b10c53f7dd5d83fd2b95b00518889096382539fed6403829d447e05df4744088de46a571071afb447046abc3c66ad06fbc790e70234ec2517452e32ffd862 + languageName: node + linkType: hard + "bs-logger@npm:0.x": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" @@ -7454,6 +8445,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001541": + version: 1.0.30001561 + resolution: "caniuse-lite@npm:1.0.30001561" + checksum: 949829fe037e23346595614e01d362130245920503a12677f2506ce68e1240360113d6383febed41e8aa38cd0f5fd9c69c21b0af65a71c0246d560db489f1373 + languageName: node + linkType: hard + "capital-case@npm:^1.0.4": version: 1.0.4 resolution: "capital-case@npm:1.0.4" @@ -7660,6 +8658,13 @@ __metadata: languageName: node linkType: hard +"cli-spinners@npm:^2.5.0": + version: 2.9.1 + resolution: "cli-spinners@npm:2.9.1" + checksum: 1780618be58309c469205bc315db697934bac68bce78cd5dfd46248e507a533172d623c7348ecfd904734f597ce0a4e5538684843d2cfb7af485d4466699940c + languageName: node + linkType: hard + "cli-width@npm:^3.0.0": version: 3.0.0 resolution: "cli-width@npm:3.0.0" @@ -7731,6 +8736,13 @@ __metadata: languageName: node linkType: hard +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + "clone@npm:^2.1.1": version: 2.1.2 resolution: "clone@npm:2.1.2" @@ -7980,7 +8992,7 @@ __metadata: languageName: node linkType: hard -"console-browserify@npm:^1.1.0": +"console-browserify@npm:^1.1.0, console-browserify@npm:^1.2.0": version: 1.2.0 resolution: "console-browserify@npm:1.2.0" checksum: 226591eeff8ed68e451dffb924c1fb750c654d54b9059b3b261d360f369d1f8f70650adecf2c7136656236a4bfeb55c39281b5d8a55d792ebbb99efd3d848d52 @@ -8005,7 +9017,7 @@ __metadata: languageName: node linkType: hard -"constants-browserify@npm:~1.0.0": +"constants-browserify@npm:^1.0.0, constants-browserify@npm:~1.0.0": version: 1.0.0 resolution: "constants-browserify@npm:1.0.0" checksum: f7ac8c6d0b6e4e0c77340a1d47a3574e25abd580bfd99ad707b26ff7618596cf1a5e5ce9caf44715e9e01d4a5d12cb3b4edaf1176f34c19adb2874815a56e64f @@ -8042,7 +9054,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0, convert-source-map@npm:^1.8.0": +"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 @@ -8103,6 +9115,15 @@ __metadata: languageName: node linkType: hard +"core-js-compat@npm:^3.33.1": + version: 3.33.2 + resolution: "core-js-compat@npm:3.33.2" + dependencies: + browserslist: ^4.22.1 + checksum: 4206d3ff282a9188399e9003301fa4b96844152afcea7b9c9accc653542f40f581f77bf079b8be67f614e305da1f29e868a49ceebb6dbe3f5fb4a28bd2dbf431 + languageName: node + linkType: hard + "core-js-pure@npm:^3.23.3": version: 3.32.1 resolution: "core-js-pure@npm:3.32.1" @@ -8271,7 +9292,7 @@ __metadata: languageName: node linkType: hard -"crypto-browserify@npm:^3.0.0": +"crypto-browserify@npm:^3.0.0, crypto-browserify@npm:^3.12.0": version: 3.12.0 resolution: "crypto-browserify@npm:3.12.0" dependencies: @@ -8694,6 +9715,15 @@ __metadata: languageName: node linkType: hard +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: ^1.0.2 + checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + languageName: node + linkType: hard + "defer-to-connect@npm:^1.0.1": version: 1.1.3 resolution: "defer-to-connect@npm:1.1.3" @@ -9012,6 +10042,13 @@ __metadata: languageName: node linkType: hard +"domain-browser@npm:^4.22.0": + version: 4.23.0 + resolution: "domain-browser@npm:4.23.0" + checksum: 95b772f5fa88300240694380e06e03868573acdf86ca392a58c78602d6536dca2097ad2469a1500bd23a1329b09992de846e0b66c364cbf5711a7fee3ee5dac9 + languageName: node + linkType: hard + "domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" @@ -9144,6 +10181,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.4.535": + version: 1.4.580 + resolution: "electron-to-chromium@npm:1.4.580" + checksum: 44c1dea2864a0855905fbb241d99298076f680e6cf033d837385ef8f9f380d9cb05d8de0554bae5cee135c88f586f648c72a1b60c6b698a3d6c37eea6517bb74 + languageName: node + linkType: hard + "elliptic@npm:6.5.4, elliptic@npm:^6.5.3, elliptic@npm:^6.5.4": version: 6.5.4 resolution: "elliptic@npm:6.5.4" @@ -9307,29 +10351,6 @@ __metadata: languageName: node linkType: hard -"erc-4337-relayer-monorepo@workspace:.": - version: 0.0.0-use.local - resolution: "erc-4337-relayer-monorepo@workspace:." - dependencies: - "@metamask/eslint-config": ^10.0.0 - "@metamask/eslint-config-jest": ^10.0.0 - "@metamask/eslint-config-nodejs": ^10.0.0 - "@metamask/eslint-config-typescript": ^10.0.0 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 - eslint: ^8.21.0 - eslint-config-prettier: ^8.1.0 - eslint-plugin-import: ^2.26.0 - eslint-plugin-jest: ^26.8.2 - eslint-plugin-jsdoc: ^39.2.9 - eslint-plugin-node: ^11.1.0 - eslint-plugin-prettier: ^4.2.1 - prettier: ^2.2.1 - prettier-plugin-packagejson: ^2.2.18 - typescript: ^4.7.4 - languageName: unknown - linkType: soft - "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" @@ -10073,12 +11094,12 @@ __metadata: languageName: node linkType: hard -"eth-rpc-errors@npm:^4.0.0, eth-rpc-errors@npm:^4.0.2, eth-rpc-errors@npm:^4.0.3": - version: 4.0.3 - resolution: "eth-rpc-errors@npm:4.0.3" +"eth-phishing-detect@npm:^1.2.0": + version: 1.2.0 + resolution: "eth-phishing-detect@npm:1.2.0" dependencies: - fast-safe-stringify: ^2.0.6 - checksum: 5fa31d1a10fdb340733b9a55e38e7687222c501052ca20743cef4d0c911a9bbcc0cad54aa6bf3e4b428604c071ff519803060e1cbc79ddb7c9257c11d407d32a + fast-levenshtein: ^2.0.6 + checksum: 66a6a7c249ec8494e0360663596ce980ca75747cd202c47732eca0bfc7a97c6debbae359842e4f3e4ac7e6c44ab1f7f091c3aa7baa330449d3c1b7cc58608b71 languageName: node linkType: hard @@ -10205,7 +11226,7 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.0.0, events@npm:^3.2.0": +"events@npm:^3.0.0, events@npm:^3.2.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 @@ -10380,7 +11401,7 @@ __metadata: languageName: node linkType: hard -"extension-port-stream@npm:^2.0.1": +"extension-port-stream@npm:^2.1.1": version: 2.1.1 resolution: "extension-port-stream@npm:2.1.1" dependencies: @@ -10400,13 +11421,6 @@ __metadata: languageName: node linkType: hard -"fast-deep-equal@npm:^2.0.1": - version: 2.0.1 - resolution: "fast-deep-equal@npm:2.0.1" - checksum: b701835a87985e0ec4925bdf1f0c1e7eb56309b5d12d534d5b4b69d95a54d65bb16861c081781ead55f73f12d6c60ba668713391ee7fbf6b0567026f579b7b0b - 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" @@ -10421,6 +11435,13 @@ __metadata: languageName: node linkType: hard +"fast-fifo@npm:^1.1.0, fast-fifo@npm:^1.2.0": + version: 1.3.2 + resolution: "fast-fifo@npm:1.3.2" + checksum: 6bfcba3e4df5af7be3332703b69a7898a8ed7020837ec4395bb341bd96cc3a6d86c3f6071dd98da289618cf2234c70d84b2a6f09a33dd6f988b1ff60d8e54275 + languageName: node + linkType: hard + "fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": version: 3.3.1 resolution: "fast-glob@npm:3.3.1" @@ -10658,6 +11679,15 @@ __metadata: languageName: node linkType: hard +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + "flatted@npm:^3.1.0": version: 3.2.7 resolution: "flatted@npm:3.2.7" @@ -11431,6 +12461,13 @@ __metadata: languageName: node linkType: hard +"get-npm-tarball-url@npm:^2.0.3": + version: 2.1.0 + resolution: "get-npm-tarball-url@npm:2.1.0" + checksum: 02b96993ad5a04cbd0ef0577ac3cc9e2e78a7c60db6bb5e6c8fe78950fc1fc3d093314987629a2fda3083228d91a93670bde321767ca2cf89ce7f463c9e44071 + languageName: node + linkType: hard + "get-package-type@npm:^0.1.0": version: 0.1.0 resolution: "get-package-type@npm:0.1.0" @@ -12578,6 +13615,13 @@ __metadata: languageName: node linkType: hard +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 + languageName: node + linkType: hard + "is-invalid-path@npm:^0.1.0": version: 0.1.0 resolution: "is-invalid-path@npm:0.1.0" @@ -12610,6 +13654,16 @@ __metadata: languageName: node linkType: hard +"is-nan@npm:^1.3.2": + version: 1.3.2 + resolution: "is-nan@npm:1.3.2" + dependencies: + call-bind: ^1.0.0 + define-properties: ^1.1.3 + checksum: 5dfadcef6ad12d3029d43643d9800adbba21cf3ce2ec849f734b0e14ee8da4070d82b15fdb35138716d02587c6578225b9a22779cab34888a139cc43e4e3610a + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -12817,6 +13871,13 @@ __metadata: languageName: node linkType: hard +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 + languageName: node + linkType: hard + "is-upper-case@npm:^2.0.2": version: 2.0.2 resolution: "is-upper-case@npm:2.0.2" @@ -12826,13 +13887,6 @@ __metadata: languageName: node linkType: hard -"is-url@npm:^1.2.4": - version: 1.2.4 - resolution: "is-url@npm:1.2.4" - checksum: 100e74b3b1feab87a43ef7653736e88d997eb7bd32e71fd3ebc413e58c1cbe56269699c776aaea84244b0567f2a7d68dfaa512a062293ed2f9fdecb394148432 - languageName: node - linkType: hard - "is-valid-domain@npm:^0.1.6": version: 0.1.6 resolution: "is-valid-domain@npm:0.1.6" @@ -13707,17 +14761,7 @@ __metadata: languageName: node linkType: hard -"json-rpc-engine@npm:^6.1.0": - version: 6.1.0 - resolution: "json-rpc-engine@npm:6.1.0" - dependencies: - "@metamask/safe-event-emitter": ^2.0.0 - eth-rpc-errors: ^4.0.2 - checksum: 33b6c9bbd81abf8e323a0281ee05871713203c40d34a4d0bda27706cd0a0935c7b51845238ba89b73027e44ebc8034bbd82db9f962e6c578eb922d9b95acc8bd - languageName: node - linkType: hard - -"json-rpc-middleware-stream@npm:^4.2.0, json-rpc-middleware-stream@npm:^4.2.1": +"json-rpc-middleware-stream@npm:^4.2.1": version: 4.2.2 resolution: "json-rpc-middleware-stream@npm:4.2.2" dependencies: @@ -13727,6 +14771,18 @@ __metadata: languageName: node linkType: hard +"json-rpc-middleware-stream@npm:^5.0.0": + version: 5.0.1 + resolution: "json-rpc-middleware-stream@npm:5.0.1" + dependencies: + "@metamask/json-rpc-engine": ^7.1.1 + "@metamask/safe-event-emitter": ^3.0.0 + "@metamask/utils": ^8.1.0 + readable-stream: ^3.6.2 + checksum: 1cfb8ef5fbb3daa15015213e380e79f043a4208d6ea5533a99b3f3c8aeb01270bfdce5b37003362745a059edbd418d9ca3548fab5fa83355641be2f392303084 + languageName: node + linkType: hard + "json-rpc-random-id@npm:^1.0.0": version: 1.0.1 resolution: "json-rpc-random-id@npm:1.0.1" @@ -14157,6 +15213,16 @@ __metadata: languageName: node linkType: hard +"log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: ^4.1.0 + is-unicode-supported: ^0.1.0 + checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 + languageName: node + linkType: hard + "loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" @@ -15221,6 +16287,16 @@ __metadata: languageName: node linkType: hard +"object-is@npm:^1.1.5": + version: 1.1.5 + resolution: "object-is@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -15392,6 +16468,23 @@ __metadata: languageName: node linkType: hard +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: ^4.1.0 + chalk: ^4.1.0 + cli-cursor: ^3.1.0 + cli-spinners: ^2.5.0 + is-interactive: ^1.0.0 + is-unicode-supported: ^0.1.0 + log-symbols: ^4.1.0 + strip-ansi: ^6.0.0 + wcwidth: ^1.0.1 + checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 + languageName: node + linkType: hard + "ordered-binary@npm:^1.2.4": version: 1.4.1 resolution: "ordered-binary@npm:1.4.1" @@ -15399,7 +16492,7 @@ __metadata: languageName: node linkType: hard -"os-browserify@npm:~0.3.0": +"os-browserify@npm:^0.3.0, os-browserify@npm:~0.3.0": version: 0.3.0 resolution: "os-browserify@npm:0.3.0" checksum: 16e37ba3c0e6a4c63443c7b55799ce4066d59104143cb637ecb9fce586d5da319cdca786ba1c867abbe3890d2cbf37953f2d51eea85e20dd6c4570d6c54bfebf @@ -15653,7 +16746,7 @@ __metadata: languageName: node linkType: hard -"path-browserify@npm:^1.0.0": +"path-browserify@npm:^1.0.0, path-browserify@npm:^1.0.1": version: 1.0.1 resolution: "path-browserify@npm:1.0.1" checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699 @@ -15864,6 +16957,13 @@ __metadata: languageName: node linkType: hard +"pony-cause@npm:^2.1.10": + version: 2.1.10 + resolution: "pony-cause@npm:2.1.10" + checksum: 8b61378f213e61056312dc274a1c79980154e9d864f6ad86e0c8b91a50d3ce900d430995ee24147c9f3caa440dfe7d51c274b488d7f033b65b206522536d7217 + languageName: node + linkType: hard + "postcss-calc@npm:^8.2.3": version: 8.2.4 resolution: "postcss-calc@npm:8.2.4" @@ -16365,13 +17465,6 @@ __metadata: languageName: node linkType: hard -"process-nextick-args@npm:~1.0.6": - version: 1.0.7 - resolution: "process-nextick-args@npm:1.0.7" - checksum: 41224fbc803ac6c96907461d4dfc20942efa3ca75f2d521bcf7cf0e89f8dec127fb3fb5d76746b8fb468a232ea02d84824fae08e027aec185fd29049c66d49f8 - languageName: node - linkType: hard - "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" @@ -16379,7 +17472,7 @@ __metadata: languageName: node linkType: hard -"process@npm:~0.11.0": +"process@npm:^0.11.10, process@npm:~0.11.0": version: 0.11.10 resolution: "process@npm:0.11.10" checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 @@ -16541,6 +17634,13 @@ __metadata: languageName: node linkType: hard +"punycode@npm:^2.3.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 + languageName: node + linkType: hard + "pupa@npm:^2.1.1": version: 2.1.1 resolution: "pupa@npm:2.1.1" @@ -16566,7 +17666,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.11.0": +"qs@npm:^6.11.0, qs@npm:^6.11.2": version: 6.11.2 resolution: "qs@npm:6.11.2" dependencies: @@ -16587,7 +17687,7 @@ __metadata: languageName: node linkType: hard -"querystring-es3@npm:~0.2.0": +"querystring-es3@npm:^0.2.1, querystring-es3@npm:~0.2.0": version: 0.2.1 resolution: "querystring-es3@npm:0.2.1" checksum: 691e8d6b8b157e7cd49ae8e83fcf86de39ab3ba948c25abaa94fba84c0986c641aa2f597770848c64abce290ed17a39c9df6df737dfa7e87c3b63acc7d225d61 @@ -16608,6 +17708,13 @@ __metadata: languageName: node linkType: hard +"queue-tick@npm:^1.0.1": + version: 1.0.1 + resolution: "queue-tick@npm:1.0.1" + checksum: 57c3292814b297f87f792fbeb99ce982813e4e54d7a8bdff65cf53d5c084113913289d4a48ec8bbc964927a74b847554f9f4579df43c969a6c8e0f026457ad01 + languageName: node + linkType: hard + "quick-lru@npm:^5.1.1": version: 5.1.1 resolution: "quick-lru@npm:5.1.1" @@ -16872,22 +17979,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:2.3.3": - version: 2.3.3 - resolution: "readable-stream@npm:2.3.3" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.3 - isarray: ~1.0.0 - process-nextick-args: ~1.0.6 - safe-buffer: ~5.1.1 - string_decoder: ~1.0.3 - util-deprecate: ~1.0.1 - checksum: 76f9863065d7edc14abd78e68784048487e83a4b6908336ba3eacb5e9544d642ad60836f91fab16e1dc6ad9e493dfe6c2e5b65f370ec65454d415efa50361a76 - languageName: node - linkType: hard - -"readable-stream@npm:3, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": +"readable-stream@npm:3, readable-stream@npm:3.6.2, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -17319,6 +18411,29 @@ __metadata: languageName: node linkType: hard +"root@workspace:.": + version: 0.0.0-use.local + resolution: "root@workspace:." + dependencies: + "@metamask/eslint-config": ^10.0.0 + "@metamask/eslint-config-jest": ^10.0.0 + "@metamask/eslint-config-nodejs": ^10.0.0 + "@metamask/eslint-config-typescript": ^10.0.0 + "@typescript-eslint/eslint-plugin": ^5.33.0 + "@typescript-eslint/parser": ^5.33.0 + eslint: ^8.21.0 + eslint-config-prettier: ^8.1.0 + eslint-plugin-import: ^2.26.0 + eslint-plugin-jest: ^26.8.2 + eslint-plugin-jsdoc: ^39.2.9 + eslint-plugin-node: ^11.1.0 + eslint-plugin-prettier: ^4.2.1 + prettier: ^2.2.1 + prettier-plugin-packagejson: ^2.2.18 + typescript: ^4.7.4 + languageName: unknown + linkType: soft + "run-applescript@npm:^5.0.0": version: 5.0.0 resolution: "run-applescript@npm:5.0.0" @@ -17592,12 +18707,12 @@ __metadata: languageName: node linkType: hard -"ses@npm:^0.18.1": - version: 0.18.7 - resolution: "ses@npm:0.18.7" +"ses@npm:^0.18.8": + version: 0.18.8 + resolution: "ses@npm:0.18.8" dependencies: - "@endo/env-options": ^0.1.3 - checksum: 75ac014771d9bc1f747193c6d0f9e7d2d7700a10311ba8d805d9bc78d4c20d4ef40537f0535b1ea6abf06babf67e70f8bd37b2ad68ad54992a0c5ce842181c87 + "@endo/env-options": ^0.1.4 + checksum: d7976d2ee218baec021c5cfdfb193d63b52bf2b6cbdbbb90c19d835915a1872b6924910f7fd42bc849eb2de78fc7bdd6e7b4667e1df3c79244cc92d4ede48aa6 languageName: node linkType: hard @@ -17608,7 +18723,7 @@ __metadata: languageName: node linkType: hard -"setimmediate@npm:^1.0.5": +"setimmediate@npm:^1.0.4, setimmediate@npm:^1.0.5": version: 1.0.5 resolution: "setimmediate@npm:1.0.5" checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd @@ -18119,7 +19234,7 @@ __metadata: languageName: node linkType: hard -"stream-http@npm:^3.0.0": +"stream-http@npm:^3.0.0, stream-http@npm:^3.2.0": version: 3.2.0 resolution: "stream-http@npm:3.2.0" dependencies: @@ -18155,6 +19270,16 @@ __metadata: languageName: node linkType: hard +"streamx@npm:^2.15.0": + version: 2.15.3 + resolution: "streamx@npm:2.15.3" + dependencies: + fast-fifo: ^1.1.0 + queue-tick: ^1.0.1 + checksum: 4f0bb957efcb5cc30f5abbc12f7efbd87695f5d0bce8317598bdbad6e68c1cd53bee244897ba1f73d8818e05f2705886974832587e08a124c4597911df11c8f0 + languageName: node + linkType: hard + "strict-uri-encode@npm:^2.0.0": version: 2.0.0 resolution: "strict-uri-encode@npm:2.0.0" @@ -18263,7 +19388,7 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:^1.1.1": +"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" dependencies: @@ -18272,15 +19397,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~1.0.3": - version: 1.0.3 - resolution: "string_decoder@npm:1.0.3" - dependencies: - safe-buffer: ~5.1.0 - checksum: 57ef02a148fd1ff2f20fe1accd944505ed3703e78bb28d302d940b2ad3dfb469508f79dcd0275ba1960d9675aa206452f76b2416059a6d0b0200bd7e9f552cdb - languageName: node - linkType: hard - "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" @@ -18537,6 +19653,16 @@ __metadata: languageName: node linkType: hard +"swc-loader@npm:^0.2.3": + version: 0.2.3 + resolution: "swc-loader@npm:0.2.3" + peerDependencies: + "@swc/core": ^1.2.147 + webpack: ">=2" + checksum: 010d84d399525c0185d36d62c86c55ae017e7a90046bc8a39be4b7e07526924037868049f6037bc966da98151cb2600934b96a66279b742d3c413a718b427251 + languageName: node + linkType: hard + "symbol-tree@npm:^3.2.4": version: 3.2.4 resolution: "symbol-tree@npm:3.2.4" @@ -18602,7 +19728,7 @@ __metadata: languageName: node linkType: hard -"tar-stream@npm:^2.1.4, tar-stream@npm:^2.2.0": +"tar-stream@npm:^2.1.4": version: 2.2.0 resolution: "tar-stream@npm:2.2.0" dependencies: @@ -18615,6 +19741,17 @@ __metadata: languageName: node linkType: hard +"tar-stream@npm:^3.1.6": + version: 3.1.6 + resolution: "tar-stream@npm:3.1.6" + dependencies: + b4a: ^1.6.4 + fast-fifo: ^1.2.0 + streamx: ^2.15.0 + checksum: f3627f918581976e954ff03cb8d370551053796b82564f8c7ca8fac84c48e4d042026d0854fc222171a34ff9c682b72fae91be9c9b0a112d4c54f9e4f443e9c5 + languageName: node + linkType: hard + "tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.15 resolution: "tar@npm:6.1.15" @@ -18636,7 +19773,7 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.2.4, terser-webpack-plugin@npm:^5.3.7": +"terser-webpack-plugin@npm:^5.2.4, terser-webpack-plugin@npm:^5.3.7, terser-webpack-plugin@npm:^5.3.9": version: 5.3.9 resolution: "terser-webpack-plugin@npm:5.3.9" dependencies: @@ -18725,6 +19862,15 @@ __metadata: languageName: node linkType: hard +"timers-browserify@npm:^2.0.12": + version: 2.0.12 + resolution: "timers-browserify@npm:2.0.12" + dependencies: + setimmediate: ^1.0.4 + checksum: ec37ae299066bef6c464dcac29c7adafba1999e7227a9bdc4e105a459bee0f0b27234a46bfd7ab4041da79619e06a58433472867a913d01c26f8a203f87cee70 + languageName: node + linkType: hard + "timers-ext@npm:^0.1.7": version: 0.1.7 resolution: "timers-ext@npm:0.1.7" @@ -18935,7 +20081,7 @@ __metadata: languageName: node linkType: hard -"tty-browserify@npm:0.0.1": +"tty-browserify@npm:0.0.1, tty-browserify@npm:^0.0.1": version: 0.0.1 resolution: "tty-browserify@npm:0.0.1" checksum: 93b745d43fa5a7d2b948fa23be8d313576d1d884b48acd957c07710bac1c0d8ac34c0556ad4c57c73d36e11741763ef66b3fb4fb97b06b7e4d525315a3cd45f5 @@ -19275,6 +20421,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322 + languageName: node + linkType: hard + "update-notifier@npm:^5.1.0": version: 5.1.0 resolution: "update-notifier@npm:5.1.0" @@ -19360,6 +20520,16 @@ __metadata: languageName: node linkType: hard +"url@npm:^0.11.1": + version: 0.11.3 + resolution: "url@npm:0.11.3" + dependencies: + punycode: ^1.4.1 + qs: ^6.11.2 + checksum: f9e7886f46a16f96d2e42fbcc5d682c231c55ef5442c1ff66150c0f6556f6e3a97d094a84f51be15ec2432711d212eb60426659ce418f5fcadeaa3f601532c4e + languageName: node + linkType: hard + "url@npm:~0.11.0": version: 0.11.1 resolution: "url@npm:0.11.1" @@ -19386,7 +20556,7 @@ __metadata: languageName: node linkType: hard -"util@npm:~0.12.0": +"util@npm:^0.12.5, util@npm:~0.12.0": version: 0.12.5 resolution: "util@npm:0.12.5" dependencies: @@ -19479,7 +20649,7 @@ __metadata: languageName: node linkType: hard -"vm-browserify@npm:^1.0.0": +"vm-browserify@npm:^1.0.0, vm-browserify@npm:^1.1.2": version: 1.1.2 resolution: "vm-browserify@npm:1.1.2" checksum: 10a1c50aab54ff8b4c9042c15fc64aefccce8d2fb90c0640403242db0ee7fb269f9b102bdb69cfb435d7ef3180d61fd4fb004a043a12709abaf9056cfd7e039d @@ -19514,6 +20684,15 @@ __metadata: languageName: node linkType: hard +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + "weak-lru-cache@npm:^1.2.2": version: 1.2.2 resolution: "weak-lru-cache@npm:1.2.2" @@ -19521,15 +20700,6 @@ __metadata: languageName: node linkType: hard -"webextension-polyfill-ts@npm:^0.25.0": - version: 0.25.0 - resolution: "webextension-polyfill-ts@npm:0.25.0" - dependencies: - webextension-polyfill: ^0.7.0 - checksum: c4dc82c86e34cea717a26af549f2822d63e92af52632f5e909ea13b5e7bd9d6110781f10313e36ada2b54c770ebca018bc3784756d12ba3b0b623d285f1a14a7 - languageName: node - linkType: hard - "webextension-polyfill@npm:>=0.10.0 <1.0, webextension-polyfill@npm:^0.10.0": version: 0.10.0 resolution: "webextension-polyfill@npm:0.10.0" @@ -19537,13 +20707,6 @@ __metadata: languageName: node linkType: hard -"webextension-polyfill@npm:^0.7.0": - version: 0.7.0 - resolution: "webextension-polyfill@npm:0.7.0" - checksum: fb738a5de07feb593875e02f25c3ab4276c8736118929556c8d4bdf965bb0f11c96ea263cd397b9b21259e8faf2dce2eaaa42ce08c922d96de7adb5896ec7d10 - languageName: node - linkType: hard - "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -19584,6 +20747,17 @@ __metadata: languageName: node linkType: hard +"webpack-merge@npm:^5.9.0": + version: 5.10.0 + resolution: "webpack-merge@npm:5.10.0" + dependencies: + clone-deep: ^4.0.1 + flat: ^5.0.2 + wildcard: ^2.0.0 + checksum: 1fe8bf5309add7298e1ac72fb3f2090e1dfa80c48c7e79fa48aa60b5961332c7d0d61efa8851acb805e6b91a4584537a347bc106e05e9aec87fa4f7088c62f2f + languageName: node + linkType: hard + "webpack-sources@npm:^1.1.0": version: 1.4.3 resolution: "webpack-sources@npm:1.4.3" @@ -19654,6 +20828,43 @@ __metadata: languageName: node linkType: hard +"webpack@npm:^5.88.0": + version: 5.89.0 + resolution: "webpack@npm:5.89.0" + dependencies: + "@types/eslint-scope": ^3.7.3 + "@types/estree": ^1.0.0 + "@webassemblyjs/ast": ^1.11.5 + "@webassemblyjs/wasm-edit": ^1.11.5 + "@webassemblyjs/wasm-parser": ^1.11.5 + acorn: ^8.7.1 + acorn-import-assertions: ^1.9.0 + browserslist: ^4.14.5 + chrome-trace-event: ^1.0.2 + enhanced-resolve: ^5.15.0 + es-module-lexer: ^1.2.1 + eslint-scope: 5.1.1 + events: ^3.2.0 + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.2.9 + json-parse-even-better-errors: ^2.3.1 + loader-runner: ^4.2.0 + mime-types: ^2.1.27 + neo-async: ^2.6.2 + schema-utils: ^3.2.0 + tapable: ^2.1.1 + terser-webpack-plugin: ^5.3.7 + watchpack: ^2.4.0 + webpack-sources: ^3.2.3 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 43fe0dbc30e168a685ef5a86759d5016a705f6563b39a240aa00826a80637d4a3deeb8062e709d6a4b05c63e796278244c84b04174704dc4a37bedb0f565c5ed + languageName: node + linkType: hard + "whatwg-encoding@npm:^2.0.0": version: 2.0.0 resolution: "whatwg-encoding@npm:2.0.0" @@ -20109,7 +21320,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.1, yargs@npm:^17.3.1": +"yargs@npm:^17.0.1, yargs@npm:^17.3.1, yargs@npm:^17.7.1": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: