From 2c61d49ea86ca5f30deed483e21b261a9bfec013 Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Wed, 24 Apr 2024 12:06:12 +0900 Subject: [PATCH 01/45] feat: Ethereum wallets mvp. --- README.md | 5 + examples/angular/project.json | 5 + .../wallet-selector.component.ts | 46 + .../react/contexts/WalletSelectorContext.tsx | 46 + examples/react/project.json | 5 + package.json | 43 +- packages/ethereum-wallets/.babelrc | 11 + packages/ethereum-wallets/.eslintrc.json | 18 + packages/ethereum-wallets/README.md | 94 + .../assets/wallet-connect-icon.png | Bin 0 -> 9112 bytes packages/ethereum-wallets/jest.config.js | 14 + packages/ethereum-wallets/jest.config.ts | 16 + packages/ethereum-wallets/package.json | 29 + packages/ethereum-wallets/project.json | 56 + packages/ethereum-wallets/src/index.ts | 2 + packages/ethereum-wallets/src/lib/icon.ts | 1 + packages/ethereum-wallets/src/lib/index.ts | 662 +++ packages/ethereum-wallets/src/lib/modal.ts | 179 + packages/ethereum-wallets/tsconfig.json | 24 + packages/ethereum-wallets/tsconfig.lib.json | 13 + packages/ethereum-wallets/tsconfig.spec.json | 9 + scripts/release-packages.bash | 1 + tsconfig.base.json | 3 + yarn.lock | 4823 +++++++++++++---- 24 files changed, 4937 insertions(+), 1168 deletions(-) create mode 100644 packages/ethereum-wallets/.babelrc create mode 100644 packages/ethereum-wallets/.eslintrc.json create mode 100644 packages/ethereum-wallets/README.md create mode 100644 packages/ethereum-wallets/assets/wallet-connect-icon.png create mode 100644 packages/ethereum-wallets/jest.config.js create mode 100644 packages/ethereum-wallets/jest.config.ts create mode 100644 packages/ethereum-wallets/package.json create mode 100644 packages/ethereum-wallets/project.json create mode 100644 packages/ethereum-wallets/src/index.ts create mode 100644 packages/ethereum-wallets/src/lib/icon.ts create mode 100644 packages/ethereum-wallets/src/lib/index.ts create mode 100644 packages/ethereum-wallets/src/lib/modal.ts create mode 100644 packages/ethereum-wallets/tsconfig.json create mode 100644 packages/ethereum-wallets/tsconfig.lib.json create mode 100644 packages/ethereum-wallets/tsconfig.spec.json diff --git a/README.md b/README.md index aa033e367..888ec69f7 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ NEAR Wallet Selector makes it easy for users to interact with your dApp by provi - [NearFi Wallet](https://www.npmjs.com/package/@near-wallet-selector/nearfi) - Mobile wallet. - [Near Mobile Wallet](https://www.npmjs.com/package/@near-wallet-selector/near-mobile-wallet) - Mobile Wallet. - [WalletConnect](https://www.npmjs.com/package/@near-wallet-selector/wallet-connect) - Bridge wallet. +- [Ethereum wallets](https://www.npmjs.com/package/@near-wallet-selector/ethereum-wallets) - Injected wallet. ## Preview @@ -72,6 +73,7 @@ yarn add \ @near-wallet-selector/ramper-wallet \ @near-wallet-selector/near-mobile-wallet \ @near-wallet-selector/mintbase-wallet + @near-wallet-selector/ethereum-wallets # Using NPM. npm install \ @@ -94,6 +96,7 @@ npm install \ @near-wallet-selector/ramper-wallet \ @near-wallet-selector/near-mobile-wallet \ @near-wallet-selector/mintbase-wallet + @near-wallet-selector/ethereum-wallets ``` Optionally, you can install our [`modal-ui`](https://www.npmjs.com/package/@near-wallet-selector/modal-ui) or [`modal-ui-js`](https://www.npmjs.com/package/@near-wallet-selector/modal-ui-js) package for a pre-built interface that wraps the `core` API and presents the supported wallets: @@ -131,6 +134,7 @@ import { setupXDEFI } from "@near-wallet-selector/xdefi"; import { setupRamperWallet } from "@near-wallet-selector/ramper-wallet"; import { setupNearMobileWallet } from "@near-wallet-selector/near-mobile-wallet"; import { setupMintbaseWallet } from "@near-wallet-selector/mintbase-wallet"; +import { setupEthereumWallets } from "@near-wallet-selector/ethereum-wallets"; const selector = await setupWalletSelector({ network: "testnet", @@ -166,6 +170,7 @@ const selector = await setupWalletSelector({ callbackUrl: "https://www.mywebsite.com", deprecated: false, }), + setupEthereumWallets({ wagmiConfig, web3Modal }), ], }); diff --git a/examples/angular/project.json b/examples/angular/project.json index 91dc82330..6387b936f 100644 --- a/examples/angular/project.json +++ b/examples/angular/project.json @@ -103,6 +103,11 @@ "glob": "**/*", "input": "packages/near-mobile-wallet/assets/", "output": "assets/" + }, + { + "glob": "**/*", + "input": "packages/ethereum-wallets/assets/", + "output": "assets/" } ], "styles": ["examples/angular/src/styles.scss"], diff --git a/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts b/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts index e224fe5ee..001411ea2 100644 --- a/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts +++ b/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts @@ -23,6 +23,11 @@ import { setupRamperWallet } from "@near-wallet-selector/ramper-wallet"; import { setupLedger } from "@near-wallet-selector/ledger"; import { setupNearMobileWallet } from "@near-wallet-selector/near-mobile-wallet"; import { setupMintbaseWallet } from "@near-wallet-selector/mintbase-wallet"; +import { setupEthereumWallets } from "@near-wallet-selector/ethereum-wallets"; +import { createWeb3Modal } from "@web3modal/wagmi"; +import { reconnect, http, createConfig, type Config } from "@wagmi/core"; +import { type Chain } from "@wagmi/core/chains"; +import { injected } from "@wagmi/connectors"; import { CONTRACT_ID } from "../../../constants"; declare global { @@ -32,6 +37,46 @@ declare global { } } +// Get a project ID at https://cloud.walletconnect.com +const projectId = "30147604c5f01d0bc4482ab0665b5697"; + +// NOTE: This is the NEAR wallet playground used in dev mode. +// TODO: Replace with the NEAR chain after the protocol upgrade. +const near: Chain = { + id: 398, + name: "NEAR wallet playground", + nativeCurrency: { + decimals: 18, + name: "NEAR", + symbol: "NEAR", + }, + rpcUrls: { + default: { http: ["https://near-wallet-relayer.testnet.aurora.dev"] }, + public: { http: ["https://near-wallet-relayer.testnet.aurora.dev"] }, + }, + blockExplorers: { + default: { + name: "NEAR Explorer", + url: "https://explorer.testnet.near.org", + }, + }, + testnet: true, +}; + +const wagmiConfig: Config = createConfig({ + chains: [near], + transports: { + [near.id]: http(), + }, + connectors: [injected({ shimDisconnect: true })], +}); +reconnect(wagmiConfig); + +const web3Modal = createWeb3Modal({ + wagmiConfig: wagmiConfig, + projectId, +}); + @Component({ selector: "near-wallet-selector-wallet-selector", templateUrl: "./wallet-selector.component.html", @@ -93,6 +138,7 @@ export class WalletSelectorComponent implements OnInit { setupRamperWallet(), setupNearMobileWallet(), setupMintbaseWallet({ contractId: "guest-book.testnet" }), + setupEthereumWallets({ wagmiConfig, web3Modal, devMode: true }), ], }); diff --git a/examples/react/contexts/WalletSelectorContext.tsx b/examples/react/contexts/WalletSelectorContext.tsx index b9afdb78e..7f81d5f10 100644 --- a/examples/react/contexts/WalletSelectorContext.tsx +++ b/examples/react/contexts/WalletSelectorContext.tsx @@ -21,6 +21,7 @@ import { setupXDEFI } from "@near-wallet-selector/xdefi"; import { setupRamperWallet } from "@near-wallet-selector/ramper-wallet"; import { setupNearMobileWallet } from "@near-wallet-selector/near-mobile-wallet"; import { setupMintbaseWallet } from "@near-wallet-selector/mintbase-wallet"; +import { setupEthereumWallets } from "@near-wallet-selector/ethereum-wallets"; import type { ReactNode } from "react"; import React, { @@ -31,6 +32,10 @@ import React, { useMemo, } from "react"; import { distinctUntilChanged, map } from "rxjs"; +import { createWeb3Modal } from "@web3modal/wagmi"; +import { reconnect, http, createConfig, type Config } from "@wagmi/core"; +import { type Chain } from "@wagmi/core/chains"; +import { injected } from "@wagmi/connectors"; import { Loading } from "../components/Loading"; import { CONTRACT_ID } from "../constants"; @@ -52,6 +57,46 @@ interface WalletSelectorContextValue { const WalletSelectorContext = React.createContext(null); +// Get a project ID at https://cloud.walletconnect.com +const projectId = "30147604c5f01d0bc4482ab0665b5697"; + +// NOTE: This is the NEAR wallet playground used in dev mode. +// TODO: Replace with the NEAR chain after the protocol upgrade. +const near: Chain = { + id: 398, + name: "NEAR wallet playground", + nativeCurrency: { + decimals: 18, + name: "NEAR", + symbol: "NEAR", + }, + rpcUrls: { + default: { http: ["https://near-wallet-relayer.testnet.aurora.dev"] }, + public: { http: ["https://near-wallet-relayer.testnet.aurora.dev"] }, + }, + blockExplorers: { + default: { + name: "NEAR Explorer", + url: "https://explorer.testnet.near.org", + }, + }, + testnet: true, +}; + +const wagmiConfig: Config = createConfig({ + chains: [near], + transports: { + [near.id]: http(), + }, + connectors: [injected({ shimDisconnect: true })], +}); +reconnect(wagmiConfig); + +const web3Modal = createWeb3Modal({ + wagmiConfig: wagmiConfig, + projectId, +}); + export const WalletSelectorContextProvider: React.FC<{ children: ReactNode; }> = ({ children }) => { @@ -95,6 +140,7 @@ export const WalletSelectorContextProvider: React.FC<{ }), setupNearMobileWallet(), setupMintbaseWallet({ contractId: "guest-book.testnet" }), + setupEthereumWallets({ wagmiConfig, web3Modal, devMode: true }), ], }); const _modal = setupModal(_selector, { diff --git a/examples/react/project.json b/examples/react/project.json index b5958eca0..7070b5266 100644 --- a/examples/react/project.json +++ b/examples/react/project.json @@ -96,6 +96,11 @@ "glob": "**/*", "input": "packages/near-mobile-wallet/assets/", "output": "assets/" + }, + { + "glob": "**/*", + "input": "packages/ethereum-wallets/assets/", + "output": "assets/" } ] }, diff --git a/package.json b/package.json index 75b164c3f..aa05fe7b1 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "nightly", "ledger", "wallet-connect", + "ethereum-wallets", "nearfi", "meteor-wallet", "welldone-wallet", @@ -64,6 +65,7 @@ "build:ramper-wallet": "nx run-many --target=build --projects=ramper-wallet --configuration=production", "build:near-mobile-wallet": "nx run-many --target=build --projects=near-mobile-wallet --configuration=production", "build:mintbase-wallet": "nx run-many --target=build --projects=mintbase-wallet --configuration=production", + "build:ethereum-wallets": "nx run-many --target=build --projects=ethereum-wallets --configuration=production", "examples:vanillajs:generateimportmap": "(cd examples/vanillajs && jspm link index.html -o index.html)", "serve:vanillajs": "yarn examples:vanillajs:generateimportmap && http-server -c-1 examples/vanillajs", "lint": "nx workspace-lint && nx run-many --target=lint --all --parallel", @@ -72,19 +74,18 @@ "serve:angular": "nx serve angular", "prepack": "yarn build:core && yarn build:all", "test": "nx run-many --target=test --all", - "postinstall": "ngcc --properties es2020 browser module main", "find:unused": "ts-prune -p tsprune.json" }, "dependencies": { - "@angular/animations": "15.2.9", - "@angular/common": "15.2.9", - "@angular/compiler": "15.2.9", - "@angular/core": "15.2.9", - "@angular/forms": "15.2.9", - "@angular/platform-browser": "15.2.9", - "@angular/platform-browser-dynamic": "15.2.9", - "@angular/router": "15.2.9", - "@here-wallet/core": "^1.6.6", + "@angular/animations": "16.1.9", + "@angular/common": "16.1.9", + "@angular/compiler": "16.1.9", + "@angular/core": "16.1.9", + "@angular/forms": "16.1.9", + "@angular/platform-browser": "16.1.9", + "@angular/platform-browser-dynamic": "16.1.9", + "@angular/router": "16.1.9", + "@here-wallet/core": "^1.5.1", "@jscutlery/semver": "3.1.0", "@ledgerhq/hw-transport": "6.30.3", "@ledgerhq/hw-transport-webhid": "6.28.3", @@ -94,8 +95,11 @@ "@near-snap/sdk": "^0.6.0", "@peersyst/near-mobile-signer": "^1.0.10", "@ramper/near": "^0.0.30", + "@wagmi/connectors": "4.1.19", + "@wagmi/core": "2.6.10", "@walletconnect/modal": "^2.6.2", - "@walletconnect/sign-client": "2.11.0", + "@walletconnect/sign-client": "2.11.2", + "@web3modal/wagmi": "4.1.1", "better-sqlite3": "^9.3.0", "big.js": "^6.1.1", "bn.js": "^5.2.0", @@ -125,24 +129,25 @@ "tweetnacl": "^1.0.3", "tweetnacl-util": "^0.15.1", "url": "^0.11.0", + "viem": "^2.9.5", "zone.js": "0.12.0" }, "devDependencies": { - "@angular-devkit/build-angular": "15.2.8", - "@angular-devkit/core": "15.2.8", - "@angular-devkit/schematics": "15.2.8", + "@angular-devkit/build-angular": "16.1.8", + "@angular-devkit/core": "16.1.8", + "@angular-devkit/schematics": "16.1.8", "@angular-eslint/eslint-plugin": "15.0.0", "@angular-eslint/eslint-plugin-template": "15.0.0", "@angular-eslint/template-parser": "15.0.0", - "@angular/cli": "~15.2.0", - "@angular/compiler-cli": "15.2.9", + "@angular/cli": "16.1.8", + "@angular/compiler-cli": "16.1.8", "@angular/language-service": "15.2.9", "@babel/preset-react": "^7.16.7", "@nrwl/js": "16.0.0", "@nrwl/rollup": "16.0.0", "@nrwl/tao": "16.0.0", "@nrwl/webpack": "16.0.0", - "@nx/angular": "16.0.0", + "@nx/angular": "16.4.0", "@nx/cypress": "16.0.0", "@nx/eslint-plugin": "16.0.0", "@nx/jest": "16.0.0", @@ -193,7 +198,7 @@ "jest-preset-angular": "13.0.0", "jsdoc": "^4.0.2", "jspm": "^3.1.0", - "nx": "16.0.0", + "nx": "16.4.0", "nx-cloud": "16.0.5", "path-browserify": "^1.0.1", "prettier": "^2.7.1", @@ -207,7 +212,7 @@ "ts-jest": "29.1.0", "ts-node": "10.9.1", "ts-prune": "^0.10.3", - "typescript": "4.9.5", + "typescript": "5.0.4", "url-loader": "^4.1.1", "util": "^0.12.5", "webpack": "^5.75.0", diff --git a/packages/ethereum-wallets/.babelrc b/packages/ethereum-wallets/.babelrc new file mode 100644 index 000000000..27b24c422 --- /dev/null +++ b/packages/ethereum-wallets/.babelrc @@ -0,0 +1,11 @@ +{ + "presets": [ + [ + "@nrwl/js/babel", + { + "useBuiltIns": "usage" + } + ] + ], + "plugins": [] +} diff --git a/packages/ethereum-wallets/.eslintrc.json b/packages/ethereum-wallets/.eslintrc.json new file mode 100644 index 000000000..9d9c0db55 --- /dev/null +++ b/packages/ethereum-wallets/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/packages/ethereum-wallets/README.md b/packages/ethereum-wallets/README.md new file mode 100644 index 000000000..d47f8d49c --- /dev/null +++ b/packages/ethereum-wallets/README.md @@ -0,0 +1,94 @@ +# @near-wallet-selector/ethereum-wallets + +This is the Ethereum Wallets package for NEAR Wallet Selector. +The package adds support for Ethereum wallets by creating Ethereum-compatible transactions from NEAR transaction inputs. + +Ethereum wallet support NEP: https://github.com/near/NEPs/issues/518 + +Any Ethereum wallet can be connected via Web3Modal: the dApp can chose which wallets to support and a multichain dApp can switch networks using the same wallet connection. + +SignIn requires a switch to NEAR network, but the user can switch to other networks and will be prompted to switch back to NEAR before a transaction is made. + +Sign out prompts to remove the FunctionCall access key if there is one, this action is not blocking and the user can sign out without executing the transaction. + +A NEAR dApp can connect to multiple Ethereum wallet addresses. If the user switches address and connects from the wallet instead of the dApp, the wallet will be disconnected from the dApp so that it can reconnect with the signIn flow. +If the dApp doesn't require a FunctionCall access key or the Ethereum wallet address already signed in, then the address connects automatically when changed. + +`signMessage` and `verifyOwner` are not implemented because Ethereum wallets are not compatible with these standards, instead a dApp can use `eth_sign` or `eth_signTypedData_v4` to authenticate the wallet by interacting with it directly. + +NEP-518 doesn't support multiple actions within the same transaction, so when multiple actions are requested, they are split into separate transactions and executed 1 by 1. + +## Installation and Usage + +The easiest way to use this package is to install it from the NPM registry, this package requires `near-api-js` v1.0.0 or above: + +```bash +# Using Yarn +yarn add near-api-js @web3modal/wagmi @wagmi/core @wagmi/connectors viem @near-wallet-selector/ethereum-wallets + +# Using NPM. +npm install near-api-js @web3modal/wagmi @wagmi/core @wagmi/connectors viem @near-wallet-selector/ethereum-wallets +``` + +Then use it in your dApp: + +Visit https://docs.walletconnect.com for the latest configuration of Web3Modal. + +```ts +import type { Config } from "@wagmi/core"; +import { reconnect, http, createConfig } from "@wagmi/core"; +import { coinbaseWallet, walletConnect, injected } from "@wagmi/connectors"; +import { setupWalletSelector } from "@near-wallet-selector/core"; +import { setupEthereumWallets } from "@near-wallet-selector/ethereum-wallets"; + +const wagmiConfig: Config = createConfig({ + chains: [near], + transports: { + [near.id]: http(), + }, + connectors: [ + walletConnect({ projectId, metadata, showQrModal: false }), + injected({ shimDisconnect: true }), + coinbaseWallet({ + appName, + appLogoUrl, + }), + ], +}); +reconnect(wagmiConfig); + +const web3Modal = createWeb3Modal({ + wagmiConfig: config, + // Get a project ID at https://cloud.walletconnect.com + projectId, +}); + +const _selector = await setupWalletSelector({ + network: "mainnet", + debug: true, + modules: [ + setupEthereumWallets({ wagmiConfig, web3Modal }), + ], +}); +``` + +## Wallet Connect Configuration + +Project ID is required, please obtain it from [walletconnect.com](https://walletconnect.com/) + +## Options + +- `wagmiConfig`: Wagmi Config for interacting with Ethereum wallets. +- `web3Modal`: Web3Modal object for connecting an Ethereum wallet and switching network. +- `chainId` (`number?`): Chain ID of the NEAR web3 rpc to connect to. Defaults to `397` (`mainnet`) or `398` (`testnet`) depending on the `setupWalletSelector` network configuration. +- `rpcUrl` (`string?`): Custom NEAR web3 rpc endpoint to query Ethereum wallet transaction receipts, defaults to `todo` (`mainnet`) or `todo` (`testnet`) depending on the `setupWalletSelector` network configuration. +- `iconUrl` (`string?`): Image URL for the icon shown in the modal. This can also be a relative path or base64 encoded image. Defaults to `./assets/wallet-connect-icon.png`. + +Developent options (before the NEAR protocol upgrade to support 0x accounts natively): + +- `devMode` (`boolean?`): During development NEAR protocol doesn't yet support `0x123...abc` accounts natively so in devMode the account with format `0x123...abc.eth-wallet.testnet` is used insead. Setup your devMode account at https://near-wallet-playground.testnet.aurora.dev +- `devModeAccount` (`string?`): Modify the namespace of the devMode root accounts. + +## License + +This repository is distributed under the terms of both the MIT license and the Apache License (Version 2.0). diff --git a/packages/ethereum-wallets/assets/wallet-connect-icon.png b/packages/ethereum-wallets/assets/wallet-connect-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e77444eb9a660eda980b0896407de5b9cefd9375 GIT binary patch literal 9112 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 Hmf`;c4P?d! literal 0 HcmV?d00001 diff --git a/packages/ethereum-wallets/jest.config.js b/packages/ethereum-wallets/jest.config.js new file mode 100644 index 000000000..967c0ddbc --- /dev/null +++ b/packages/ethereum-wallets/jest.config.js @@ -0,0 +1,14 @@ +module.exports = { + displayName: "ethereum-wallets", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]sx?$": "ts-jest", + }, + moduleFileExtensions: ["ts", "tsx", "js", "jsx"], + coverageDirectory: "../../coverage/packages/ethereum-wallets", +}; diff --git a/packages/ethereum-wallets/jest.config.ts b/packages/ethereum-wallets/jest.config.ts new file mode 100644 index 000000000..52616e6e6 --- /dev/null +++ b/packages/ethereum-wallets/jest.config.ts @@ -0,0 +1,16 @@ +/* eslint-disable */ +export default { + displayName: "ethereum-wallets", + preset: "../../jest.preset.js", + globals: {}, + transform: { + "^.+\\.[tj]s$": [ + "ts-jest", + { + tsconfig: "/tsconfig.spec.json", + }, + ], + }, + moduleFileExtensions: ["ts", "tsx", "js", "jsx"], + coverageDirectory: "../../coverage/packages/ethereum-wallets", +}; diff --git a/packages/ethereum-wallets/package.json b/packages/ethereum-wallets/package.json new file mode 100644 index 000000000..8eb842c44 --- /dev/null +++ b/packages/ethereum-wallets/package.json @@ -0,0 +1,29 @@ +{ + "name": "@near-wallet-selector/ethereum-wallets", + "version": "1.0.0", + "description": "Ethereum wallets package for NEAR Wallet Selector.", + "keywords": [ + "near", + "blockchain", + "wallets", + "dapps", + "near-protocol", + "near-blockchain", + "wallet selector", + "injected wallet", + "wallet connect", + "web3Modal", + "wagmi" + ], + "repository": { + "type": "git", + "url": "https://github.com/near/wallet-selector.git" + }, + "bugs": { + "url": "https://github.com/near/wallet-selector/issues" + }, + "homepage": "https://github.com/near/wallet-selector/tree/main/packages/ethereum-wallets", + "peerDependencies": { + "near-api-js": "^1.0.0 || ^2.0.0" + } +} diff --git a/packages/ethereum-wallets/project.json b/packages/ethereum-wallets/project.json new file mode 100644 index 000000000..af2852b01 --- /dev/null +++ b/packages/ethereum-wallets/project.json @@ -0,0 +1,56 @@ +{ + "name": "ethereum-wallets", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/ethereum-wallets/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nrwl/rollup:rollup", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/packages/ethereum-wallets", + "tsConfig": "packages/ethereum-wallets/tsconfig.lib.json", + "project": "packages/ethereum-wallets/package.json", + "entryFile": "packages/ethereum-wallets/src/index.ts", + "buildableProjectDepsInPackageJsonType": "dependencies", + "compiler": "babel", + "format": ["esm", "cjs"], + "assets": [ + { + "glob": "packages/ethereum-wallets/README.md", + "input": ".", + "output": "." + }, + { + "glob": "packages/ethereum-wallets/assets/*", + "input": ".", + "output": "assets" + } + ] + } + }, + "lint": { + "executor": "@nx/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["packages/ethereum-wallets/**/*.ts"] + } + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/packages/ethereum-wallets"], + "options": { + "jestConfig": "packages/ethereum-wallets/jest.config.ts", + "passWithNoTests": true + } + }, + "deploy": { + "executor": "ngx-deploy-npm:deploy", + "options": { + "access": "public" + }, + "dependsOn": ["^deploy"] + } + }, + "tags": ["injected-wallet"] +} diff --git a/packages/ethereum-wallets/src/index.ts b/packages/ethereum-wallets/src/index.ts new file mode 100644 index 000000000..3bbf457a8 --- /dev/null +++ b/packages/ethereum-wallets/src/index.ts @@ -0,0 +1,2 @@ +export { setupEthereumWallets } from "./lib"; +export type { EthereumWalletsParams } from "./lib"; diff --git a/packages/ethereum-wallets/src/lib/icon.ts b/packages/ethereum-wallets/src/lib/icon.ts new file mode 100644 index 000000000..1263c8eb4 --- /dev/null +++ b/packages/ethereum-wallets/src/lib/icon.ts @@ -0,0 +1 @@ +export default `data:image/png;base64,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`; diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts new file mode 100644 index 000000000..0d79a13af --- /dev/null +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -0,0 +1,662 @@ +import * as nearAPI from "near-api-js"; +import type { + AccessKeyViewRaw, + FinalExecutionOutcome, + FunctionCallPermissionView, +} from "near-api-js/lib/providers/provider"; +import { stringifyJsonOrBytes } from "near-api-js/lib/transaction"; +import { + type WalletModuleFactory, + type WalletBehaviourFactory, + type Subscription, + type Transaction, + type Account, + type InjectedWallet, + type Optional, +} from "@near-wallet-selector/core"; +import { signTransactions } from "@near-wallet-selector/wallet-utils"; +import { + watchAccount, + getAccount, + switchChain, + writeContract, + disconnect, + type GetAccountReturnType, + type Config, +} from "@wagmi/core"; +import { bytesToHex, keccak256, parseAbi, toHex } from "viem"; + +import icon from "./icon"; +import { createModal } from "./modal"; + +export interface EthereumWalletsParams { + wagmiConfig: Config; + web3Modal: { + open: () => void; + subscribeEvents: ( + f: (event: { data: { event: string } }) => void + ) => () => void; + getState: () => { open: boolean; selectedNetworkId?: number }; + }; + chainId?: number; + rpcUrl?: string; + iconUrl?: string; + devMode?: boolean; + devModeAccount?: string; + deprecated?: boolean; +} + +const ETHEREUM_ACCOUNT_ABI = parseAbi([ + "function functionCall(string receiver_id, string method_name, bytes args, uint64 gas, uint32 yoctoNear) payable", + "function transfer(string receiver_id, uint32 yoctoNear) payable", + "function addKey(uint8 public_key_kind, bytes public_key, uint64 nonce, bool is_full_access, bool is_limited_allowance, uint128 allowance, string receiver_id, string[] method_names)", + "function deleteKey(uint8 public_key_kind, bytes public_key)", +]); +const DEFAULT_ACCESS_KEY_ALLOWANCE = "250000000000000000000000"; + +interface EthereumWalletsState { + keystore: nearAPI.keyStores.KeyStore; + subscriptions: Array; +} + +const setupEthereumWalletsState = async ( + id: string +): Promise => { + const keystore = new nearAPI.keyStores.BrowserLocalStorageKeyStore( + window.localStorage, + `near-wallet-selector:${id}:keystore:` + ); + return { + keystore, + subscriptions: [], + }; +}; + +const EthereumWallets: WalletBehaviourFactory< + InjectedWallet, + { params: EthereumWalletsParams } +> = async ({ + id, + options, + store, + provider, + emitter, + logger, + params: { + wagmiConfig, + web3Modal, + chainId, + rpcUrl, + devMode, + devModeAccount = "eth-wallet.testnet", + }, +}) => { + const _state = await setupEthereumWalletsState(id); + const expectedChainId = + chainId ?? options.network.networkId === "mainnet" ? 397 : 398; + const nearRpc = + rpcUrl ?? devMode + ? "https://near-wallet-relayer.testnet.aurora.dev" + : options.network.networkId === "mainnet" + ? "https://near-wallet-relayer.mainnet.aurora.dev" + : "https://near-wallet-relayer.testnet.aurora.dev"; + + const getAccounts = async (): Promise> => { + const address = getAccount(wagmiConfig).address?.toLowerCase(); + const account = devMode ? address + "." + devModeAccount : address; + if (!account) { + return []; + } + const keyPair = await _state.keystore.getKey( + options.network.networkId, + account + ); + const accountLogIn: Account = { + accountId: account, + publicKey: keyPair ? keyPair.getPublicKey().toString() : undefined, + }; + return [accountLogIn]; + }; + + const cleanup = async () => { + _state.subscriptions.forEach((subscription) => subscription.remove()); + _state.subscriptions = []; + }; + + const executeTransaction = async (tx: Transaction) => { + const to = ( + /^0x([A-Fa-f0-9]{40})$/.test(tx.receiverId) + ? tx.receiverId + : "0x" + keccak256(toHex(tx.receiverId)).slice(26) + ) as `0x${string}`; + let result; + switch (tx.actions[0].type) { + case "AddKey": { + const publicKey = bytesToHex( + Buffer.from(tx.actions[0].params.publicKey.split(":")[1], "base64") + ); + if (tx.actions[0].params.accessKey.permission === "FullAccess") { + result = await writeContract(wagmiConfig, { + abi: ETHEREUM_ACCOUNT_ABI, + address: to, + functionName: "addKey", + args: [ + 0, // 0 stands for ed25519 + publicKey, + BigInt(tx.actions[0].params.accessKey.nonce ?? 0), + true, + false, // Not used with is_full_access + BigInt(0), // Not used with is_full_access + "", // Not used with is_full_access + [], // Not used with is_full_access + ], + chainId: expectedChainId, + type: "legacy", + }); + } else { + const allowance = BigInt( + tx.actions[0].params.accessKey.permission.allowance ?? + DEFAULT_ACCESS_KEY_ALLOWANCE + ); + result = await writeContract(wagmiConfig, { + abi: ETHEREUM_ACCOUNT_ABI, + address: to, + functionName: "addKey", + args: [ + 0, // 0 stands for ed25519 + publicKey, + BigInt(tx.actions[0].params.accessKey.nonce ?? 0), + false, + allowance > 0 ? true : false, + allowance, + tx.actions[0].params.accessKey.permission.receiverId, + tx.actions[0].params.accessKey.permission.methodNames ?? [], + ], + chainId: expectedChainId, + type: "legacy", + }); + } + break; + } + case "DeleteKey": { + const publicKey = bytesToHex( + Buffer.from(tx.actions[0].params.publicKey.split(":")[1], "base64") + ); + result = await writeContract(wagmiConfig, { + abi: ETHEREUM_ACCOUNT_ABI, + address: to, + functionName: "deleteKey", + args: [ + 0, // 0 stands for ed25519 + publicKey, + ], + chainId: expectedChainId, + type: "legacy", + }); + break; + } + case "FunctionCall": { + const yoctoNear = BigInt(tx.actions[0].params.deposit) % BigInt(1e6); + const value = BigInt(tx.actions[0].params.deposit) / BigInt(1e6); + result = await writeContract(wagmiConfig, { + abi: ETHEREUM_ACCOUNT_ABI, + address: to, + functionName: "functionCall", + args: [ + tx.receiverId, + tx.actions[0].params.methodName, + bytesToHex(stringifyJsonOrBytes(tx.actions[0].params.args)), + BigInt(tx.actions[0].params.gas), + +yoctoNear.toString(), + ], + value, + chainId: expectedChainId, + type: "legacy", + }); + break; + } + case "Transfer": { + const yoctoNear = BigInt(tx.actions[0].params.deposit) % BigInt(1e6); + const value = BigInt(tx.actions[0].params.deposit) / BigInt(1e6); + result = await writeContract(wagmiConfig, { + abi: ETHEREUM_ACCOUNT_ABI, + address: to, + functionName: "transfer", + args: [tx.receiverId, +yoctoNear.toString()], + value, + chainId: expectedChainId, + type: "legacy", + }); + break; + } + default: { + throw new Error("Invalid action type"); + } + } + return result; + }; + + const setupEvents = async () => { + const unwatchAccount = watchAccount(wagmiConfig, { + onChange: async (data) => { + if (!data.address && data.status === "disconnected") { + emitter.emit("signedOut", null); + return; + } + if (data.address && data.status === "connected") { + if (store.getState().contract?.contractId) { + const keyPair = await _state.keystore.getKey( + options.network.networkId, + "opa_code28.testnet" // data.address + ); + if (!keyPair) { + emitter.emit("signedOut", null); + return; + } + } + emitter.emit("accountsChanged", { accounts: await getAccounts() }); + } + }, + }); + _state.subscriptions.push({ remove: () => unwatchAccount() }); + }; + setupEvents(); + + // Add signerId and receiverId defaults. + const transformTransactions = async ( + transactions: Array> + ): Promise> => { + const state = store.getState(); + const { contract } = state; + const [accountLogIn] = await getAccounts(); + + if (!accountLogIn) { + throw new Error("No active account"); + } + + return transactions.map((transaction) => { + if (!contract && !transaction.receiverId) { + throw new Error(`Missing receiverId, got '${transaction.receiverId}'`); + } + + return { + ...transaction, + signerId: transaction.signerId || accountLogIn.accountId!, + receiverId: transaction.receiverId || contract!.contractId, + }; + }); + }; + // Separate actions into individual transactions because not available in 0x accounts. + const transformEthereumTransactions = ( + transactions: Array + ): Array => { + return transactions + .map((transaction) => { + return transaction.actions.map((action) => { + return { + signerId: transaction.signerId, + receiverId: transaction.receiverId, + actions: [action], + }; + }); + }) + .flat(); + }; + + const validateAccessKey = ({ + transactions, + accessKey, + }: { + transactions: Array; + accessKey: AccessKeyViewRaw; + }) => { + if (accessKey.permission === "FullAccess") { + return true; + } + return transactions.every((tx) => { + // eslint-disable-next-line @typescript-eslint/naming-convention + const { receiver_id, method_names } = ( + accessKey.permission as FunctionCallPermissionView + ).FunctionCall; + if (receiver_id !== tx.receiverId) { + return false; + } + return tx.actions.every((action) => { + if (action.type !== "FunctionCall") { + return false; + } + const { methodName, deposit } = action.params; + if (method_names.length && !method_names.includes(methodName)) { + return false; + } + return BigInt(deposit) <= 0; + }); + }); + }; + + const signAndSendTransactions = async ( + transactions: Array> + ) => { + // If transactions can be executed with FunctionCall access key do it, otherwise execute 1 by 1 with Ethereum wallet. + const nearTxs = await transformTransactions(transactions); + const [accountLogIn] = await getAccounts(); + if (accountLogIn.publicKey) { + try { + const accessKey = await provider.query({ + request_type: "view_access_key", + finality: "final", + account_id: accountLogIn.accountId, + public_key: accountLogIn.publicKey.toString(), + }); + const accessKeyUsable = validateAccessKey({ + transactions: nearTxs, + accessKey, + }); + if (accessKeyUsable) { + const signer = new nearAPI.InMemorySigner(_state.keystore); + const signedTransactions = await signTransactions( + nearTxs, + signer, + options.network + ); + const results: Array = []; + for (let i = 0; i < signedTransactions.length; i += 1) { + results.push(await provider.sendTransaction(signedTransactions[i])); + } + return results; + } + } catch (error) { + logger.error( + "Failed to executed FunctionCall access key transaction, falling back to Ethereum wallet to sign and send transaction.", + error + ); + } + } + const txs = transformEthereumTransactions(nearTxs); + const { selectedNetworkId } = web3Modal.getState(); + if (selectedNetworkId !== expectedChainId) { + await switchChain(wagmiConfig, { + chainId: expectedChainId, + }); + } + const results: Array = []; + await (() => { + return new Promise((resolve, reject) => { + const { showModal, hideModal, renderTxs } = createModal({ + onCancel: () => { + reject("User canceled Ethereum wallet transaction(s)."); + }, + txs, + }); + showModal(); + (async () => { + try { + for (const [index, tx] of txs.entries()) { + renderTxs({ selectedIndex: index }); + const result = await executeTransaction(tx); + logger.log(result); + // TODO get the FinalExecutionOutcome of the rpc transaction + results.push({} as FinalExecutionOutcome); + } + resolve(); + } catch (error) { + logger.error(error); + reject(error); + } finally { + hideModal(); + } + })(); + }); + })(); + return results; + }; + + const signOut = async () => { + const [accountLogIn] = await getAccounts(); + try { + if (accountLogIn.publicKey) { + // Check that the key exists before making a transaction. + await provider.query({ + request_type: "view_access_key", + finality: "final", + account_id: accountLogIn.accountId, + public_key: accountLogIn.publicKey.toString(), + }); + // NOTE: don't await, in case of a connection problem with the wallet, the user should still be disconnected from dApp. + // If not deleted, the access key will be reused during signIn. + signAndSendTransactions([ + { + signerId: accountLogIn.accountId, + receiverId: accountLogIn.accountId, + actions: [ + { + type: "DeleteKey", + params: { + publicKey: accountLogIn.publicKey, + }, + }, + ], + }, + ]).then(() => { + _state.keystore.removeKey( + options.network.networkId, + accountLogIn.accountId + ); + }); + // NOTE: await a promise so that event loop calls `signAndSendTransactions` before `disconnect(wagmiConfig)`. + await ((ms: number) => + new Promise((resolve) => setTimeout(resolve, ms)))(1); + } + cleanup(); + } catch (error) { + logger.error(error); + } finally { + emitter.emit("signedOut", null); + disconnect(wagmiConfig); + } + }; + + return { + async signIn({ contractId, methodNames = [] }) { + logger.log("EthereumWallets:signIn", { contractId, methodNames }); + + let unwatchAccountConnected: (() => void) | undefined; + let unsubscribeCloseModal: (() => void) | undefined; + const account = getAccount(wagmiConfig); + let address = account.address?.toLowerCase(); + if (!address) { + // NOTE: open web3Modal and wait for a wallet to be connected or the web3Modal to be closed. + try { + web3Modal.open(); + const newData: GetAccountReturnType = await (() => { + return new Promise((resolve, reject) => { + try { + unwatchAccountConnected = watchAccount(wagmiConfig, { + onChange: (data: GetAccountReturnType) => { + if (!data.address) { + return; + } + resolve(data); + }, + }); + unsubscribeCloseModal = web3Modal.subscribeEvents( + (event: { data: { event: string } }) => { + const newAccount = getAccount(wagmiConfig); + if ( + event.data.event === "MODAL_CLOSE" && + !newAccount.address + ) { + logger.error( + "Web3Modal closed without connecting to an Ethereum wallet." + ); + reject( + "Web3Modal closed without connecting to an Ethereum wallet." + ); + } + } + ); + } catch (error) { + reject("User rejected"); + } + }); + })(); + address = newData.address?.toLowerCase(); + if (!address) { + throw new Error("Failed to get Ethereum wallet address"); + } + } catch (error: unknown) { + logger.error(error); + throw new Error("Failed to connect Ethereum wallet."); + } finally { + if (unwatchAccountConnected) { + unwatchAccountConnected(); + } + if (unsubscribeCloseModal) { + unsubscribeCloseModal(); + } + } + } else { + logger.log("Wallet already connected"); + } + + const { selectedNetworkId } = web3Modal.getState(); + if (selectedNetworkId !== expectedChainId) { + await switchChain(wagmiConfig, { + chainId: expectedChainId, + }); + } + + const accountId = devMode ? address + "." + devModeAccount : address; + let publicKey; + if (contractId) { + const keyPair = await _state.keystore.getKey( + options.network.networkId, + accountId + ); + let reUseKeyPair = false; + if (keyPair) { + try { + await provider.query({ + request_type: "view_access_key", + finality: "final", + account_id: accountId, + public_key: keyPair.getPublicKey().toString(), + }); + reUseKeyPair = true; + } catch (error) { + logger.error("Local access key cannot be reused."); + _state.keystore.removeKey(options.network.networkId, accountId); + } + } + if (reUseKeyPair) { + publicKey = keyPair.getPublicKey().toString(); + logger.log("Reusing existing publicKey:", publicKey); + } else { + const newAccessKeyPair = nearAPI.utils.KeyPair.fromRandom("ed25519"); + publicKey = newAccessKeyPair.getPublicKey().toString(); + logger.log("Created new publicKey:", publicKey); + try { + await signAndSendTransactions([ + { + signerId: accountId, + receiverId: accountId, + actions: [ + { + type: "AddKey", + params: { + publicKey, + accessKey: { + nonce: 0, + permission: { + receiverId: contractId, + allowance: DEFAULT_ACCESS_KEY_ALLOWANCE, + methodNames, + }, + }, + }, + }, + ], + }, + ]); + await _state.keystore.setKey( + options.network.networkId, + accountId, + newAccessKeyPair + ); + } catch (error) { + await signOut(); + throw error; + } + } + } + const accountLogIn = { + accountId, + publicKey, + }; + emitter.emit("signedIn", { + contractId: contractId, + methodNames: methodNames ?? [], + accounts: [accountLogIn], + }); + if (!_state.subscriptions.length) { + setupEvents(); + } + return [accountLogIn]; + }, + + signOut, + + getAccounts, + + async verifyOwner({ message }) { + logger.log("EthereumWallets:verifyOwner", { message }); + throw new Error( + "Not implemented: ed25519 N/A, use eth_sign or eth_signTypedData_v4 instead." + ); + }, + + async signMessage({ message, nonce, recipient }) { + logger.log("EthereumWallets:signMessage", { message, nonce, recipient }); + throw new Error( + "Not implemented: ed25519 N/A, use eth_sign or eth_signTypedData_v4 instead." + ); + }, + + async signAndSendTransaction(transaction) { + logger.log("EthereumWallets:signAndSendTransaction", transaction); + const outcomes = await signAndSendTransactions([transaction]); + // Return the last transaction outcome. + return outcomes[outcomes.length - 1]; + }, + + async signAndSendTransactions({ transactions }) { + logger.log("EthereumWallets:signAndSendTransactions", { transactions }); + return await signAndSendTransactions(transactions); + }, + }; +}; + +export function setupEthereumWallets( + params: EthereumWalletsParams +): WalletModuleFactory { + return async () => { + return { + id: "ethereum-wallets", + type: "injected", + metadata: { + name: "Ethereum Wallets", + description: "Ethereum wallets for NEAR.", + iconUrl: params.iconUrl ?? icon, + deprecated: params.deprecated ?? false, + available: true, + downloadUrl: "", + }, + init: (config) => { + return EthereumWallets({ + ...config, + params, + }); + }, + }; + }; +} diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts new file mode 100644 index 000000000..392bc4ebc --- /dev/null +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -0,0 +1,179 @@ +import type { + FunctionCallAction, + Transaction, + TransferAction, +} from "@near-wallet-selector/core"; + +export function createModal({ + onCancel, + txs, +}: { + onCancel: () => void; + txs: Array; +}) { + const modalStyles = ` + .ethereum-wallet-modal-container { + display: none; + position: fixed; + z-index: 9999; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + overflow: auto; + } + .ethereum-wallet-modal-content { + background-color: #efefef; + border-radius: 10px; + margin: 2% auto; + padding: 20px; + width: 40%; + text-align: center; + color: #4b4b4b; + word-wrap: break-word; + overflow-wrap: break-word; + } + .ethereum-wallet-tx { + margin-bottom: 10px; + padding: 10px; + background-color: #efefef; + border-radius: 10px; + color: #4b4b4b; + border: solid; + border-color: #4b4b4b; + text-align: left + } + .ethereum-wallet-tx-completed { + background-color: #75ba8b; + color: #4b4b4b; + } + .ethereum-wallet-tx-signing { + background-color: #fce4a2; + color: #4b4b4b; + } + .cancel-ethereum-txs { + background: none; + border: none; + padding: 0; + margin: 0; + margin-top: 10px; + color: #4b4b4b; + font-size: inherit; + text-decoration: none; + } + .cancel-ethereum-txs:hover { + text-decoration: underline; + } + .cancel-ethereum-txs:active { + background: none; + } + @media only screen and (max-width: 800px) { + .ethereum-wallet-modal-content { + width: 100%; /* Full width for smaller screens */ + } + } + `; + + // Create a style element and append the CSS styles + const styleElement = window.document.createElement("style"); + styleElement.textContent = modalStyles; + window.document.head.appendChild(styleElement); + + // Create modal container + const modalContainer = window.document.createElement("div"); + modalContainer.classList.add("ethereum-wallet-modal-container"); + + // Create modal content + const modalContent = window.document.createElement("div"); + modalContent.classList.add("ethereum-wallet-modal-content"); + modalContent.innerHTML = ` + ${ + txs.length === 1 && + txs[0].actions.length === 1 && + txs[0].actions[0].type === "AddKey" + ? "

Log in

" + : txs.length === 1 && + txs[0].actions.length === 1 && + txs[0].actions[0].type === "DeleteKey" + ? "

Log out

" + : `

Execute ${txs.length} transaction(s)

` + } +
+ + `; + + // Append modal content to modal container + modalContainer.appendChild(modalContent); + + // Append modal container to document body + window.document.body.appendChild(modalContainer); + + // Function to show the modal + const showModal = () => { + modalContainer.style.display = "block"; + }; + + // Function to hide the modal + const hideModal = () => { + // modalContainer.style.display = "none"; + modalContainer.remove(); + }; + + // On cancel button click + window.document + .querySelector(".cancel-ethereum-txs") + ?.addEventListener("click", () => { + onCancel(); + hideModal(); + }); + + const renderTxs = ({ selectedIndex }: { selectedIndex: number }) => { + const container = document.querySelector( + ".ethereum-wallet-txs" + ) as HTMLElement; + container.innerHTML = ""; + + txs.forEach((tx, i) => { + const txElement = document.createElement("div"); + txElement.classList.add("ethereum-wallet-tx"); + if (i < selectedIndex) { + txElement.classList.add("ethereum-wallet-tx-completed"); + } + if (i === selectedIndex) { + txElement.classList.add("ethereum-wallet-tx-signing"); + } + txElement.innerHTML = ` + ${ + tx.actions[0].type === "AddKey" && + tx.actions[0].params.accessKey.permission === "FullAccess" + ? "WARNING: you can loose your account and all your assets by giving FullAccess, only approve this transaction if you know what you are doing !!!" + : "" + } + ${ + tx.actions[0].type === "AddKey" && + tx.actions[0].params.accessKey.permission !== "FullAccess" && + tx.actions[0].params.accessKey.permission.allowance === "0" + ? "WARNING: this key has unlimited allowance and can spend all your NEAR, only approve this transaction if you know what you are doing !!!" + : "" + } +

Status: ${ + i < selectedIndex + ? "completed" + : i === selectedIndex + ? "sign the transaction in your wallet..." + : "pending..." + }

+

type: ${tx.actions[0].type}

+

receiverId: ${tx.receiverId}

+

params: ${JSON.stringify( + (tx.actions[0] as FunctionCallAction | TransferAction).params, + null, + 2 + )}

+ `; + container.appendChild(txElement); + }); + }; + return { showModal, hideModal, renderTxs }; +} diff --git a/packages/ethereum-wallets/tsconfig.json b/packages/ethereum-wallets/tsconfig.json new file mode 100644 index 000000000..a3bd77f18 --- /dev/null +++ b/packages/ethereum-wallets/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "allowJs": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/packages/ethereum-wallets/tsconfig.lib.json b/packages/ethereum-wallets/tsconfig.lib.json new file mode 100644 index 000000000..e4b5275a2 --- /dev/null +++ b/packages/ethereum-wallets/tsconfig.lib.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "types": ["node"] + }, + "files": [ + "../../node_modules/@nx/react/typings/cssmodule.d.ts", + "../../node_modules/@nx/react/typings/image.d.ts" + ], + "exclude": ["jest.config.ts", "**/*.spec.ts"], + "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] +} diff --git a/packages/ethereum-wallets/tsconfig.spec.json b/packages/ethereum-wallets/tsconfig.spec.json new file mode 100644 index 000000000..b506d384e --- /dev/null +++ b/packages/ethereum-wallets/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.spec.ts"] +} diff --git a/scripts/release-packages.bash b/scripts/release-packages.bash index 14aeeece6..3957f8f46 100644 --- a/scripts/release-packages.bash +++ b/scripts/release-packages.bash @@ -27,3 +27,4 @@ npm publish dist/packages/ramper-wallet --tag "${TAG}" --otp "${OTP}" npm publish dist/packages/near-mobile-wallet --tag "${TAG}" --otp "${OTP}" npm publish dist/packages/mintbase-wallet --tag "${TAG}" --otp "${OTP}" npm publish dist/packages/bitget-wallet --tag "${TAG}" --otp "${OTP}" +npm publish dist/packages/ethereum-wallets --tag "${TAG}" --otp "${OTP}" diff --git a/tsconfig.base.json b/tsconfig.base.json index 8dfb318b0..81dabcf73 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -92,6 +92,9 @@ "@near-wallet-selector/mintbase-wallet": [ "packages/mintbase-wallet/src/index.ts" ], + "@near-wallet-selector/ethereum-wallets": [ + "packages/ethereum-wallets/src/index.ts" + ], "crypto": [ "node_modules/crypto-browserify" ], diff --git a/yarn.lock b/yarn.lock index 6d44c01f8..718db32d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,15 +2,17 @@ # yarn lockfile v1 -"@ampproject/remapping@2.2.0", "@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" +"@adobe/css-tools@^4.0.1": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.3.tgz#90749bde8b89cd41764224f5aac29cd4138f75ff" + integrity sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ== + +"@adraffy/ens-normalize@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" + integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== -"@ampproject/remapping@^2.2.0": +"@ampproject/remapping@2.2.1", "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== @@ -18,47 +20,56 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@angular-devkit/architect@0.1502.8": - version "0.1502.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1502.8.tgz#9fd3fd27b3a7fc5f8eb65c92500b4d9d15b879e8" - integrity sha512-rTltw2ABHrcKc8EGimALvXmrDTP5hlNbEy6nYolJoXEI9EwHgriWrVLVPs3OEF+/ed47dbJi9EGOXUOgzgpB5A== +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: - "@angular-devkit/core" "15.2.8" - rxjs "6.6.7" + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" -"@angular-devkit/build-angular@15.2.8": - version "15.2.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-15.2.8.tgz#5412125b810fee084eb8afc20b9911606ad66170" - integrity sha512-TGDnXhhOG6h6TOrWWzfnkha7wYBOXi7iJc1o1w1VKCayE3T6TZZdF847aK66vL9KG7AKYVdGhWEGw2WBHUBUpg== +"@angular-devkit/architect@0.1601.8": + version "0.1601.8" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1601.8.tgz#a3f73779caa0e16ff2497dd37e88f3c86c803992" + integrity sha512-kOXVGwsQnZvtz2UZNefcEy64Jiwq0eSoQUeozvDXOaYRJABLjPKI2YaarvKC9/Z1SGLuje0o/eRJO4T8aRk9rQ== dependencies: - "@ampproject/remapping" "2.2.0" - "@angular-devkit/architect" "0.1502.8" - "@angular-devkit/build-webpack" "0.1502.8" - "@angular-devkit/core" "15.2.8" - "@babel/core" "7.20.12" - "@babel/generator" "7.20.14" - "@babel/helper-annotate-as-pure" "7.18.6" - "@babel/helper-split-export-declaration" "7.18.6" + "@angular-devkit/core" "16.1.8" + rxjs "7.8.1" + +"@angular-devkit/build-angular@16.1.8": + version "16.1.8" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-16.1.8.tgz#13b76c681942cfa758ffeb46308a19b69dc22de1" + integrity sha512-iyElPBQdcJq2plw5YqSz4mzNUfSRXI3ISFTEwPtimzPOorsj/OxB3Z6kJ8fDUsBAJ5OKR7xL7VnQJJ3S+05RhQ== + dependencies: + "@ampproject/remapping" "2.2.1" + "@angular-devkit/architect" "0.1601.8" + "@angular-devkit/build-webpack" "0.1601.8" + "@angular-devkit/core" "16.1.8" + "@babel/core" "7.22.5" + "@babel/generator" "7.22.7" + "@babel/helper-annotate-as-pure" "7.22.5" + "@babel/helper-split-export-declaration" "7.22.5" "@babel/plugin-proposal-async-generator-functions" "7.20.7" - "@babel/plugin-transform-async-to-generator" "7.20.7" - "@babel/plugin-transform-runtime" "7.19.6" - "@babel/preset-env" "7.20.2" - "@babel/runtime" "7.20.13" - "@babel/template" "7.20.7" + "@babel/plugin-transform-async-to-generator" "7.22.5" + "@babel/plugin-transform-runtime" "7.22.5" + "@babel/preset-env" "7.22.5" + "@babel/runtime" "7.22.5" + "@babel/template" "7.22.5" "@discoveryjs/json-ext" "0.5.7" - "@ngtools/webpack" "15.2.8" + "@ngtools/webpack" "16.1.8" + "@vitejs/plugin-basic-ssl" "1.0.1" ansi-colors "4.1.3" - autoprefixer "10.4.13" + autoprefixer "10.4.14" babel-loader "9.1.2" babel-plugin-istanbul "6.1.1" - browserslist "4.21.5" - cacache "17.0.4" + browserslist "^4.21.5" + cacache "17.1.3" chokidar "3.5.3" copy-webpack-plugin "11.0.0" - critters "0.0.16" - css-loader "6.7.3" - esbuild-wasm "0.17.8" - glob "8.1.0" + critters "0.0.20" + css-loader "6.8.1" + esbuild-wasm "0.17.19" + fast-glob "3.2.12" https-proxy-agent "5.0.1" inquirer "8.2.4" jsonc-parser "3.2.0" @@ -67,40 +78,43 @@ less-loader "11.1.0" license-webpack-plugin "4.0.2" loader-utils "3.2.1" - magic-string "0.29.0" - mini-css-extract-plugin "2.7.2" - open "8.4.1" + magic-string "0.30.0" + mini-css-extract-plugin "2.7.6" + mrmime "1.0.1" + open "8.4.2" ora "5.4.1" parse5-html-rewriting-stream "7.0.0" + picomatch "2.3.1" piscina "3.2.0" - postcss "8.4.21" - postcss-loader "7.0.2" + postcss "8.4.24" + postcss-loader "7.3.2" resolve-url-loader "5.0.0" - rxjs "6.6.7" - sass "1.58.1" - sass-loader "13.2.0" - semver "7.3.8" + rxjs "7.8.1" + sass "1.63.2" + sass-loader "13.3.1" + semver "7.5.3" source-map-loader "4.0.1" source-map-support "0.5.21" - terser "5.16.3" + terser "5.17.7" text-table "0.2.0" tree-kill "1.2.2" - tslib "2.5.0" - webpack "5.76.1" - webpack-dev-middleware "6.0.1" - webpack-dev-server "4.11.1" - webpack-merge "5.8.0" + tslib "2.5.3" + vite "4.3.9" + webpack "5.86.0" + webpack-dev-middleware "6.1.1" + webpack-dev-server "4.15.0" + webpack-merge "5.9.0" webpack-subresource-integrity "5.1.0" optionalDependencies: - esbuild "0.17.8" + esbuild "0.17.19" -"@angular-devkit/build-webpack@0.1502.8": - version "0.1502.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1502.8.tgz#1b375480deef1b0920e1a63d952795bd33bbfb38" - integrity sha512-jWtNv+S03FFLDe/C8SPCcRvkz3bSb2R+919IT086Q9axIPQ1VowOEwzt2k3qXPSSrC7GSYuASM+X92dB47NTQQ== +"@angular-devkit/build-webpack@0.1601.8": + version "0.1601.8" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1601.8.tgz#92e347bb79e5d28b83e4a839968758abc3a466c4" + integrity sha512-LUMA3xNnN4IY/FPaqyF6rzba+QVxl3vA+v0l71CBIKNU+Qee6D9xe8KG0Bn7relqDhWZOSHY0nhhO2mBoz4iQg== dependencies: - "@angular-devkit/architect" "0.1502.8" - rxjs "6.6.7" + "@angular-devkit/architect" "0.1601.8" + rxjs "7.8.1" "@angular-devkit/core@15.2.8": version "15.2.8" @@ -113,6 +127,17 @@ rxjs "6.6.7" source-map "0.7.4" +"@angular-devkit/core@16.1.8": + version "16.1.8" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-16.1.8.tgz#f54bf179a78c6ea83ccd46687c54766d3ba674c9" + integrity sha512-dSRD/+bGanArIXkj+kaU1kDFleZeQMzmBiOXX+pK0Ah9/0Yn1VmY3RZh1zcX9vgIQXV+t7UPrTpOjaERMUtVGw== + dependencies: + ajv "8.12.0" + ajv-formats "2.1.1" + jsonc-parser "3.2.0" + rxjs "7.8.1" + source-map "0.7.4" + "@angular-devkit/schematics@15.2.8": version "15.2.8" resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-15.2.8.tgz#c7dfc692e3f54e43085a8845d8c9f390a2519aa3" @@ -124,6 +149,17 @@ ora "5.4.1" rxjs "6.6.7" +"@angular-devkit/schematics@16.1.8": + version "16.1.8" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-16.1.8.tgz#ab392d3a71bd50dcde25f9fbcee7e67d3965565d" + integrity sha512-6LyzMdFJs337RTxxkI2U1Ndw0CW5mMX/aXWl8d7cW2odiSrAg8IdlMqpc+AM8+CPfsB0FtS1aWkEZqJLT0jHOg== + dependencies: + "@angular-devkit/core" "16.1.8" + jsonc-parser "3.2.0" + magic-string "0.30.0" + ora "5.4.1" + rxjs "7.8.1" + "@angular-eslint/bundled-angular-compiler@15.0.0": version "15.0.0" resolved "https://registry.yarnpkg.com/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-15.0.0.tgz#814d625b84c3f71ab5cdc83a4f9191bb4e4f7ddf" @@ -165,78 +201,76 @@ "@angular-eslint/bundled-angular-compiler" "15.0.0" "@typescript-eslint/utils" "5.43.0" -"@angular/animations@15.2.9": - version "15.2.9" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-15.2.9.tgz#f0773d2071a5a17c03478d5838029b03bbab9a03" - integrity sha512-GQujLhI0cQFcl4Q8y0oSYKSRnW23GIeSL+Arl4eFufziJ9hGAAQNuesaNs/7i+9UlTHDMkPH3kd5ScXuYYz6wg== +"@angular/animations@16.1.9": + version "16.1.9" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-16.1.9.tgz#80c1eed2f147ea1e075eda26a065295a3947e06a" + integrity sha512-m7RREew0HWVAXnFrPBoV0J0d5wLvlMjqf/4YkrRSvQlAfic2pY+xKXjBxtSfb7QXl7d6/7htTLqKqmLRESkO3Q== dependencies: tslib "^2.3.0" -"@angular/cli@~15.2.0": - version "15.2.8" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-15.2.8.tgz#612ffd69591aea0109db0a6dd8faec8044a4b80d" - integrity sha512-3VlTfm6DUZfFHBY43vQSAaqmFTxy3VtRd/iDBCHcEPhHwYLWBvNwReJuJfNja8O105QQ6DBiYVBExEBtPmjQ4w== +"@angular/cli@16.1.8": + version "16.1.8" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-16.1.8.tgz#8670dc296cc8b0edca6e50e02cacc173916ebc52" + integrity sha512-amOIHMq8EvixhnI+do5Bcy6IZSFAJx0njhhLM4ltDuNUczH8VH0hNegZKxhb8K87AMO8jITFM+NLrzccyghsDQ== dependencies: - "@angular-devkit/architect" "0.1502.8" - "@angular-devkit/core" "15.2.8" - "@angular-devkit/schematics" "15.2.8" - "@schematics/angular" "15.2.8" + "@angular-devkit/architect" "0.1601.8" + "@angular-devkit/core" "16.1.8" + "@angular-devkit/schematics" "16.1.8" + "@schematics/angular" "16.1.8" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.3" - ini "3.0.1" + ini "4.1.1" inquirer "8.2.4" jsonc-parser "3.2.0" npm-package-arg "10.1.0" npm-pick-manifest "8.0.1" - open "8.4.1" + open "8.4.2" ora "5.4.1" - pacote "15.1.0" - resolve "1.22.1" - semver "7.3.8" + pacote "15.2.0" + resolve "1.22.2" + semver "7.5.3" symbol-observable "4.0.0" - yargs "17.6.2" + yargs "17.7.2" -"@angular/common@15.2.9": - version "15.2.9" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-15.2.9.tgz#5e1d47ce831935bcf545b172f88307aedacf1535" - integrity sha512-LM9/UHG2dRrOzlu2KovrFwWIziFMjRxHzSP3Igw6Symw/wIl0kXGq8Fn6RpFP78zmLqnv+IQOoRiby9MCXsI4g== +"@angular/common@16.1.9": + version "16.1.9" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-16.1.9.tgz#85f16dfc62c2c36c9afa66fe9ae09d9420a64a8e" + integrity sha512-mBetJ08synwk5nvtreek/ny5+KYPImKcr/8phdqWcL4dxfXH5HKh7afBJorPXe890BAF0LFmfVeTOmwrzZu6oA== dependencies: tslib "^2.3.0" -"@angular/compiler-cli@15.2.9": - version "15.2.9" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-15.2.9.tgz#d9e6013d6a8658e4a210aca7997e70d06f6976a8" - integrity sha512-zsbI8G2xHOeYWI0hjFzrI//ZhZV9il/uQW5dAimfwJp06KZDeXZ3PdwY9JQslf6F+saLwOObxy6QMrIVvfjy9w== +"@angular/compiler-cli@16.1.8": + version "16.1.8" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-16.1.8.tgz#1aec87e28cc06e6e1ebed66043a566767823f311" + integrity sha512-Whk3RBnEYwN0c6Mo7hU6JDpHSyKONmIQEN8ViHJXwmyHK8w+/Z27iBw10QiyWUMtYb4tIM1xSLhRFAwH/3WnPQ== dependencies: - "@babel/core" "7.19.3" + "@babel/core" "7.22.5" "@jridgewell/sourcemap-codec" "^1.4.14" chokidar "^3.0.0" convert-source-map "^1.5.1" - dependency-graph "^0.11.0" - magic-string "^0.27.0" reflect-metadata "^0.1.2" semver "^7.0.0" tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler@15.2.9": - version "15.2.9" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-15.2.9.tgz#3f55e206b0e380c28336d2a233b7132f21d72644" - integrity sha512-MoKugbjk+E0wRBj12uvIyDLELlVLonnqjA2+XiF+7FxALIeyds3/qQeEoMmYIqAbN3NnTT5pV92RxWwG4tHFwA== +"@angular/compiler@16.1.9": + version "16.1.9" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-16.1.9.tgz#bd577f1d37e570129ffa95b0fd65f879efcccd20" + integrity sha512-0gBvI6Eucah7r0TWxOg2YuZQjOWTO5dDbppeqZm90XRvjp+W4g+2A2EicdcLT6xasMeFslOTUIohS8eCddEglw== dependencies: tslib "^2.3.0" -"@angular/core@15.2.9": - version "15.2.9" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-15.2.9.tgz#7cb12cc83fcc92f23196ceac82e07b67b2e02203" - integrity sha512-w46Z1yUXCQfKV7XfnamOoLA2VD0MVUUYVrUjO73mHSskDXSXxfZAEHO9kfUS71Cj35PvhP3mbkqWscpea2WeYg== +"@angular/core@16.1.9": + version "16.1.9" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-16.1.9.tgz#dcc4b3dd93a2f37980662951d4b67825617a9135" + integrity sha512-EPveq1kBb79/WtyAOiGeYgyh/we20TddbpQG23WZVjXHH0GoL6mmV2QHwQHOi9tYNeOneUz2bC3F88qbiacuOA== dependencies: tslib "^2.3.0" -"@angular/forms@15.2.9": - version "15.2.9" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-15.2.9.tgz#c3b4b0108f4eb4966ddc5a7ec9913c2ca2c94f00" - integrity sha512-sk0pC2EFi2Ohg5J0q0NYptbT+2WOkoiERSMYA39ncDvlSZBWsNlxpkbGUSck7NIxjK2QfcVN1ldGbHlZTFvtqg== +"@angular/forms@16.1.9": + version "16.1.9" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-16.1.9.tgz#5c278abdf57a25bb132fd80786fe888f90dfd566" + integrity sha512-WojLwxcJ9v2Mv7UEqbFM3GmLi9AGISPe1cqlnno22dZR/33XuK0OY1h/jIGj3WjwH4O++ksPa8NfJeJMRxLpsA== dependencies: tslib "^2.3.0" @@ -245,24 +279,24 @@ resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-15.2.9.tgz#7a94e3394093a425c757f7b385b4a94edb09178a" integrity sha512-B7lP4q/eHge2lZezOXS96EYzVf4stMCWfOnz7+pUUi0HbF+A5QCV65SWQddS/M+NM2jj8N2L/j+6UCH8lJjTQA== -"@angular/platform-browser-dynamic@15.2.9": - version "15.2.9" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.9.tgz#aa31ba63d535ee49fdf3a60fe771503565b4e3c9" - integrity sha512-ZIYDM6MShblb8OyV1m4+18lJJ2LCeICmeg2uSbpFYptYBSOClrTiYOOFVDJvn7HLvNzljLs16XPrgyaYVqNpcw== +"@angular/platform-browser-dynamic@16.1.9": + version "16.1.9" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.9.tgz#15ebf6da939bef79a25f316235aae727f2281654" + integrity sha512-M+nRbLph8FecStiMTlkwAW/Tj9FzvT3gXP7gJDyFMz8lFmXRI2r4+r40Gx3jfA4+rQG0ArTq842aLBldi305Uw== dependencies: tslib "^2.3.0" -"@angular/platform-browser@15.2.9": - version "15.2.9" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-15.2.9.tgz#9150645843cc18b084fb5bf7025e6e320c2abe1e" - integrity sha512-ufCHeSX+U6d43YOMkn3igwfqtlozoCXADcbyfUEG8m2y9XASobqmCKvdSk/zfl62oyiA8msntWBJVBE2l4xKXg== +"@angular/platform-browser@16.1.9": + version "16.1.9" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-16.1.9.tgz#8975ac118cbf698ce4ea739d08ee06d9962f413f" + integrity sha512-a3DKGIsPYF7Hz323oGYmibLfn9fim91r9J03Hib/p4PbhRquyA5drm4mWT6+6IUhlYZCm2z9y9NVfYGrkLS+fw== dependencies: tslib "^2.3.0" -"@angular/router@15.2.9": - version "15.2.9" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-15.2.9.tgz#c3879be22bda236eacf97a18a1e8619b51a53d47" - integrity sha512-UCbh5DLSDhybv0xKYT7kGQMfOVdyhHIHOZz5EYVebbhste6S+W1LE57vTHq7QtxJsyKBa/WSkaUkCLXD6ntCAg== +"@angular/router@16.1.9": + version "16.1.9" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-16.1.9.tgz#95a951b908882486273dc5d609b86bdf561314d4" + integrity sha512-73dFYwcYc6mmhjHDPJsZr2hbwDTNXDBYJ6cjNk9PPtMJe70ylL0MgTR3sMtibqlhvulUtjS1E0SsWMmqq3u8FA== dependencies: tslib "^2.3.0" @@ -301,64 +335,35 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" +"@babel/code-frame@^7.23.5": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== + dependencies: + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" + "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.6": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.5": +"@babel/compat-data@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== + "@babel/compat-data@^7.22.9": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== -"@babel/core@7.19.3": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.3.tgz#2519f62a51458f43b682d61583c3810e7dcee64c" - integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.3" - "@babel/helper-compilation-targets" "^7.19.3" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helpers" "^7.19.0" - "@babel/parser" "^7.19.3" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.3" - "@babel/types" "^7.19.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/core@7.20.12": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" - integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.12" - "@babel/types" "^7.20.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/core@^7.11.6": +"@babel/core@7.22.5", "@babel/core@^7.11.6": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== @@ -421,13 +426,14 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@7.20.14": - version "7.20.14" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" - integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== +"@babel/generator@7.22.7": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.7.tgz#a6b8152d5a621893f2c9dacf9a4e286d520633d5" + integrity sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ== dependencies: - "@babel/types" "^7.20.7" + "@babel/types" "^7.22.5" "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" "@babel/generator@^7.18.6", "@babel/generator@^7.7.2": @@ -439,7 +445,7 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" -"@babel/generator@^7.19.3", "@babel/generator@^7.20.7", "@babel/generator@^7.22.5": +"@babel/generator@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== @@ -469,20 +475,20 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@7.18.6", "@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-annotate-as-pure@^7.22.5": +"@babel/helper-annotate-as-pure@7.22.5", "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: "@babel/types" "^7.22.5" +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz#f14d640ed1ee9246fb33b8255f08353acfe70e6a" @@ -491,6 +497,13 @@ "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== + dependencies: + "@babel/types" "^7.22.15" + "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" @@ -501,7 +514,18 @@ browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.19.3", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.5": +"@babel/helper-compilation-targets@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== + 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" + +"@babel/helper-compilation-targets@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== @@ -512,14 +536,14 @@ lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" @@ -551,6 +575,21 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" +"@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz#c806f73788a6800a5cfbbc04d2df7ee4d927cce3" + integrity sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.24.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + "@babel/helper-create-regexp-features-plugin@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" @@ -559,6 +598,15 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.1.0" +"@babel/helper-create-regexp-features-plugin@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" + "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" @@ -582,17 +630,38 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== +"@babel/helper-define-polyfill-provider@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" + integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@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" + +"@babel/helper-define-polyfill-provider@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" + integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== + 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" + +"@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== + 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" - semver "^6.1.2" "@babel/helper-environment-visitor@^7.18.6": version "7.18.6" @@ -666,20 +735,13 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.22.15": +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" -"@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== - dependencies: - "@babel/types" "^7.22.5" - "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" @@ -694,6 +756,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.24.1": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== + dependencies: + "@babel/types" "^7.24.0" + "@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" @@ -715,7 +784,7 @@ "@babel/traverse" "^7.18.8" "@babel/types" "^7.18.8" -"@babel/helper-module-transforms@^7.19.0", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.22.5": +"@babel/helper-module-transforms@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== @@ -759,16 +828,16 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== -"@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" - integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== - -"@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5": +"@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== +"@babel/helper-plugin-utils@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== + "@babel/helper-remap-async-to-generator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz#fa1f81acd19daee9d73de297c0308783cd3cfc23" @@ -789,6 +858,15 @@ "@babel/helper-wrap-function" "^7.22.5" "@babel/types" "^7.22.5" +"@babel/helper-remap-async-to-generator@^7.22.20", "@babel/helper-remap-async-to-generator@^7.22.5": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" + "@babel/helper-replace-supers@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz#efedf51cfccea7b7b8c0f00002ab317e7abfe420" @@ -800,18 +878,6 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-replace-supers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" - integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - "@babel/helper-replace-supers@^7.22.9": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" @@ -821,6 +887,15 @@ "@babel/helper-member-expression-to-functions" "^7.22.15" "@babel/helper-optimise-call-expression" "^7.22.5" +"@babel/helper-replace-supers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" + integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-simple-access@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" @@ -842,13 +917,6 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" - integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== - dependencies: - "@babel/types" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" @@ -856,20 +924,20 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@7.18.6", "@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-split-export-declaration@^7.22.5": +"@babel/helper-split-export-declaration@7.22.5", "@babel/helper-split-export-declaration@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== dependencies: "@babel/types" "^7.22.5" +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" @@ -917,6 +985,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + "@babel/helper-wrap-function@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz#ec44ea4ad9d8988b90c3e465ba2382f4de81a073" @@ -927,6 +1000,15 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" + "@babel/helper-wrap-function@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" @@ -946,7 +1028,7 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helpers@^7.19.0", "@babel/helpers@^7.20.7", "@babel/helpers@^7.22.5": +"@babel/helpers@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== @@ -1000,16 +1082,21 @@ chalk "^2.4.2" js-tokens "^4.0.0" +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.8.tgz#822146080ac9c62dac0823bb3489622e0bc1cbdf" integrity sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA== -"@babel/parser@^7.19.3", "@babel/parser@^7.20.7", "@babel/parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" - integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== - "@babel/parser@^7.20.15": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" @@ -1020,11 +1107,21 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" + integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== + "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.4.tgz#409fbe690c333bb70187e2de4021e1e47a026661" integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== +"@babel/parser@^7.24.0", "@babel/parser@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" + integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" @@ -1032,6 +1129,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" + integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz#b4e4dbc2cd1acd0133479918f7c6412961c9adb8" @@ -1041,16 +1145,16 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" "@babel/plugin-proposal-optional-chaining" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" - integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" + integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.24.1" -"@babel/plugin-proposal-async-generator-functions@7.20.7", "@babel/plugin-proposal-async-generator-functions@^7.20.1": +"@babel/plugin-proposal-async-generator-functions@7.20.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== @@ -1114,14 +1218,6 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-proposal-json-strings@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" @@ -1138,14 +1234,6 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" - integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" @@ -1173,17 +1261,6 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.18.6" -"@babel/plugin-proposal-object-rest-spread@^7.20.2": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - "@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" @@ -1201,15 +1278,6 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" - integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-proposal-private-methods@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" @@ -1218,6 +1286,11 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + "@babel/plugin-proposal-private-property-in-object@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" @@ -1299,7 +1372,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-import-assertions@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz#db3aad724153a00eaac115a3fb898de544e34971" + integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" + integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -1404,6 +1491,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-arrow-functions@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" @@ -1411,14 +1506,31 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" - integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== +"@babel/plugin-transform-arrow-functions@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" + integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-async-generator-functions@^7.22.5": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" + integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" "@babel/plugin-transform-async-to-generator@^7.18.6": version "7.18.6" @@ -1429,6 +1541,15 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-remap-async-to-generator" "^7.18.6" +"@babel/plugin-transform-async-to-generator@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" + integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== + dependencies: + "@babel/helper-module-imports" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/plugin-transform-block-scoped-functions@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" @@ -1436,6 +1557,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-block-scoped-functions@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" + integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-transform-block-scoping@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz#b5f78318914615397d86a731ef2cc668796a726c" @@ -1443,12 +1571,29 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.20.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b" - integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== +"@babel/plugin-transform-block-scoping@^7.22.5": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz#28f5c010b66fbb8ccdeef853bef1935c434d7012" + integrity sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-class-properties@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" + integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-class-static-block@^7.22.5": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz#1a4653c0cf8ac46441ec406dece6e9bc590356a4" + integrity sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.4" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-transform-classes@^7.18.6": version "7.18.8" @@ -1464,19 +1609,18 @@ "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.20.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1" - integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== +"@babel/plugin-transform-classes@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" + integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" + "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.18.6": @@ -1486,13 +1630,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-computed-properties@^7.18.9": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" + integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/template" "^7.24.0" "@babel/plugin-transform-destructuring@^7.18.6": version "7.18.6" @@ -1501,12 +1645,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-destructuring@^7.20.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc" - integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== +"@babel/plugin-transform-destructuring@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" + integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" @@ -1516,6 +1660,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-dotall-regex@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" + integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-transform-duplicate-keys@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz#e6c94e8cd3c9dd8a88144f7b78ae22975a7ff473" @@ -1523,12 +1675,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" + integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-dynamic-import@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" + integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-transform-exponentiation-operator@^7.18.6": version "7.18.6" @@ -1538,6 +1698,22 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" + integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-export-namespace-from@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" + integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-transform-for-of@^7.18.6": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" @@ -1545,12 +1721,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-for-of@^7.18.8": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" - integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== +"@babel/plugin-transform-for-of@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" + integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-function-name@^7.18.6": version "7.18.6" @@ -1561,14 +1738,22 @@ "@babel/helper-function-name" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-function-name@^7.18.9": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" + integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-json-strings@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" + integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-transform-literals@^7.18.6": version "7.18.6" @@ -1577,12 +1762,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-literals@^7.18.9": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" + integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-logical-assignment-operators@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" + integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-transform-member-expression-literals@^7.18.6": version "7.18.6" @@ -1591,6 +1784,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-member-expression-literals@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" + integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-transform-modules-amd@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" @@ -1600,13 +1800,13 @@ "@babel/helper-plugin-utils" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-amd@^7.19.6": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== +"@babel/plugin-transform-modules-amd@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" + integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-modules-commonjs@^7.18.6": version "7.18.6" @@ -1618,13 +1818,13 @@ "@babel/helper-simple-access" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.19.6": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" - integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== +"@babel/plugin-transform-modules-commonjs@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" + integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-simple-access" "^7.22.5" "@babel/plugin-transform-modules-commonjs@^7.23.3": @@ -1647,15 +1847,15 @@ "@babel/helper-validator-identifier" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.19.6": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" - integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== +"@babel/plugin-transform-modules-systemjs@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" + integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-identifier" "^7.22.20" "@babel/plugin-transform-modules-umd@^7.18.6": version "7.18.6" @@ -1665,6 +1865,14 @@ "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-modules-umd@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" + integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" @@ -1673,7 +1881,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== @@ -1688,6 +1896,39 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-new-target@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" + integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" + integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" + integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" + integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== + dependencies: + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/plugin-transform-object-super@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" @@ -1696,6 +1937,22 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" +"@babel/plugin-transform-object-super@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" + integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" + +"@babel/plugin-transform-optional-catch-binding@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" + integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-transform-optional-chaining@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0" @@ -1705,6 +1962,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +"@babel/plugin-transform-optional-chaining@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" + integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-transform-parameters@^7.18.6": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" @@ -1712,12 +1978,30 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" - integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== +"@babel/plugin-transform-parameters@^7.22.5", "@babel/plugin-transform-parameters@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" + integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-private-methods@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" + integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-private-property-in-object@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" + integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-transform-property-literals@^7.18.6": version "7.18.6" @@ -1726,6 +2010,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-property-literals@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" + integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-transform-react-constant-elements@^7.14.5": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.6.tgz#e477693aad3e2aafe86b6db03748a30aef417a5e" @@ -1774,6 +2065,14 @@ "@babel/helper-plugin-utils" "^7.18.6" regenerator-transform "^0.15.0" +"@babel/plugin-transform-regenerator@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" + integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + regenerator-transform "^0.15.2" + "@babel/plugin-transform-reserved-words@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" @@ -1781,16 +2080,23 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz#9d2a9dbf4e12644d6f46e5e75bfbf02b5d6e9194" - integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw== +"@babel/plugin-transform-reserved-words@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" + integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-runtime@7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz#ca975fb5e260044473c8142e1b18b567d33c2a3b" + integrity sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" semver "^6.3.0" "@babel/plugin-transform-runtime@^7.15.0": @@ -1812,6 +2118,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-shorthand-properties@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" + integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-transform-spread@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz#82b080241965f1689f0a60ecc6f1f6575dbdb9d6" @@ -1820,12 +2133,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" -"@babel/plugin-transform-spread@^7.19.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" + integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-sticky-regex@^7.18.6": @@ -1835,6 +2148,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-sticky-regex@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" + integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-transform-template-literals@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz#b763f4dc9d11a7cce58cf9a490d82e80547db9c2" @@ -1842,12 +2162,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.18.9": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" + integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-typeof-symbol@^7.18.6": version "7.18.6" @@ -1856,12 +2176,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" + integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-typescript@^7.18.6": version "7.18.8" @@ -1882,13 +2202,6 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-typescript" "^7.23.3" -"@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c" - integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-transform-unicode-escapes@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" @@ -1896,6 +2209,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-unicode-escapes@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" + integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" + integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" @@ -1904,38 +2232,42 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506" - integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== +"@babel/plugin-transform-unicode-regex@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" + integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== dependencies: - "@babel/compat-data" "^7.20.1" - "@babel/helper-compilation-targets" "^7.20.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.20.1" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.20.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" + integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/preset-env@7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e" + integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A== + dependencies: + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" + "@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.20.0" + "@babel/plugin-syntax-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@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" @@ -1945,44 +2277,61 @@ "@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-transform-arrow-functions" "^7.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.20.2" - "@babel/plugin-transform-classes" "^7.20.2" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.20.2" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.19.6" - "@babel/plugin-transform-modules-commonjs" "^7.19.6" - "@babel/plugin-transform-modules-systemjs" "^7.19.6" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.20.1" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.19.0" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.5" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.5" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.5" + "@babel/plugin-transform-classes" "^7.22.5" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.5" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.5" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.5" + "@babel/plugin-transform-for-of" "^7.22.5" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.5" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-modules-systemjs" "^7.22.5" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" + "@babel/plugin-transform-numeric-separator" "^7.22.5" + "@babel/plugin-transform-object-rest-spread" "^7.22.5" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.5" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.5" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.5" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.20.2" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - core-js-compat "^3.25.1" + "@babel/types" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" + core-js-compat "^3.30.2" semver "^6.3.0" "@babel/preset-env@^7.15.0", "@babel/preset-env@^7.15.6": @@ -2122,10 +2471,10 @@ core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" -"@babel/runtime@7.20.13": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" - integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== +"@babel/runtime@7.22.5", "@babel/runtime@^7.18.9": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" + integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== dependencies: regenerator-runtime "^0.13.11" @@ -2136,12 +2485,12 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.18.9": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" - integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== +"@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" + integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== dependencies: - regenerator-runtime "^0.13.11" + regenerator-runtime "^0.14.0" "@babel/runtime@^7.9.2": version "7.18.9" @@ -2150,16 +2499,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.22.5": +"@babel/template@7.22.5", "@babel/template@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== @@ -2186,7 +2526,16 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.8", "@babel/traverse@^7.19.3", "@babel/traverse@^7.20.12", "@babel/traverse@^7.22.5", "@babel/traverse@^7.7.2": +"@babel/template@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.5", "@babel/traverse@^7.7.2": version "7.23.2" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== @@ -2226,15 +2575,25 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" -"@babel/types@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" - integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== +"@babel/types@^7.22.15", "@babel/types@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" + integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== dependencies: - "@babel/helper-validator-identifier" "^7.18.6" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@babel/types@^7.22.19", "@babel/types@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" -"@babel/types@^7.19.3", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.22.5": +"@babel/types@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== @@ -2243,15 +2602,6 @@ "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" -"@babel/types@^7.22.15", "@babel/types@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - "@babel/types@^7.23.3", "@babel/types@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.4.tgz#7206a1810fc512a7f7f7d4dace4cb4c1c9dbfb8e" @@ -2278,6 +2628,21 @@ dependencies: "@chainsafe/is-ip" "^2.0.1" +"@coinbase/wallet-sdk@3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.9.1.tgz#503a14671bb392d653623ef2340934e213ac971f" + integrity sha512-cGUE8wm1/cMI8irRMVOqbFWYcnNugqCtuy2lnnHfgloBg+GRLs9RsrkOUDMdv/StfUeeKhCDyYudsXXvcL1xIA== + dependencies: + bn.js "^5.2.1" + buffer "^6.0.3" + clsx "^1.2.1" + eth-block-tracker "^7.1.0" + eth-json-rpc-filters "^6.0.0" + eventemitter3 "^5.0.1" + keccak "^3.0.3" + preact "^10.16.0" + sha.js "^2.4.11" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -2322,120 +2687,227 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@discoveryjs/json-ext@0.5.7": +"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@esbuild/android-arm64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.8.tgz#b3d5b65a3b2e073a6c7ee36b1f3c30c8f000315b" - integrity sha512-oa/N5j6v1svZQs7EIRPqR8f+Bf8g6HBDjD/xHC02radE/NjKHK7oQmtmLxPs1iVwYyvE+Kolo6lbpfEQ9xnhxQ== - -"@esbuild/android-arm@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.8.tgz#c41e496af541e175369d48164d0cf01a5f656cf6" - integrity sha512-0/rb91GYKhrtbeglJXOhAv9RuYimgI8h623TplY2X+vA4EXnk3Zj1fXZreJ0J3OJJu1bwmb0W7g+2cT/d8/l/w== - -"@esbuild/android-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.8.tgz#080fa67c29be77f5a3ca5ee4cc78d5bf927e3a3b" - integrity sha512-bTliMLqD7pTOoPg4zZkXqCDuzIUguEWLpeqkNfC41ODBHwoUgZ2w5JBeYimv4oP6TDVocoYmEhZrCLQTrH89bg== - -"@esbuild/darwin-arm64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.8.tgz#053622bf9a82f43d5c075b7818e02618f7b4a397" - integrity sha512-ghAbV3ia2zybEefXRRm7+lx8J/rnupZT0gp9CaGy/3iolEXkJ6LYRq4IpQVI9zR97ID80KJVoUlo3LSeA/sMAg== - -"@esbuild/darwin-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.8.tgz#8a1aadb358d537d8efad817bb1a5bff91b84734b" - integrity sha512-n5WOpyvZ9TIdv2V1K3/iIkkJeKmUpKaCTdun9buhGRWfH//osmUjlv4Z5mmWdPWind/VGcVxTHtLfLCOohsOXw== - -"@esbuild/freebsd-arm64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.8.tgz#e6738d0081ba0721a5c6c674e84c6e7fcea61989" - integrity sha512-a/SATTaOhPIPFWvHZDoZYgxaZRVHn0/LX1fHLGfZ6C13JqFUZ3K6SMD6/HCtwOQ8HnsNaEeokdiDSFLuizqv5A== - -"@esbuild/freebsd-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.8.tgz#1855e562f2b730f4483f6e94086e9e2597feb4c3" - integrity sha512-xpFJb08dfXr5+rZc4E+ooZmayBW6R3q59daCpKZ/cDU96/kvDM+vkYzNeTJCGd8rtO6fHWMq5Rcv/1cY6p6/0Q== - -"@esbuild/linux-arm64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.8.tgz#481da38952721a3fdb77c17a36ceaacc4270b5c5" - integrity sha512-v3iwDQuDljLTxpsqQDl3fl/yihjPAyOguxuloON9kFHYwopeJEf1BkDXODzYyXEI19gisEsQlG1bM65YqKSIww== - -"@esbuild/linux-arm@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.8.tgz#18127072b270bb6321c6d11be20bfd30e0d6ad17" - integrity sha512-6Ij8gfuGszcEwZpi5jQIJCVIACLS8Tz2chnEBfYjlmMzVsfqBP1iGmHQPp7JSnZg5xxK9tjCc+pJ2WtAmPRFVA== - -"@esbuild/linux-ia32@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.8.tgz#ee400af7b3bc69e8ca2e593ca35156ffb9abd54f" - integrity sha512-8svILYKhE5XetuFk/B6raFYIyIqydQi+GngEXJgdPdI7OMKUbSd7uzR02wSY4kb53xBrClLkhH4Xs8P61Q2BaA== - -"@esbuild/linux-loong64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.8.tgz#8c509d8a454693d39824b83b3f66c400872fce82" - integrity sha512-B6FyMeRJeV0NpyEOYlm5qtQfxbdlgmiGdD+QsipzKfFky0K5HW5Td6dyK3L3ypu1eY4kOmo7wW0o94SBqlqBSA== - -"@esbuild/linux-mips64el@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.8.tgz#f2b0d36e63fb26bc3f95b203b6a80638292101ca" - integrity sha512-CCb67RKahNobjm/eeEqeD/oJfJlrWyw29fgiyB6vcgyq97YAf3gCOuP6qMShYSPXgnlZe/i4a8WFHBw6N8bYAA== - -"@esbuild/linux-ppc64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.8.tgz#1e628be003e036e90423716028cc884fe5ba25bd" - integrity sha512-bytLJOi55y55+mGSdgwZ5qBm0K9WOCh0rx+vavVPx+gqLLhxtSFU0XbeYy/dsAAD6xECGEv4IQeFILaSS2auXw== - -"@esbuild/linux-riscv64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.8.tgz#419a815cb4c3fb9f1b78ef5295f5b48b8bf6427a" - integrity sha512-2YpRyQJmKVBEHSBLa8kBAtbhucaclb6ex4wchfY0Tj3Kg39kpjeJ9vhRU7x4mUpq8ISLXRXH1L0dBYjAeqzZAw== - -"@esbuild/linux-s390x@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.8.tgz#291c49ae5c3d11d226352755c0835911fe1a9e5c" - integrity sha512-QgbNY/V3IFXvNf11SS6exkpVcX0LJcob+0RWCgV9OiDAmVElnxciHIisoSix9uzYzScPmS6dJFbZULdSAEkQVw== - -"@esbuild/linux-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.8.tgz#03199d91c76faf80bd54104f5cbf0a489bc39f6a" - integrity sha512-mM/9S0SbAFDBc4OPoyP6SEOo5324LpUxdpeIUUSrSTOfhHU9hEfqRngmKgqILqwx/0DVJBzeNW7HmLEWp9vcOA== - -"@esbuild/netbsd-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.8.tgz#b436d767e1b21852f9ed212e2bb57f77203b0ae2" - integrity sha512-eKUYcWaWTaYr9zbj8GertdVtlt1DTS1gNBWov+iQfWuWyuu59YN6gSEJvFzC5ESJ4kMcKR0uqWThKUn5o8We6Q== - -"@esbuild/openbsd-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.8.tgz#d1481d8539e21d4729cd04a0450a26c2c8789e89" - integrity sha512-Vc9J4dXOboDyMXKD0eCeW0SIeEzr8K9oTHJU+Ci1mZc5njPfhKAqkRt3B/fUNU7dP+mRyralPu8QUkiaQn7iIg== - -"@esbuild/sunos-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.8.tgz#2cfb8126e079b2c00fd1bf095541e9f5c47877e4" - integrity sha512-0xvOTNuPXI7ft1LYUgiaXtpCEjp90RuBBYovdd2lqAFxje4sEucurg30M1WIm03+3jxByd3mfo+VUmPtRSVuOw== - -"@esbuild/win32-arm64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.8.tgz#7c6ecfd097ca23b82119753bf7072bbaefe51e3a" - integrity sha512-G0JQwUI5WdEFEnYNKzklxtBheCPkuDdu1YrtRrjuQv30WsYbkkoixKxLLv8qhJmNI+ATEWquZe/N0d0rpr55Mg== - -"@esbuild/win32-ia32@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.8.tgz#cffec63c3cb0ef8563a04df4e09fa71056171d00" - integrity sha512-Fqy63515xl20OHGFykjJsMnoIWS+38fqfg88ClvPXyDbLtgXal2DTlhb1TfTX34qWi3u4I7Cq563QcHpqgLx8w== - -"@esbuild/win32-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.8.tgz#200a0965cf654ac28b971358ecdca9cc5b44c335" - integrity sha512-1iuezdyDNngPnz8rLRDO2C/ZZ/emJLb72OsZeqQ6gL6Avko/XCXZw+NuxBSNhBAP13Hie418V7VMt9et1FMvpg== +"@emotion/babel-plugin@^11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" + integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/serialize" "^1.1.2" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.2.0" + +"@emotion/cache@^11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" + integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== + dependencies: + "@emotion/memoize" "^0.8.1" + "@emotion/sheet" "^1.2.2" + "@emotion/utils" "^1.2.1" + "@emotion/weak-memoize" "^0.3.1" + stylis "4.2.0" + +"@emotion/hash@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" + integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== + +"@emotion/is-prop-valid@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337" + integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== + dependencies: + "@emotion/memoize" "^0.8.1" + +"@emotion/memoize@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" + integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== + +"@emotion/react@^11.10.6": + version "11.11.4" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.4.tgz#3a829cac25c1f00e126408fab7f891f00ecc3c1d" + integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.11.0" + "@emotion/cache" "^11.11.0" + "@emotion/serialize" "^1.1.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" + "@emotion/utils" "^1.2.1" + "@emotion/weak-memoize" "^0.3.1" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3", "@emotion/serialize@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.4.tgz#fc8f6d80c492cfa08801d544a05331d1cc7cd451" + integrity sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ== + dependencies: + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/unitless" "^0.8.1" + "@emotion/utils" "^1.2.1" + csstype "^3.0.2" + +"@emotion/sheet@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" + integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== + +"@emotion/styled@^11.10.6": + version "11.11.5" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.5.tgz#0c5c8febef9d86e8a926e663b2e5488705545dfb" + integrity sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.11.0" + "@emotion/is-prop-valid" "^1.2.2" + "@emotion/serialize" "^1.1.4" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" + "@emotion/utils" "^1.2.1" + +"@emotion/unitless@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" + integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== + +"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" + integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== + +"@emotion/utils@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" + integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== + +"@emotion/weak-memoize@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" + integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== + +"@esbuild/android-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" + integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== + +"@esbuild/android-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" + integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== + +"@esbuild/android-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" + integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== + +"@esbuild/darwin-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" + integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== + +"@esbuild/darwin-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" + integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== + +"@esbuild/freebsd-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" + integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== + +"@esbuild/freebsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" + integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== + +"@esbuild/linux-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" + integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== + +"@esbuild/linux-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" + integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== + +"@esbuild/linux-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" + integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== + +"@esbuild/linux-loong64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" + integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== + +"@esbuild/linux-mips64el@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" + integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== + +"@esbuild/linux-ppc64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" + integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== + +"@esbuild/linux-riscv64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" + integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== + +"@esbuild/linux-s390x@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" + integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== + +"@esbuild/linux-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" + integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== + +"@esbuild/netbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" + integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== + +"@esbuild/openbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" + integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== + +"@esbuild/sunos-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" + integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== + +"@esbuild/win32-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" + integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== + +"@esbuild/win32-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" + integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== + +"@esbuild/win32-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" + integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" @@ -2464,6 +2936,38 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@ethereumjs/common@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-3.2.0.tgz#b71df25845caf5456449163012074a55f048e0a0" + integrity sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA== + dependencies: + "@ethereumjs/util" "^8.1.0" + crc-32 "^1.2.0" + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/tx@^4.1.2", "@ethereumjs/tx@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-4.2.0.tgz#5988ae15daf5a3b3c815493bc6b495e76009e853" + integrity sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw== + dependencies: + "@ethereumjs/common" "^3.2.0" + "@ethereumjs/rlp" "^4.0.1" + "@ethereumjs/util" "^8.1.0" + ethereum-cryptography "^2.0.0" + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -2816,7 +3320,7 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@here-wallet/core@^1.6.6": +"@here-wallet/core@^1.5.1": version "1.6.6" resolved "https://registry.yarnpkg.com/@here-wallet/core/-/core-1.6.6.tgz#db31fcd048c4977da3bc6923fcf25113a32b5a49" integrity sha512-avh/PRNl3CbgrcbqIezVrNPAa4fqKvonl/mguSoUAfTwfA5jWnfq81Udd8QzOAIzBIGx5gSabzEkh9CRDH7yDA== @@ -3071,6 +3575,13 @@ dependencies: "@sinclair/typebox" "^0.25.16" +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + "@jest/source-map@^29.4.3": version "29.4.3" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" @@ -3145,6 +3656,18 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" @@ -3167,19 +3690,16 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@jridgewell/source-map@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" @@ -3193,7 +3713,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": +"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -3214,7 +3734,15 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@^0.3.9": version "0.3.14" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== @@ -3415,6 +3943,11 @@ resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz#64df34e2f12e68e78ac57e571d25ec07fa460ca9" integrity sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ== +"@lit-labs/ssr-dom-shim@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz#353ce4a76c83fadec272ea5674ede767650762fd" + integrity sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g== + "@lit/reactive-element@^1.3.0", "@lit/reactive-element@^1.6.0": version "1.6.2" resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.6.2.tgz#c256690f82f2d7d0ffb0b1cdf68dcb1ec86cea28" @@ -3422,6 +3955,13 @@ dependencies: "@lit-labs/ssr-dom-shim" "^1.0.0" +"@lit/reactive-element@^2.0.0", "@lit/reactive-element@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-2.0.4.tgz#8f2ed950a848016383894a26180ff06c56ae001b" + integrity sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ== + dependencies: + "@lit-labs/ssr-dom-shim" "^1.2.0" + "@lmdb/lmdb-darwin-arm64@2.8.5": version "2.8.5" resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.8.5.tgz#895d8cb16a9d709ce5fedd8b60022903b875e08e" @@ -3452,10 +3992,172 @@ resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.8.5.tgz#8233e8762440b0f4632c47a09b1b6f23de8b934c" integrity sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ== -"@metamask/detect-provider@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@metamask/detect-provider/-/detect-provider-2.0.0.tgz#4bc2795e5e6f7d8b84b2e845058d2f222c99917d" - integrity sha512-sFpN+TX13E9fdBDh9lvQeZdJn4qYoRb/6QF2oZZK/Pn559IhCFacPMU1rMuqyXoFQF3JSJfii2l98B87QDPeCQ== +"@metamask/detect-provider@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@metamask/detect-provider/-/detect-provider-2.0.0.tgz#4bc2795e5e6f7d8b84b2e845058d2f222c99917d" + integrity sha512-sFpN+TX13E9fdBDh9lvQeZdJn4qYoRb/6QF2oZZK/Pn559IhCFacPMU1rMuqyXoFQF3JSJfii2l98B87QDPeCQ== + +"@metamask/eth-json-rpc-provider@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-provider/-/eth-json-rpc-provider-1.0.1.tgz#3fd5316c767847f4ca107518b611b15396a5a32c" + integrity sha512-whiUMPlAOrVGmX8aKYVPvlKyG4CpQXiNNyt74vE1xb5sPvmx5oA7B/kOi/JdBvhGQq97U1/AVdXEdk2zkP8qyA== + dependencies: + "@metamask/json-rpc-engine" "^7.0.0" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^5.0.1" + +"@metamask/json-rpc-engine@^7.0.0": + version "7.3.3" + resolved "https://registry.yarnpkg.com/@metamask/json-rpc-engine/-/json-rpc-engine-7.3.3.tgz#f2b30a2164558014bfcca45db10f5af291d989af" + integrity sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg== + dependencies: + "@metamask/rpc-errors" "^6.2.1" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^8.3.0" + +"@metamask/object-multiplex@^1.1.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@metamask/object-multiplex/-/object-multiplex-1.3.0.tgz#459de4862aa5a5a025dabceadda0ffd553ca4b25" + integrity sha512-czcQeVYdSNtabd+NcYQnrM69MciiJyd1qvKH8WM2Id3C0ZiUUX5Xa/MK+/VUk633DBhVOwdNzAKIQ33lGyA+eQ== + dependencies: + end-of-stream "^1.4.4" + once "^1.4.0" + readable-stream "^2.3.3" + +"@metamask/onboarding@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@metamask/onboarding/-/onboarding-1.0.1.tgz#14a36e1e175e2f69f09598e2008ab6dc1b3297e6" + integrity sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ== + dependencies: + bowser "^2.9.0" + +"@metamask/post-message-stream@^6.1.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@metamask/post-message-stream/-/post-message-stream-6.2.0.tgz#3db0a50adc2b2206d1bb95739e7fff49e36e0324" + integrity sha512-WunZ0bruClF862mvbKQGETn5SM0XKGmocPMQR1Ew6sYix9/FDzeoZnoI8RkXk01E+70FCdxhTE/r8kk5SFOuTw== + dependencies: + "@metamask/utils" "^5.0.0" + readable-stream "2.3.3" + +"@metamask/providers@^10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@metamask/providers/-/providers-10.2.1.tgz#61304940adeccc7421dcda30ffd1d834273cc77b" + integrity sha512-p2TXw2a1Nb8czntDGfeIYQnk4LLVbd5vlcb3GY//lylYlKdSqp+uUTegCvxiFblRDOT68jsY8Ib1VEEzVUOolA== + 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" + +"@metamask/rpc-errors@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@metamask/rpc-errors/-/rpc-errors-6.2.1.tgz#f5daf429ededa7cb83069dc621bd5738fe2a1d80" + integrity sha512-VTgWkjWLzb0nupkFl1duQi9Mk8TGT9rsdnQg6DeRrYEFxtFOh0IF8nAwxM/4GWqDl6uIB06lqUBgUrAVWl62Bw== + dependencies: + "@metamask/utils" "^8.3.0" + fast-safe-stringify "^2.0.6" + +"@metamask/safe-event-emitter@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" + integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== + +"@metamask/safe-event-emitter@^3.0.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.1.tgz#e89b840a7af8097a8ed4953d8dc8470d1302d3ef" + integrity sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw== + +"@metamask/sdk-communication-layer@0.14.3": + version "0.14.3" + resolved "https://registry.yarnpkg.com/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.14.3.tgz#0e7ec8e472641273da5802f3b357687ce12369c3" + integrity sha512-yjSbj8y7fFbQXv2HBzUX6D9C8BimkCYP6BDV7hdw53W8b/GlYCtXVxUFajQ9tuO1xPTRjR/xt/dkdr2aCi6WGw== + dependencies: + bufferutil "^4.0.8" + cross-fetch "^3.1.5" + date-fns "^2.29.3" + eciesjs "^0.3.16" + eventemitter2 "^6.4.5" + socket.io-client "^4.5.1" + utf-8-validate "^6.0.3" + uuid "^8.3.2" + +"@metamask/sdk-install-modal-web@0.14.1": + version "0.14.1" + resolved "https://registry.yarnpkg.com/@metamask/sdk-install-modal-web/-/sdk-install-modal-web-0.14.1.tgz#c8e64b4f7d2dac262c2ec28025c541b258478c31" + integrity sha512-emT8HKbnfVwGhPxyUfMja6DWzvtJvDEBQxqCVx93H0HsyrrOzOC43iGCAosslw6o5h7gOfRKLqWmK8V7jQAS2Q== + dependencies: + "@emotion/react" "^11.10.6" + "@emotion/styled" "^11.10.6" + i18next "22.5.1" + qr-code-styling "^1.6.0-rc.1" + react "^18.2.0" + react-dom "^18.2.0" + react-i18next "^13.2.2" + +"@metamask/sdk@0.14.3": + version "0.14.3" + resolved "https://registry.yarnpkg.com/@metamask/sdk/-/sdk-0.14.3.tgz#ec1ecf00edef981fd17e2c5cf4ec40ce0a43a55c" + integrity sha512-BYLs//nY2wioVSih78gOQI6sLIYY3vWkwVqXGYUgkBV+bi49bv+9S0m+hZ2cwiRaxfMYtKs0KvhAQ8weiYwDrg== + dependencies: + "@metamask/onboarding" "^1.0.1" + "@metamask/post-message-stream" "^6.1.0" + "@metamask/providers" "^10.2.1" + "@metamask/sdk-communication-layer" "0.14.3" + "@metamask/sdk-install-modal-web" "0.14.1" + "@react-native-async-storage/async-storage" "^1.17.11" + "@types/dom-screen-wake-lock" "^1.0.0" + bowser "^2.9.0" + cross-fetch "^4.0.0" + eciesjs "^0.3.15" + eth-rpc-errors "^4.0.3" + eventemitter2 "^6.4.7" + extension-port-stream "^2.0.1" + i18next "22.5.1" + i18next-browser-languagedetector "^7.1.0" + obj-multiplex "^1.0.0" + pump "^3.0.0" + qrcode-terminal-nooctal "^0.12.1" + react-i18next "^13.2.2" + react-native-webview "^11.26.0" + readable-stream "^2.3.7" + rollup-plugin-visualizer "^5.9.2" + socket.io-client "^4.5.1" + util "^0.12.4" + uuid "^8.3.2" + +"@metamask/utils@^5.0.0", "@metamask/utils@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-5.0.2.tgz#140ba5061d90d9dac0280c19cab101bc18c8857c" + integrity sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g== + dependencies: + "@ethereumjs/tx" "^4.1.2" + "@types/debug" "^4.1.7" + debug "^4.3.4" + semver "^7.3.8" + superstruct "^1.0.3" + +"@metamask/utils@^8.3.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-8.4.0.tgz#f44812c96467a4e1b70b2edff6ee89a9caa4e354" + integrity sha512-dbIc3C7alOe0agCuBHM1h71UaEaEqOk2W8rAtEn8QGz4haH2Qq7MoK6i7v2guzvkJVVh79c+QCzIqphC3KvrJg== + 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" + uuid "^9.0.1" "@meteorwallet/sdk@^1.0.9": version "1.0.9" @@ -3466,7 +4168,7 @@ nanoid "3.3.6" query-string "^7.1.3" -"@mintbase-js/wallet@^0.6.0-beta.3": +"@mintbase-js/wallet@0.6.0-beta.3": version "0.6.0-beta.3" resolved "https://registry.yarnpkg.com/@mintbase-js/wallet/-/wallet-0.6.0-beta.3.tgz#31ee107f2cf888fa120e8ca07f47e5dcd278ca26" integrity sha512-fzkqS3LDnSHB4YG0ync8JRuv+xQlMOzcu0btpAN8SC1hZNGUak0BTXBiNxKZQTeuH/DL+6ghh+t9VzJknOorhA== @@ -4046,28 +4748,40 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.3.0.tgz#db7b55fee834dc8c2c484c696469e65bae2ee770" integrity sha512-Reer6rkLLcoOvB0dd66+Y7WrWVFH7sEEkF/4bJCIfsSKnTStTYaHtwIJAwbqnt9I392Tqvku0KkoqZOryWV9LQ== -"@ngtools/webpack@15.2.8": - version "15.2.8" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-15.2.8.tgz#df8fb9300ccf94cab8f8ad69fb16fd31181e6c82" - integrity sha512-BJexeT4FxMtToVBGa3wdl6rrkYXgilP0kkSH4Qzu4MPlLPbeBSr4XQalQriewlpC2uzG0r2SJfrAe2eDhtSykA== +"@ngtools/webpack@16.1.8": + version "16.1.8" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-16.1.8.tgz#61e12e4a70101333c9689755c8d47673ca987bfc" + integrity sha512-co2SC1a822655Ek2f6fkMFsswHeCm2obNceb0kftLSpqomCgPAC3T447pB3TE1Iw+BEMFdjrAgIrp3nyYWwHsQ== -"@noble/curves@1.2.0": +"@noble/curves@1.2.0", "@noble/curves@~1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== dependencies: "@noble/hashes" "1.3.2" +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" + "@noble/hashes@1.3.2": version "1.3.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== -"@noble/hashes@1.3.3": +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": version "1.3.3" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== +"@noble/hashes@^1.3.1": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -4317,12 +5031,12 @@ read-package-json-fast "^3.0.0" which "^3.0.0" -"@nrwl/angular@16.0.0": - version "16.0.0" - resolved "https://registry.yarnpkg.com/@nrwl/angular/-/angular-16.0.0.tgz#e2ec2f88d3bc598c2d765d6814368ead8882094b" - integrity sha512-BeiWfhzJ5LAwLkmbMqOdee/k8uMgwQAqDfbYsOmBvy8+LBbXqdevzkANGZGAlYO7iWZnjjsvNPBictKFtA2dcg== +"@nrwl/angular@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/angular/-/angular-16.4.0.tgz#0dd09df96818138a031bd5c0bde3937914f9c4d5" + integrity sha512-PaQGjyavkT6lBhvj2etuyVocLtH8DF2b50uMHsBYJCI6fIIGmeTxGIzeNoJB03ybfk5DWTL5J5h0axls3HLS0Q== dependencies: - "@nx/angular" "16.0.0" + "@nx/angular" "16.4.0" tslib "^2.3.0" "@nrwl/cypress@16.0.0": @@ -4332,6 +5046,13 @@ dependencies: "@nx/cypress" "16.0.0" +"@nrwl/cypress@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-16.4.0.tgz#0f13c7e79a55f70e33e9af8553256a20a7c617d4" + integrity sha512-3xkbwfFF8RUKcXY39Mj7Eu8QIqkW3i+tDTibMLltNaOTqS58FPRU0j/VbwWJEsKjDF0HSCqH+t0ApjZD3fHmdw== + dependencies: + "@nx/cypress" "16.4.0" + "@nrwl/devkit@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-16.0.0.tgz#b816891053e5efa3e2b51f3dfa285e8c9b78bb93" @@ -4339,6 +5060,13 @@ dependencies: "@nx/devkit" "16.0.0" +"@nrwl/devkit@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-16.4.0.tgz#0bd16834e09d1b01fadf5c68fd19410893e61ac8" + integrity sha512-KUu9oNrMB8DP78BAO8XWJC5HOSS6dO6ocMWj2DtuNVgMgABviy+ih/TmrGKxQQBH0Ib4cxTeMIQVRdAak5c1UA== + dependencies: + "@nx/devkit" "16.4.0" + "@nrwl/eslint-plugin-nx@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-16.0.0.tgz#efc9ab2c98e8772aa8fa7d78a4a7d0d57d253cf9" @@ -4353,6 +5081,13 @@ dependencies: "@nx/jest" "16.0.0" +"@nrwl/jest@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-16.4.0.tgz#c3bbbc6261f9f270ec5aa7d6646fa34ce4b9b82d" + integrity sha512-/UlZNC/e80p0X5fKkc5yeaG8b4sYwQLtUsjy+ZZF403cx2gwWLbcGTXmuPbkR4377j8nyKdyFwNXqYureGwg3Q== + dependencies: + "@nx/jest" "16.4.0" + "@nrwl/js@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-16.0.0.tgz#2a35ec659709719fa9d6e0e948bc0997e8ee0404" @@ -4360,6 +5095,13 @@ dependencies: "@nx/js" "16.0.0" +"@nrwl/js@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-16.4.0.tgz#6fc3bfec273a7a016ebff864cd28c3e5ffeb6249" + integrity sha512-8q7uOoPWVDKxTb4Vveo2aS1ULRhE+NTQfcXRsDUINKUaIHN60dkinpcuBJHQqKdeXgi/5kIM4ht9vJ7ctQ0tCw== + dependencies: + "@nx/js" "16.4.0" + "@nrwl/linter@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-16.0.0.tgz#dd530c6aac9677712d1444a6e529c0b6b2a525e3" @@ -4367,6 +5109,13 @@ dependencies: "@nx/linter" "16.0.0" +"@nrwl/linter@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-16.4.0.tgz#2ee42d24a4cc287e0b1d338499aa15ccb86ef0a9" + integrity sha512-Difx1XkTmeTRg+EhU5JCAMeL3gZotVFvhUvQ6Vevmk6Xuj5Pp5LAGAxTj3P2O3A60UTb28ANPtjqD/DztJDTfA== + dependencies: + "@nx/linter" "16.4.0" + "@nrwl/next@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nrwl/next/-/next-16.0.0.tgz#887db3a2c99758a857278a77b5e2b9a804e3ab96" @@ -4402,6 +5151,13 @@ dependencies: nx "16.0.0" +"@nrwl/tao@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-16.4.0.tgz#81a844c8c707ff747b26ea7d23f6bed005b72967" + integrity sha512-6n4chOOv6jqact07NvIDRQfsnaiYYhi+mrqSuJKs6fL+c5kx/VCryndTP0MDTBbazfL6H7vwiQUkTja2sQDuwA== + dependencies: + nx "16.4.0" + "@nrwl/web@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-16.0.0.tgz#98e6aca8e336243c2369a4afd316ec120cf4a899" @@ -4416,6 +5172,13 @@ dependencies: "@nx/webpack" "16.0.0" +"@nrwl/webpack@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/webpack/-/webpack-16.4.0.tgz#243d90ffdc53f1eff21b11f4180636b4e501162e" + integrity sha512-Y/55xACx/SZb544+hnCptH7UaK8ApggMkwjvc/4z+FYw7QmKwa2Yu2o6LEqSXZ3P+erRLInfj0CnFPiI5QjwLg== + dependencies: + "@nx/webpack" "16.4.0" + "@nrwl/workspace@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-16.0.0.tgz#375063f905157af6e9af39c12ea4b018e7a99533" @@ -4423,20 +5186,28 @@ dependencies: "@nx/workspace" "16.0.0" -"@nx/angular@16.0.0": - version "16.0.0" - resolved "https://registry.yarnpkg.com/@nx/angular/-/angular-16.0.0.tgz#055e7d6e2fa706cd388ac308739e0199ea4e746f" - integrity sha512-lCx2e7bB+vvxphKdatku2aPJ2wM8NI+AzhNei5243tL18yoN1tdcLB/OL/lRzknQ57Oi8nyFsHhnjsLrBdnsEw== - dependencies: - "@nrwl/angular" "16.0.0" - "@nx/cypress" "16.0.0" - "@nx/devkit" "16.0.0" - "@nx/jest" "16.0.0" - "@nx/js" "16.0.0" - "@nx/linter" "16.0.0" - "@nx/webpack" "16.0.0" - "@nx/workspace" "16.0.0" +"@nrwl/workspace@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-16.4.0.tgz#804323380bff63fb53d1964321227d7c5155286f" + integrity sha512-iu2GgzoEQYn7IzJe2m69YqftajFJpce5jcE5d6OV2Idgq228Lb0j7aCw4W4fK7bsCeqZGhVGpiBjE+Cyw1GxGw== + dependencies: + "@nx/workspace" "16.4.0" + +"@nx/angular@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/angular/-/angular-16.4.0.tgz#269f8d96838a660ad7d9b8875edffdc7a2af14e2" + integrity sha512-ovlkafPNr/TLgQvD7wvCm+X1U6lVlE8jwRNnJhEol4q0gFGaa6J4CtNSuCAd9IqWbCQir+raKtlhxr/TL7eviw== + dependencies: + "@nrwl/angular" "16.4.0" + "@nx/cypress" "16.4.0" + "@nx/devkit" "16.4.0" + "@nx/jest" "16.4.0" + "@nx/js" "16.4.0" + "@nx/linter" "16.4.0" + "@nx/webpack" "16.4.0" + "@nx/workspace" "16.4.0" "@phenomnomnominal/tsquery" "~5.0.1" + "@typescript-eslint/type-utils" "^5.36.1" chalk "^4.1.0" chokidar "^3.5.1" enquirer "^2.3.6" @@ -4444,11 +5215,11 @@ ignore "^5.0.4" magic-string "~0.26.2" minimatch "3.0.5" - semver "7.3.4" + semver "7.5.3" ts-node "10.9.1" tsconfig-paths "^4.1.2" tslib "^2.3.0" - webpack "^5.75.0" + webpack "^5.80.0" webpack-merge "5.7.3" "@nx/cypress@16.0.0": @@ -4465,6 +5236,20 @@ dotenv "~10.0.0" semver "7.3.4" +"@nx/cypress@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/cypress/-/cypress-16.4.0.tgz#4ee6273ebe4c390b8392f6f8a778fcfd3f2e9dab" + integrity sha512-B0IouuC22atN+qucr8AVbyJZ0OgGkrHTLqoF6E6NNQOX5fHkcEGLwsFfRkkCa+QV/HuB+Vs9BQRQyqpb+G3Ogw== + dependencies: + "@nrwl/cypress" "16.4.0" + "@nx/devkit" "16.4.0" + "@nx/js" "16.4.0" + "@nx/linter" "16.4.0" + "@phenomnomnominal/tsquery" "~5.0.1" + detect-port "^1.5.1" + dotenv "~10.0.0" + semver "7.5.3" + "@nx/devkit@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-16.0.0.tgz#ef06e0b713d542defe9c5e0021b4bbab559dd963" @@ -4477,6 +5262,18 @@ tmp "~0.2.1" tslib "^2.3.0" +"@nx/devkit@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-16.4.0.tgz#e8e5d6c6e4f6964387d418a4b48588528a021517" + integrity sha512-/Y+tC2IBxVEf3EKB80G9mF27ZBAFEBBmDMn1MPzfGX9AB2GGNCqgvSkSHT5DlkyxJOMqbE7DpMyHxubALyenEA== + dependencies: + "@nrwl/devkit" "16.4.0" + ejs "^3.1.7" + ignore "^5.0.4" + semver "7.5.3" + tmp "~0.2.1" + tslib "^2.3.0" + "@nx/eslint-plugin@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/eslint-plugin/-/eslint-plugin-16.0.0.tgz#7c5149cc5060cfe73a00d02a76237ceef99a7bfc" @@ -4510,6 +5307,26 @@ resolve.exports "1.1.0" tslib "^2.3.0" +"@nx/jest@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/jest/-/jest-16.4.0.tgz#a47926f74e10ecfc120b0743804e68c3360c0689" + integrity sha512-ns2l3ww1ppGRVw5ngW6GWzTeouDqtfzO2ZjixZ8mq46IDHrMeuBrS1W5L6C1gWtKo3HDdlnaWcDj6RZtUw5UPA== + dependencies: + "@jest/reporters" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@nrwl/jest" "16.4.0" + "@nx/devkit" "16.4.0" + "@nx/js" "16.4.0" + "@phenomnomnominal/tsquery" "~5.0.1" + chalk "^4.1.0" + dotenv "~10.0.0" + identity-obj-proxy "3.0.0" + jest-config "^29.4.1" + jest-resolve "^29.4.1" + jest-util "^29.4.1" + resolve.exports "1.1.0" + tslib "^2.3.0" + "@nx/js@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/js/-/js-16.0.0.tgz#8c9bbd01152ce0df46a1f15157d1c5e41ebb56fa" @@ -4539,6 +5356,36 @@ tree-kill "1.2.2" tslib "^2.3.0" +"@nx/js@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/js/-/js-16.4.0.tgz#bc3f075a05d58a1533f8fc2daf48265d9d4ef219" + integrity sha512-yIxVv4B2DF4XFgkZ1UvUiXtk9o62wTRc0MzScgnoeqir/J9do+YR9pCIDVQEThBOROKdIFjlhQ/CEz5JhiRLEQ== + dependencies: + "@babel/core" "^7.15.0" + "@babel/plugin-proposal-class-properties" "^7.14.5" + "@babel/plugin-proposal-decorators" "^7.14.5" + "@babel/plugin-transform-runtime" "^7.15.0" + "@babel/preset-env" "^7.15.0" + "@babel/preset-typescript" "^7.15.0" + "@babel/runtime" "^7.14.8" + "@nrwl/js" "16.4.0" + "@nx/devkit" "16.4.0" + "@nx/workspace" "16.4.0" + "@phenomnomnominal/tsquery" "~5.0.1" + babel-plugin-const-enum "^1.0.1" + babel-plugin-macros "^2.8.0" + babel-plugin-transform-typescript-metadata "^0.3.1" + chalk "^4.1.0" + detect-port "^1.5.1" + fast-glob "3.2.7" + fs-extra "^11.1.0" + ignore "^5.0.4" + js-tokens "^4.0.0" + minimatch "3.0.5" + semver "7.5.3" + source-map-support "0.5.19" + tslib "^2.3.0" + "@nx/linter@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/linter/-/linter-16.0.0.tgz#d2028d0b7ff9c5486aaca5a2950cf685ad4dffd6" @@ -4551,6 +5398,18 @@ tmp "~0.2.1" tslib "^2.3.0" +"@nx/linter@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/linter/-/linter-16.4.0.tgz#6fdd8772e753e01695b3c4a0d28b823bcadabe1c" + integrity sha512-YFfHQMHWUBfGr6jAKXhqTH25Qnq86+h1hgrGxEwB+5n0YndDGhwlBFqoE368tVGJ1YDtXnK+kSegEu7HB2h9OQ== + dependencies: + "@nrwl/linter" "16.4.0" + "@nx/devkit" "16.4.0" + "@nx/js" "16.4.0" + "@phenomnomnominal/tsquery" "~5.0.1" + tmp "~0.2.1" + tslib "^2.3.0" + "@nx/next@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/next/-/next-16.0.0.tgz#f3e016367abbe40d8e38dcc021368029d76fe672" @@ -4583,46 +5442,96 @@ resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.0.0.tgz#416ee4ea4b965ec5b0493a093aa4883bd0cb75a8" integrity sha512-GtXS0NPENG+s5bsVdsaXTX1jKOw85jHSALhrXXiMXknjwnvyHUelxFDS4fHhIlcOSd56Y5sn1pdg/fi2WPoscw== +"@nx/nx-darwin-arm64@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.4.0.tgz#72d5cbeb585aa05b4035f1de8f92ba562b180137" + integrity sha512-/ZXuF8M3u8DSNmjYstQKorzo7uIETNhnFinwWlO8mzz+SyR+Xs5G6penJ4+cB1ju3Hf3lZkXd5U6pEiW4OAAkA== + "@nx/nx-darwin-x64@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.0.0.tgz#e318720de156e78de5ee2f9cb168ee69a814a277" integrity sha512-iZv59vEoHekLahBrENYFtyUxuMwIQG24weluc00N2Edp7AlxVf7wRw6gd/xp3ATQbx/N92UPg6X761uBp2gm+Q== +"@nx/nx-darwin-x64@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.4.0.tgz#24f8b9946c77ec1d66e42ffe2f84623e4072167c" + integrity sha512-0Fo58qZzHgRs4SRVaAOBipdJQNew57YQbpFaLHKhCTyKc0Pe6THEYaaT/x9QVkcFO0x4AzNr9T7iJTrneNwcKg== + +"@nx/nx-freebsd-x64@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.4.0.tgz#a82954fe4bc6a74cd6b7e0cb89e1486ac4c06e27" + integrity sha512-Qoes/NifE4zb5Gb6ZdC32HvxZBzO0xo74j7EozUV5rZEm3bCtKbKqThPV9Uuu+8S4j718r5vlob/IMXqRcWK4g== + "@nx/nx-linux-arm-gnueabihf@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.0.0.tgz#9a4a7eb793a7d60cdf62b8adac7e9db35b0b08d1" integrity sha512-o+ds8HogpkIc+Q8j5KEdiuEvGo6iHSpKSaFxKPIKHgD7xa6Kll966hKiFigeY2FDT2nGQlKZ0n1wNWQ4x2rijw== +"@nx/nx-linux-arm-gnueabihf@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.4.0.tgz#77911992e38c1aee51d4a075545ea2828d074c45" + integrity sha512-m8uklbettj8RnLtasjQPiYxqJotDSfO3LO1II8Bds53C7OT8TDnTkW68MEx+CxuSCQFy2Aa0Oih3jSvDzfnZzA== + "@nx/nx-linux-arm64-gnu@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.0.0.tgz#5810f16a90bdc6d0c0f5a34326c1625309af1b5c" integrity sha512-ue2ravlNusu5xojC37JjgLaUyqm0swL5egVSHBARxOsT7piyk0ac56/j+ZrBckrjLbIplTGpwFGGS9vbKiEeoQ== +"@nx/nx-linux-arm64-gnu@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.4.0.tgz#ee2b7208083cf3fc63121ee079ab3e0c2bbe5fa4" + integrity sha512-bAs2T/zZQDTCzzhciE8kCrkwgXbeX3K83cGRacB7PDZZl/O4jr5TRO4zYHi6doytyLONjqhvWNLbIo4cEEcfZA== + "@nx/nx-linux-arm64-musl@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.0.0.tgz#6f1697ef43c12fc4a71a8351f8a84a955e8d70c9" integrity sha512-dSqC3Tp8GfWqOH/jZBkdGtoDoi/A5+LA45nqXRAMawyFv3jODcBsPPuCT8FHk0Yb7X8+MNYx7gk7H14aRIjlQg== +"@nx/nx-linux-arm64-musl@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.4.0.tgz#afaf514d3df0bc31c4a6545d254502c661e3d347" + integrity sha512-K1D8j4lRZDBVuW8iomeJjCznFz7rfP3qaB3RHjKZU5qrZBq1uYohhdfT7dzwWFNWEvt6WytfhGCl2S9PsQ37Wg== + "@nx/nx-linux-x64-gnu@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.0.0.tgz#3e2c8d3c395631968892b9f11073fbf469aeb814" integrity sha512-xk35VXMp6LfopYFSHy4aEgn1xhFyxDl0xYVcg0nrp0ohppjkYIW2H/XVuuEdYZvRuTPkn3a6dQDoo0LLeY77Cg== +"@nx/nx-linux-x64-gnu@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.4.0.tgz#fba4991ac27f0c342157445259485c06fca686f2" + integrity sha512-v1NJ3ESaw5bdSeuh5Xslq1dXGWztf0mSLwZP510Rt9+ulr5LQ/X1Rri8zefU0gZNLcmJL0G2Qq7UTnppYGRTEg== + "@nx/nx-linux-x64-musl@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.0.0.tgz#5be22f0f79b0ab7291e8bace97a5ad99c0de4bc9" integrity sha512-yIdIlggK3WyDGoB7zS2UaiX2Q7ew0De62cNDudHgdg8dzHxa6IzKeFJjVEoNEt5Z+BG8ILaSn/lYxQs8YtV4FA== +"@nx/nx-linux-x64-musl@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.4.0.tgz#9bbdb590a49de9667e2e26dc173fe6d303e165be" + integrity sha512-+8YLVWZFq+k6YJ2ZDwR5sGaRnZhUVYtR8aPbGyonMnJ8VEQJNEqsm1KT6nt0gd3JJdxyphm3VsMQWBMo42jM+w== + "@nx/nx-win32-arm64-msvc@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.0.0.tgz#74d4c2a27ca029310b38fe0bbdf0f26e6e30f159" integrity sha512-YgnkVewQgA/RhXcGDbyhIi+WqAdIzjKGF1JPsA8q+6di3hRksvN+Ud4TVM9R8NFCrRclIxt04v+fqM24PmMIUQ== +"@nx/nx-win32-arm64-msvc@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.4.0.tgz#a2e06890c70afdd339d0d95516ae8bbc222d9ce6" + integrity sha512-HwE6AxlrfWvODT49vVX6NGMYc3zdMVXETCdZb0jZ/oz28XXTAPvVb/8DJgKSyCs0DPirEeCHiPwbdcJA1Bqw8A== + "@nx/nx-win32-x64-msvc@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.0.0.tgz#29df5b0f34f47468958d404c3666714ed061cc8b" integrity sha512-6UXuO3v5rD3ae5jyYZ0cvlLMJ1NzmdLIIQHio/sWno3KJ0+NR/gpkQBl6F4CdZmoXTXZ+ZsDGUNzQtXWkCdSLg== +"@nx/nx-win32-x64-msvc@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.4.0.tgz#d98b4087b696b524461fc142f656a337ed00a520" + integrity sha512-ISL3c6i/v+JOsUHEbngDHaobmbgu6oSY0htKas1RjLWGkWXDLgEXMRjQ/xDbNVYH00Mto7mmq+nrjkNNbqOrfQ== + "@nx/react@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/react/-/react-16.0.0.tgz#d07d5ffafba88c7f569324155ee13c921446afe0" @@ -4726,6 +5635,54 @@ webpack-node-externals "^3.0.0" webpack-subresource-integrity "^5.1.0" +"@nx/webpack@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/webpack/-/webpack-16.4.0.tgz#d43af06d6b60cef01ae939433db6daacacd0c5e6" + integrity sha512-0uiGLiFvjgD2I91s/IdtY0Mdj86geiagUS4X1PkwCj9JpaLGIVkGperO/gByv9cwVOpaDh017mNIRQaiUY095g== + dependencies: + "@babel/core" "^7.15.0" + "@nrwl/webpack" "16.4.0" + "@nx/devkit" "16.4.0" + "@nx/js" "16.4.0" + autoprefixer "^10.4.9" + babel-loader "^9.1.2" + browserslist "^4.21.4" + chalk "^4.1.0" + chokidar "^3.5.1" + copy-webpack-plugin "^10.2.4" + css-loader "^6.4.0" + css-minimizer-webpack-plugin "^5.0.0" + dotenv "~10.0.0" + file-loader "^6.2.0" + fork-ts-checker-webpack-plugin "7.2.13" + ignore "^5.0.4" + less "4.1.3" + less-loader "11.1.0" + license-webpack-plugin "^4.0.2" + loader-utils "^2.0.3" + mini-css-extract-plugin "~2.4.7" + parse5 "4.0.0" + postcss "^8.4.14" + postcss-import "~14.1.0" + postcss-loader "^6.1.1" + rxjs "^7.8.0" + sass "^1.42.1" + sass-loader "^12.2.0" + source-map-loader "^3.0.0" + style-loader "^3.3.0" + stylus "^0.59.0" + stylus-loader "^7.1.0" + terser-webpack-plugin "^5.3.3" + ts-loader "^9.3.1" + ts-node "10.9.1" + tsconfig-paths "^4.1.2" + tsconfig-paths-webpack-plugin "4.0.0" + tslib "^2.3.0" + webpack "^5.80.0" + webpack-dev-server "^4.9.3" + webpack-node-externals "^3.0.0" + webpack-subresource-integrity "^5.1.0" + "@nx/workspace@16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-16.0.0.tgz#47e9af24baad193e303e8cf023193ba6a228d490" @@ -4752,6 +5709,32 @@ yargs "^17.6.2" yargs-parser "21.1.1" +"@nx/workspace@16.4.0": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-16.4.0.tgz#05ff080efa73b42c27f6c02253f7a30e7e47b0ac" + integrity sha512-nuFlhrl9FI6Tb2RvSNRGTVl/X3Cvf/vV2DO1MiyMjZWasZLhAr9rjtLYgTrJW4uQLJOn6MXJzP97w/Boa4pfRQ== + dependencies: + "@nrwl/workspace" "16.4.0" + "@nx/devkit" "16.4.0" + "@parcel/watcher" "2.0.4" + chalk "^4.1.0" + chokidar "^3.5.1" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + dotenv "~10.0.0" + figures "3.2.0" + flat "^5.0.2" + ignore "^5.0.4" + minimatch "3.0.5" + npm-run-path "^4.0.1" + nx "16.4.0" + open "^8.4.0" + rxjs "^7.8.0" + tmp "~0.2.1" + tslib "^2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + "@octokit/auth-token@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.0.tgz#6f22c5fc56445c496628488ba6810131558fa4a9" @@ -5681,6 +6664,13 @@ slugify "^1.6.5" ua-parser-js "^1.0.2" +"@react-native-async-storage/async-storage@^1.17.11": + version "1.23.1" + resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.23.1.tgz#cad3cd4fab7dacfe9838dce6ecb352f79150c883" + integrity sha512-Qd2kQ3yi6Y3+AcUlrHxSLlnBvpdCEMVGFlVBneVOjaFaPU61g1huc38g339ysXspwY1QZA2aNhrk/KlHGO+ewA== + dependencies: + merge-options "^3.0.4" + "@rollup/plugin-babel@^5.3.0": version "5.3.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" @@ -5751,6 +6741,27 @@ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz#0c8b74c50f29ee44f423f7416829c0bf8bb5eb27" integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA== +"@safe-global/safe-apps-provider@0.18.1": + version "0.18.1" + resolved "https://registry.yarnpkg.com/@safe-global/safe-apps-provider/-/safe-apps-provider-0.18.1.tgz#287b5a1e2ef3be630dacde54279409df3ced8202" + integrity sha512-V4a05A3EgJcriqtDoJklDz1BOinWhC6P0hjUSxshA4KOZM7rGPCTto/usXs09zr1vvL28evl/NldSTv97j2bmg== + dependencies: + "@safe-global/safe-apps-sdk" "^8.1.0" + events "^3.3.0" + +"@safe-global/safe-apps-sdk@8.1.0", "@safe-global/safe-apps-sdk@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@safe-global/safe-apps-sdk/-/safe-apps-sdk-8.1.0.tgz#d1d0c69cd2bf4eef8a79c5d677d16971926aa64a" + integrity sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w== + dependencies: + "@safe-global/safe-gateway-typescript-sdk" "^3.5.3" + viem "^1.0.0" + +"@safe-global/safe-gateway-typescript-sdk@^3.5.3": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@safe-global/safe-gateway-typescript-sdk/-/safe-gateway-typescript-sdk-3.20.0.tgz#980cbae3b6342a4b1ed813d037bf580f9285e630" + integrity sha512-BUvzWY4gHBiIZv2e6EVPtv/ur7OuJuyEiiXa0qylpHQ5a9oR2yUjqtZwnFaunyNIkD98vyR/F/ql40JWn1OrTA== + "@schematics/angular@15.2.8": version "15.2.8" resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-15.2.8.tgz#d845903f1cc477d299f968eb5bc40a9855cfd911" @@ -5760,6 +6771,54 @@ "@angular-devkit/schematics" "15.2.8" jsonc-parser "3.2.0" +"@schematics/angular@16.1.8": + version "16.1.8" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-16.1.8.tgz#74b763a01578f4a95f29603f2bf06908dd6ef429" + integrity sha512-gTHy1A/E9BCr0sj3VCr6eBYkgVkO96QWiZcFumedGnvstvp5wiCoIoJPLLfYaxVt1vt08xmnmS3OZ3r0qCLdpA== + dependencies: + "@angular-devkit/core" "16.1.8" + "@angular-devkit/schematics" "16.1.8" + jsonc-parser "3.2.0" + +"@scure/base@^1.1.3", "@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== + +"@scure/bip32@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" + integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== + dependencies: + "@noble/curves" "~1.2.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.2" + +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + dependencies: + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + "@semantic-release/commit-analyzer@^9.0.2": version "9.0.2" resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz#a78e54f9834193b55f1073fa6258eecc9a545e03" @@ -5854,19 +6913,34 @@ lodash "^4.17.4" read-pkg-up "^7.0.0" -"@sigstore/protobuf-specs@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz#957cb64ea2f5ce527cc9cf02a096baeb0d2b99b4" - integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== +"@sigstore/bundle@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1" + integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" -"@sigstore/tuf@^1.0.0": +"@sigstore/protobuf-specs@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" + integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== + +"@sigstore/sign@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.0.tgz#13b69323e7bf8de458cd6c952c57acd1169772a5" - integrity sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ== + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4" + integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== dependencies: - "@sigstore/protobuf-specs" "^0.1.0" + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" make-fetch-happen "^11.0.1" - tuf-js "^1.1.3" + +"@sigstore/tuf@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" + integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + tuf-js "^1.1.7" "@sinclair/typebox@^0.24.1": version "0.24.20" @@ -5878,6 +6952,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" @@ -5906,6 +6985,11 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@socket.io/component-emitter@~3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.1.tgz#621270c02c0a5d4f4669eb1caa9723c91cf201de" + integrity sha512-dzJtaDAAoXx4GCOJpbB2eG/Qj8VDpdwkLsWGzGm+0L7E8/434RyMbAHmk9ubXWVAb9nXmc44jUf8GKqVDiKezg== + "@stablelib/aead@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" @@ -6417,6 +7501,14 @@ dependencies: "@types/node" "*" +"@types/chrome@^0.0.136": + version "0.0.136" + resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.136.tgz#7c011b9f997b0156f25a140188a0c5689d3f368f" + integrity sha512-XDEiRhLkMd+SB7Iw3ZUIj/fov3wLd4HyTdLltVszkgl1dBfc3Rb7oPMVZ2Mz2TLqnF7Ow+StbR8E7r9lqpb4DA== + dependencies: + "@types/filesystem" "*" + "@types/har-format" "*" + "@types/connect-history-api-fallback@^1.3.5": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" @@ -6432,6 +7524,18 @@ dependencies: "@types/node" "*" +"@types/debug@^4.1.7": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/dom-screen-wake-lock@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/dom-screen-wake-lock/-/dom-screen-wake-lock-1.0.3.tgz#c3588a5f6f40fae957f9ce5be9bc4927a61bb9a0" + integrity sha512-3Iten7X3Zgwvk6kh6/NRdwN7WbZ760YgFCsF5AxDifltUQzW1RaW+WRmcVtgwFzLjaNu64H+0MPJ13yRa8g3Dw== + "@types/eslint-scope@^3.7.3": version "3.7.4" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" @@ -6458,16 +7562,16 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - "@types/estree@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== +"@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": version "4.17.29" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" @@ -6487,6 +7591,18 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/filesystem@*": + version "0.0.36" + resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.36.tgz#7227c2d76bfed1b21819db310816c7821d303857" + integrity sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA== + dependencies: + "@types/filewriter" "*" + +"@types/filewriter@*": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.33.tgz#d9d611db9d9cd99ae4e458de420eeb64ad604ea8" + integrity sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g== + "@types/fs-extra@^8.0.1": version "8.1.2" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.2.tgz#7125cc2e4bdd9bd2fc83005ffdb1d0ba00cca61f" @@ -6514,6 +7630,11 @@ dependencies: "@types/node" "*" +"@types/har-format@*": + version "1.2.15" + resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.15.tgz#f352493638c2f89d706438a19a9eb300b493b506" + integrity sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA== + "@types/http-proxy@^1.17.8": version "1.17.9" resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" @@ -6627,6 +7748,11 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + "@types/node@*", "@types/node@>=13.7.0": version "20.9.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.2.tgz#002815c8e87fe0c9369121c78b52e800fadc0ac6" @@ -6759,6 +7885,13 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/secp256k1@^4.0.4": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== + dependencies: + "@types/node" "*" + "@types/semver@^7.3.12": version "7.5.0" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" @@ -6926,6 +8059,14 @@ "@typescript-eslint/types" "5.60.0" "@typescript-eslint/visitor-keys" "5.60.0" +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/type-utils@5.43.0": version "5.43.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz#91110fb827df5161209ecca06f70d19a96030be6" @@ -6946,6 +8087,16 @@ debug "^4.3.4" tsutils "^3.21.0" +"@typescript-eslint/type-utils@^5.36.1": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + "@typescript-eslint/types@5.43.0": version "5.43.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.43.0.tgz#e4ddd7846fcbc074325293515fa98e844d8d2578" @@ -6961,6 +8112,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.0.tgz#3179962b28b4790de70e2344465ec97582ce2558" integrity sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA== +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + "@typescript-eslint/typescript-estree@5.43.0": version "5.43.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz#b6883e58ba236a602c334be116bfc00b58b3b9f2" @@ -7000,6 +8156,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.43.0": version "5.43.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.43.0.tgz#00fdeea07811dbdf68774a6f6eacfee17fcc669f" @@ -7028,6 +8197,20 @@ eslint-scope "^5.1.1" semver "^7.3.7" +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/utils@^5.58.0": version "5.60.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.0.tgz#4667c5aece82f9d4f24a667602f0f300864b554c" @@ -7066,10 +8249,123 @@ "@typescript-eslint/types" "5.60.0" eslint-visitor-keys "^3.3.0" -"@walletconnect/core@2.11.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.11.0.tgz#3a4e301077b2f858fd916b7a20b5b984d1afce63" - integrity sha512-2Tjp5BCevI7dbmqo/OrCjX4tqgMqwJNQLlQAlphqPfvwlF9+tIu6pGcVbSN3U9zyXzWIZCeleqEaWUeSeET4Ew== +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@vitejs/plugin-basic-ssl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz#48c46eab21e0730921986ce742563ae83fe7fe34" + integrity sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A== + +"@vue/compiler-core@3.4.24": + version "3.4.24" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.24.tgz#6b4a5ffddcd874a692f2acfa68981201bcd7096b" + integrity sha512-vbW/tgbwJYj62N/Ww99x0zhFTkZDTcGh3uwJEuadZ/nF9/xuFMC4693P9r+3sxGXISABpDKvffY5ApH9pmdd1A== + dependencies: + "@babel/parser" "^7.24.4" + "@vue/shared" "3.4.24" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.0" + +"@vue/compiler-dom@3.4.24": + version "3.4.24" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.24.tgz#b7335a49f095b6d35e48b6f7be8da513c1fa52b8" + integrity sha512-4XgABML/4cNndVsQndG6BbGN7+EoisDwi3oXNovqL/4jdNhwvP8/rfRMTb6FxkxIxUUtg6AI1/qZvwfSjxJiWA== + dependencies: + "@vue/compiler-core" "3.4.24" + "@vue/shared" "3.4.24" + +"@vue/compiler-sfc@3.4.24": + version "3.4.24" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.24.tgz#2872e353147ce2a145169a33ddd4d68dc95c3a18" + integrity sha512-nRAlJUK02FTWfA2nuvNBAqsDZuERGFgxZ8sGH62XgFSvMxO2URblzulExsmj4gFZ8e+VAyDooU9oAoXfEDNxTA== + dependencies: + "@babel/parser" "^7.24.4" + "@vue/compiler-core" "3.4.24" + "@vue/compiler-dom" "3.4.24" + "@vue/compiler-ssr" "3.4.24" + "@vue/shared" "3.4.24" + estree-walker "^2.0.2" + magic-string "^0.30.10" + postcss "^8.4.38" + source-map-js "^1.2.0" + +"@vue/compiler-ssr@3.4.24": + version "3.4.24" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.24.tgz#0d11fe54dabd17cbd6393a16bf7f785da1cfab46" + integrity sha512-ZsAtr4fhaUFnVcDqwW3bYCSDwq+9Gk69q2r/7dAHDrOMw41kylaMgOP4zRnn6GIEJkQznKgrMOGPMFnLB52RbQ== + dependencies: + "@vue/compiler-dom" "3.4.24" + "@vue/shared" "3.4.24" + +"@vue/reactivity@3.4.24": + version "3.4.24" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.24.tgz#150584316ca2acc4ed19a24f9f29863c3a17a7b2" + integrity sha512-nup3fSYg4i4LtNvu9slF/HF/0dkMQYfepUdORBcMSsankzRPzE7ypAFurpwyRBfU1i7Dn1kcwpYsE1wETSh91g== + dependencies: + "@vue/shared" "3.4.24" + +"@vue/runtime-core@3.4.24": + version "3.4.24" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.24.tgz#066c544dc59a07a96c12874a57b750c239124874" + integrity sha512-c7iMfj6cJMeAG3s5yOn9Rc5D9e2/wIuaozmGf/ICGCY3KV5H7mbTVdvEkd4ZshTq7RUZqj2k7LMJWVx+EBiY1g== + dependencies: + "@vue/reactivity" "3.4.24" + "@vue/shared" "3.4.24" + +"@vue/runtime-dom@3.4.24": + version "3.4.24" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.24.tgz#4f8e7acbe1e8ffa7c55af1366e4438729ebe9b20" + integrity sha512-uXKzuh/Emfad2Y7Qm0ABsLZZV6H3mAJ5ZVqmAOlrNQRf+T5mxpPGZBfec1hkP41t6h6FwF6RSGCs/gd8WbuySQ== + dependencies: + "@vue/runtime-core" "3.4.24" + "@vue/shared" "3.4.24" + csstype "^3.1.3" + +"@vue/server-renderer@3.4.24": + version "3.4.24" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.24.tgz#80dd546f8d6a9f5c4f8b68083fe9cc2d62299332" + integrity sha512-H+DLK4sQF6sRgzKyofmlEVBIV/9KrQU6HIV7nt6yIwSGGKvSwlV8pqJlebUKLpbXaNHugdSfAbP6YmXF69lxow== + dependencies: + "@vue/compiler-ssr" "3.4.24" + "@vue/shared" "3.4.24" + +"@vue/shared@3.4.24": + version "3.4.24" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.24.tgz#278ac71f492b392b9b17fe8fc7d324db1a8842db" + integrity sha512-BW4tajrJBM9AGAknnyEw5tO2xTmnqgup0VTnDAMcxYmqOX0RG0b9aSUGAbEKolD91tdwpA6oCwbltoJoNzpItw== + +"@wagmi/connectors@4.1.19": + version "4.1.19" + resolved "https://registry.yarnpkg.com/@wagmi/connectors/-/connectors-4.1.19.tgz#7112f0409818d6671d136029ad0711a51f31c6b0" + integrity sha512-7OmdvepGCmzjGlY+pT7SgItgDd+eo7J2q50PywtnZ8xIdIEJUiwDm37izwQH0S7ZH8EL/9XkmOuz9hV5ORwn8Q== + dependencies: + "@coinbase/wallet-sdk" "3.9.1" + "@metamask/sdk" "0.14.3" + "@safe-global/safe-apps-provider" "0.18.1" + "@safe-global/safe-apps-sdk" "8.1.0" + "@walletconnect/ethereum-provider" "2.11.2" + "@walletconnect/modal" "2.6.2" + +"@wagmi/core@2.6.10": + version "2.6.10" + resolved "https://registry.yarnpkg.com/@wagmi/core/-/core-2.6.10.tgz#2dd62844a2d7eb3329c9afd64a7171c3ee6262f9" + integrity sha512-CwY6T5MZgvhahNltArxVUpeh9Fk+zPeumqXyA+MIB0bdudOaxw0BjHyUOWGwcE8BH+uzT8YuTigeFVW3sKecVg== + dependencies: + eventemitter3 "5.0.1" + mipd "0.0.5" + zustand "4.4.1" + +"@walletconnect/core@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.11.2.tgz#35286be92c645fa461fecc0dfe25de9f076fca8f" + integrity sha512-bB4SiXX8hX3/hyBfVPC5gwZCXCl+OPj+/EDVM71iAO3TDsh78KPbrVAbDnnsbHzZVHlsMohtXX3j5XVsheN3+g== dependencies: "@walletconnect/heartbeat" "1.2.1" "@walletconnect/jsonrpc-provider" "1.0.13" @@ -7082,8 +8378,8 @@ "@walletconnect/relay-auth" "^1.0.4" "@walletconnect/safe-json" "^1.0.2" "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.0" - "@walletconnect/utils" "2.11.0" + "@walletconnect/types" "2.11.2" + "@walletconnect/utils" "2.11.2" events "^3.3.0" isomorphic-unfetch "3.1.0" lodash.isequal "4.5.0" @@ -7096,6 +8392,22 @@ dependencies: tslib "1.14.1" +"@walletconnect/ethereum-provider@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.11.2.tgz#914f773e37a879bc00cf367437c4e98a826247b1" + integrity sha512-BUDqee0Uy2rCZVkW5Ao3q6Ado/3fePYnFdryVF+YL6bPhj+xQZ5OfKodl+uvs7Rwq++O5wTX2RqOTzpW7+v+Mg== + dependencies: + "@walletconnect/jsonrpc-http-connection" "^1.0.7" + "@walletconnect/jsonrpc-provider" "^1.0.13" + "@walletconnect/jsonrpc-types" "^1.0.3" + "@walletconnect/jsonrpc-utils" "^1.0.8" + "@walletconnect/modal" "^2.6.2" + "@walletconnect/sign-client" "2.11.2" + "@walletconnect/types" "2.11.2" + "@walletconnect/universal-provider" "2.11.2" + "@walletconnect/utils" "2.11.2" + events "^3.3.0" + "@walletconnect/events@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" @@ -7113,7 +8425,17 @@ "@walletconnect/time" "^1.0.2" tslib "1.14.1" -"@walletconnect/jsonrpc-provider@1.0.13": +"@walletconnect/jsonrpc-http-connection@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.7.tgz#a6973569b8854c22da707a759d241e4f5c2d5a98" + integrity sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.6" + "@walletconnect/safe-json" "^1.0.1" + cross-fetch "^3.1.4" + tslib "1.14.1" + +"@walletconnect/jsonrpc-provider@1.0.13", "@walletconnect/jsonrpc-provider@^1.0.13": version "1.0.13" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz#9a74da648d015e1fffc745f0c7d629457f53648b" integrity sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g== @@ -7138,7 +8460,7 @@ keyvaluestorage-interface "^1.0.0" tslib "1.14.1" -"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.8": +"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.7", "@walletconnect/jsonrpc-utils@^1.0.8": version "1.0.8" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" integrity sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== @@ -7191,7 +8513,7 @@ motion "10.16.2" qrcode "1.5.3" -"@walletconnect/modal@^2.6.2": +"@walletconnect/modal@2.6.2", "@walletconnect/modal@^2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@walletconnect/modal/-/modal-2.6.2.tgz#4b534a836f5039eeb3268b80be7217a94dd12651" integrity sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA== @@ -7233,19 +8555,19 @@ dependencies: tslib "1.14.1" -"@walletconnect/sign-client@2.11.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.11.0.tgz#de10f976cc1b8ab04b7f7c27f6a298e4e083ab25" - integrity sha512-H2ukscibBS+6WrzQWh+WyVBqO5z4F5et12JcwobdwgHnJSlqIoZxqnUYYWNCI5rUR5UKsKWaUyto4AE9N5dw4Q== +"@walletconnect/sign-client@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.11.2.tgz#855609653855f0d23b0502cdbdcf43402e34c459" + integrity sha512-MfBcuSz2GmMH+P7MrCP46mVE5qhP0ZyWA0FyIH6/WuxQ6G+MgKsGfaITqakpRPsykWOJq8tXMs3XvUPDU413OQ== dependencies: - "@walletconnect/core" "2.11.0" + "@walletconnect/core" "2.11.2" "@walletconnect/events" "^1.0.1" "@walletconnect/heartbeat" "1.2.1" "@walletconnect/jsonrpc-utils" "1.0.8" "@walletconnect/logger" "^2.0.1" "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.0" - "@walletconnect/utils" "2.11.0" + "@walletconnect/types" "2.11.2" + "@walletconnect/utils" "2.11.2" events "^3.3.0" "@walletconnect/time@^1.0.2": @@ -7255,10 +8577,10 @@ dependencies: tslib "1.14.1" -"@walletconnect/types@2.11.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.11.0.tgz#474a009c56faa9ef4063b76ed84415c801dc9f1e" - integrity sha512-AB5b1lrEbCGHxqS2vqfCkIoODieH+ZAUp9rA1O2ftrhnqDJiJK983Df87JhYhECsQUBHHfALphA8ydER0q+9sw== +"@walletconnect/types@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.11.2.tgz#d0359dd4106fcaa1634241a00428d3ea08d0d3c7" + integrity sha512-p632MFB+lJbip2cvtXPBQslpUdiw1sDtQ5y855bOlAGquay+6fZ4h1DcDePeKQDQM3P77ax2a9aNPZxV6y/h1Q== dependencies: "@walletconnect/events" "^1.0.1" "@walletconnect/heartbeat" "1.2.1" @@ -7267,10 +8589,25 @@ "@walletconnect/logger" "^2.0.1" events "^3.3.0" -"@walletconnect/utils@2.11.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.11.0.tgz#31c95151c823022077883dda61800cdea71879b7" - integrity sha512-hxkHPlTlDQILHfIKXlmzgNJau/YcSBC3XHUSuZuKZbNEw3duFT6h6pm3HT/1+j1a22IG05WDsNBuTCRkwss+BQ== +"@walletconnect/universal-provider@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.11.2.tgz#bec3038f51445d707bbec75f0cb8af0a1f1e04db" + integrity sha512-cNtIn5AVoDxKAJ4PmB8m5adnf5mYQMUamEUPKMVvOPscfGtIMQEh9peKsh2AN5xcRVDbgluC01Id545evFyymw== + dependencies: + "@walletconnect/jsonrpc-http-connection" "^1.0.7" + "@walletconnect/jsonrpc-provider" "1.0.13" + "@walletconnect/jsonrpc-types" "^1.0.2" + "@walletconnect/jsonrpc-utils" "^1.0.7" + "@walletconnect/logger" "^2.0.1" + "@walletconnect/sign-client" "2.11.2" + "@walletconnect/types" "2.11.2" + "@walletconnect/utils" "2.11.2" + events "^3.3.0" + +"@walletconnect/utils@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.11.2.tgz#dee0f19adf5e38543612cbe9fa4de7ed28eb7e85" + integrity sha512-LyfdmrnZY6dWqlF4eDrx5jpUwsB2bEPjoqR5Z6rXPiHJKUOdJt7az+mNOn5KTSOlRpd1DmozrBrWr+G9fFLYVw== dependencies: "@stablelib/chacha20poly1305" "1.0.1" "@stablelib/hkdf" "1.0.1" @@ -7280,7 +8617,7 @@ "@walletconnect/relay-api" "^1.0.9" "@walletconnect/safe-json" "^1.0.2" "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.0" + "@walletconnect/types" "2.11.2" "@walletconnect/window-getters" "^1.0.1" "@walletconnect/window-metadata" "^1.0.1" detect-browser "5.3.0" @@ -7302,13 +8639,104 @@ "@walletconnect/window-getters" "^1.0.1" tslib "1.14.1" -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== +"@web3modal/common@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@web3modal/common/-/common-4.1.1.tgz#1d8b84073a8c023204ecd412e4c7591fcd2b32f3" + integrity sha512-InaJY+PfjtcT4ewySMDTCON2jGuk5kKVuleIz04BWNU92Gm2S4hU7knLhIzPshpyv31Hv3/kO2NFhaxx3CLD+w== + dependencies: + dayjs "1.11.10" + +"@web3modal/core@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@web3modal/core/-/core-4.1.1.tgz#cb7dadede30ac11fc54a3d59b2dfa5e948baadc4" + integrity sha512-+FT73nYHKqF0VlkB9lo6mvfR/WjB4dz24JPwKb2Vq05JVyOcnbt5S06IeTtjI7zgKv3MyKzDzxh6z1ScgbTaRA== + dependencies: + "@web3modal/common" "4.1.1" + "@web3modal/wallet" "4.1.1" + valtio "1.11.2" + +"@web3modal/polyfills@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@web3modal/polyfills/-/polyfills-4.1.1.tgz#5b9b25519e2401389f4d921c30697b3e956abafe" + integrity sha512-HQ90relyjjLfTj5XJhhDV9l3Mp10Rvv/MN+GCvzEx/xY7Tz4yhmKZUX3c519pz2BeVYjea+xwwu6OoOwd3GAXQ== + dependencies: + buffer "6.0.3" + +"@web3modal/scaffold-react@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold-react/-/scaffold-react-4.1.1.tgz#7d456c006034c8f3a88009bf4ba653cbe3d48af7" + integrity sha512-g+iVswup3MRlDTnwJoIayLDVhFyCVTNTfVaEYaxvr8ADKNb90t3nzY742ZVQOdYitvrWrAMboVaOB6LuLCvrsA== + dependencies: + "@web3modal/scaffold" "4.1.1" + +"@web3modal/scaffold-utils@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold-utils/-/scaffold-utils-4.1.1.tgz#5822b05cc049701cce73b0a6e641100fceeead34" + integrity sha512-v9TlKchCPTOGitduI3hUm7PReWcxt55aifYHuCFklwgFatBlUZb/JrXpiCUhp6RpOfnSIA5gV65eyEucIbKY5A== + dependencies: + "@web3modal/core" "4.1.1" + "@web3modal/polyfills" "4.1.1" + valtio "1.11.2" + +"@web3modal/scaffold-vue@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold-vue/-/scaffold-vue-4.1.1.tgz#94bb10bcf4981d4cd09cf9d136c954fe8eeff9f3" + integrity sha512-8qDnRmOR1jMlEB6fuFZ2CiWFYtq6M1OGKcN2DGz4c0dggivsa10cjUXqJqrsic6nUxWKPWou0+osIlJ9hR1YBA== + dependencies: + "@web3modal/scaffold" "4.1.1" + +"@web3modal/scaffold@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold/-/scaffold-4.1.1.tgz#18dc6bf27611896a8ea463c1ea1240f899d006b5" + integrity sha512-GBryCiyl+taz5DPq0expxzfMVcrpKjWvEBSAqT1tPUSthnzOWnVF77XlUAYgFZqzPsEu9lQ1dHCdqZx7WWMCXA== + dependencies: + "@web3modal/common" "4.1.1" + "@web3modal/core" "4.1.1" + "@web3modal/ui" "4.1.1" + lit "3.1.0" + optionalDependencies: + "@web3modal/siwe" "4.1.1" + +"@web3modal/siwe@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@web3modal/siwe/-/siwe-4.1.1.tgz#ef5b6768ea65295748c4859eee6fb89a4b183726" + integrity sha512-qQ4NKxrlD0gcFqh1G3yLlyRYABoBU7uXw3RQqpf1BiJSSMT2ePBfOwsCTJ6OPuT1RjKt9JNBADctua/sqEItCw== + dependencies: + "@web3modal/core" "4.1.1" + "@web3modal/scaffold-utils" "4.1.1" + lit "3.1.0" + valtio "1.11.2" + +"@web3modal/ui@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@web3modal/ui/-/ui-4.1.1.tgz#e09f64b0b6733e7e3b14f148441b57b1c97ced80" + integrity sha512-6ntwIdi3VHR1HLIiyoannOAcckDs3XYrxxIu8cflba6UyuASJ6AH/AY3ULE88fvE55jM/Lra3uuOYj8yE5QjUw== + dependencies: + lit "3.1.0" + qrcode "1.5.3" + +"@web3modal/wagmi@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@web3modal/wagmi/-/wagmi-4.1.1.tgz#aa3de2a55e079ff4b3a4bd36f047c721cdf0b025" + integrity sha512-XMT+naasTfxmt2ogHO7c2wWL63S9SkfoGEIvd7AaxtqlXZfVKtCqyJJC710WiBUhUCyt9wD6hQNjRB1nWN3TGg== + dependencies: + "@web3modal/polyfills" "4.1.1" + "@web3modal/scaffold" "4.1.1" + "@web3modal/scaffold-react" "4.1.1" + "@web3modal/scaffold-utils" "4.1.1" + "@web3modal/scaffold-vue" "4.1.1" + optionalDependencies: + "@web3modal/siwe" "4.1.1" + react ">=17" + react-dom ">=17" + vue ">=3" + +"@web3modal/wallet@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@web3modal/wallet/-/wallet-4.1.1.tgz#a5358701689f5917b0f6d8b86e706f23e79da0c5" + integrity sha512-KgITukYJXDete4MeH95jditHtQ1gvB+q97td0cjxA+xwzLCgihDfHZEq1kuVg5Fj40ECUV4O6IBc++cNeL9EXQ== dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + zod "3.22.4" "@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": version "1.11.6" @@ -7318,44 +8746,33 @@ "@webassemblyjs/helper-numbers" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/floating-point-hex-parser@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== - "@webassemblyjs/helper-api-error@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== - "@webassemblyjs/helper-buffer@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@xtuc/long" "4.2.2" +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== "@webassemblyjs/helper-numbers@1.11.6": version "1.11.6" @@ -7366,26 +8783,11 @@ "@webassemblyjs/helper-api-error" "1.11.6" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== - "@webassemblyjs/helper-wasm-bytecode@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/helper-wasm-section@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" @@ -7396,12 +8798,15 @@ "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/wasm-gen" "1.11.6" -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== dependencies: - "@xtuc/ieee754" "^1.2.0" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/ieee754@1.11.6": version "1.11.6" @@ -7410,13 +8815,6 @@ dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== - dependencies: - "@xtuc/long" "4.2.2" - "@webassemblyjs/leb128@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" @@ -7424,30 +8822,11 @@ dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - "@webassemblyjs/utf8@1.11.6": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - "@webassemblyjs/wasm-edit@^1.11.5": version "1.11.6" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" @@ -7462,16 +8841,19 @@ "@webassemblyjs/wasm-parser" "1.11.6" "@webassemblyjs/wast-printer" "1.11.6" -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" "@webassemblyjs/wasm-gen@1.11.6": version "1.11.6" @@ -7484,15 +8866,16 @@ "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" "@webassemblyjs/wasm-opt@1.11.6": version "1.11.6" @@ -7504,17 +8887,15 @@ "@webassemblyjs/wasm-gen" "1.11.6" "@webassemblyjs/wasm-parser" "1.11.6" -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" "@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": version "1.11.6" @@ -7528,13 +8909,17 @@ "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@xtuc/long" "4.2.2" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" "@webassemblyjs/wast-printer@1.11.6": version "1.11.6" @@ -7544,6 +8929,29 @@ "@webassemblyjs/ast" "1.11.6" "@xtuc/long" "4.2.2" +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== + +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== + +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -7592,6 +9000,16 @@ abbrev@1, abbrev@~1.1.1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abitype@0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.8.tgz#1f120b6b717459deafd213dfbf3a3dd1bf10ae8c" + integrity sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ== + +abitype@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" + integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -7643,11 +9061,6 @@ acorn-globals@^7.0.0: acorn "^8.1.0" acorn-walk "^8.0.2" -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== - acorn-import-assertions@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" @@ -7754,7 +9167,7 @@ ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv-keywords@^5.0.0: +ajv-keywords@^5.0.0, ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== @@ -7771,7 +9184,7 @@ ajv@8.11.2: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@8.12.0, ajv@^8.0.0, ajv@^8.11.2: +ajv@8.12.0, ajv@^8.0.0, ajv@^8.11.2, ajv@^8.9.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -8090,6 +9503,13 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-mutex@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.2.6.tgz#0d7a3deb978bc2b984d5908a2038e1ae2e54ff40" + integrity sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw== + dependencies: + tslib "^2.0.0" + async@^2.6.2: version "2.6.4" resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" @@ -8122,19 +9542,7 @@ atomic-sleep@^1.0.0: resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== -autoprefixer@10.4.13: - version "10.4.13" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" - integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== - dependencies: - browserslist "^4.21.4" - caniuse-lite "^1.0.30001426" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -autoprefixer@^10.4.9: +autoprefixer@10.4.14, autoprefixer@^10.4.9: version "10.4.14" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== @@ -8286,6 +9694,15 @@ babel-plugin-macros@^2.8.0: cosmiconfig "^6.0.0" resolve "^1.12.0" +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + babel-plugin-polyfill-corejs2@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" @@ -8295,14 +9712,14 @@ babel-plugin-polyfill-corejs2@^0.3.1: "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" -babel-plugin-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== +babel-plugin-polyfill-corejs2@^0.4.3: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - semver "^6.1.1" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.2" + semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.5.2: version "0.5.2" @@ -8312,13 +9729,13 @@ babel-plugin-polyfill-corejs3@^0.5.2: "@babel/helper-define-polyfill-provider" "^0.3.1" core-js-compat "^3.21.0" -babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== +babel-plugin-polyfill-corejs3@^0.8.1: + version "0.8.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" + integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" + "@babel/helper-define-polyfill-provider" "^0.4.4" + core-js-compat "^3.33.1" babel-plugin-polyfill-regenerator@^0.3.1: version "0.3.1" @@ -8327,12 +9744,12 @@ babel-plugin-polyfill-regenerator@^0.3.1: dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" -babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== +babel-plugin-polyfill-regenerator@^0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" + integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" + "@babel/helper-define-polyfill-provider" "^0.5.0" babel-plugin-transform-async-to-promises@^0.8.15: version "0.8.18" @@ -8617,6 +10034,11 @@ bottleneck@^2.18.1: resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== +bowser@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + bplist-parser@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" @@ -8734,16 +10156,6 @@ browserify-sign@^4.0.0: readable-stream "^3.6.2" safe-buffer "^5.2.1" -browserslist@4.21.5: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.0: version "4.21.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.1.tgz#c9b9b0a54c7607e8dc3e01a0d311727188011a00" @@ -8754,6 +10166,16 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4 node-releases "^2.0.5" update-browserslist-db "^1.0.4" +browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: version "4.21.9" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" @@ -8824,6 +10246,14 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== +buffer@6.0.3, buffer@^6.0.1, buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -8832,13 +10262,12 @@ buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.1, buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== +bufferutil@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" + node-gyp-build "^4.3.0" builtin-modules@^3.3.0: version "3.3.0" @@ -8886,21 +10315,20 @@ cac@^6.7.14: resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== -cacache@17.0.4: - version "17.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.0.4.tgz#5023ed892ba8843e3b7361c26d0ada37e146290c" - integrity sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA== +cacache@17.1.3, cacache@^17.0.0: + version "17.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044" + integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg== dependencies: "@npmcli/fs" "^3.1.0" fs-minipass "^3.0.0" - glob "^8.0.1" + glob "^10.2.2" lru-cache "^7.7.1" - minipass "^4.0.0" + minipass "^5.0.0" minipass-collect "^1.0.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" p-map "^4.0.0" - promise-inflight "^1.0.1" ssri "^10.0.0" tar "^6.1.11" unique-filename "^3.0.0" @@ -8953,24 +10381,6 @@ cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0, cacache@^16.1.1: tar "^6.1.11" unique-filename "^1.1.1" -cacache@^17.0.0: - version "17.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044" - integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^7.7.1" - minipass "^5.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - cachedir@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" @@ -9031,7 +10441,7 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001359: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz" integrity sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow== -caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001426, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: +caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: version "1.0.30001507" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz#fae53f6286e7564783eadea9b447819410a59534" integrity sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A== @@ -9041,6 +10451,11 @@ caniuse-lite@^1.0.30001541: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz#aa68a64188903e98f36eb9c56e48fba0c1fe2a32" integrity sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw== +caniuse-lite@^1.0.30001587: + version "1.0.30001612" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz#d34248b4ec1f117b70b24ad9ee04c90e0b8a14ae" + integrity sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g== + capability@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/capability/-/capability-0.2.5.tgz#51ad87353f1936ffd77f2f21c74633a4dea88801" @@ -9334,6 +10749,11 @@ clone@~0.1.9: resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" integrity sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw== +clsx@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + cluster-key-slot@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" @@ -9395,6 +10815,11 @@ colord@^2.9.1: resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== +colord@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + colorette@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" @@ -9405,6 +10830,11 @@ colorette@^2.0.10, colorette@^2.0.16: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== +colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + columnify@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" @@ -9420,6 +10850,11 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + commander@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" @@ -9738,6 +11173,11 @@ conventional-recommended-bump@^7.0.0: git-semver-tags "^5.0.0" meow "^8.1.2" +convert-source-map@^1.5.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" @@ -9811,12 +11251,12 @@ core-js-compat@^3.21.0, core-js-compat@^3.22.1: browserslist "^4.21.0" semver "7.0.0" -core-js-compat@^3.25.1: - version "3.31.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1" - integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw== +core-js-compat@^3.30.2, core-js-compat@^3.33.1: + version "3.37.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.0.tgz#d9570e544163779bb4dff1031c7972f44918dc73" + integrity sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA== dependencies: - browserslist "^4.21.5" + browserslist "^4.23.0" core-js-pure@^3.20.2: version "3.23.3" @@ -9870,7 +11310,7 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^8.0.0: +cosmiconfig@^8.0.0, cosmiconfig@^8.1.3: version "8.3.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== @@ -9880,6 +11320,11 @@ cosmiconfig@^8.0.0: parse-json "^5.2.0" path-type "^4.0.0" +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + create-ecdh@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" @@ -9916,18 +11361,33 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -critters@0.0.16: - version "0.0.16" - resolved "https://registry.yarnpkg.com/critters/-/critters-0.0.16.tgz#ffa2c5561a65b43c53b940036237ce72dcebfe93" - integrity sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A== +critters@0.0.20: + version "0.0.20" + resolved "https://registry.yarnpkg.com/critters/-/critters-0.0.20.tgz#08ddb961550ab7b3a59370537e4f01df208f7646" + integrity sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw== dependencies: chalk "^4.1.0" - css-select "^4.2.0" - parse5 "^6.0.1" - parse5-htmlparser2-tree-adapter "^6.0.1" - postcss "^8.3.7" + css-select "^5.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.2" + htmlparser2 "^8.0.2" + postcss "^8.4.23" pretty-bytes "^5.3.0" +cross-fetch@^3.1.4, cross-fetch@^3.1.5: + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + +cross-fetch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" + integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== + dependencies: + node-fetch "^2.6.12" + cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -9974,15 +11434,20 @@ css-declaration-sorter@^6.3.1: resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== -css-loader@6.7.3: - version "6.7.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" - integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== +css-declaration-sorter@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024" + integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== + +css-loader@6.8.1: + version "6.8.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" + integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== dependencies: icss-utils "^5.1.0" - postcss "^8.4.19" + postcss "^8.4.21" postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" + postcss-modules-local-by-default "^4.0.3" postcss-modules-scope "^3.0.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" @@ -10014,7 +11479,19 @@ css-minimizer-webpack-plugin@^3.4.1: serialize-javascript "^6.0.0" source-map "^0.6.1" -css-select@^4.1.3, css-select@^4.2.0: +css-minimizer-webpack-plugin@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565" + integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + cssnano "^6.0.1" + jest-worker "^29.4.3" + postcss "^8.4.24" + schema-utils "^4.0.1" + serialize-javascript "^6.0.1" + +css-select@^4.1.3: version "4.3.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== @@ -10025,6 +11502,17 @@ css-select@^4.1.3, css-select@^4.2.0: domutils "^2.8.0" nth-check "^2.0.1" +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" @@ -10033,7 +11521,23 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" -css-what@^6.0.1: +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.0.1, css-what@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== @@ -10127,11 +11631,52 @@ cssnano-preset-default@^5.2.14: postcss-svgo "^5.1.0" postcss-unique-selectors "^5.1.1" +cssnano-preset-default@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz#adf4b89b975aa775f2750c89dbaf199bbd9da35e" + integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg== + dependencies: + browserslist "^4.23.0" + css-declaration-sorter "^7.2.0" + cssnano-utils "^4.0.2" + postcss-calc "^9.0.1" + postcss-colormin "^6.1.0" + postcss-convert-values "^6.1.0" + postcss-discard-comments "^6.0.2" + postcss-discard-duplicates "^6.0.3" + postcss-discard-empty "^6.0.3" + postcss-discard-overridden "^6.0.2" + postcss-merge-longhand "^6.0.5" + postcss-merge-rules "^6.1.1" + postcss-minify-font-values "^6.1.0" + postcss-minify-gradients "^6.0.3" + postcss-minify-params "^6.1.0" + postcss-minify-selectors "^6.0.4" + postcss-normalize-charset "^6.0.2" + postcss-normalize-display-values "^6.0.2" + postcss-normalize-positions "^6.0.2" + postcss-normalize-repeat-style "^6.0.2" + postcss-normalize-string "^6.0.2" + postcss-normalize-timing-functions "^6.0.2" + postcss-normalize-unicode "^6.1.0" + postcss-normalize-url "^6.0.2" + postcss-normalize-whitespace "^6.0.2" + postcss-ordered-values "^6.0.2" + postcss-reduce-initial "^6.1.0" + postcss-reduce-transforms "^6.0.2" + postcss-svgo "^6.0.3" + postcss-unique-selectors "^6.0.4" + cssnano-utils@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== +cssnano-utils@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.2.tgz#56f61c126cd0f11f2eef1596239d730d9fceff3c" + integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ== + cssnano@^5.0.1: version "5.1.15" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" @@ -10150,6 +11695,14 @@ cssnano@^5.0.6: lilconfig "^2.0.3" yaml "^1.10.2" +cssnano@^6.0.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.1.2.tgz#4bd19e505bd37ee7cf0dc902d3d869f6d79c66b8" + integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA== + dependencies: + cssnano-preset-default "^6.1.2" + lilconfig "^3.1.1" + csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" @@ -10157,6 +11710,13 @@ csso@^4.2.0: dependencies: css-tree "^1.1.2" +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + cssom@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" @@ -10179,6 +11739,11 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + cypress@^12.2.0: version "12.17.4" resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.17.4.tgz#b4dadf41673058493fa0d2362faa3da1f6ae2e6c" @@ -10262,11 +11827,23 @@ data-urls@^3.0.1, data-urls@^3.0.2: whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" +date-fns@^2.29.3: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + dateformat@^3.0.0, dateformat@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== +dayjs@1.11.10: + version "1.11.10" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + dayjs@^1.10.4: version "1.11.3" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.3.tgz#4754eb694a624057b9ad2224b67b15d552589258" @@ -10279,7 +11856,7 @@ debug@2.6.9, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -10493,11 +12070,6 @@ depd@^1.1.2, depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -dependency-graph@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" - integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== - deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -10521,7 +12093,7 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -detect-browser@5.3.0: +detect-browser@5.3.0, detect-browser@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== @@ -10671,7 +12243,16 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -domelementtype@^2.0.1, domelementtype@^2.2.0: +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== @@ -10690,6 +12271,13 @@ domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" @@ -10699,6 +12287,15 @@ domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -10764,6 +12361,15 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +eciesjs@^0.3.15, eciesjs@^0.3.16: + version "0.3.18" + resolved "https://registry.yarnpkg.com/eciesjs/-/eciesjs-0.3.18.tgz#67b5d73a8466e40a45bbc2f2a3177e71e9c0643d" + integrity sha512-RQhegEtLSyIiGJmFTZfvCTHER/fymipXFVx6OwSRYD6hOuy+6Kjpk0dGvIfP9kxn/smBpxQy71uxpGO406ITCw== + dependencies: + "@types/secp256k1" "^4.0.4" + futoin-hkdf "^1.5.3" + secp256k1 "^5.0.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -10788,7 +12394,7 @@ electron-to-chromium@^1.4.172: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.184.tgz#381d4d111fc82d3376ed690dfb621e675f9078a9" integrity sha512-IADi390FRdvxWfVX3hjzfTDNVHiTqVo9ar53/7em/SfhUG9YcjVhyQecY/XwmBHRKden/wFud7RWOUH7+7LFng== -electron-to-chromium@^1.4.284, electron-to-chromium@^1.4.431: +electron-to-chromium@^1.4.431: version "1.4.440" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz#d3b1eeb36b717eb479a240c0406ac1fa67901762" integrity sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw== @@ -10798,6 +12404,11 @@ electron-to-chromium@^1.4.535: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.587.tgz#d8b864f21338b60798d447a3d83b90753f701d07" integrity sha512-RyJX0q/zOkAoefZhB9XHghGeATVP0Q3mwA253XD/zj2OeXc+JZB9pCaEv6R578JUYaWM9PRhye0kXvd/V1cQ3Q== +electron-to-chromium@^1.4.668: + version "1.4.747" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.747.tgz#e37fa5b7b7e4c22607c5f59b5cf78f947266e77d" + integrity sha512-+FnSWZIAvFHbsNVmUxhEqWiaOiPMcfum1GQzlWCg/wLigVtshOsjXHyEFfmt6cFK6+HkS3QOJBv6/3OPumbBfw== + elliptic@6.5.4, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -10853,13 +12464,29 @@ encoding@^0.1.12, encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" +engine.io-client@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" + integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + engine.io-parser "~5.2.1" + ws "~8.11.0" + xmlhttprequest-ssl "~2.0.0" + +engine.io-parser@~5.2.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49" + integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw== + enhanced-resolve@^5.0.0, enhanced-resolve@^5.7.0: version "5.10.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" @@ -10868,7 +12495,7 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.7.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enhanced-resolve@^5.10.0, enhanced-resolve@^5.12.0, enhanced-resolve@^5.15.0: +enhanced-resolve@^5.12.0, enhanced-resolve@^5.15.0: version "5.15.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== @@ -10876,6 +12503,14 @@ enhanced-resolve@^5.10.0, enhanced-resolve@^5.12.0, enhanced-resolve@^5.15.0: graceful-fs "^4.2.4" tapable "^2.2.0" +enhanced-resolve@^5.14.1, enhanced-resolve@^5.16.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787" + integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + enquirer@^2.3.6, enquirer@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -10893,7 +12528,7 @@ entities@^3.0.1: resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== -entities@^4.3.0, entities@^4.4.0: +entities@^4.2.0, entities@^4.3.0, entities@^4.4.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -10917,6 +12552,11 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +envinfo@^7.7.3: + version "7.12.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.12.0.tgz#b56723b39c2053d67ea5714f026d05d4f5cc7acd" + integrity sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg== + err-code@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" @@ -11041,11 +12681,6 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - es-module-lexer@^1.1.1: version "1.4.1" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" @@ -11166,10 +12801,10 @@ esbuild-sunos-64@0.14.49: resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz#47d042739365b61aa8ca642adb69534a8eef9f7a" integrity sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw== -esbuild-wasm@0.17.8: - version "0.17.8" - resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.17.8.tgz#c2348306430c27613ee3cc9a955cdd54df29137a" - integrity sha512-zCmpxv95E0FuCmvdw1K836UHnj4EdiQnFfjTby35y3LAjRPtXMj3sbHDRHjbD8Mqg5lTwq3knacr/1qIFU51CQ== +esbuild-wasm@0.17.19: + version "0.17.19" + resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz#c528495c5363c34a4671fa55404e2b0ba85566ba" + integrity sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg== esbuild-wasm@>=0.13.8: version "0.14.49" @@ -11191,33 +12826,33 @@ esbuild-windows-arm64@0.14.49: resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz#d83c03ff6436caf3262347cfa7e16b0a8049fae7" integrity sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA== -esbuild@0.17.8: - version "0.17.8" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.8.tgz#f7f799abc7cdce3f0f2e3e0c01f120d4d55193b4" - integrity sha512-g24ybC3fWhZddZK6R3uD2iF/RIPnRpwJAqLov6ouX3hMbY4+tKolP0VMF3zuIYCaXun+yHwS5IPQ91N2BT191g== +esbuild@0.17.19, esbuild@^0.17.5: + version "0.17.19" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" + integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== optionalDependencies: - "@esbuild/android-arm" "0.17.8" - "@esbuild/android-arm64" "0.17.8" - "@esbuild/android-x64" "0.17.8" - "@esbuild/darwin-arm64" "0.17.8" - "@esbuild/darwin-x64" "0.17.8" - "@esbuild/freebsd-arm64" "0.17.8" - "@esbuild/freebsd-x64" "0.17.8" - "@esbuild/linux-arm" "0.17.8" - "@esbuild/linux-arm64" "0.17.8" - "@esbuild/linux-ia32" "0.17.8" - "@esbuild/linux-loong64" "0.17.8" - "@esbuild/linux-mips64el" "0.17.8" - "@esbuild/linux-ppc64" "0.17.8" - "@esbuild/linux-riscv64" "0.17.8" - "@esbuild/linux-s390x" "0.17.8" - "@esbuild/linux-x64" "0.17.8" - "@esbuild/netbsd-x64" "0.17.8" - "@esbuild/openbsd-x64" "0.17.8" - "@esbuild/sunos-x64" "0.17.8" - "@esbuild/win32-arm64" "0.17.8" - "@esbuild/win32-ia32" "0.17.8" - "@esbuild/win32-x64" "0.17.8" + "@esbuild/android-arm" "0.17.19" + "@esbuild/android-arm64" "0.17.19" + "@esbuild/android-x64" "0.17.19" + "@esbuild/darwin-arm64" "0.17.19" + "@esbuild/darwin-x64" "0.17.19" + "@esbuild/freebsd-arm64" "0.17.19" + "@esbuild/freebsd-x64" "0.17.19" + "@esbuild/linux-arm" "0.17.19" + "@esbuild/linux-arm64" "0.17.19" + "@esbuild/linux-ia32" "0.17.19" + "@esbuild/linux-loong64" "0.17.19" + "@esbuild/linux-mips64el" "0.17.19" + "@esbuild/linux-ppc64" "0.17.19" + "@esbuild/linux-riscv64" "0.17.19" + "@esbuild/linux-s390x" "0.17.19" + "@esbuild/linux-x64" "0.17.19" + "@esbuild/netbsd-x64" "0.17.19" + "@esbuild/openbsd-x64" "0.17.19" + "@esbuild/sunos-x64" "0.17.19" + "@esbuild/win32-arm64" "0.17.19" + "@esbuild/win32-ia32" "0.17.19" + "@esbuild/win32-x64" "0.17.19" esbuild@>=0.13.8: version "0.14.49" @@ -11255,16 +12890,16 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -11587,7 +13222,7 @@ estree-walker@^1.0.1: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== -estree-walker@^2.0.1: +estree-walker@^2.0.1, estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== @@ -11602,6 +13237,53 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +eth-block-tracker@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-7.1.0.tgz#dfc16085c6817cc30caabba381deb8d204c1c766" + integrity sha512-8YdplnuE1IK4xfqpf4iU7oBxnOYAc35934o083G8ao+8WM8QQtt/mVlAY6yIAdY1eMeLqg4Z//PZjJGmWGPMRg== + dependencies: + "@metamask/eth-json-rpc-provider" "^1.0.0" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^5.0.1" + json-rpc-random-id "^1.0.1" + pify "^3.0.0" + +eth-json-rpc-filters@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-6.0.1.tgz#0b3e370f017f5c6f58d3e7bd0756d8099ed85c56" + integrity sha512-ITJTvqoCw6OVMLs7pI8f4gG92n/St6x80ACtHodeS+IXmO0w+t1T5OOzfSt7KLSMLRkVUoexV7tztLgDxg+iig== + dependencies: + "@metamask/safe-event-emitter" "^3.0.0" + async-mutex "^0.2.6" + eth-query "^2.1.2" + json-rpc-engine "^6.1.0" + pify "^5.0.0" + +eth-query@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" + integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== + dependencies: + json-rpc-random-id "^1.0.0" + xtend "^4.0.1" + +eth-rpc-errors@^4.0.2, eth-rpc-errors@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz#6ddb6190a4bf360afda82790bb7d9d5e724f423a" + integrity sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg== + dependencies: + fast-safe-stringify "^2.0.6" + +ethereum-cryptography@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== + dependencies: + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" + ethers@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" @@ -11653,6 +13335,16 @@ eventemitter2@6.4.7: resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== +eventemitter2@^6.4.5, eventemitter2@^6.4.7: + version "6.4.9" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" + integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== + +eventemitter3@5.0.1, eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -11823,6 +13515,13 @@ extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +extension-port-stream@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/extension-port-stream/-/extension-port-stream-2.1.1.tgz#ec11f2a5ed95655d8c40805d7cb0c39939ee9ef4" + integrity sha512-qknp5o5rj2J9CRKfVB8KJr+uXQlrojNZzdESUPhKYLXf97TPcGf6qWWKmpsNNtUyOdzFhab1ON0jzouNxHHvow== + dependencies: + webextension-polyfill ">=0.10.0 <1.0" + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -11853,6 +13552,11 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -11868,10 +13572,10 @@ fast-fifo@^1.0.0: resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== +fast-glob@3.2.12, fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.12: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -11879,10 +13583,10 @@ fast-glob@3.2.7: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.12: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== +fast-glob@3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -11916,6 +13620,11 @@ fast-redact@^3.0.0: resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.1.1.tgz#790fcff8f808c2e12fabbfb2be5cb2deda448fa0" integrity sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A== +fast-safe-stringify@^2.0.6: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fastest-levenshtein@^1.0.12: version "1.0.14" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.14.tgz#9054384e4b7a78c88d01a4432dc18871af0ac859" @@ -12038,6 +13747,11 @@ find-cache-dir@^3.3.1, find-cache-dir@^3.3.2: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -12286,6 +14000,11 @@ functions-have-names@^1.2.2, functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +futoin-hkdf@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/futoin-hkdf/-/futoin-hkdf-1.5.3.tgz#6c8024f2e1429da086d4e18289ef2239ad33ee35" + integrity sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ== + fwd-stream@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa" @@ -12524,17 +14243,6 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - glob@^10.2.2: version "10.3.0" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.0.tgz#763d02a894f3cdfc521b10bbbbc8e0309e750cce" @@ -12684,7 +14392,7 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graceful-fs@^4.1.9: +graceful-fs@^4.1.9, graceful-fs@^4.2.11: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -12844,6 +14552,13 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoist-non-react-statics@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + hook-std@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" @@ -12907,6 +14622,13 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" + htmlnano@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-2.1.0.tgz#67b31b3cd3fad23f0b610ca628fdb48382209c3c" @@ -12926,6 +14648,16 @@ htmlparser2@^7.1.1: domutils "^2.8.0" entities "^3.0.1" +htmlparser2@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" @@ -13090,6 +14822,20 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" +i18next-browser-languagedetector@^7.1.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.1.tgz#1968196d437b4c8db847410c7c33554f6c448f6f" + integrity sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw== + dependencies: + "@babel/runtime" "^7.23.2" + +i18next@22.5.1: + version "22.5.1" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.5.1.tgz#99df0b318741a506000c243429a7352e5f44d424" + integrity sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA== + dependencies: + "@babel/runtime" "^7.20.6" + iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -13248,10 +14994,10 @@ ini@2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" - integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== +ini@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" + integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== ini@^1.3.2, ini@~1.3.0: version "1.3.8" @@ -13364,6 +15110,11 @@ internal-slot@^1.0.4, internal-slot@^1.0.5: has "^1.0.3" side-channel "^1.0.4" +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + into-stream@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" @@ -13372,6 +15123,13 @@ into-stream@^6.0.0: from2 "^2.3.0" p-is-promise "^3.0.0" +invariant@2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + ioredis@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" @@ -13982,6 +15740,11 @@ isomorphic-unfetch@3.1.0: node-fetch "^2.6.1" unfetch "^4.2.0" +isows@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" + integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -14555,6 +16318,18 @@ jest-util@^29.0.0, jest-util@^29.4.1, jest-util@^29.5.0: graceful-fs "^4.2.9" picomatch "^2.2.3" +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" @@ -14590,6 +16365,16 @@ jest-worker@^27.0.2, jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^29.4.3: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest-worker@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" @@ -14610,7 +16395,7 @@ jest@29.4.3: import-local "^3.0.2" jest-cli "^29.4.3" -jiti@^1.20.0: +jiti@^1.18.2, jiti@^1.20.0: version "1.21.0" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== @@ -14768,6 +16553,28 @@ json-parse-even-better-errors@^3.0.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== +json-rpc-engine@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz#bf5ff7d029e1c1bf20cb6c0e9f348dcd8be5a393" + integrity sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ== + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + eth-rpc-errors "^4.0.2" + +json-rpc-middleware-stream@^4.2.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/json-rpc-middleware-stream/-/json-rpc-middleware-stream-4.2.3.tgz#08340846ffaa2a60287930773546eb4b7f7dbba2" + integrity sha512-4iFb0yffm5vo3eFKDbQgke9o17XBcLQ2c3sONrXSbcOLzP8LTojqo8hRGVgtJShhm5q4ZDSNq039fAx9o65E1w== + dependencies: + "@metamask/safe-event-emitter" "^3.0.0" + json-rpc-engine "^6.1.0" + readable-stream "^2.3.3" + +json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" + integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -14905,6 +16712,15 @@ karma-source-map-support@1.4.0: dependencies: source-map-support "^0.5.5" +keccak@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + keyvaluestorage-interface@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" @@ -14932,6 +16748,11 @@ klona@^2.0.4, klona@^2.0.5: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== +klona@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + language-subtag-registry@~0.3.2: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" @@ -15277,6 +17098,11 @@ lilconfig@^2.0.5: resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== +lilconfig@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" + integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -15340,6 +17166,15 @@ lit-element@^3.3.0: "@lit/reactive-element" "^1.3.0" lit-html "^2.7.0" +lit-element@^4.0.0: + version "4.0.5" + resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-4.0.5.tgz#f20cd8a6231eaf5358f7a6877ca6ea7628fa2015" + integrity sha512-iTWskWZEtn9SyEf4aBG6rKT8GABZMrTWop1+jopsEOgEcugcXJGKuX5bEbkq9qfzY+XB4MAgCaSPwnNpdsNQ3Q== + dependencies: + "@lit-labs/ssr-dom-shim" "^1.2.0" + "@lit/reactive-element" "^2.0.4" + lit-html "^3.1.2" + lit-html@^2.7.0: version "2.7.5" resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-2.7.5.tgz#0c1b9d381abe20c01475ae53ea4b07bf4c923eb8" @@ -15354,6 +17189,13 @@ lit-html@^2.8.0: dependencies: "@types/trusted-types" "^2.0.2" +lit-html@^3.1.0, lit-html@^3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-3.1.3.tgz#ae2e9fee0258d0a1b5d7b86c87da51117e4f911b" + integrity sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA== + dependencies: + "@types/trusted-types" "^2.0.2" + lit@2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/lit/-/lit-2.8.0.tgz#4d838ae03059bf9cafa06e5c61d8acc0081e974e" @@ -15363,6 +17205,15 @@ lit@2.8.0: lit-element "^3.3.0" lit-html "^2.8.0" +lit@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lit/-/lit-3.1.0.tgz#76429b85dc1f5169fed499a0f7e89e2e619010c9" + integrity sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w== + dependencies: + "@lit/reactive-element" "^2.0.0" + lit-element "^4.0.0" + lit-html "^3.1.0" + lmdb@2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-2.8.5.tgz#ce191110c755c0951caa062722e300c703973837" @@ -15543,7 +17394,7 @@ long@^5.0.0: resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -15613,6 +17464,13 @@ magic-string@0.29.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" +magic-string@0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.0.tgz#fd58a4748c5c4547338a424e90fa5dd17f4de529" + integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + magic-string@^0.25.7: version "0.25.9" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" @@ -15620,12 +17478,12 @@ magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== +magic-string@^0.30.10: + version "0.30.10" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" + "@jridgewell/sourcemap-codec" "^1.4.15" magic-string@~0.26.2: version "0.26.7" @@ -15804,6 +17662,16 @@ mdn-data@2.0.14: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -15872,6 +17740,11 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -15930,10 +17803,10 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz#e049d3ea7d3e4e773aad585c6cb329ce0c7b72d7" - integrity sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw== +mini-css-extract-plugin@2.7.6: + version "2.7.6" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" + integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== dependencies: schema-utils "^4.0.0" @@ -16096,7 +17969,7 @@ minipass@^3.1.0, minipass@^3.1.3: dependencies: yallist "^4.0.0" -minipass@^4.0.0, minipass@^4.2.4: +minipass@^4.2.4: version "4.2.8" resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== @@ -16124,6 +17997,13 @@ minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" +mipd@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mipd/-/mipd-0.0.5.tgz#367ee796531c23f0631f129038700b1406663aec" + integrity sha512-gbKA784D2WKb5H/GtqEv+Ofd1S9Zj+Z/PGDIl1u1QAbswkxD28BQ5bSXQxkeBzPBABg1iDSbiwGG1XqlOxRspA== + dependencies: + viem "^1.1.4" + mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" @@ -16182,6 +18062,11 @@ mri@^1.2.0: resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== +mrmime@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -16266,7 +18151,7 @@ nanoid@3.3.6, nanoid@^3.3.6: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== -nanoid@^3.1.20: +nanoid@^3.1.20, nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== @@ -16496,11 +18381,21 @@ node-abort-controller@^3.0.1: resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + node-addon-api@^3.0.0, node-addon-api@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + node-addon-api@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" @@ -16530,7 +18425,7 @@ node-fetch@2.6.7, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.1, node-fetch@^2.6.8: +node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.8: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -16554,6 +18449,11 @@ node-gyp-build-optional-packages@5.1.1: dependencies: detect-libc "^2.0.1" +node-gyp-build@^4.2.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== + node-gyp-build@^4.2.2, node-gyp-build@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" @@ -16585,7 +18485,7 @@ node-machine-id@^1.1.12: resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== -node-releases@^2.0.12, node-releases@^2.0.8: +node-releases@^2.0.12: version "2.0.12" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== @@ -16595,6 +18495,11 @@ node-releases@^2.0.13: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + node-releases@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" @@ -17005,6 +18910,57 @@ nx@16.0.0: "@nx/nx-win32-arm64-msvc" "16.0.0" "@nx/nx-win32-x64-msvc" "16.0.0" +nx@16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/nx/-/nx-16.4.0.tgz#cd136a3ebadf77138dce421b0c0e0944527fe9b3" + integrity sha512-HhJnOAm2wlaIVMmxK1HcdcKfX5DlnQc1RAHFf+QostvQQ/SmUg9f7LoStxpNm01JhQTehb01tH9zAsXKcKzO4A== + dependencies: + "@nrwl/tao" "16.4.0" + "@parcel/watcher" "2.0.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "^3.0.0-rc.18" + "@zkochan/js-yaml" "0.0.6" + axios "^1.0.0" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^7.0.2" + dotenv "~10.0.0" + enquirer "~2.3.6" + fast-glob "3.2.7" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^11.1.0" + glob "7.1.4" + ignore "^5.0.4" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" + minimatch "3.0.5" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.5.3" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" "16.4.0" + "@nx/nx-darwin-x64" "16.4.0" + "@nx/nx-freebsd-x64" "16.4.0" + "@nx/nx-linux-arm-gnueabihf" "16.4.0" + "@nx/nx-linux-arm64-gnu" "16.4.0" + "@nx/nx-linux-arm64-musl" "16.4.0" + "@nx/nx-linux-x64-gnu" "16.4.0" + "@nx/nx-linux-x64-musl" "16.4.0" + "@nx/nx-win32-arm64-msvc" "16.4.0" + "@nx/nx-win32-x64-msvc" "16.4.0" + o3@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/o3/-/o3-1.0.3.tgz#192ce877a882dfa6751f0412a865fafb2da1dac0" @@ -17012,6 +18968,15 @@ o3@^1.0.3: dependencies: capability "^0.2.5" +obj-multiplex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/obj-multiplex/-/obj-multiplex-1.0.0.tgz#2f2ae6bfd4ae11befe742ea9ea5b36636eabffc1" + integrity sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA== + dependencies: + end-of-stream "^1.4.0" + once "^1.4.0" + readable-stream "^2.3.3" + object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -17175,10 +19140,10 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" -open@8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.1.tgz#2ab3754c07f5d1f99a7a8d6a82737c95e3101cff" - integrity sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg== +open@8.4.2, open@~8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: define-lazy-prop "^2.0.0" is-docker "^2.1.1" @@ -17203,15 +19168,6 @@ open@^9.1.0: is-inside-container "^1.0.0" is-wsl "^2.2.0" -open@~8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - opener@^1.5.1, opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" @@ -17418,10 +19374,10 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.1.0.tgz#2e0b12a4f55ffd801a8134a1ae28ef361dc3f243" - integrity sha512-FFcjtIl+BQNfeliSm7MZz5cpdohvUV1yjGnqgVM4UnVF7JslRY0ImXAygdaCDV0jjUADEWu4y5xsDV8brtrTLg== +pacote@15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" + integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== dependencies: "@npmcli/git" "^4.0.0" "@npmcli/installed-package-contents" "^2.0.1" @@ -17429,7 +19385,7 @@ pacote@15.1.0: "@npmcli/run-script" "^6.0.0" cacache "^17.0.0" fs-minipass "^3.0.0" - minipass "^4.0.0" + minipass "^5.0.0" npm-package-arg "^10.0.0" npm-packlist "^7.0.0" npm-pick-manifest "^8.0.0" @@ -17438,7 +19394,7 @@ pacote@15.1.0: promise-retry "^2.0.1" read-package-json "^6.0.0" read-package-json-fast "^3.0.0" - sigstore "^1.0.0" + sigstore "^1.3.0" ssri "^10.0.0" tar "^6.1.11" @@ -17566,13 +19522,6 @@ parse5-html-rewriting-stream@7.0.0: parse5 "^7.0.0" parse5-sax-parser "^7.0.0" -parse5-htmlparser2-tree-adapter@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - parse5-sax-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz#4c05064254f0488676aca75fb39ca069ec96dee5" @@ -17585,7 +19534,7 @@ parse5@4.0.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== -parse5@6.0.1, parse5@^6.0.1: +parse5@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -17717,7 +19666,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@2.3.1, picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -17829,6 +19778,11 @@ pngjs@^5.0.0: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== +pony-cause@^2.1.10: + version "2.1.11" + resolved "https://registry.yarnpkg.com/pony-cause/-/pony-cause-2.1.11.tgz#d69a20aaccdb3bdb8f74dd59e5c68d8e6772e4bd" + integrity sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg== + portfinder@^1.0.28: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" @@ -17846,6 +19800,14 @@ postcss-calc@^8.2.3: postcss-selector-parser "^6.0.9" postcss-value-parser "^4.2.0" +postcss-calc@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" + integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== + dependencies: + postcss-selector-parser "^6.0.11" + postcss-value-parser "^4.2.0" + postcss-colormin@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" @@ -17866,6 +19828,16 @@ postcss-colormin@^5.3.1: colord "^2.9.1" postcss-value-parser "^4.2.0" +postcss-colormin@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d" + integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw== + dependencies: + browserslist "^4.23.0" + caniuse-api "^3.0.0" + colord "^2.9.3" + postcss-value-parser "^4.2.0" + postcss-convert-values@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab" @@ -17882,26 +19854,54 @@ postcss-convert-values@^5.1.3: browserslist "^4.21.4" postcss-value-parser "^4.2.0" +postcss-convert-values@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz#3498387f8efedb817cbc63901d45bd1ceaa40f48" + integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w== + dependencies: + browserslist "^4.23.0" + postcss-value-parser "^4.2.0" + postcss-discard-comments@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== +postcss-discard-comments@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c" + integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw== + postcss-discard-duplicates@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== +postcss-discard-duplicates@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz#d121e893c38dc58a67277f75bb58ba43fce4c3eb" + integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw== + postcss-discard-empty@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== +postcss-discard-empty@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz#ee39c327219bb70473a066f772621f81435a79d9" + integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ== + postcss-discard-overridden@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== +postcss-discard-overridden@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz#4e9f9c62ecd2df46e8fdb44dc17e189776572e2d" + integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ== + postcss-import@~14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" @@ -17919,13 +19919,14 @@ postcss-load-config@^3.0.0: lilconfig "^2.0.5" yaml "^1.10.2" -postcss-loader@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.2.tgz#b53ff44a26fba3688eee92a048c7f2d4802e23bb" - integrity sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg== +postcss-loader@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.2.tgz#ac3344ad1f14bb65df135744b7efae4dbdad4301" + integrity sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig== dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" + cosmiconfig "^8.1.3" + jiti "^1.18.2" + klona "^2.0.6" semver "^7.3.8" postcss-loader@^6.1.1: @@ -17953,6 +19954,14 @@ postcss-merge-longhand@^5.1.7: postcss-value-parser "^4.2.0" stylehacks "^5.1.1" +postcss-merge-longhand@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz#ba8a8d473617c34a36abbea8dda2b215750a065a" + integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^6.1.1" + postcss-merge-rules@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5" @@ -17973,6 +19982,16 @@ postcss-merge-rules@^5.1.4: cssnano-utils "^3.1.0" postcss-selector-parser "^6.0.5" +postcss-merge-rules@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz#7aa539dceddab56019469c0edd7d22b64c3dea9d" + integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ== + dependencies: + browserslist "^4.23.0" + caniuse-api "^3.0.0" + cssnano-utils "^4.0.2" + postcss-selector-parser "^6.0.16" + postcss-minify-font-values@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" @@ -17980,6 +19999,13 @@ postcss-minify-font-values@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-minify-font-values@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz#a0e574c02ee3f299be2846369211f3b957ea4c59" + integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg== + dependencies: + postcss-value-parser "^4.2.0" + postcss-minify-gradients@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" @@ -17989,6 +20015,15 @@ postcss-minify-gradients@^5.1.1: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" +postcss-minify-gradients@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz#ca3eb55a7bdb48a1e187a55c6377be918743dbd6" + integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q== + dependencies: + colord "^2.9.3" + cssnano-utils "^4.0.2" + postcss-value-parser "^4.2.0" + postcss-minify-params@^5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9" @@ -18007,6 +20042,15 @@ postcss-minify-params@^5.1.4: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" +postcss-minify-params@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz#54551dec77b9a45a29c3cb5953bf7325a399ba08" + integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA== + dependencies: + browserslist "^4.23.0" + cssnano-utils "^4.0.2" + postcss-value-parser "^4.2.0" + postcss-minify-selectors@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" @@ -18014,6 +20058,13 @@ postcss-minify-selectors@^5.2.1: dependencies: postcss-selector-parser "^6.0.5" +postcss-minify-selectors@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz#197f7d72e6dd19eed47916d575d69dc38b396aff" + integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ== + dependencies: + postcss-selector-parser "^6.0.16" + postcss-modules-extract-imports@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" @@ -18028,6 +20079,15 @@ postcss-modules-local-by-default@^4.0.0: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" +postcss-modules-local-by-default@^4.0.3: + version "4.0.5" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f" + integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + postcss-modules-scope@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" @@ -18061,6 +20121,11 @@ postcss-normalize-charset@^5.1.0: resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== +postcss-normalize-charset@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1" + integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ== + postcss-normalize-display-values@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" @@ -18068,6 +20133,13 @@ postcss-normalize-display-values@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-display-values@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz#54f02764fed0b288d5363cbb140d6950dbbdd535" + integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-positions@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" @@ -18075,6 +20147,13 @@ postcss-normalize-positions@^5.1.1: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-positions@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz#e982d284ec878b9b819796266f640852dbbb723a" + integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-repeat-style@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" @@ -18082,6 +20161,13 @@ postcss-normalize-repeat-style@^5.1.1: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-repeat-style@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz#f8006942fd0617c73f049dd8b6201c3a3040ecf3" + integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-string@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" @@ -18089,6 +20175,13 @@ postcss-normalize-string@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-string@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz#e3cc6ad5c95581acd1fc8774b309dd7c06e5e363" + integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-timing-functions@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" @@ -18096,6 +20189,13 @@ postcss-normalize-timing-functions@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-timing-functions@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz#40cb8726cef999de984527cbd9d1db1f3e9062c0" + integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-unicode@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75" @@ -18112,12 +20212,27 @@ postcss-normalize-unicode@^5.1.1: browserslist "^4.21.4" postcss-value-parser "^4.2.0" +postcss-normalize-unicode@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz#aaf8bbd34c306e230777e80f7f12a4b7d27ce06e" + integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg== + dependencies: + browserslist "^4.23.0" + postcss-value-parser "^4.2.0" + postcss-normalize-url@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== dependencies: - normalize-url "^6.0.1" + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz#292792386be51a8de9a454cb7b5c58ae22db0f79" + integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ== + dependencies: postcss-value-parser "^4.2.0" postcss-normalize-whitespace@^5.1.1: @@ -18127,6 +20242,13 @@ postcss-normalize-whitespace@^5.1.1: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-whitespace@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz#fbb009e6ebd312f8b2efb225c2fcc7cf32b400cd" + integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q== + dependencies: + postcss-value-parser "^4.2.0" + postcss-ordered-values@^5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" @@ -18135,6 +20257,14 @@ postcss-ordered-values@^5.1.3: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" +postcss-ordered-values@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5" + integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q== + dependencies: + cssnano-utils "^4.0.2" + postcss-value-parser "^4.2.0" + postcss-reduce-initial@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6" @@ -18151,6 +20281,14 @@ postcss-reduce-initial@^5.1.2: browserslist "^4.21.4" caniuse-api "^3.0.0" +postcss-reduce-initial@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz#4401297d8e35cb6e92c8e9586963e267105586ba" + integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw== + dependencies: + browserslist "^4.23.0" + caniuse-api "^3.0.0" + postcss-reduce-transforms@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" @@ -18158,6 +20296,21 @@ postcss-reduce-transforms@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-reduce-transforms@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz#6fa2c586bdc091a7373caeee4be75a0f3e12965d" + integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: + version "6.0.16" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" + integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.10" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" @@ -18174,6 +20327,14 @@ postcss-svgo@^5.1.0: postcss-value-parser "^4.2.0" svgo "^2.7.0" +postcss-svgo@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa" + integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^3.2.0" + postcss-unique-selectors@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" @@ -18181,12 +20342,19 @@ postcss-unique-selectors@^5.1.1: dependencies: postcss-selector-parser "^6.0.5" +postcss-unique-selectors@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz#983ab308896b4bf3f2baaf2336e14e52c11a2088" + integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg== + dependencies: + postcss-selector-parser "^6.0.16" + postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@8.4.14, postcss@^8.2.14, postcss@^8.3.5, postcss@^8.3.7, postcss@^8.4.7: +postcss@8.4.14, postcss@^8.2.14, postcss@^8.3.5, postcss@^8.4.7: version "8.4.14" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== @@ -18195,16 +20363,7 @@ postcss@8.4.14, postcss@^8.2.14, postcss@^8.3.5, postcss@^8.3.7, postcss@^8.4.7: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@8.4.21: - version "8.4.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.14, postcss@^8.4.19: +postcss@8.4.24, postcss@^8.4.14: version "8.4.24" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== @@ -18213,6 +20372,15 @@ postcss@^8.4.14, postcss@^8.4.19: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.24, postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + posthtml-parser@^0.10.1: version "0.10.2" resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.10.2.tgz#df364d7b179f2a6bf0466b56be7b98fd4e97c573" @@ -18247,6 +20415,11 @@ postmate@1.5.2: resolved "https://registry.yarnpkg.com/postmate/-/postmate-1.5.2.tgz#d59a78b3780023c5d32225fd40633b364958bdb3" integrity sha512-EHLlEmrUA/hALls49oBrtE7BzDXXjB9EiO4MZpsoO3R/jRuBmD+2WKQuYAbeuVEpTzrPpUTT79z2cz4qaFgPRg== +preact@^10.16.0: + version "10.20.2" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.20.2.tgz#0b343299a8c020562311cc25db93b3d832ec5e71" + integrity sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg== + prebuild-install@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" @@ -18330,6 +20503,11 @@ proc-log@^3.0.0: resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + integrity sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -18498,11 +20676,28 @@ q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== +qr-code-styling@^1.6.0-rc.1: + version "1.6.0-rc.1" + resolved "https://registry.yarnpkg.com/qr-code-styling/-/qr-code-styling-1.6.0-rc.1.tgz#6c89e185fa50cc9135101085c12ae95b06f1b290" + integrity sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q== + dependencies: + qrcode-generator "^1.4.3" + qr.js@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" integrity sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ== +qrcode-generator@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/qrcode-generator/-/qrcode-generator-1.4.4.tgz#63f771224854759329a99048806a53ed278740e7" + integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== + +qrcode-terminal-nooctal@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/qrcode-terminal-nooctal/-/qrcode-terminal-nooctal-0.12.1.tgz#45016aca0d82b2818de7af0a06d072ad671fbe2e" + integrity sha512-jy/kkD0iIMDjTucB+5T6KBsnirlhegDH47vHgrj5MejchSQmi/EAMM0xMFeePgV9CJkkAapNakpVUWYgHvtdKg== + qrcode-terminal@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" @@ -18624,7 +20819,7 @@ rc@1.2.8, rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@18.2.0: +react-dom@18.2.0, react-dom@>=17, react-dom@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -18644,12 +20839,20 @@ react-error-overlay@6.0.9: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== +react-i18next@^13.2.2: + version "13.5.0" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-13.5.0.tgz#44198f747628267a115c565f0c736a50a76b1ab0" + integrity sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA== + dependencies: + "@babel/runtime" "^7.22.5" + html-parse-stringify "^3.0.1" + "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-is@^16.13.1: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -18666,6 +20869,14 @@ react-native-fetch-api@^3.0.0: dependencies: p-defer "^3.0.0" +react-native-webview@^11.26.0: + version "11.26.1" + resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-11.26.1.tgz#658c09ed5162dc170b361e48c2dd26c9712879da" + integrity sha512-hC7BkxOpf+z0UKhxFSFTPAM4shQzYmZHoELa6/8a/MspcjEP7ukYKpuSUTLDywQditT8yI9idfcKvfZDKQExGw== + dependencies: + escape-string-regexp "2.0.0" + invariant "2.2.4" + react-qr-code@^2.0.12: version "2.0.12" resolved "https://registry.yarnpkg.com/react-qr-code/-/react-qr-code-2.0.12.tgz#98f99e9ad5ede46d73ab819e2dd9925c5f5d7a2d" @@ -18701,7 +20912,7 @@ react-test-renderer@18.2.0: react-shallow-renderer "^16.15.0" scheduler "^0.23.0" -react@18.2.0: +react@18.2.0, react@>=17, react@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -18799,6 +21010,19 @@ read@1, read@^1.0.7, read@~1.0.7: dependencies: mute-stream "~0.0.4" +readable-stream@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + integrity sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ== + 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" + readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -18831,7 +21055,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^2.2.2: +readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.7: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -18892,6 +21116,13 @@ receptacle@^1.3.2: dependencies: ms "^2.1.1" +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -18943,7 +21174,7 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@0.14.1: +regenerator-runtime@0.14.1, regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== @@ -18960,6 +21191,13 @@ regenerator-transform@^0.15.0: dependencies: "@babel/runtime" "^7.8.4" +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + regex-parser@^2.2.11: version "2.2.11" resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" @@ -19115,16 +21353,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@1.22.1, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.17.0, resolve@^1.19.0: +resolve@1.22.2, resolve@^1.17.0, resolve@^1.19.0: version "1.22.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== @@ -19133,6 +21362,15 @@ resolve@^1.17.0, resolve@^1.19.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3, resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -19251,6 +21489,16 @@ rollup-plugin-typescript2@0.34.1: semver "^7.3.7" tslib "^2.4.0" +rollup-plugin-visualizer@^5.9.2: + version "5.12.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz#661542191ce78ee4f378995297260d0c1efb1302" + integrity sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ== + dependencies: + open "^8.4.0" + picomatch "^2.3.1" + source-map "^0.7.4" + yargs "^17.5.1" + rollup-pluginutils@^2.8.2: version "2.8.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" @@ -19265,7 +21513,7 @@ rollup@^2.56.2: optionalDependencies: fsevents "~2.3.2" -rollup@^3.29.2: +rollup@^3.21.0, rollup@^3.29.2: version "3.29.4" resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== @@ -19298,7 +21546,7 @@ rxjs@6.6.7, rxjs@^6.5.4: dependencies: tslib "^1.9.0" -rxjs@7.8.1, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.1: +rxjs@7.8.1, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.0, rxjs@^7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== @@ -19339,12 +21587,12 @@ safe-stable-stringify@^2.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-loader@13.2.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-13.2.0.tgz#80195050f58c9aac63b792fa52acb6f5e0f6bdc3" - integrity sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg== +sass-loader@13.3.1: + version "13.3.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-13.3.1.tgz#32ee5791434b9b4dbd1adcce76fcb4cea49cc12c" + integrity sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg== dependencies: - klona "^2.0.4" + klona "^2.0.6" neo-async "^2.6.2" sass-loader@^12.2.0: @@ -19364,10 +21612,10 @@ sass@1.55.0: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -sass@1.58.1: - version "1.58.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.58.1.tgz#17ab0390076a50578ed0733f1cc45429e03405f6" - integrity sha512-bnINi6nPXbP1XNRaranMFEBZWUfdW/AF16Ql5+ypRxfTvCRTTKrLsMIakyDcayUt2t/RZotmL4kgJwNH5xO+bg== +sass@1.63.2: + version "1.63.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.2.tgz#75f7d9a8e67d1d5b98a989507f4d98b6067b1f75" + integrity sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -19408,7 +21656,7 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: +schema-utils@^3.0.0, schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== @@ -19417,7 +21665,7 @@ schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^3.2.0: +schema-utils@^3.1.2, schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== @@ -19436,11 +21684,30 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" +schema-utils@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + scrypt-js@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== +secp256k1@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-5.0.0.tgz#be6f0c8c7722e2481e9773336d351de8cddd12f7" + integrity sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^5.0.0" + node-gyp-build "^4.2.0" + secure-compare@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" @@ -19521,10 +21788,10 @@ semver@7.3.4: dependencies: lru-cache "^6.0.0" -semver@7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== +semver@7.5.3: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -19540,6 +21807,13 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + semver@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" @@ -19630,7 +21904,7 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -sha.js@^2.4.0, sha.js@^2.4.8: +sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -19698,15 +21972,16 @@ signale@^1.2.1: figures "^2.0.0" pkg-conf "^2.1.0" -sigstore@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.6.0.tgz#887a4007c6ee83f3ef3fd844be1a0840e849c301" - integrity sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g== +sigstore@^1.3.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" + integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== dependencies: - "@sigstore/protobuf-specs" "^0.1.0" - "@sigstore/tuf" "^1.0.0" + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/sign" "^1.0.0" + "@sigstore/tuf" "^1.0.3" make-fetch-happen "^11.0.1" - tuf-js "^1.1.3" simple-concat@^1.0.0: version "1.0.1" @@ -19773,6 +22048,24 @@ snake-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" +socket.io-client@^4.5.1: + version "4.7.5" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.7.5.tgz#919be76916989758bdc20eec63f7ee0ae45c05b7" + integrity sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.2" + engine.io-client "~6.5.2" + socket.io-parser "~4.2.4" + +socket.io-parser@~4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + sockjs@^0.3.24: version "0.3.24" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" @@ -19828,6 +22121,11 @@ sonic-boom@^2.2.1: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + source-map-loader@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.1.tgz#72f00d05f5d1f90f80974eda781cbd7107c125f2" @@ -19883,11 +22181,16 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@0.7.4, source-map@^0.7.3: +source-map@0.7.4, source-map@^0.7.3, source-map@^0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" @@ -20230,6 +22533,13 @@ string_decoder@~0.10.x: resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== + dependencies: + safe-buffer "~5.1.0" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -20337,6 +22647,19 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" +stylehacks@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6" + integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg== + dependencies: + browserslist "^4.23.0" + postcss-selector-parser "^6.0.16" + +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== + stylus-loader@^7.1.0: version "7.1.3" resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-7.1.3.tgz#1fdfa0d34e8c05a569bc0902e1ecdb857d764964" @@ -20359,6 +22682,22 @@ stylus@^0.55.0: semver "^6.3.0" source-map "^0.7.3" +stylus@^0.59.0: + version "0.59.0" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.59.0.tgz#a344d5932787142a141946536d6e24e6a6be7aa6" + integrity sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg== + dependencies: + "@adobe/css-tools" "^4.0.1" + debug "^4.3.2" + glob "^7.1.6" + sax "~1.2.4" + source-map "^0.7.3" + +superstruct@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-1.0.4.tgz#0adb99a7578bd2f1c526220da6571b2d485d91ca" + integrity sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -20418,6 +22757,19 @@ svgo@^2.4.0, svgo@^2.5.0, svgo@^2.7.0: picocolors "^1.0.0" stable "^0.1.8" +svgo@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.2.0.tgz#7a5dff2938d8c6096e00295c2390e8e652fa805d" + integrity sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.3.1" + css-what "^6.1.0" + csso "^5.0.5" + picocolors "^1.0.0" + symbol-observable@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" @@ -20507,16 +22859,16 @@ term-size@^2.2.1: resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== -terser-webpack-plugin@^5.1.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" - integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.20" jest-worker "^27.4.5" schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.7.2" + serialize-javascript "^6.0.1" + terser "^5.26.0" terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: version "5.3.9" @@ -20529,17 +22881,17 @@ terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: serialize-javascript "^6.0.1" terser "^5.16.8" -terser@5.16.3: - version "5.16.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.3.tgz#3266017a9b682edfe019b8ecddd2abaae7b39c6b" - integrity sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q== +terser@5.17.7: + version "5.17.7" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.7.tgz#2a8b134826fe179b711969fd9d9a0c2479b2a8c3" + integrity sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ== dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" -terser@^5.16.8, terser@^5.7.2: +terser@^5.16.8: version "5.19.1" resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.1.tgz#dbd7231f224a9e2401d0f0959542ed74d76d340b" integrity sha512-27hxBUVdV6GoNg1pKQ7Z5cbR6V9txPVyBA+FQw3BaZ1Wuzvztce5p156DaP0NVZNrMZZ+6iG9Syf7WgMNKDg2Q== @@ -20549,6 +22901,16 @@ terser@^5.16.8, terser@^5.7.2: commander "^2.20.0" source-map-support "~0.5.20" +terser@^5.26.0: + version "5.30.4" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.4.tgz#62b4d16a819424e6317fd5ceffb4ee8dc769803a" + integrity sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -20833,12 +23195,12 @@ tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" + integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -20850,7 +23212,7 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tuf-js@^1.1.3: +tuf-js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== @@ -20967,10 +23329,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" + integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== u3@^0.1.1: version "0.1.1" @@ -21207,14 +23569,6 @@ untun@^0.1.2: consola "^3.2.3" pathe "^1.1.1" -update-browserslist-db@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - update-browserslist-db@^1.0.11, update-browserslist-db@^1.0.13: version "1.0.13" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" @@ -21292,12 +23646,19 @@ use-sync-external-store@1.2.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +utf-8-validate@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" + integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== + dependencies: + node-gyp-build "^4.3.0" + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.5: +util@^0.12.4, util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -21328,6 +23689,11 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -21396,6 +23762,61 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +viem@^1.0.0, viem@^1.1.4: + version "1.21.4" + resolved "https://registry.yarnpkg.com/viem/-/viem-1.21.4.tgz#883760e9222540a5a7e0339809202b45fe6a842d" + integrity sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "0.9.8" + isows "1.0.3" + ws "8.13.0" + +viem@^2.9.5: + version "2.9.25" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.25.tgz#afcf320790e175b2afc83d29819f56cb50906f0d" + integrity sha512-W0QOXCsYQppnV89PQP0EnCvfZIEsDYqmpVakLPNrok4Q4B7651M3MV/sYifYcLWv3Mn4KUyMCUlVxlej6CfC/w== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "1.0.0" + isows "1.0.3" + ws "8.13.0" + +vite@4.3.9: + version "4.3.9" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d" + integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg== + dependencies: + esbuild "^0.17.5" + postcss "^8.4.23" + rollup "^3.21.0" + optionalDependencies: + fsevents "~2.3.2" + +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +vue@>=3: + version "3.4.24" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.24.tgz#f269549939a6c092480f018aa0bd886ba64f4c6f" + integrity sha512-NPdx7dLGyHmKHGRRU5bMRYVE+rechR+KDU5R2tSTNG36PuMwbfAJ+amEvOAw7BPfZp5sQulNELSLm5YUkau+Sg== + dependencies: + "@vue/compiler-dom" "3.4.24" + "@vue/compiler-sfc" "3.4.24" + "@vue/runtime-dom" "3.4.24" + "@vue/server-renderer" "3.4.24" + "@vue/shared" "3.4.24" + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -21437,6 +23858,14 @@ watchpack@^2.4.0: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" +watchpack@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" @@ -21456,6 +23885,26 @@ weak-lru-cache@^1.2.2: resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19" integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== +webextension-polyfill-ts@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/webextension-polyfill-ts/-/webextension-polyfill-ts-0.25.0.tgz#fff041626365dbd0e29c40b197e989a55ec221ca" + integrity sha512-ikQhwwHYkpBu00pFaUzIKY26I6L87DeRI+Q6jBT1daZUNuu8dSrg5U9l/ZbqdaQ1M/TTSPKeAa3kolP5liuedw== + dependencies: + webextension-polyfill "^0.7.0" + +"webextension-polyfill@>=0.10.0 <1.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.11.0.tgz#1640c0d27192424fd5b420237acbe453f88c8246" + integrity sha512-YUBSKQA0iCx2YtM75VFgvvcx1hLKaGGiph6a6UaUdSgk32VT9SzrcDAKBjeGHXoAZTnNBqS5skA4VfoKMXhEBA== + dependencies: + webpack "^5.91.0" + webpack-cli "^5.1.4" + +webextension-polyfill@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz#0df1120ff0266056319ce1a622b09ad8d4a56505" + integrity sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -21466,10 +23915,29 @@ webidl-conversions@^7.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -webpack-dev-middleware@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz#fd585127ed44dab3f253daf0d98f4d58a5088cc2" - integrity sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw== +webpack-cli@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" + colorette "^2.0.14" + commander "^10.0.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^5.7.3" + +webpack-dev-middleware@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz#6bbc257ec83ae15522de7a62f995630efde7cc3d" + integrity sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ== dependencies: colorette "^2.0.10" memfs "^3.4.12" @@ -21488,10 +23956,10 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@4.11.1: - version "4.11.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz#ae07f0d71ca0438cf88446f09029b92ce81380b5" - integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== +webpack-dev-server@4.15.0: + version "4.15.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz#87ba9006eca53c551607ea0d663f4ae88be7af21" + integrity sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -21512,6 +23980,7 @@ webpack-dev-server@4.11.1: html-entities "^2.3.2" http-proxy-middleware "^2.0.3" ipaddr.js "^2.0.1" + launch-editor "^2.6.0" open "^8.0.9" p-retry "^4.5.0" rimraf "^3.0.2" @@ -21521,7 +23990,7 @@ webpack-dev-server@4.11.1: sockjs "^0.3.24" spdy "^4.0.2" webpack-dev-middleware "^5.3.1" - ws "^8.4.2" + ws "^8.13.0" webpack-dev-server@^4.9.3: version "4.15.1" @@ -21567,7 +24036,24 @@ webpack-merge@5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-merge@5.8.0, webpack-merge@^5.8.0: +webpack-merge@5.9.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-merge@^5.7.3: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== + dependencies: + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.0" + +webpack-merge@^5.8.0: version "5.8.0" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== @@ -21592,22 +24078,22 @@ webpack-subresource-integrity@5.1.0, webpack-subresource-integrity@^5.1.0: dependencies: typed-assert "^1.0.8" -webpack@5.76.1: - version "5.76.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.1.tgz#7773de017e988bccb0f13c7d75ec245f377d295c" - integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ== +webpack@5.86.0: + version "5.86.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.86.0.tgz#b0eb81794b62aee0b7e7eb8c5073495217d9fc6d" + integrity sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" + "@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.7.6" + acorn-import-assertions "^1.9.0" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" + enhanced-resolve "^5.14.1" + es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -21616,9 +24102,9 @@ webpack@5.76.1: loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.0" + schema-utils "^3.1.2" tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" + terser-webpack-plugin "^5.3.7" watchpack "^2.4.0" webpack-sources "^3.2.3" @@ -21652,6 +24138,36 @@ webpack@^5.75.0: watchpack "^2.4.0" webpack-sources "^3.2.3" +webpack@^5.80.0, webpack@^5.91.0: + version "5.91.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" + integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.21.10" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.16.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.11" + 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.10" + watchpack "^2.4.1" + webpack-sources "^3.2.3" + websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" @@ -21847,17 +24363,17 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.13.0, ws@^8.11.0, ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + ws@^7.5.1: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.11.0, ws@^8.13.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - -ws@^8.2.3, ws@^8.4.2: +ws@^8.2.3: version "8.8.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== @@ -21867,6 +24383,11 @@ ws@^8.5.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== +ws@~8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" @@ -21882,12 +24403,17 @@ xmlcreate@^2.0.4: resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== +xmlhttprequest-ssl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" + integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== + xtend@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" integrity sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw== -xtend@^4.0.2, xtend@~4.0.1: +xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -21960,10 +24486,10 @@ yargs-parser@^21.0.0, yargs-parser@^21.0.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== -yargs@17.6.2: - version "17.6.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== +yargs@17.7.2, yargs@^17.3.1, yargs@^17.5.1, yargs@^17.6.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" escalade "^3.1.1" @@ -22016,19 +24542,6 @@ yargs@^17.2.1: y18n "^5.0.5" yargs-parser "^21.0.0" -yargs@^17.3.1, yargs@^17.6.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" @@ -22047,9 +24560,21 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +zod@3.22.4: + version "3.22.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== + zone.js@0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.12.0.tgz#a4a6e5fab6d34bd37d89c77e89ac2e6f4a3d2c30" integrity sha512-XtC+I5dXU14HrzidAKBNMqneIVUykLEAA1x+v4KVrd6AUPWlwYORF8KgsVqvgdHiKZ4BkxxjvYi/ksEixTPR0Q== dependencies: - tslib "^2.3.0" \ No newline at end of file + tslib "^2.3.0" + +zustand@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.1.tgz#0cd3a3e4756f21811bd956418fdc686877e8b3b0" + integrity sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw== + dependencies: + use-sync-external-store "1.2.0" From 8461c0bd9fc84f244fbc45670be0686b4091962e Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Fri, 3 May 2024 13:18:18 +0900 Subject: [PATCH 02/45] feat: Relayer onboarding. --- packages/ethereum-wallets/src/lib/index.ts | 106 +++++++++++++++++---- packages/ethereum-wallets/src/lib/modal.ts | 13 ++- packages/ethereum-wallets/src/lib/utils.ts | 11 +++ 3 files changed, 112 insertions(+), 18 deletions(-) create mode 100644 packages/ethereum-wallets/src/lib/utils.ts diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 0d79a13af..e50a2cdb0 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -24,10 +24,17 @@ import { type GetAccountReturnType, type Config, } from "@wagmi/core"; -import { bytesToHex, keccak256, parseAbi, toHex } from "viem"; +import { bytesToHex, keccak256, toHex } from "viem"; +import bs58 from "bs58"; import icon from "./icon"; import { createModal } from "./modal"; +import { + ETHEREUM_ACCOUNT_ABI, + DEFAULT_ACCESS_KEY_ALLOWANCE, + RLP_EXECUTE, + MAX_TGAS, +} from "./utils"; export interface EthereumWalletsParams { wagmiConfig: Config; @@ -46,14 +53,6 @@ export interface EthereumWalletsParams { deprecated?: boolean; } -const ETHEREUM_ACCOUNT_ABI = parseAbi([ - "function functionCall(string receiver_id, string method_name, bytes args, uint64 gas, uint32 yoctoNear) payable", - "function transfer(string receiver_id, uint32 yoctoNear) payable", - "function addKey(uint8 public_key_kind, bytes public_key, uint64 nonce, bool is_full_access, bool is_limited_allowance, uint128 allowance, string receiver_id, string[] method_names)", - "function deleteKey(uint8 public_key_kind, bytes public_key)", -]); -const DEFAULT_ACCESS_KEY_ALLOWANCE = "250000000000000000000000"; - interface EthereumWalletsState { keystore: nearAPI.keyStores.KeyStore; subscriptions: Array; @@ -104,7 +103,7 @@ const EthereumWallets: WalletBehaviourFactory< const getAccounts = async (): Promise> => { const address = getAccount(wagmiConfig).address?.toLowerCase(); const account = devMode ? address + "." + devModeAccount : address; - if (!account) { + if (!account || !address) { return []; } const keyPair = await _state.keystore.getKey( @@ -133,7 +132,7 @@ const EthereumWallets: WalletBehaviourFactory< switch (tx.actions[0].type) { case "AddKey": { const publicKey = bytesToHex( - Buffer.from(tx.actions[0].params.publicKey.split(":")[1], "base64") + bs58.decode(tx.actions[0].params.publicKey.split(":")[1]) ); if (tx.actions[0].params.accessKey.permission === "FullAccess") { result = await writeContract(wagmiConfig, { @@ -180,7 +179,7 @@ const EthereumWallets: WalletBehaviourFactory< } case "DeleteKey": { const publicKey = bytesToHex( - Buffer.from(tx.actions[0].params.publicKey.split(":")[1], "base64") + bs58.decode(tx.actions[0].params.publicKey.split(":")[1]) ); result = await writeContract(wagmiConfig, { abi: ETHEREUM_ACCOUNT_ABI, @@ -198,6 +197,8 @@ const EthereumWallets: WalletBehaviourFactory< case "FunctionCall": { const yoctoNear = BigInt(tx.actions[0].params.deposit) % BigInt(1e6); const value = BigInt(tx.actions[0].params.deposit) / BigInt(1e6); + const requestedGas = BigInt(tx.actions[0].params.gas); + const gas = requestedGas <= MAX_TGAS ? requestedGas : MAX_TGAS; result = await writeContract(wagmiConfig, { abi: ETHEREUM_ACCOUNT_ABI, address: to, @@ -206,7 +207,7 @@ const EthereumWallets: WalletBehaviourFactory< tx.receiverId, tx.actions[0].params.methodName, bytesToHex(stringifyJsonOrBytes(tx.actions[0].params.args)), - BigInt(tx.actions[0].params.gas), + gas, +yoctoNear.toString(), ], value, @@ -334,6 +335,69 @@ const EthereumWallets: WalletBehaviourFactory< }); }; + const getRelayerOnboardingInfo = async ({ + accountId, + }: { + accountId: string; + }): Promise<{ + relayerPublicKey: string; + onboardingTransaction: null | Transaction; + }> => { + let relayerPublicKey: string; + try { + const response = await fetch( + // TODO: update url when available. + `https://near-wallet-playground.testnet.aurora.dev/onboard?account=${accountId}`, + { + method: "GET", + } + ); + // eslint-disable-next-line @typescript-eslint/naming-convention + const { public_key } = await response.json(); + relayerPublicKey = + "ed25519:" + bs58.encode(Buffer.from(public_key, "hex")); + } catch (error) { + logger.error(error); + throw new Error("Failed to fetch the relayer's public key."); + } + try { + const key = await provider.query({ + request_type: "view_access_key", + finality: "final", + account_id: accountId, + public_key: relayerPublicKey, + }); + logger.log("User account ready, relayer access key onboarded.", key); + return { relayerPublicKey, onboardingTransaction: null }; + } catch (error) { + logger.warn("Need to add the relayer access key.", error); + // Add the relayer's access key on-chain. + return { + relayerPublicKey, + onboardingTransaction: { + signerId: accountId, + receiverId: accountId, + actions: [ + { + type: "AddKey", + params: { + publicKey: relayerPublicKey, + accessKey: { + nonce: 0, + permission: { + receiverId: accountId, + allowance: "0", + methodNames: [RLP_EXECUTE], + }, + }, + }, + }, + ], + }, + }; + } + }; + const signAndSendTransactions = async ( transactions: Array> ) => { @@ -346,7 +410,7 @@ const EthereumWallets: WalletBehaviourFactory< request_type: "view_access_key", finality: "final", account_id: accountLogIn.accountId, - public_key: accountLogIn.publicKey.toString(), + public_key: accountLogIn.publicKey, }); const accessKeyUsable = validateAccessKey({ transactions: nearTxs, @@ -372,7 +436,14 @@ const EthereumWallets: WalletBehaviourFactory< ); } } - const txs = transformEthereumTransactions(nearTxs); + const { relayerPublicKey, onboardingTransaction } = + await getRelayerOnboardingInfo({ + accountId: accountLogIn.accountId, + }); + let txs = transformEthereumTransactions(nearTxs); + if (onboardingTransaction) { + txs = [onboardingTransaction, ...txs]; + } const { selectedNetworkId } = web3Modal.getState(); if (selectedNetworkId !== expectedChainId) { await switchChain(wagmiConfig, { @@ -387,6 +458,7 @@ const EthereumWallets: WalletBehaviourFactory< reject("User canceled Ethereum wallet transaction(s)."); }, txs, + relayerPublicKey, }); showModal(); (async () => { @@ -420,7 +492,7 @@ const EthereumWallets: WalletBehaviourFactory< request_type: "view_access_key", finality: "final", account_id: accountLogIn.accountId, - public_key: accountLogIn.publicKey.toString(), + public_key: accountLogIn.publicKey, }); // NOTE: don't await, in case of a connection problem with the wallet, the user should still be disconnected from dApp. // If not deleted, the access key will be reused during signIn. @@ -544,7 +616,7 @@ const EthereumWallets: WalletBehaviourFactory< }); reUseKeyPair = true; } catch (error) { - logger.error("Local access key cannot be reused."); + logger.warn("Local access key cannot be reused."); _state.keystore.removeKey(options.network.networkId, accountId); } } diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index 392bc4ebc..a8e2aefa7 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -3,13 +3,16 @@ import type { Transaction, TransferAction, } from "@near-wallet-selector/core"; +import { RLP_EXECUTE } from "./utils"; export function createModal({ onCancel, txs, + relayerPublicKey, }: { onCancel: () => void; txs: Array; + relayerPublicKey: string; }) { const modalStyles = ` .ethereum-wallet-modal-container { @@ -154,7 +157,15 @@ export function createModal({ tx.actions[0].type === "AddKey" && tx.actions[0].params.accessKey.permission !== "FullAccess" && tx.actions[0].params.accessKey.permission.allowance === "0" - ? "WARNING: this key has unlimited allowance and can spend all your NEAR, only approve this transaction if you know what you are doing !!!" + ? tx.actions[0].params.publicKey === relayerPublicKey && + tx.actions[0].params.accessKey.permission.receiverId === + tx.signerId && + tx.actions[0].params.accessKey.permission.methodNames?.length === + 1 && + tx.actions[0].params.accessKey.permission.methodNames[0] === + RLP_EXECUTE + ? "This AddKey transaction will onboard your account and enable you to send the next transactions." + : "WARNING: this key has unlimited allowance and can spend all your NEAR, only approve this transaction if you know what you are doing !!!" : "" }

Status: ${ diff --git a/packages/ethereum-wallets/src/lib/utils.ts b/packages/ethereum-wallets/src/lib/utils.ts new file mode 100644 index 000000000..d8b961bae --- /dev/null +++ b/packages/ethereum-wallets/src/lib/utils.ts @@ -0,0 +1,11 @@ +import { parseAbi } from "viem"; + +export const ETHEREUM_ACCOUNT_ABI = parseAbi([ + "function functionCall(string receiver_id, string method_name, bytes args, uint64 gas, uint32 yoctoNear) payable", + "function transfer(string receiver_id, uint32 yoctoNear) payable", + "function addKey(uint8 public_key_kind, bytes public_key, uint64 nonce, bool is_full_access, bool is_limited_allowance, uint128 allowance, string receiver_id, string[] method_names) external", + "function deleteKey(uint8 public_key_kind, bytes public_key) external", +]); +export const DEFAULT_ACCESS_KEY_ALLOWANCE = "250000000000000000000000"; // 0.25 NEAR +export const RLP_EXECUTE = "rlp_execute"; +export const MAX_TGAS = BigInt(270e12); // Handle overhead of rlp_execute to validate the Ethereum transaction. From 0c468becb8e725e106e827a375babedf3a66937d Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Wed, 8 May 2024 16:07:57 +0900 Subject: [PATCH 03/45] fix: Use near_getPublicKey api. --- packages/ethereum-wallets/src/lib/index.ts | 90 +++++++++++++++------- 1 file changed, 62 insertions(+), 28 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index e50a2cdb0..74d94d824 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -20,6 +20,7 @@ import { getAccount, switchChain, writeContract, + waitForTransactionReceipt, disconnect, type GetAccountReturnType, type Config, @@ -122,7 +123,13 @@ const EthereumWallets: WalletBehaviourFactory< _state.subscriptions = []; }; - const executeTransaction = async (tx: Transaction) => { + const executeTransaction = async ({ + tx, + relayerPublicKey, + }: { + tx: Transaction; + relayerPublicKey: string; + }): Promise<`0x${string}`> => { const to = ( /^0x([A-Fa-f0-9]{40})$/.test(tx.receiverId) ? tx.receiverId @@ -171,6 +178,14 @@ const EthereumWallets: WalletBehaviourFactory< tx.actions[0].params.accessKey.permission.receiverId, tx.actions[0].params.accessKey.permission.methodNames ?? [], ], + gasPrice: + tx.actions[0].params.publicKey === relayerPublicKey && + tx.receiverId === + tx.actions[0].params.accessKey.permission.receiverId + ? // Fix 0 gasPrice to avoid wallet errors when account has 0 NEAR balance. + // The onboarding transaction is always free. + BigInt(0) + : undefined, chainId: expectedChainId, type: "legacy", }); @@ -345,17 +360,20 @@ const EthereumWallets: WalletBehaviourFactory< }> => { let relayerPublicKey: string; try { - const response = await fetch( - // TODO: update url when available. - `https://near-wallet-playground.testnet.aurora.dev/onboard?account=${accountId}`, - { - method: "GET", - } - ); - // eslint-disable-next-line @typescript-eslint/naming-convention - const { public_key } = await response.json(); + const response = await fetch(nearRpc, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + jsonrpc: "2.0", + id: 3, + method: "near_getPublicKey", + }), + }); + const { result } = await response.json(); relayerPublicKey = - "ed25519:" + bs58.encode(Buffer.from(public_key, "hex")); + "ed25519:" + bs58.encode(Buffer.from(result.public_key, "hex")); } catch (error) { logger.error(error); throw new Error("Failed to fetch the relayer's public key."); @@ -367,10 +385,18 @@ const EthereumWallets: WalletBehaviourFactory< account_id: accountId, public_key: relayerPublicKey, }); - logger.log("User account ready, relayer access key onboarded.", key); + logger.log( + "User account ready, relayer access key onboarded.", + relayerPublicKey, + key + ); return { relayerPublicKey, onboardingTransaction: null }; } catch (error) { - logger.warn("Need to add the relayer access key.", error); + logger.warn( + "Need to add the relayer access key.", + relayerPublicKey, + error + ); // Add the relayer's access key on-chain. return { relayerPublicKey, @@ -387,7 +413,8 @@ const EthereumWallets: WalletBehaviourFactory< permission: { receiverId: accountId, allowance: "0", - methodNames: [RLP_EXECUTE], + // methodNames: [RLP_EXECUTE], + methodNames: [], }, }, }, @@ -431,7 +458,7 @@ const EthereumWallets: WalletBehaviourFactory< } } catch (error) { logger.error( - "Failed to executed FunctionCall access key transaction, falling back to Ethereum wallet to sign and send transaction.", + "Failed to execute FunctionCall access key transaction, falling back to Ethereum wallet to sign and send transaction.", error ); } @@ -465,8 +492,15 @@ const EthereumWallets: WalletBehaviourFactory< try { for (const [index, tx] of txs.entries()) { renderTxs({ selectedIndex: index }); - const result = await executeTransaction(tx); - logger.log(result); + const txHash = await executeTransaction({ tx, relayerPublicKey }); + logger.log(`Sent transaction: ${txHash}`); + /* + const receipt = await waitForTransactionReceipt(wagmiConfig, { + hash: txHash, + chainId: expectedChainId, + }); + logger.log(receipt); + */ // TODO get the FinalExecutionOutcome of the rpc transaction results.push({} as FinalExecutionOutcome); } @@ -494,9 +528,9 @@ const EthereumWallets: WalletBehaviourFactory< account_id: accountLogIn.accountId, public_key: accountLogIn.publicKey, }); - // NOTE: don't await, in case of a connection problem with the wallet, the user should still be disconnected from dApp. + // NOTE: If connection problem with the wallet, the user can cancel from the modal to skip the disconnect transaction. // If not deleted, the access key will be reused during signIn. - signAndSendTransactions([ + await signAndSendTransactions([ { signerId: accountLogIn.accountId, receiverId: accountLogIn.accountId, @@ -505,19 +539,19 @@ const EthereumWallets: WalletBehaviourFactory< type: "DeleteKey", params: { publicKey: accountLogIn.publicKey, + /* + publicKey: + "ed25519:3HDMUBDSSup8jPL7FMLiduSPwir6HhX4zedvZmzy25So", + */ }, }, ], }, - ]).then(() => { - _state.keystore.removeKey( - options.network.networkId, - accountLogIn.accountId - ); - }); - // NOTE: await a promise so that event loop calls `signAndSendTransactions` before `disconnect(wagmiConfig)`. - await ((ms: number) => - new Promise((resolve) => setTimeout(resolve, ms)))(1); + ]); + _state.keystore.removeKey( + options.network.networkId, + accountLogIn.accountId + ); } cleanup(); } catch (error) { From 8391e5b08ea4023128e7591277a8341f17de874d Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Tue, 14 May 2024 23:43:25 +0900 Subject: [PATCH 04/45] feat: Get receipt and txStatus. --- packages/ethereum-wallets/src/lib/index.ts | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 74d94d824..6e37b4c16 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -4,6 +4,7 @@ import type { FinalExecutionOutcome, FunctionCallPermissionView, } from "near-api-js/lib/providers/provider"; +import { JsonRpcProvider } from "near-api-js/lib/providers"; import { stringifyJsonOrBytes } from "near-api-js/lib/transaction"; import { type WalletModuleFactory, @@ -494,15 +495,24 @@ const EthereumWallets: WalletBehaviourFactory< renderTxs({ selectedIndex: index }); const txHash = await executeTransaction({ tx, relayerPublicKey }); logger.log(`Sent transaction: ${txHash}`); - /* const receipt = await waitForTransactionReceipt(wagmiConfig, { hash: txHash, chainId: expectedChainId, }); - logger.log(receipt); - */ - // TODO get the FinalExecutionOutcome of the rpc transaction - results.push({} as FinalExecutionOutcome); + logger.log("Receipt:", receipt); + if (receipt.status !== "success") { + throw new Error("Transaction execution failed."); + } + const nearProvider = new JsonRpcProvider( + // @ts-expect-error + provider.provider.connection + ); + const nearTx = await nearProvider.txStatus( + // @ts-expect-error + receipt.nearTransactionHash, + accountLogIn.accountId + ); + results.push(nearTx); } resolve(); } catch (error) { From 16b592750f77d1f8b2f3971ffc37a9ca510b17b7 Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Wed, 15 May 2024 10:20:17 +0900 Subject: [PATCH 05/45] fix: Remove RLP_EXECUTE check. --- packages/ethereum-wallets/src/lib/modal.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index a8e2aefa7..80ca570b1 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -159,11 +159,12 @@ export function createModal({ tx.actions[0].params.accessKey.permission.allowance === "0" ? tx.actions[0].params.publicKey === relayerPublicKey && tx.actions[0].params.accessKey.permission.receiverId === - tx.signerId && + tx.signerId /* && tx.actions[0].params.accessKey.permission.methodNames?.length === 1 && tx.actions[0].params.accessKey.permission.methodNames[0] === RLP_EXECUTE + */ ? "This AddKey transaction will onboard your account and enable you to send the next transactions." : "WARNING: this key has unlimited allowance and can spend all your NEAR, only approve this transaction if you know what you are doing !!!" : "" From cee568bab814b2ca0ae75e64010610330b1b40d1 Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Wed, 15 May 2024 21:08:30 +0900 Subject: [PATCH 06/45] fix: Handling of network switch from wallet. --- packages/ethereum-wallets/src/lib/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 6e37b4c16..f70ab9d89 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -262,9 +262,10 @@ const EthereumWallets: WalletBehaviourFactory< } if (data.address && data.status === "connected") { if (store.getState().contract?.contractId) { + const address = data.address.toLowerCase(); const keyPair = await _state.keystore.getKey( options.network.networkId, - "opa_code28.testnet" // data.address + devMode ? address + "." + devModeAccount : address ); if (!keyPair) { emitter.emit("signedOut", null); From 28b246856491a388ed184fdb87b44f190f5bc04c Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Wed, 15 May 2024 23:04:30 +0900 Subject: [PATCH 07/45] style: Update logo. --- packages/ethereum-wallets/src/lib/icon.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ethereum-wallets/src/lib/icon.ts b/packages/ethereum-wallets/src/lib/icon.ts index 1263c8eb4..79c53346a 100644 --- a/packages/ethereum-wallets/src/lib/icon.ts +++ b/packages/ethereum-wallets/src/lib/icon.ts @@ -1 +1 @@ -export default `data:image/png;base64,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`; +export default `data:image/png;base64,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`; From 9a0a90186672d634927f05d5128c0248ebd8534a Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Wed, 15 May 2024 23:47:00 +0900 Subject: [PATCH 08/45] fix: Re-apply rlp_execute limitation to relayer key. --- packages/ethereum-wallets/src/lib/index.ts | 3 +-- packages/ethereum-wallets/src/lib/modal.ts | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index f70ab9d89..95b863d81 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -415,8 +415,7 @@ const EthereumWallets: WalletBehaviourFactory< permission: { receiverId: accountId, allowance: "0", - // methodNames: [RLP_EXECUTE], - methodNames: [], + methodNames: [RLP_EXECUTE], }, }, }, diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index 80ca570b1..a8e2aefa7 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -159,12 +159,11 @@ export function createModal({ tx.actions[0].params.accessKey.permission.allowance === "0" ? tx.actions[0].params.publicKey === relayerPublicKey && tx.actions[0].params.accessKey.permission.receiverId === - tx.signerId /* && + tx.signerId && tx.actions[0].params.accessKey.permission.methodNames?.length === 1 && tx.actions[0].params.accessKey.permission.methodNames[0] === RLP_EXECUTE - */ ? "This AddKey transaction will onboard your account and enable you to send the next transactions." : "WARNING: this key has unlimited allowance and can spend all your NEAR, only approve this transaction if you know what you are doing !!!" : "" From fc18d7c55b13dcc7af29348fbd657bdc088323a9 Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Thu, 16 May 2024 12:25:35 +0900 Subject: [PATCH 09/45] build: Upgrade web3Modal, add WC example. --- .../wallet-selector.component.ts | 19 +- .../react/contexts/WalletSelectorContext.tsx | 19 +- package.json | 10 +- packages/ethereum-wallets/README.md | 10 +- yarn.lock | 1016 +++++++---------- 5 files changed, 432 insertions(+), 642 deletions(-) diff --git a/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts b/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts index 001411ea2..c95013cf1 100644 --- a/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts +++ b/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts @@ -27,7 +27,7 @@ import { setupEthereumWallets } from "@near-wallet-selector/ethereum-wallets"; import { createWeb3Modal } from "@web3modal/wagmi"; import { reconnect, http, createConfig, type Config } from "@wagmi/core"; import { type Chain } from "@wagmi/core/chains"; -import { injected } from "@wagmi/connectors"; +import { injected, walletConnect } from "@wagmi/connectors"; import { CONTRACT_ID } from "../../../constants"; declare global { @@ -68,13 +68,28 @@ const wagmiConfig: Config = createConfig({ transports: { [near.id]: http(), }, - connectors: [injected({ shimDisconnect: true })], + connectors: [ + walletConnect({ + projectId, + metadata: { + name: "NEAR Guest Book", + description: "A guest book with comments stored on the NEAR blockchain", + url: "https://near.github.io/wallet-selector", + icons: ["https://near.github.io/wallet-selector/favicon.ico"], + }, + showQrModal: false, + }), + injected({ shimDisconnect: true }), + ], }); reconnect(wagmiConfig); const web3Modal = createWeb3Modal({ wagmiConfig: wagmiConfig, projectId, + featuredWalletIds: [ + "ecc4036f814562b41a5268adc86270fba1365471402006302e70169465b7ac18", // Zerion + ], }); @Component({ diff --git a/examples/react/contexts/WalletSelectorContext.tsx b/examples/react/contexts/WalletSelectorContext.tsx index 7f81d5f10..932ff12ce 100644 --- a/examples/react/contexts/WalletSelectorContext.tsx +++ b/examples/react/contexts/WalletSelectorContext.tsx @@ -35,7 +35,7 @@ import { distinctUntilChanged, map } from "rxjs"; import { createWeb3Modal } from "@web3modal/wagmi"; import { reconnect, http, createConfig, type Config } from "@wagmi/core"; import { type Chain } from "@wagmi/core/chains"; -import { injected } from "@wagmi/connectors"; +import { injected, walletConnect } from "@wagmi/connectors"; import { Loading } from "../components/Loading"; import { CONTRACT_ID } from "../constants"; @@ -88,13 +88,28 @@ const wagmiConfig: Config = createConfig({ transports: { [near.id]: http(), }, - connectors: [injected({ shimDisconnect: true })], + connectors: [ + walletConnect({ + projectId, + metadata: { + name: "NEAR Guest Book", + description: "A guest book with comments stored on the NEAR blockchain", + url: "https://near.github.io/wallet-selector", + icons: ["https://near.github.io/wallet-selector/favicon.ico"], + }, + showQrModal: false, + }), + injected({ shimDisconnect: true }), + ], }); reconnect(wagmiConfig); const web3Modal = createWeb3Modal({ wagmiConfig: wagmiConfig, projectId, + featuredWalletIds: [ + "ecc4036f814562b41a5268adc86270fba1365471402006302e70169465b7ac18", // Zerion + ], }); export const WalletSelectorContextProvider: React.FC<{ diff --git a/package.json b/package.json index aa05fe7b1..a9b7247a8 100644 --- a/package.json +++ b/package.json @@ -95,11 +95,10 @@ "@near-snap/sdk": "^0.6.0", "@peersyst/near-mobile-signer": "^1.0.10", "@ramper/near": "^0.0.30", - "@wagmi/connectors": "4.1.19", - "@wagmi/core": "2.6.10", + "@tanstack/react-query": "5.36.2", "@walletconnect/modal": "^2.6.2", - "@walletconnect/sign-client": "2.11.2", - "@web3modal/wagmi": "4.1.1", + "@walletconnect/sign-client": "2.13.0", + "@web3modal/wagmi": "4.2.0", "better-sqlite3": "^9.3.0", "big.js": "^6.1.1", "bn.js": "^5.2.0", @@ -129,7 +128,8 @@ "tweetnacl": "^1.0.3", "tweetnacl-util": "^0.15.1", "url": "^0.11.0", - "viem": "^2.9.5", + "viem": "2.10.5", + "wagmi": "2.8.8", "zone.js": "0.12.0" }, "devDependencies": { diff --git a/packages/ethereum-wallets/README.md b/packages/ethereum-wallets/README.md index d47f8d49c..0c0f2064d 100644 --- a/packages/ethereum-wallets/README.md +++ b/packages/ethereum-wallets/README.md @@ -7,11 +7,11 @@ Ethereum wallet support NEP: https://github.com/near/NEPs/issues/518 Any Ethereum wallet can be connected via Web3Modal: the dApp can chose which wallets to support and a multichain dApp can switch networks using the same wallet connection. -SignIn requires a switch to NEAR network, but the user can switch to other networks and will be prompted to switch back to NEAR before a transaction is made. +SignIn requires a switch to NEAR network, if the user switches to other networks he will be prompted to switch back to NEAR before a transaction is made. Sign out prompts to remove the FunctionCall access key if there is one, this action is not blocking and the user can sign out without executing the transaction. -A NEAR dApp can connect to multiple Ethereum wallet addresses. If the user switches address and connects from the wallet instead of the dApp, the wallet will be disconnected from the dApp so that it can reconnect with the signIn flow. +A NEAR dApp can connect to multiple Ethereum wallet addresses. If the user switches to a new address in the Ethereum wallet, the NEAR wallet will be disconnected from the dApp so that it can reconnect with the signIn flow. If the dApp doesn't require a FunctionCall access key or the Ethereum wallet address already signed in, then the address connects automatically when changed. `signMessage` and `verifyOwner` are not implemented because Ethereum wallets are not compatible with these standards, instead a dApp can use `eth_sign` or `eth_signTypedData_v4` to authenticate the wallet by interacting with it directly. @@ -20,14 +20,12 @@ NEP-518 doesn't support multiple actions within the same transaction, so when mu ## Installation and Usage -The easiest way to use this package is to install it from the NPM registry, this package requires `near-api-js` v1.0.0 or above: - ```bash # Using Yarn -yarn add near-api-js @web3modal/wagmi @wagmi/core @wagmi/connectors viem @near-wallet-selector/ethereum-wallets +yarn add near-api-js @web3modal/wagmi wagmi viem @tanstack/react-query @near-wallet-selector/ethereum-wallets # Using NPM. -npm install near-api-js @web3modal/wagmi @wagmi/core @wagmi/connectors viem @near-wallet-selector/ethereum-wallets +npm install near-api-js @web3modal/wagmi wagmi viem @tanstack/react-query @near-wallet-selector/ethereum-wallets ``` Then use it in your dApp: diff --git a/yarn.lock b/yarn.lock index 718db32d2..6dce851fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -756,13 +756,6 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.24.1": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" - integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== - dependencies: - "@babel/types" "^7.24.0" - "@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" @@ -770,6 +763,13 @@ dependencies: "@babel/types" "^7.22.15" +"@babel/helper-module-imports@^7.24.1": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== + dependencies: + "@babel/types" "^7.24.0" + "@babel/helper-module-transforms@^7.18.6": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz#4f8408afead0188cfa48672f9d0e5787b61778c8" @@ -1117,7 +1117,7 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.4.tgz#409fbe690c333bb70187e2de4021e1e47a026661" integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== -"@babel/parser@^7.24.0", "@babel/parser@^7.24.4": +"@babel/parser@^7.24.0": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== @@ -2485,7 +2485,14 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2": +"@babel/runtime@^7.19.4": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" + integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== @@ -2692,113 +2699,6 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@emotion/babel-plugin@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" - integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/serialize" "^1.1.2" - babel-plugin-macros "^3.1.0" - convert-source-map "^1.5.0" - escape-string-regexp "^4.0.0" - find-root "^1.1.0" - source-map "^0.5.7" - stylis "4.2.0" - -"@emotion/cache@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== - dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - stylis "4.2.0" - -"@emotion/hash@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" - integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== - -"@emotion/is-prop-valid@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337" - integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== - dependencies: - "@emotion/memoize" "^0.8.1" - -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== - -"@emotion/react@^11.10.6": - version "11.11.4" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.4.tgz#3a829cac25c1f00e126408fab7f891f00ecc3c1d" - integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.3" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3", "@emotion/serialize@^1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.4.tgz#fc8f6d80c492cfa08801d544a05331d1cc7cd451" - integrity sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ== - dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" - csstype "^3.0.2" - -"@emotion/sheet@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" - integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== - -"@emotion/styled@^11.10.6": - version "11.11.5" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.5.tgz#0c5c8febef9d86e8a926e663b2e5488705545dfb" - integrity sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/is-prop-valid" "^1.2.2" - "@emotion/serialize" "^1.1.4" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - -"@emotion/unitless@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" - integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== - -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== - -"@emotion/weak-memoize@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" - integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== - "@esbuild/android-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" @@ -3713,7 +3613,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": +"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -4006,7 +3906,7 @@ "@metamask/safe-event-emitter" "^3.0.0" "@metamask/utils" "^5.0.1" -"@metamask/json-rpc-engine@^7.0.0": +"@metamask/json-rpc-engine@^7.0.0", "@metamask/json-rpc-engine@^7.3.2": version "7.3.3" resolved "https://registry.yarnpkg.com/@metamask/json-rpc-engine/-/json-rpc-engine-7.3.3.tgz#f2b30a2164558014bfcca45db10f5af291d989af" integrity sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg== @@ -4015,14 +3915,23 @@ "@metamask/safe-event-emitter" "^3.0.0" "@metamask/utils" "^8.3.0" -"@metamask/object-multiplex@^1.1.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@metamask/object-multiplex/-/object-multiplex-1.3.0.tgz#459de4862aa5a5a025dabceadda0ffd553ca4b25" - integrity sha512-czcQeVYdSNtabd+NcYQnrM69MciiJyd1qvKH8WM2Id3C0ZiUUX5Xa/MK+/VUk633DBhVOwdNzAKIQ33lGyA+eQ== +"@metamask/json-rpc-middleware-stream@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-6.0.2.tgz#75852ce481f8f9f091edbfc04ffdf964f8f3cabd" + integrity sha512-jtyx3PRfc1kqoLpYveIVQNwsxYKefc64/LCl9h9Da1m3nUKEvypbYuXSIwi237qvOjKmNHQKsDOZg6f4uBf62Q== + dependencies: + "@metamask/json-rpc-engine" "^7.3.2" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^8.3.0" + readable-stream "^3.6.2" + +"@metamask/object-multiplex@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@metamask/object-multiplex/-/object-multiplex-2.0.0.tgz#aa6e4aa7b4e2f457ea4bb51cd7281d931e0aa35d" + integrity sha512-+ItrieVZie3j2LfYE0QkdW3dsEMfMEp419IGx1zyeLqjRZ14iQUPRO0H6CGgfAAoC0x6k2PfCAGRwJUA9BMrqA== dependencies: - end-of-stream "^1.4.4" once "^1.4.0" - readable-stream "^2.3.3" + readable-stream "^3.6.2" "@metamask/onboarding@^1.0.1": version "1.0.1" @@ -4031,31 +3940,23 @@ dependencies: bowser "^2.9.0" -"@metamask/post-message-stream@^6.1.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@metamask/post-message-stream/-/post-message-stream-6.2.0.tgz#3db0a50adc2b2206d1bb95739e7fff49e36e0324" - integrity sha512-WunZ0bruClF862mvbKQGETn5SM0XKGmocPMQR1Ew6sYix9/FDzeoZnoI8RkXk01E+70FCdxhTE/r8kk5SFOuTw== - dependencies: - "@metamask/utils" "^5.0.0" - readable-stream "2.3.3" - -"@metamask/providers@^10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@metamask/providers/-/providers-10.2.1.tgz#61304940adeccc7421dcda30ffd1d834273cc77b" - integrity sha512-p2TXw2a1Nb8czntDGfeIYQnk4LLVbd5vlcb3GY//lylYlKdSqp+uUTegCvxiFblRDOT68jsY8Ib1VEEzVUOolA== +"@metamask/providers@^15.0.0": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@metamask/providers/-/providers-15.0.0.tgz#e8957bb89d2f3379b32b60117d79a141e44db2bc" + integrity sha512-FXvL1NQNl6I7fMOJTfQYcBlBZ33vSlm6w80cMpmn8sJh0Lb7wcBpe02UwBsNlARnI+Qsr26XeDs6WHUHQh8CuA== dependencies: - "@metamask/object-multiplex" "^1.1.0" - "@metamask/safe-event-emitter" "^2.0.0" - "@types/chrome" "^0.0.136" + "@metamask/json-rpc-engine" "^7.3.2" + "@metamask/json-rpc-middleware-stream" "^6.0.2" + "@metamask/object-multiplex" "^2.0.0" + "@metamask/rpc-errors" "^6.2.1" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^8.3.0" detect-browser "^5.2.0" - eth-rpc-errors "^4.0.2" - extension-port-stream "^2.0.1" - fast-deep-equal "^2.0.1" + extension-port-stream "^3.0.0" + 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-ts "^0.25.0" + readable-stream "^3.6.2" + webextension-polyfill "^0.10.0" "@metamask/rpc-errors@^6.2.1": version "6.2.1" @@ -4075,65 +3976,53 @@ resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.1.tgz#e89b840a7af8097a8ed4953d8dc8470d1302d3ef" integrity sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw== -"@metamask/sdk-communication-layer@0.14.3": - version "0.14.3" - resolved "https://registry.yarnpkg.com/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.14.3.tgz#0e7ec8e472641273da5802f3b357687ce12369c3" - integrity sha512-yjSbj8y7fFbQXv2HBzUX6D9C8BimkCYP6BDV7hdw53W8b/GlYCtXVxUFajQ9tuO1xPTRjR/xt/dkdr2aCi6WGw== +"@metamask/sdk-communication-layer@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.20.2.tgz#7f7fd334b2d26abd1a5a1ec1ffadf823a9589344" + integrity sha512-TN+whYbCClFSkx52Ild1RcjoRyz8YZgwNvZeooIcZIvCfBM6U9W5273KGiY7WLc/oO4KKmFk17d7vMO4gNvhhw== dependencies: bufferutil "^4.0.8" - cross-fetch "^3.1.5" date-fns "^2.29.3" - eciesjs "^0.3.16" - eventemitter2 "^6.4.5" - socket.io-client "^4.5.1" + debug "^4.3.4" utf-8-validate "^6.0.3" uuid "^8.3.2" -"@metamask/sdk-install-modal-web@0.14.1": - version "0.14.1" - resolved "https://registry.yarnpkg.com/@metamask/sdk-install-modal-web/-/sdk-install-modal-web-0.14.1.tgz#c8e64b4f7d2dac262c2ec28025c541b258478c31" - integrity sha512-emT8HKbnfVwGhPxyUfMja6DWzvtJvDEBQxqCVx93H0HsyrrOzOC43iGCAosslw6o5h7gOfRKLqWmK8V7jQAS2Q== +"@metamask/sdk-install-modal-web@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@metamask/sdk-install-modal-web/-/sdk-install-modal-web-0.20.2.tgz#1cf0eb3c26291de7598190878fa9a893c4eb2d66" + integrity sha512-0QiaZhV15AGdN1zU2jfTI32eC3YkwEpzDfR9+oiZ9bd2G72c6lYBhTsmDGUd01aP6A+bqJR5PjI8Wh2AWtoLeA== dependencies: - "@emotion/react" "^11.10.6" - "@emotion/styled" "^11.10.6" - i18next "22.5.1" qr-code-styling "^1.6.0-rc.1" - react "^18.2.0" - react-dom "^18.2.0" - react-i18next "^13.2.2" -"@metamask/sdk@0.14.3": - version "0.14.3" - resolved "https://registry.yarnpkg.com/@metamask/sdk/-/sdk-0.14.3.tgz#ec1ecf00edef981fd17e2c5cf4ec40ce0a43a55c" - integrity sha512-BYLs//nY2wioVSih78gOQI6sLIYY3vWkwVqXGYUgkBV+bi49bv+9S0m+hZ2cwiRaxfMYtKs0KvhAQ8weiYwDrg== +"@metamask/sdk@0.20.3": + version "0.20.3" + resolved "https://registry.yarnpkg.com/@metamask/sdk/-/sdk-0.20.3.tgz#73851d68ffe5d45c1872c024182922530b187b7a" + integrity sha512-HZ9NwA+LxiXzuy0YWbWsuD4xejQtp85bhcCAf8UgpA/0dOyF3RS4dKDdBBXSyRgk3RWPjeJgHxioaH4CmBmiRA== dependencies: "@metamask/onboarding" "^1.0.1" - "@metamask/post-message-stream" "^6.1.0" - "@metamask/providers" "^10.2.1" - "@metamask/sdk-communication-layer" "0.14.3" - "@metamask/sdk-install-modal-web" "0.14.1" - "@react-native-async-storage/async-storage" "^1.17.11" + "@metamask/providers" "^15.0.0" + "@metamask/sdk-communication-layer" "0.20.2" + "@metamask/sdk-install-modal-web" "0.20.2" "@types/dom-screen-wake-lock" "^1.0.0" bowser "^2.9.0" cross-fetch "^4.0.0" + debug "^4.3.4" eciesjs "^0.3.15" eth-rpc-errors "^4.0.3" eventemitter2 "^6.4.7" - extension-port-stream "^2.0.1" i18next "22.5.1" - i18next-browser-languagedetector "^7.1.0" + i18next-browser-languagedetector "7.1.0" obj-multiplex "^1.0.0" pump "^3.0.0" qrcode-terminal-nooctal "^0.12.1" - react-i18next "^13.2.2" react-native-webview "^11.26.0" - readable-stream "^2.3.7" + readable-stream "^3.6.2" rollup-plugin-visualizer "^5.9.2" socket.io-client "^4.5.1" util "^0.12.4" uuid "^8.3.2" -"@metamask/utils@^5.0.0", "@metamask/utils@^5.0.1": +"@metamask/utils@^5.0.1": version "5.0.2" resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-5.0.2.tgz#140ba5061d90d9dac0280c19cab101bc18c8857c" integrity sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g== @@ -6664,13 +6553,6 @@ slugify "^1.6.5" ua-parser-js "^1.0.2" -"@react-native-async-storage/async-storage@^1.17.11": - version "1.23.1" - resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.23.1.tgz#cad3cd4fab7dacfe9838dce6ecb352f79150c883" - integrity sha512-Qd2kQ3yi6Y3+AcUlrHxSLlnBvpdCEMVGFlVBneVOjaFaPU61g1huc38g339ysXspwY1QZA2aNhrk/KlHGO+ewA== - dependencies: - merge-options "^3.0.4" - "@rollup/plugin-babel@^5.3.0": version "5.3.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" @@ -7084,18 +6966,18 @@ "@stablelib/constant-time" "^1.0.1" "@stablelib/wipe" "^1.0.1" -"@stablelib/random@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.1.tgz#4357a00cb1249d484a9a71e6054bc7b8324a7009" - integrity sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ== +"@stablelib/random@1.0.2", "@stablelib/random@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" + integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== dependencies: "@stablelib/binary" "^1.0.1" "@stablelib/wipe" "^1.0.1" -"@stablelib/random@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" - integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== +"@stablelib/random@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.1.tgz#4357a00cb1249d484a9a71e6054bc7b8324a7009" + integrity sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ== dependencies: "@stablelib/binary" "^1.0.1" "@stablelib/wipe" "^1.0.1" @@ -7123,7 +7005,7 @@ resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== -"@stablelib/x25519@^1.0.3": +"@stablelib/x25519@1.0.3", "@stablelib/x25519@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd" integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== @@ -7329,6 +7211,18 @@ resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== +"@tanstack/query-core@5.36.1": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.36.1.tgz#ae46f935c4752812a56c6815305061a3da82e7b8" + integrity sha512-BteWYEPUcucEu3NBcDAgKuI4U25R9aPrHSP6YSf2NvaD2pSlIQTdqOfLRsxH9WdRYg7k0Uom35Uacb6nvbIMJg== + +"@tanstack/react-query@5.36.2": + version "5.36.2" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.36.2.tgz#1b7dc4c2fa0e48912335f0a157dd942cfa269326" + integrity sha512-bHNa+5dead+j6SA8WVlEOPxcGfteVFgdyFTCFcxBgjnPf0fFpHUc7aNZBCnvmPXqy/BeQa9zTuU9ectb7i8ZXA== + dependencies: + "@tanstack/query-core" "5.36.1" + "@testing-library/dom@^8.5.0": version "8.14.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.14.0.tgz#c9830a21006d87b9ef6e1aae306cf49b0283e28e" @@ -7501,14 +7395,6 @@ dependencies: "@types/node" "*" -"@types/chrome@^0.0.136": - version "0.0.136" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.136.tgz#7c011b9f997b0156f25a140188a0c5689d3f368f" - integrity sha512-XDEiRhLkMd+SB7Iw3ZUIj/fov3wLd4HyTdLltVszkgl1dBfc3Rb7oPMVZ2Mz2TLqnF7Ow+StbR8E7r9lqpb4DA== - dependencies: - "@types/filesystem" "*" - "@types/har-format" "*" - "@types/connect-history-api-fallback@^1.3.5": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" @@ -7591,18 +7477,6 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/filesystem@*": - version "0.0.36" - resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.36.tgz#7227c2d76bfed1b21819db310816c7821d303857" - integrity sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA== - dependencies: - "@types/filewriter" "*" - -"@types/filewriter@*": - version "0.0.33" - resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.33.tgz#d9d611db9d9cd99ae4e458de420eeb64ad604ea8" - integrity sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g== - "@types/fs-extra@^8.0.1": version "8.1.2" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.2.tgz#7125cc2e4bdd9bd2fc83005ffdb1d0ba00cca61f" @@ -7630,11 +7504,6 @@ dependencies: "@types/node" "*" -"@types/har-format@*": - version "1.2.15" - resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.15.tgz#f352493638c2f89d706438a19a9eb300b493b506" - integrity sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA== - "@types/http-proxy@^1.17.8": version "1.17.9" resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" @@ -8262,128 +8131,49 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz#48c46eab21e0730921986ce742563ae83fe7fe34" integrity sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A== -"@vue/compiler-core@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.24.tgz#6b4a5ffddcd874a692f2acfa68981201bcd7096b" - integrity sha512-vbW/tgbwJYj62N/Ww99x0zhFTkZDTcGh3uwJEuadZ/nF9/xuFMC4693P9r+3sxGXISABpDKvffY5ApH9pmdd1A== - dependencies: - "@babel/parser" "^7.24.4" - "@vue/shared" "3.4.24" - entities "^4.5.0" - estree-walker "^2.0.2" - source-map-js "^1.2.0" - -"@vue/compiler-dom@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.24.tgz#b7335a49f095b6d35e48b6f7be8da513c1fa52b8" - integrity sha512-4XgABML/4cNndVsQndG6BbGN7+EoisDwi3oXNovqL/4jdNhwvP8/rfRMTb6FxkxIxUUtg6AI1/qZvwfSjxJiWA== - dependencies: - "@vue/compiler-core" "3.4.24" - "@vue/shared" "3.4.24" - -"@vue/compiler-sfc@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.24.tgz#2872e353147ce2a145169a33ddd4d68dc95c3a18" - integrity sha512-nRAlJUK02FTWfA2nuvNBAqsDZuERGFgxZ8sGH62XgFSvMxO2URblzulExsmj4gFZ8e+VAyDooU9oAoXfEDNxTA== - dependencies: - "@babel/parser" "^7.24.4" - "@vue/compiler-core" "3.4.24" - "@vue/compiler-dom" "3.4.24" - "@vue/compiler-ssr" "3.4.24" - "@vue/shared" "3.4.24" - estree-walker "^2.0.2" - magic-string "^0.30.10" - postcss "^8.4.38" - source-map-js "^1.2.0" - -"@vue/compiler-ssr@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.24.tgz#0d11fe54dabd17cbd6393a16bf7f785da1cfab46" - integrity sha512-ZsAtr4fhaUFnVcDqwW3bYCSDwq+9Gk69q2r/7dAHDrOMw41kylaMgOP4zRnn6GIEJkQznKgrMOGPMFnLB52RbQ== - dependencies: - "@vue/compiler-dom" "3.4.24" - "@vue/shared" "3.4.24" - -"@vue/reactivity@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.24.tgz#150584316ca2acc4ed19a24f9f29863c3a17a7b2" - integrity sha512-nup3fSYg4i4LtNvu9slF/HF/0dkMQYfepUdORBcMSsankzRPzE7ypAFurpwyRBfU1i7Dn1kcwpYsE1wETSh91g== - dependencies: - "@vue/shared" "3.4.24" - -"@vue/runtime-core@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.24.tgz#066c544dc59a07a96c12874a57b750c239124874" - integrity sha512-c7iMfj6cJMeAG3s5yOn9Rc5D9e2/wIuaozmGf/ICGCY3KV5H7mbTVdvEkd4ZshTq7RUZqj2k7LMJWVx+EBiY1g== - dependencies: - "@vue/reactivity" "3.4.24" - "@vue/shared" "3.4.24" - -"@vue/runtime-dom@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.24.tgz#4f8e7acbe1e8ffa7c55af1366e4438729ebe9b20" - integrity sha512-uXKzuh/Emfad2Y7Qm0ABsLZZV6H3mAJ5ZVqmAOlrNQRf+T5mxpPGZBfec1hkP41t6h6FwF6RSGCs/gd8WbuySQ== - dependencies: - "@vue/runtime-core" "3.4.24" - "@vue/shared" "3.4.24" - csstype "^3.1.3" - -"@vue/server-renderer@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.24.tgz#80dd546f8d6a9f5c4f8b68083fe9cc2d62299332" - integrity sha512-H+DLK4sQF6sRgzKyofmlEVBIV/9KrQU6HIV7nt6yIwSGGKvSwlV8pqJlebUKLpbXaNHugdSfAbP6YmXF69lxow== - dependencies: - "@vue/compiler-ssr" "3.4.24" - "@vue/shared" "3.4.24" - -"@vue/shared@3.4.24": - version "3.4.24" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.24.tgz#278ac71f492b392b9b17fe8fc7d324db1a8842db" - integrity sha512-BW4tajrJBM9AGAknnyEw5tO2xTmnqgup0VTnDAMcxYmqOX0RG0b9aSUGAbEKolD91tdwpA6oCwbltoJoNzpItw== - -"@wagmi/connectors@4.1.19": - version "4.1.19" - resolved "https://registry.yarnpkg.com/@wagmi/connectors/-/connectors-4.1.19.tgz#7112f0409818d6671d136029ad0711a51f31c6b0" - integrity sha512-7OmdvepGCmzjGlY+pT7SgItgDd+eo7J2q50PywtnZ8xIdIEJUiwDm37izwQH0S7ZH8EL/9XkmOuz9hV5ORwn8Q== +"@wagmi/connectors@4.3.10": + version "4.3.10" + resolved "https://registry.yarnpkg.com/@wagmi/connectors/-/connectors-4.3.10.tgz#b4ae30712fe0e818efa2a188cdcfc81b1e971f15" + integrity sha512-IZcsocBfDq6pe8sxkDgP2k9YNqv8udl2eSr2hx2JCESA44ixx5zRjoGNMAkKxlzM6uXjXLJKp/g1KYlpmoHkDg== dependencies: "@coinbase/wallet-sdk" "3.9.1" - "@metamask/sdk" "0.14.3" + "@metamask/sdk" "0.20.3" "@safe-global/safe-apps-provider" "0.18.1" "@safe-global/safe-apps-sdk" "8.1.0" - "@walletconnect/ethereum-provider" "2.11.2" + "@walletconnect/ethereum-provider" "2.13.0" "@walletconnect/modal" "2.6.2" -"@wagmi/core@2.6.10": - version "2.6.10" - resolved "https://registry.yarnpkg.com/@wagmi/core/-/core-2.6.10.tgz#2dd62844a2d7eb3329c9afd64a7171c3ee6262f9" - integrity sha512-CwY6T5MZgvhahNltArxVUpeh9Fk+zPeumqXyA+MIB0bdudOaxw0BjHyUOWGwcE8BH+uzT8YuTigeFVW3sKecVg== +"@wagmi/core@2.9.8": + version "2.9.8" + resolved "https://registry.yarnpkg.com/@wagmi/core/-/core-2.9.8.tgz#dad0e4688372526d387576f904da83cb1123a0f9" + integrity sha512-VQJMHZIZta53xFfEels/ig3w3iRFlH3dwQMcn70ZBL8c9RpecE5yus2Wxih4TOaB32hIkOtg4zla1abHG+u4Wg== dependencies: eventemitter3 "5.0.1" mipd "0.0.5" zustand "4.4.1" -"@walletconnect/core@2.11.2": - version "2.11.2" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.11.2.tgz#35286be92c645fa461fecc0dfe25de9f076fca8f" - integrity sha512-bB4SiXX8hX3/hyBfVPC5gwZCXCl+OPj+/EDVM71iAO3TDsh78KPbrVAbDnnsbHzZVHlsMohtXX3j5XVsheN3+g== +"@walletconnect/core@2.13.0": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.13.0.tgz#6b79b039930643e8ee85a0f512b143a35fdb8b52" + integrity sha512-blDuZxQenjeXcVJvHxPznTNl6c/2DO4VNrFnus+qHmO6OtT5lZRowdMtlCaCNb1q0OxzgrmBDcTOCbFcCpio/g== dependencies: - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-provider" "1.0.13" - "@walletconnect/jsonrpc-types" "1.0.3" + "@walletconnect/heartbeat" "1.2.2" + "@walletconnect/jsonrpc-provider" "1.0.14" + "@walletconnect/jsonrpc-types" "1.0.4" "@walletconnect/jsonrpc-utils" "1.0.8" "@walletconnect/jsonrpc-ws-connection" "1.0.14" - "@walletconnect/keyvaluestorage" "^1.1.1" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/relay-api" "^1.0.9" - "@walletconnect/relay-auth" "^1.0.4" - "@walletconnect/safe-json" "^1.0.2" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.2" - "@walletconnect/utils" "2.11.2" - events "^3.3.0" + "@walletconnect/keyvaluestorage" "1.1.1" + "@walletconnect/logger" "2.1.2" + "@walletconnect/relay-api" "1.0.10" + "@walletconnect/relay-auth" "1.0.4" + "@walletconnect/safe-json" "1.0.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.13.0" + "@walletconnect/utils" "2.13.0" + events "3.3.0" isomorphic-unfetch "3.1.0" lodash.isequal "4.5.0" - uint8arrays "^3.1.0" + uint8arrays "3.1.0" "@walletconnect/environment@^1.0.1": version "1.0.1" @@ -8392,23 +8182,23 @@ dependencies: tslib "1.14.1" -"@walletconnect/ethereum-provider@2.11.2": - version "2.11.2" - resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.11.2.tgz#914f773e37a879bc00cf367437c4e98a826247b1" - integrity sha512-BUDqee0Uy2rCZVkW5Ao3q6Ado/3fePYnFdryVF+YL6bPhj+xQZ5OfKodl+uvs7Rwq++O5wTX2RqOTzpW7+v+Mg== +"@walletconnect/ethereum-provider@2.13.0": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.13.0.tgz#5148851983e0d55fa1c18737b2db22802c82434c" + integrity sha512-dnpW8mmLpWl1AZUYGYZpaAfGw1HFkL0WSlhk5xekx3IJJKn4pLacX2QeIOo0iNkzNQxZfux1AK4Grl1DvtzZEA== dependencies: - "@walletconnect/jsonrpc-http-connection" "^1.0.7" - "@walletconnect/jsonrpc-provider" "^1.0.13" - "@walletconnect/jsonrpc-types" "^1.0.3" - "@walletconnect/jsonrpc-utils" "^1.0.8" - "@walletconnect/modal" "^2.6.2" - "@walletconnect/sign-client" "2.11.2" - "@walletconnect/types" "2.11.2" - "@walletconnect/universal-provider" "2.11.2" - "@walletconnect/utils" "2.11.2" - events "^3.3.0" + "@walletconnect/jsonrpc-http-connection" "1.0.8" + "@walletconnect/jsonrpc-provider" "1.0.14" + "@walletconnect/jsonrpc-types" "1.0.4" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/modal" "2.6.2" + "@walletconnect/sign-client" "2.13.0" + "@walletconnect/types" "2.13.0" + "@walletconnect/universal-provider" "2.13.0" + "@walletconnect/utils" "2.13.0" + events "3.3.0" -"@walletconnect/events@^1.0.1": +"@walletconnect/events@1.0.1", "@walletconnect/events@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== @@ -8425,24 +8215,33 @@ "@walletconnect/time" "^1.0.2" tslib "1.14.1" -"@walletconnect/jsonrpc-http-connection@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.7.tgz#a6973569b8854c22da707a759d241e4f5c2d5a98" - integrity sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ== +"@walletconnect/heartbeat@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz#e8dc5179db7769950c6f9cf59b23516d9b95227d" + integrity sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw== + dependencies: + "@walletconnect/events" "^1.0.1" + "@walletconnect/time" "^1.0.2" + events "^3.3.0" + +"@walletconnect/jsonrpc-http-connection@1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.8.tgz#2f4c3948f074960a3edd07909560f3be13e2c7ae" + integrity sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw== dependencies: "@walletconnect/jsonrpc-utils" "^1.0.6" "@walletconnect/safe-json" "^1.0.1" cross-fetch "^3.1.4" - tslib "1.14.1" + events "^3.3.0" -"@walletconnect/jsonrpc-provider@1.0.13", "@walletconnect/jsonrpc-provider@^1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz#9a74da648d015e1fffc745f0c7d629457f53648b" - integrity sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g== +"@walletconnect/jsonrpc-provider@1.0.14": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz#696f3e3b6d728b361f2e8b853cfc6afbdf2e4e3e" + integrity sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow== dependencies: "@walletconnect/jsonrpc-utils" "^1.0.8" "@walletconnect/safe-json" "^1.0.2" - tslib "1.14.1" + events "^3.3.0" "@walletconnect/jsonrpc-types@1.0.3", "@walletconnect/jsonrpc-types@^1.0.3": version "1.0.3" @@ -8452,6 +8251,14 @@ keyvaluestorage-interface "^1.0.0" tslib "1.14.1" +"@walletconnect/jsonrpc-types@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz#ce1a667d79eadf2a2d9d002c152ceb68739c230c" + integrity sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ== + dependencies: + events "^3.3.0" + keyvaluestorage-interface "^1.0.0" + "@walletconnect/jsonrpc-types@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.2.tgz#b79519f679cd6a5fa4a1bea888f27c1916689a20" @@ -8460,7 +8267,7 @@ keyvaluestorage-interface "^1.0.0" tslib "1.14.1" -"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.7", "@walletconnect/jsonrpc-utils@^1.0.8": +"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.8": version "1.0.8" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" integrity sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== @@ -8479,7 +8286,7 @@ events "^3.3.0" ws "^7.5.1" -"@walletconnect/keyvaluestorage@^1.1.1": +"@walletconnect/keyvaluestorage@1.1.1", "@walletconnect/keyvaluestorage@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz#dd2caddabfbaf80f6b8993a0704d8b83115a1842" integrity sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA== @@ -8488,6 +8295,14 @@ idb-keyval "^6.2.1" unstorage "^1.9.0" +"@walletconnect/logger@2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.1.2.tgz#813c9af61b96323a99f16c10089bfeb525e2a272" + integrity sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw== + dependencies: + "@walletconnect/safe-json" "^1.0.2" + pino "7.11.0" + "@walletconnect/logger@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.0.1.tgz#7f489b96e9a1ff6bf3e58f0fbd6d69718bf844a8" @@ -8521,6 +8336,13 @@ "@walletconnect/modal-core" "2.6.2" "@walletconnect/modal-ui" "2.6.2" +"@walletconnect/relay-api@1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.10.tgz#5aef3cd07c21582b968136179aa75849dcc65499" + integrity sha512-tqrdd4zU9VBNqUaXXQASaexklv6A54yEyQQEXYOCr+Jz8Ket0dmPBDyg19LVSNUN2cipAghQc45/KVmfFJ0cYw== + dependencies: + "@walletconnect/jsonrpc-types" "^1.0.2" + "@walletconnect/relay-api@^1.0.9": version "1.0.9" resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.9.tgz#f8c2c3993dddaa9f33ed42197fc9bfebd790ecaf" @@ -8529,7 +8351,7 @@ "@walletconnect/jsonrpc-types" "^1.0.2" tslib "1.14.1" -"@walletconnect/relay-auth@^1.0.4": +"@walletconnect/relay-auth@1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz#0b5c55c9aa3b0ef61f526ce679f3ff8a5c4c2c7c" integrity sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ== @@ -8541,6 +8363,13 @@ tslib "1.14.1" uint8arrays "^3.0.0" +"@walletconnect/safe-json@1.0.2", "@walletconnect/safe-json@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" + integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== + dependencies: + tslib "1.14.1" + "@walletconnect/safe-json@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.1.tgz#9813fa0a7a544b16468730c2d7bed046ed160957" @@ -8548,39 +8377,32 @@ dependencies: tslib "1.14.1" -"@walletconnect/safe-json@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" - integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== - dependencies: - tslib "1.14.1" - -"@walletconnect/sign-client@2.11.2": - version "2.11.2" - resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.11.2.tgz#855609653855f0d23b0502cdbdcf43402e34c459" - integrity sha512-MfBcuSz2GmMH+P7MrCP46mVE5qhP0ZyWA0FyIH6/WuxQ6G+MgKsGfaITqakpRPsykWOJq8tXMs3XvUPDU413OQ== +"@walletconnect/sign-client@2.13.0": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.13.0.tgz#f59993f082aec1ca5498b9519027e764c1e6d28b" + integrity sha512-En7KSvNUlQFx20IsYGsFgkNJ2lpvDvRsSFOT5PTdGskwCkUfOpB33SQJ6nCrN19gyoKPNvWg80Cy6MJI0TjNYA== dependencies: - "@walletconnect/core" "2.11.2" - "@walletconnect/events" "^1.0.1" - "@walletconnect/heartbeat" "1.2.1" + "@walletconnect/core" "2.13.0" + "@walletconnect/events" "1.0.1" + "@walletconnect/heartbeat" "1.2.2" "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.2" - "@walletconnect/utils" "2.11.2" - events "^3.3.0" + "@walletconnect/logger" "2.1.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.13.0" + "@walletconnect/utils" "2.13.0" + events "3.3.0" -"@walletconnect/time@^1.0.2": +"@walletconnect/time@1.0.2", "@walletconnect/time@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523" integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== dependencies: tslib "1.14.1" -"@walletconnect/types@2.11.2": - version "2.11.2" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.11.2.tgz#d0359dd4106fcaa1634241a00428d3ea08d0d3c7" - integrity sha512-p632MFB+lJbip2cvtXPBQslpUdiw1sDtQ5y855bOlAGquay+6fZ4h1DcDePeKQDQM3P77ax2a9aNPZxV6y/h1Q== +"@walletconnect/types@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.12.0.tgz#83e1057c795d41afaeecad3a2776aaa4ba12f5d6" + integrity sha512-uhB3waGmujQVJcPgJvGOpB8RalgYSBT+HpmVbfl4Qe0xJyqpRUo4bPjQa0UYkrHaW20xIw94OuP4+FMLYdeemg== dependencies: "@walletconnect/events" "^1.0.1" "@walletconnect/heartbeat" "1.2.1" @@ -8589,25 +8411,37 @@ "@walletconnect/logger" "^2.0.1" events "^3.3.0" -"@walletconnect/universal-provider@2.11.2": - version "2.11.2" - resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.11.2.tgz#bec3038f51445d707bbec75f0cb8af0a1f1e04db" - integrity sha512-cNtIn5AVoDxKAJ4PmB8m5adnf5mYQMUamEUPKMVvOPscfGtIMQEh9peKsh2AN5xcRVDbgluC01Id545evFyymw== +"@walletconnect/types@2.13.0": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.13.0.tgz#cdac083651f5897084fe9ed62779f11810335ac6" + integrity sha512-MWaVT0FkZwzYbD3tvk8F+2qpPlz1LUSWHuqbINUtMXnSzJtXN49Y99fR7FuBhNFtDalfuWsEK17GrNA+KnAsPQ== dependencies: - "@walletconnect/jsonrpc-http-connection" "^1.0.7" - "@walletconnect/jsonrpc-provider" "1.0.13" - "@walletconnect/jsonrpc-types" "^1.0.2" - "@walletconnect/jsonrpc-utils" "^1.0.7" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/sign-client" "2.11.2" - "@walletconnect/types" "2.11.2" - "@walletconnect/utils" "2.11.2" - events "^3.3.0" + "@walletconnect/events" "1.0.1" + "@walletconnect/heartbeat" "1.2.2" + "@walletconnect/jsonrpc-types" "1.0.4" + "@walletconnect/keyvaluestorage" "1.1.1" + "@walletconnect/logger" "2.1.2" + events "3.3.0" -"@walletconnect/utils@2.11.2": - version "2.11.2" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.11.2.tgz#dee0f19adf5e38543612cbe9fa4de7ed28eb7e85" - integrity sha512-LyfdmrnZY6dWqlF4eDrx5jpUwsB2bEPjoqR5Z6rXPiHJKUOdJt7az+mNOn5KTSOlRpd1DmozrBrWr+G9fFLYVw== +"@walletconnect/universal-provider@2.13.0": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.13.0.tgz#f2b597001245e4d4a06d96dd1bce8d3a8a4dcbbf" + integrity sha512-B5QvO8pnk5Bqn4aIt0OukGEQn2Auk9VbHfhQb9cGwgmSCd1GlprX/Qblu4gyT5+TjHMb1Gz5UssUaZWTWbDhBg== + dependencies: + "@walletconnect/jsonrpc-http-connection" "1.0.8" + "@walletconnect/jsonrpc-provider" "1.0.14" + "@walletconnect/jsonrpc-types" "1.0.4" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/logger" "2.1.2" + "@walletconnect/sign-client" "2.13.0" + "@walletconnect/types" "2.13.0" + "@walletconnect/utils" "2.13.0" + events "3.3.0" + +"@walletconnect/utils@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.12.0.tgz#0a48f114d9c344d390730782d0d7a365814371bf" + integrity sha512-GIpfHUe1Bjp1Tjda0SkJEizKOT2biuv7VPFnKsOLT1T+8QxEP9NruC+K2UUEvijS1Qr/LKH9P5004RYNgrch+w== dependencies: "@stablelib/chacha20poly1305" "1.0.1" "@stablelib/hkdf" "1.0.1" @@ -8617,21 +8451,41 @@ "@walletconnect/relay-api" "^1.0.9" "@walletconnect/safe-json" "^1.0.2" "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.11.2" + "@walletconnect/types" "2.12.0" "@walletconnect/window-getters" "^1.0.1" "@walletconnect/window-metadata" "^1.0.1" detect-browser "5.3.0" query-string "7.1.3" uint8arrays "^3.1.0" -"@walletconnect/window-getters@^1.0.1": +"@walletconnect/utils@2.13.0": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.13.0.tgz#1fc1fbff0d26db0830e65d1ba8cfe1a13a0616ad" + integrity sha512-q1eDCsRHj5iLe7fF8RroGoPZpdo2CYMZzQSrw1iqL+2+GOeqapxxuJ1vaJkmDUkwgklfB22ufqG6KQnz78sD4w== + dependencies: + "@stablelib/chacha20poly1305" "1.0.1" + "@stablelib/hkdf" "1.0.1" + "@stablelib/random" "1.0.2" + "@stablelib/sha256" "1.0.1" + "@stablelib/x25519" "1.0.3" + "@walletconnect/relay-api" "1.0.10" + "@walletconnect/safe-json" "1.0.2" + "@walletconnect/time" "1.0.2" + "@walletconnect/types" "2.13.0" + "@walletconnect/window-getters" "1.0.1" + "@walletconnect/window-metadata" "1.0.1" + detect-browser "5.3.0" + query-string "7.1.3" + uint8arrays "3.1.0" + +"@walletconnect/window-getters@1.0.1", "@walletconnect/window-getters@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== dependencies: tslib "1.14.1" -"@walletconnect/window-metadata@^1.0.1": +"@walletconnect/window-metadata@1.0.1", "@walletconnect/window-metadata@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5" integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== @@ -8639,103 +8493,103 @@ "@walletconnect/window-getters" "^1.0.1" tslib "1.14.1" -"@web3modal/common@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@web3modal/common/-/common-4.1.1.tgz#1d8b84073a8c023204ecd412e4c7591fcd2b32f3" - integrity sha512-InaJY+PfjtcT4ewySMDTCON2jGuk5kKVuleIz04BWNU92Gm2S4hU7knLhIzPshpyv31Hv3/kO2NFhaxx3CLD+w== +"@web3modal/common@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@web3modal/common/-/common-4.2.0.tgz#cecc1a3bf46d54d19b0bf0f9536cbd2134fa6016" + integrity sha512-f5viBpEAmXmy0xdBdjluq8MZaoxJrpU2eJzKRcQ/gtFhuiZFsdavLMqflG5AUNCF+elBTc+BZw3sGAT2N1rAnQ== dependencies: + bignumber.js "9.1.2" dayjs "1.11.10" -"@web3modal/core@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@web3modal/core/-/core-4.1.1.tgz#cb7dadede30ac11fc54a3d59b2dfa5e948baadc4" - integrity sha512-+FT73nYHKqF0VlkB9lo6mvfR/WjB4dz24JPwKb2Vq05JVyOcnbt5S06IeTtjI7zgKv3MyKzDzxh6z1ScgbTaRA== +"@web3modal/core@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@web3modal/core/-/core-4.2.0.tgz#0ee567814494afb01a2372548206a37e6d962a23" + integrity sha512-8HEaq8sDA+o62VASOF5faxtaQa6RC8ZXCcAV6A3uR4SI8JXu6BrnkdyCvHgOaMSUpDJ+hAgjDPp2qK2PnDuIhw== dependencies: - "@web3modal/common" "4.1.1" - "@web3modal/wallet" "4.1.1" + "@web3modal/common" "4.2.0" + "@web3modal/wallet" "4.2.0" valtio "1.11.2" -"@web3modal/polyfills@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@web3modal/polyfills/-/polyfills-4.1.1.tgz#5b9b25519e2401389f4d921c30697b3e956abafe" - integrity sha512-HQ90relyjjLfTj5XJhhDV9l3Mp10Rvv/MN+GCvzEx/xY7Tz4yhmKZUX3c519pz2BeVYjea+xwwu6OoOwd3GAXQ== +"@web3modal/polyfills@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@web3modal/polyfills/-/polyfills-4.2.0.tgz#ed48049e794378da97bb9fedd9d2b8ce1aae4180" + integrity sha512-tWuj6UxaoAPogwsr/cv/XYLJCIyhlEf2XqDtVpOuAr3blhw1t+um8CycscT5OBU6aboW/S96yWhrd6buBnup3g== dependencies: buffer "6.0.3" -"@web3modal/scaffold-react@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@web3modal/scaffold-react/-/scaffold-react-4.1.1.tgz#7d456c006034c8f3a88009bf4ba653cbe3d48af7" - integrity sha512-g+iVswup3MRlDTnwJoIayLDVhFyCVTNTfVaEYaxvr8ADKNb90t3nzY742ZVQOdYitvrWrAMboVaOB6LuLCvrsA== +"@web3modal/scaffold-react@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold-react/-/scaffold-react-4.2.0.tgz#7c6657fd4638eb477b2ea534de90d29c2794db40" + integrity sha512-lDkEHFfgBcx2tu7V8I6qKnYlMybUL7WwPBCKi3CDFhxsjXyOvnmbXRsuMuma546N59eRteXxpimXfHNYpS6pqg== dependencies: - "@web3modal/scaffold" "4.1.1" + "@web3modal/scaffold" "4.2.0" -"@web3modal/scaffold-utils@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@web3modal/scaffold-utils/-/scaffold-utils-4.1.1.tgz#5822b05cc049701cce73b0a6e641100fceeead34" - integrity sha512-v9TlKchCPTOGitduI3hUm7PReWcxt55aifYHuCFklwgFatBlUZb/JrXpiCUhp6RpOfnSIA5gV65eyEucIbKY5A== +"@web3modal/scaffold-utils@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold-utils/-/scaffold-utils-4.2.0.tgz#add002aa7e27f59768e0c9cd6a8cf9bf30d0e018" + integrity sha512-HAMPKPAAkDxp435011NGcCXeWtCCCwewBdkU6OLq04g74biYRf9c4lT3i6mEAgjl5EOI5wv9t7t+13p9UbK34A== dependencies: - "@web3modal/core" "4.1.1" - "@web3modal/polyfills" "4.1.1" + "@web3modal/core" "4.2.0" + "@web3modal/polyfills" "4.2.0" valtio "1.11.2" -"@web3modal/scaffold-vue@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@web3modal/scaffold-vue/-/scaffold-vue-4.1.1.tgz#94bb10bcf4981d4cd09cf9d136c954fe8eeff9f3" - integrity sha512-8qDnRmOR1jMlEB6fuFZ2CiWFYtq6M1OGKcN2DGz4c0dggivsa10cjUXqJqrsic6nUxWKPWou0+osIlJ9hR1YBA== +"@web3modal/scaffold-vue@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold-vue/-/scaffold-vue-4.2.0.tgz#fe5c3c63cb91da3e937468d6ac75de720713b888" + integrity sha512-+O+s4ZiRsa8S2slMkA9BPjDgb3dGxi4rrBft7URDbi4tC2/hUDteLPGhTmSJcu7xuz3Fyc2Nsj6GBH+ozwWjoA== dependencies: - "@web3modal/scaffold" "4.1.1" + "@web3modal/scaffold" "4.2.0" -"@web3modal/scaffold@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@web3modal/scaffold/-/scaffold-4.1.1.tgz#18dc6bf27611896a8ea463c1ea1240f899d006b5" - integrity sha512-GBryCiyl+taz5DPq0expxzfMVcrpKjWvEBSAqT1tPUSthnzOWnVF77XlUAYgFZqzPsEu9lQ1dHCdqZx7WWMCXA== - dependencies: - "@web3modal/common" "4.1.1" - "@web3modal/core" "4.1.1" - "@web3modal/ui" "4.1.1" +"@web3modal/scaffold@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold/-/scaffold-4.2.0.tgz#9fb83959b4a45c704c03f3b798a9c89caf3344d8" + integrity sha512-hrJFBGMRcLKGpjr7c8uqPBSgs33mu2Jh7vn0VrlICaN/BGVMuWfsleE7BMkTJDvCpBGCj73V6pTOonj+lXtATw== + dependencies: + "@web3modal/common" "4.2.0" + "@web3modal/core" "4.2.0" + "@web3modal/siwe" "4.2.0" + "@web3modal/ui" "4.2.0" + "@web3modal/wallet" "4.2.0" lit "3.1.0" - optionalDependencies: - "@web3modal/siwe" "4.1.1" -"@web3modal/siwe@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@web3modal/siwe/-/siwe-4.1.1.tgz#ef5b6768ea65295748c4859eee6fb89a4b183726" - integrity sha512-qQ4NKxrlD0gcFqh1G3yLlyRYABoBU7uXw3RQqpf1BiJSSMT2ePBfOwsCTJ6OPuT1RjKt9JNBADctua/sqEItCw== +"@web3modal/siwe@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@web3modal/siwe/-/siwe-4.2.0.tgz#81e846eececc76f6f201c965771b7ca878599f31" + integrity sha512-GimG+iBawd3nHr1k0Y/rpWAP/pSCd93xpo3OwkKHjhTSSM3GbA0/aY/GPcGR1VKA9FYDNALHgP2fwSHFgya8Bg== dependencies: - "@web3modal/core" "4.1.1" - "@web3modal/scaffold-utils" "4.1.1" + "@walletconnect/utils" "2.12.0" + "@web3modal/core" "4.2.0" + "@web3modal/scaffold-utils" "4.2.0" lit "3.1.0" valtio "1.11.2" -"@web3modal/ui@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@web3modal/ui/-/ui-4.1.1.tgz#e09f64b0b6733e7e3b14f148441b57b1c97ced80" - integrity sha512-6ntwIdi3VHR1HLIiyoannOAcckDs3XYrxxIu8cflba6UyuASJ6AH/AY3ULE88fvE55jM/Lra3uuOYj8yE5QjUw== +"@web3modal/ui@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@web3modal/ui/-/ui-4.2.0.tgz#f441339996a43d3c56135ec9cac89b737337a485" + integrity sha512-jSGy8MWhkxfx6nng+4HrKVJD9gyXBrXR1LZHzEEVxdZsQtnrPIjiTvgkE/7FEJjkd4DI+WU0t91/NYNeFraAbg== dependencies: lit "3.1.0" qrcode "1.5.3" -"@web3modal/wagmi@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@web3modal/wagmi/-/wagmi-4.1.1.tgz#aa3de2a55e079ff4b3a4bd36f047c721cdf0b025" - integrity sha512-XMT+naasTfxmt2ogHO7c2wWL63S9SkfoGEIvd7AaxtqlXZfVKtCqyJJC710WiBUhUCyt9wD6hQNjRB1nWN3TGg== - dependencies: - "@web3modal/polyfills" "4.1.1" - "@web3modal/scaffold" "4.1.1" - "@web3modal/scaffold-react" "4.1.1" - "@web3modal/scaffold-utils" "4.1.1" - "@web3modal/scaffold-vue" "4.1.1" - optionalDependencies: - "@web3modal/siwe" "4.1.1" - react ">=17" - react-dom ">=17" - vue ">=3" - -"@web3modal/wallet@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@web3modal/wallet/-/wallet-4.1.1.tgz#a5358701689f5917b0f6d8b86e706f23e79da0c5" - integrity sha512-KgITukYJXDete4MeH95jditHtQ1gvB+q97td0cjxA+xwzLCgihDfHZEq1kuVg5Fj40ECUV4O6IBc++cNeL9EXQ== +"@web3modal/wagmi@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@web3modal/wagmi/-/wagmi-4.2.0.tgz#857060367c169ef84ff4821ce80909ee0d21aa90" + integrity sha512-mhATH10j2vHeqMKMnhxzfbCClxMCNOUR4k4zvZZjA/Prae3yCvOiulZGoYxqYuiLcS7otmZ5uxJdvVV0BhWKkg== + dependencies: + "@walletconnect/ethereum-provider" "2.13.0" + "@web3modal/polyfills" "4.2.0" + "@web3modal/scaffold" "4.2.0" + "@web3modal/scaffold-react" "4.2.0" + "@web3modal/scaffold-utils" "4.2.0" + "@web3modal/scaffold-vue" "4.2.0" + "@web3modal/siwe" "4.2.0" + +"@web3modal/wallet@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@web3modal/wallet/-/wallet-4.2.0.tgz#a205da6ed91b1b935696e986dd2bf23e95eead4a" + integrity sha512-5dhZ481nmDAcrMh/ZUR9iHV4sOz86bjlGUf1CohQEYv9KzXtoRXtYERRSvibizXwcolgplk1pqHGSMilUKxAnw== dependencies: + "@web3modal/polyfills" "4.2.0" zod "3.22.4" "@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": @@ -9694,15 +9548,6 @@ babel-plugin-macros@^2.8.0: cosmiconfig "^6.0.0" resolve "^1.12.0" -babel-plugin-macros@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" - babel-plugin-polyfill-corejs2@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" @@ -9870,6 +9715,11 @@ big.js@^6.1.1: resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.1.tgz#7205ce763efb17c2e41f26f121c420c6a7c2744f" integrity sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ== +bignumber.js@9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + bin-links@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.1.tgz#cc70ffb481988b22c527d3e6e454787876987a49" @@ -11173,11 +11023,6 @@ conventional-recommended-bump@^7.0.0: git-semver-tags "^5.0.0" meow "^8.1.2" -convert-source-map@^1.5.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" @@ -11374,7 +11219,7 @@ critters@0.0.20: postcss "^8.4.23" pretty-bytes "^5.3.0" -cross-fetch@^3.1.4, cross-fetch@^3.1.5: +cross-fetch@^3.1.4: version "3.1.8" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== @@ -11739,11 +11584,6 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== -csstype@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - cypress@^12.2.0: version "12.17.4" resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.17.4.tgz#b4dadf41673058493fa0d2362faa3da1f6ae2e6c" @@ -12361,7 +12201,7 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -eciesjs@^0.3.15, eciesjs@^0.3.16: +eciesjs@^0.3.15: version "0.3.18" resolved "https://registry.yarnpkg.com/eciesjs/-/eciesjs-0.3.18.tgz#67b5d73a8466e40a45bbc2f2a3177e71e9c0643d" integrity sha512-RQhegEtLSyIiGJmFTZfvCTHER/fymipXFVx6OwSRYD6hOuy+6Kjpk0dGvIfP9kxn/smBpxQy71uxpGO406ITCw== @@ -12464,7 +12304,7 @@ encoding@^0.1.12, encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0, end-of-stream@^1.4.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4: +end-of-stream@^1.1.0, end-of-stream@^1.4.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -12528,7 +12368,7 @@ entities@^3.0.1: resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== -entities@^4.2.0, entities@^4.3.0, entities@^4.4.0, entities@^4.5.0: +entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -13222,7 +13062,7 @@ estree-walker@^1.0.1: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== -estree-walker@^2.0.1, estree-walker@^2.0.2: +estree-walker@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== @@ -13335,7 +13175,7 @@ eventemitter2@6.4.7: resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== -eventemitter2@^6.4.5, eventemitter2@^6.4.7: +eventemitter2@^6.4.7: version "6.4.9" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== @@ -13515,11 +13355,12 @@ extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extension-port-stream@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/extension-port-stream/-/extension-port-stream-2.1.1.tgz#ec11f2a5ed95655d8c40805d7cb0c39939ee9ef4" - integrity sha512-qknp5o5rj2J9CRKfVB8KJr+uXQlrojNZzdESUPhKYLXf97TPcGf6qWWKmpsNNtUyOdzFhab1ON0jzouNxHHvow== +extension-port-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extension-port-stream/-/extension-port-stream-3.0.0.tgz#00a7185fe2322708a36ed24843c81bd754925fef" + integrity sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw== dependencies: + readable-stream "^3.6.2 || ^4.4.2" webextension-polyfill ">=0.10.0 <1.0" external-editor@^3.0.3: @@ -13552,11 +13393,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -13747,11 +13583,6 @@ find-cache-dir@^3.3.1, find-cache-dir@^3.3.2: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -14552,13 +14383,6 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - hook-std@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" @@ -14622,13 +14446,6 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" - integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== - dependencies: - void-elements "3.1.0" - htmlnano@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-2.1.0.tgz#67b31b3cd3fad23f0b610ca628fdb48382209c3c" @@ -14822,12 +14639,12 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -i18next-browser-languagedetector@^7.1.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.1.tgz#1968196d437b4c8db847410c7c33554f6c448f6f" - integrity sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw== +i18next-browser-languagedetector@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.1.0.tgz#01876fac51f86b78975e79b48ccb62e2313a2d7d" + integrity sha512-cr2k7u1XJJ4HTOjM9GyOMtbOA47RtUoWRAtt52z43r3AoMs2StYKyjS3URPhzHaf+mn10hY9dZWamga5WPQjhA== dependencies: - "@babel/runtime" "^7.23.2" + "@babel/runtime" "^7.19.4" i18next@22.5.1: version "22.5.1" @@ -16561,15 +16378,6 @@ json-rpc-engine@^6.1.0: "@metamask/safe-event-emitter" "^2.0.0" eth-rpc-errors "^4.0.2" -json-rpc-middleware-stream@^4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/json-rpc-middleware-stream/-/json-rpc-middleware-stream-4.2.3.tgz#08340846ffaa2a60287930773546eb4b7f7dbba2" - integrity sha512-4iFb0yffm5vo3eFKDbQgke9o17XBcLQ2c3sONrXSbcOLzP8LTojqo8hRGVgtJShhm5q4ZDSNq039fAx9o65E1w== - dependencies: - "@metamask/safe-event-emitter" "^3.0.0" - json-rpc-engine "^6.1.0" - readable-stream "^2.3.3" - json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" @@ -17478,13 +17286,6 @@ magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" -magic-string@^0.30.10: - version "0.30.10" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" - integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - magic-string@~0.26.2: version "0.26.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.7.tgz#caf7daf61b34e9982f8228c4527474dac8981d6f" @@ -20372,7 +20173,7 @@ postcss@8.4.24, postcss@^8.4.14: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.24, postcss@^8.4.38: +postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.24: version "8.4.38" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== @@ -20503,11 +20304,6 @@ proc-log@^3.0.0: resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - integrity sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -20819,7 +20615,7 @@ rc@1.2.8, rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@18.2.0, react-dom@>=17, react-dom@^18.2.0: +react-dom@18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -20839,20 +20635,12 @@ react-error-overlay@6.0.9: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== -react-i18next@^13.2.2: - version "13.5.0" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-13.5.0.tgz#44198f747628267a115c565f0c736a50a76b1ab0" - integrity sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA== - dependencies: - "@babel/runtime" "^7.22.5" - html-parse-stringify "^3.0.1" - "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -20912,7 +20700,7 @@ react-test-renderer@18.2.0: react-shallow-renderer "^16.15.0" scheduler "^0.23.0" -react@18.2.0, react@>=17, react@^18.2.0: +react@18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -21010,19 +20798,6 @@ read@1, read@^1.0.7, read@~1.0.7: dependencies: mute-stream "~0.0.4" -readable-stream@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - integrity sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ== - 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" - readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -21055,7 +20830,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.7: +readable-stream@^2.2.2, readable-stream@^2.3.3: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -21077,6 +20852,17 @@ readable-stream@^3.6.2: string_decoder "^1.1.1" util-deprecate "^1.0.1" +"readable-stream@^3.6.2 || ^4.4.2": + version "4.5.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" + integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + readable-stream@~1.0.26, readable-stream@~1.0.26-4: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -22186,11 +21972,6 @@ source-map@0.7.4, source-map@^0.7.3, source-map@^0.7.4: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== -source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" @@ -22521,7 +22302,7 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -string_decoder@^1.1.1: +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -22533,13 +22314,6 @@ string_decoder@~0.10.x: resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== - dependencies: - safe-buffer "~5.1.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -22655,11 +22429,6 @@ stylehacks@^6.1.1: browserslist "^4.23.0" postcss-selector-parser "^6.0.16" -stylis@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" - integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== - stylus-loader@^7.1.0: version "7.1.3" resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-7.1.3.tgz#1fdfa0d34e8c05a569bc0902e1ecdb857d764964" @@ -23374,6 +23143,13 @@ uint8arraylist@^2.0.0, uint8arraylist@^2.1.2, uint8arraylist@^2.4.3: dependencies: uint8arrays "^4.0.2" +uint8arrays@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.0.tgz#8186b8eafce68f28bd29bd29d683a311778901e2" + integrity sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog== + dependencies: + multiformats "^9.4.2" + uint8arrays@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.0.0.tgz#260869efb8422418b6f04e3fac73a3908175c63b" @@ -23762,31 +23538,31 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -viem@^1.0.0, viem@^1.1.4: - version "1.21.4" - resolved "https://registry.yarnpkg.com/viem/-/viem-1.21.4.tgz#883760e9222540a5a7e0339809202b45fe6a842d" - integrity sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ== +viem@2.10.5: + version "2.10.5" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.10.5.tgz#97e53421e20886b34e4e5e03d01f8b6e320d216f" + integrity sha512-rzU2y6poYgXu7axcQmwddaJ/nGP3tjtslXdUCu+PvryeXACuuqoyP3chjTEHciG84a663gYbrVGbxNUFA3aURQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" "@noble/hashes" "1.3.2" "@scure/bip32" "1.3.2" "@scure/bip39" "1.2.1" - abitype "0.9.8" + abitype "1.0.0" isows "1.0.3" ws "8.13.0" -viem@^2.9.5: - version "2.9.25" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.25.tgz#afcf320790e175b2afc83d29819f56cb50906f0d" - integrity sha512-W0QOXCsYQppnV89PQP0EnCvfZIEsDYqmpVakLPNrok4Q4B7651M3MV/sYifYcLWv3Mn4KUyMCUlVxlej6CfC/w== +viem@^1.0.0, viem@^1.1.4: + version "1.21.4" + resolved "https://registry.yarnpkg.com/viem/-/viem-1.21.4.tgz#883760e9222540a5a7e0339809202b45fe6a842d" + integrity sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" "@noble/hashes" "1.3.2" "@scure/bip32" "1.3.2" "@scure/bip39" "1.2.1" - abitype "1.0.0" + abitype "0.9.8" isows "1.0.3" ws "8.13.0" @@ -23801,22 +23577,6 @@ vite@4.3.9: optionalDependencies: fsevents "~2.3.2" -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -vue@>=3: - version "3.4.24" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.24.tgz#f269549939a6c092480f018aa0bd886ba64f4c6f" - integrity sha512-NPdx7dLGyHmKHGRRU5bMRYVE+rechR+KDU5R2tSTNG36PuMwbfAJ+amEvOAw7BPfZp5sQulNELSLm5YUkau+Sg== - dependencies: - "@vue/compiler-dom" "3.4.24" - "@vue/compiler-sfc" "3.4.24" - "@vue/runtime-dom" "3.4.24" - "@vue/server-renderer" "3.4.24" - "@vue/shared" "3.4.24" - w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -23838,6 +23598,15 @@ w3c-xmlserializer@^4.0.0: dependencies: xml-name-validator "^4.0.0" +wagmi@2.8.8: + version "2.8.8" + resolved "https://registry.yarnpkg.com/wagmi/-/wagmi-2.8.8.tgz#094dc5fc9b421791105081bba25ee9ab77126def" + integrity sha512-M1RynFKP/WQuJY97UGnUVIItm9Gub8q67DAlPe8AYsKvk7j9vmj72BhAGrZqGKnHNMarR8ODYspoP8fMfO/4sA== + dependencies: + "@wagmi/connectors" "4.3.10" + "@wagmi/core" "2.9.8" + use-sync-external-store "1.2.0" + walk-up-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" @@ -23885,13 +23654,6 @@ weak-lru-cache@^1.2.2: resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19" integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== -webextension-polyfill-ts@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/webextension-polyfill-ts/-/webextension-polyfill-ts-0.25.0.tgz#fff041626365dbd0e29c40b197e989a55ec221ca" - integrity sha512-ikQhwwHYkpBu00pFaUzIKY26I6L87DeRI+Q6jBT1daZUNuu8dSrg5U9l/ZbqdaQ1M/TTSPKeAa3kolP5liuedw== - dependencies: - webextension-polyfill "^0.7.0" - "webextension-polyfill@>=0.10.0 <1.0": version "0.11.0" resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.11.0.tgz#1640c0d27192424fd5b420237acbe453f88c8246" @@ -23900,10 +23662,10 @@ webextension-polyfill-ts@^0.25.0: webpack "^5.91.0" webpack-cli "^5.1.4" -webextension-polyfill@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.7.0.tgz#0df1120ff0266056319ce1a622b09ad8d4a56505" - integrity sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw== +webextension-polyfill@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz#ccb28101c910ba8cf955f7e6a263e662d744dbb8" + integrity sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g== webidl-conversions@^3.0.0: version "3.0.1" From 6c137e13acbab4dcfb33c66c74de116b689c9269 Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Mon, 20 May 2024 22:36:07 +0900 Subject: [PATCH 10/45] feat: Query estimateGas (also fixes MetaMask mobile). --- packages/ethereum-wallets/src/lib/index.ts | 98 ++++++++++++---------- 1 file changed, 54 insertions(+), 44 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 95b863d81..73d356636 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -23,9 +23,11 @@ import { writeContract, waitForTransactionReceipt, disconnect, + estimateGas, type GetAccountReturnType, type Config, } from "@wagmi/core"; +import { type WriteContractParameters } from "@wagmi/core"; import { bytesToHex, keccak256, toHex } from "viem"; import bs58 from "bs58"; @@ -136,49 +138,52 @@ const EthereumWallets: WalletBehaviourFactory< ? tx.receiverId : "0x" + keccak256(toHex(tx.receiverId)).slice(26) ) as `0x${string}`; - let result; + let ethTx: WriteContractParameters; switch (tx.actions[0].type) { case "AddKey": { const publicKey = bytesToHex( bs58.decode(tx.actions[0].params.publicKey.split(":")[1]) ); if (tx.actions[0].params.accessKey.permission === "FullAccess") { - result = await writeContract(wagmiConfig, { + const args = [ + 0, // 0 stands for ed25519 + publicKey, + BigInt(tx.actions[0].params.accessKey.nonce ?? 0), + true, + false, // Not used with is_full_access + BigInt(0), // Not used with is_full_access + "", // Not used with is_full_access + [], // Not used with is_full_access + ]; + ethTx = { abi: ETHEREUM_ACCOUNT_ABI, address: to, functionName: "addKey", - args: [ - 0, // 0 stands for ed25519 - publicKey, - BigInt(tx.actions[0].params.accessKey.nonce ?? 0), - true, - false, // Not used with is_full_access - BigInt(0), // Not used with is_full_access - "", // Not used with is_full_access - [], // Not used with is_full_access - ], + args, chainId: expectedChainId, type: "legacy", - }); + }; + throw new Error("Requesting a FullAccess key is not allowed."); } else { const allowance = BigInt( tx.actions[0].params.accessKey.permission.allowance ?? DEFAULT_ACCESS_KEY_ALLOWANCE ); - result = await writeContract(wagmiConfig, { + const args = [ + 0, // 0 stands for ed25519 + publicKey, + BigInt(tx.actions[0].params.accessKey.nonce ?? 0), + false, + allowance > 0 ? true : false, + allowance, + tx.actions[0].params.accessKey.permission.receiverId, + tx.actions[0].params.accessKey.permission.methodNames ?? [], + ]; + ethTx = { abi: ETHEREUM_ACCOUNT_ABI, address: to, functionName: "addKey", - args: [ - 0, // 0 stands for ed25519 - publicKey, - BigInt(tx.actions[0].params.accessKey.nonce ?? 0), - false, - allowance > 0 ? true : false, - allowance, - tx.actions[0].params.accessKey.permission.receiverId, - tx.actions[0].params.accessKey.permission.methodNames ?? [], - ], + args, gasPrice: tx.actions[0].params.publicKey === relayerPublicKey && tx.receiverId === @@ -189,7 +194,7 @@ const EthereumWallets: WalletBehaviourFactory< : undefined, chainId: expectedChainId, type: "legacy", - }); + }; } break; } @@ -197,59 +202,64 @@ const EthereumWallets: WalletBehaviourFactory< const publicKey = bytesToHex( bs58.decode(tx.actions[0].params.publicKey.split(":")[1]) ); - result = await writeContract(wagmiConfig, { + const args = [ + 0, // 0 stands for ed25519 + publicKey, + ]; + ethTx = { abi: ETHEREUM_ACCOUNT_ABI, address: to, functionName: "deleteKey", - args: [ - 0, // 0 stands for ed25519 - publicKey, - ], + args, chainId: expectedChainId, type: "legacy", - }); + }; break; } case "FunctionCall": { const yoctoNear = BigInt(tx.actions[0].params.deposit) % BigInt(1e6); const value = BigInt(tx.actions[0].params.deposit) / BigInt(1e6); const requestedGas = BigInt(tx.actions[0].params.gas); - const gas = requestedGas <= MAX_TGAS ? requestedGas : MAX_TGAS; - result = await writeContract(wagmiConfig, { + const nearGas = requestedGas <= MAX_TGAS ? requestedGas : MAX_TGAS; + const args = [ + tx.receiverId, + tx.actions[0].params.methodName, + bytesToHex(stringifyJsonOrBytes(tx.actions[0].params.args)), + nearGas, + +yoctoNear.toString(), + ]; + ethTx = { abi: ETHEREUM_ACCOUNT_ABI, address: to, functionName: "functionCall", - args: [ - tx.receiverId, - tx.actions[0].params.methodName, - bytesToHex(stringifyJsonOrBytes(tx.actions[0].params.args)), - gas, - +yoctoNear.toString(), - ], + args, value, chainId: expectedChainId, type: "legacy", - }); + }; break; } case "Transfer": { const yoctoNear = BigInt(tx.actions[0].params.deposit) % BigInt(1e6); const value = BigInt(tx.actions[0].params.deposit) / BigInt(1e6); - result = await writeContract(wagmiConfig, { + const args = [tx.receiverId, +yoctoNear.toString()]; + ethTx = { abi: ETHEREUM_ACCOUNT_ABI, address: to, functionName: "transfer", - args: [tx.receiverId, +yoctoNear.toString()], + args, value, chainId: expectedChainId, type: "legacy", - }); + }; break; } default: { throw new Error("Invalid action type"); } } + const gas = await estimateGas(wagmiConfig, ethTx); + const result = await writeContract(wagmiConfig, { ...ethTx, gas }); return result; }; From 07705d47c3820f964540077cdadc6f77a6a1d6a4 Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Tue, 21 May 2024 14:06:27 +0900 Subject: [PATCH 11/45] fix: Improve modal text. --- packages/ethereum-wallets/src/lib/modal.ts | 56 +++++++++++++++++----- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index a8e2aefa7..76e098fcf 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -3,7 +3,8 @@ import type { Transaction, TransferAction, } from "@near-wallet-selector/core"; -import { RLP_EXECUTE } from "./utils"; +import { formatUnits } from "viem"; +import { DEFAULT_ACCESS_KEY_ALLOWANCE, RLP_EXECUTE } from "./utils"; export function createModal({ onCancel, @@ -148,10 +149,44 @@ export function createModal({ } txElement.innerHTML = ` ${ - tx.actions[0].type === "AddKey" && - tx.actions[0].params.accessKey.permission === "FullAccess" - ? "WARNING: you can loose your account and all your assets by giving FullAccess, only approve this transaction if you know what you are doing !!!" - : "" + tx.actions[0].type === "AddKey" + ? tx.actions[0].params.accessKey.permission === "FullAccess" + ? "WARNING: The application is requesting a FullAccess key, you can loose your account and all your assets, only approve this transaction if you know what you are doing !!!" + : `

Connect to ${ + tx.actions[0].params.accessKey.permission.receiverId + }

+

Network Fee Allowance: ${ + tx.actions[0].params.accessKey.permission.allowance === "0" + ? "unlimited" + : formatUnits( + BigInt( + tx.actions[0].params.accessKey.permission.allowance ?? + DEFAULT_ACCESS_KEY_ALLOWANCE + ), + 24 + ) + } NEAR

+

This allowance is spendable by the application towards network fees incurred during use.

+ ` + : tx.actions[0].type === "DeleteKey" + ? "This is an optional transaction which removes the application access key. If you reject the transaction, the key will be reused when you login again." + : tx.actions[0].type === "FunctionCall" + ? ` +

Contract execution:

+

from: ${tx.signerId}

+

to: ${tx.receiverId}

+

function: ${tx.actions[0].params.methodName}

+

deposit: ${formatUnits( + BigInt(tx.actions[0].params.deposit), + 24 + )} NEAR

+ ` + : tx.actions[0].type === "Transfer" + ? `Transfer ${formatUnits( + BigInt(tx.actions[0].params.deposit), + 24 + )} NEAR from ${tx.signerId} to ${tx.receiverId}` + : "Unknown transaction type." } ${ tx.actions[0].type === "AddKey" && @@ -164,10 +199,12 @@ export function createModal({ 1 && tx.actions[0].params.accessKey.permission.methodNames[0] === RLP_EXECUTE - ? "This AddKey transaction will onboard your account and enable you to send the next transactions." + ? "This transaction will onboard your account and enable you to send the next transactions." : "WARNING: this key has unlimited allowance and can spend all your NEAR, only approve this transaction if you know what you are doing !!!" : "" } +

Transaction Details:

+

${JSON.stringify(tx.actions[0], null, 2)}

Status: ${ i < selectedIndex ? "completed" @@ -175,13 +212,6 @@ export function createModal({ ? "sign the transaction in your wallet..." : "pending..." }

-

type: ${tx.actions[0].type}

-

receiverId: ${tx.receiverId}

-

params: ${JSON.stringify( - (tx.actions[0] as FunctionCallAction | TransferAction).params, - null, - 2 - )}

`; container.appendChild(txElement); }); From 27540eee3505985b368a704d70ccc2ff83e0b72d Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Tue, 21 May 2024 15:03:30 +0900 Subject: [PATCH 12/45] style: Modal lint. --- packages/ethereum-wallets/src/lib/modal.ts | 98 ++++++++++++---------- 1 file changed, 54 insertions(+), 44 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index 76e098fcf..08cbc4cae 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -1,8 +1,4 @@ -import type { - FunctionCallAction, - Transaction, - TransferAction, -} from "@near-wallet-selector/core"; +import type { Transaction } from "@near-wallet-selector/core"; import { formatUnits } from "viem"; import { DEFAULT_ACCESS_KEY_ALLOWANCE, RLP_EXECUTE } from "./utils"; @@ -149,46 +145,58 @@ export function createModal({ } txElement.innerHTML = ` ${ + // Transaction description tx.actions[0].type === "AddKey" ? tx.actions[0].params.accessKey.permission === "FullAccess" - ? "WARNING: The application is requesting a FullAccess key, you can loose your account and all your assets, only approve this transaction if you know what you are doing !!!" - : `

Connect to ${ - tx.actions[0].params.accessKey.permission.receiverId - }

-

Network Fee Allowance: ${ - tx.actions[0].params.accessKey.permission.allowance === "0" - ? "unlimited" - : formatUnits( - BigInt( - tx.actions[0].params.accessKey.permission.allowance ?? - DEFAULT_ACCESS_KEY_ALLOWANCE - ), - 24 - ) - } NEAR

-

This allowance is spendable by the application towards network fees incurred during use.

- ` + ? "

WARNING: The application is requesting a FullAccess key, you can loose your account and all your assets, only approve this transaction if you know what you are doing !!!

" + : ` +

Connect to ${ + tx.actions[0].params.accessKey.permission.receiverId + }

+

+ Network Fee Allowance: ${ + tx.actions[0].params.accessKey.permission.allowance === + "0" + ? "unlimited" + : formatUnits( + BigInt( + tx.actions[0].params.accessKey.permission + .allowance ?? DEFAULT_ACCESS_KEY_ALLOWANCE + ), + 24 + ) + } NEAR +

+

This allowance is spendable by the application towards network fees incurred during use.

+ ` : tx.actions[0].type === "DeleteKey" - ? "This is an optional transaction which removes the application access key. If you reject the transaction, the key will be reused when you login again." + ? "

This is an optional transaction which removes the application access key. If you reject the transaction, the key will be reused when you login again.

" : tx.actions[0].type === "FunctionCall" ? ` -

Contract execution:

-

from: ${tx.signerId}

-

to: ${tx.receiverId}

-

function: ${tx.actions[0].params.methodName}

-

deposit: ${formatUnits( - BigInt(tx.actions[0].params.deposit), - 24 - )} NEAR

+

Contract execution:

+

from: ${tx.signerId}

+

to: ${tx.receiverId}

+

function: ${tx.actions[0].params.methodName}

+

+ deposit: ${formatUnits( + BigInt(tx.actions[0].params.deposit), + 24 + )} NEAR +

` : tx.actions[0].type === "Transfer" - ? `Transfer ${formatUnits( - BigInt(tx.actions[0].params.deposit), - 24 - )} NEAR from ${tx.signerId} to ${tx.receiverId}` + ? ` +

+ Transfer ${formatUnits( + BigInt(tx.actions[0].params.deposit), + 24 + )} NEAR from ${tx.signerId} to ${tx.receiverId} +

+ ` : "Unknown transaction type." } ${ + // Relayer onboarding tx.actions[0].type === "AddKey" && tx.actions[0].params.accessKey.permission !== "FullAccess" && tx.actions[0].params.accessKey.permission.allowance === "0" @@ -199,19 +207,21 @@ export function createModal({ 1 && tx.actions[0].params.accessKey.permission.methodNames[0] === RLP_EXECUTE - ? "This transaction will onboard your account and enable you to send the next transactions." - : "WARNING: this key has unlimited allowance and can spend all your NEAR, only approve this transaction if you know what you are doing !!!" + ? "

This transaction will onboard your account and enable you to send the next transactions.

" + : "

WARNING: this key has unlimited allowance and can spend all your NEAR, only approve this transaction if you know what you are doing !!!

" : "" }

Transaction Details:

${JSON.stringify(tx.actions[0], null, 2)}

-

Status: ${ - i < selectedIndex - ? "completed" - : i === selectedIndex - ? "sign the transaction in your wallet..." - : "pending..." - }

+

+ Status: ${ + i < selectedIndex + ? "completed" + : i === selectedIndex + ? "sign the transaction in your wallet..." + : "pending..." + } +

`; container.appendChild(txElement); }); From 7a6c3731527b047d1d68e16aff369983336ba24a Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Wed, 22 May 2024 11:48:39 +0900 Subject: [PATCH 13/45] fix: Improve onboarding text. --- packages/ethereum-wallets/src/lib/modal.ts | 31 ++++++++++------------ 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index 08cbc4cae..80617f47b 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -149,6 +149,15 @@ export function createModal({ tx.actions[0].type === "AddKey" ? tx.actions[0].params.accessKey.permission === "FullAccess" ? "

WARNING: The application is requesting a FullAccess key, you can loose your account and all your assets, only approve this transaction if you know what you are doing !!!

" + : tx.actions[0].params.accessKey.permission.allowance === "0" && + tx.actions[0].params.publicKey === relayerPublicKey && + tx.actions[0].params.accessKey.permission.receiverId === + tx.signerId && + tx.actions[0].params.accessKey.permission.methodNames + ?.length === 1 && + tx.actions[0].params.accessKey.permission.methodNames[0] === + RLP_EXECUTE + ? "

This transaction will onboard your account and enable you to transact on NEAR Protocol.

" : `

Connect to ${ tx.actions[0].params.accessKey.permission.receiverId @@ -167,7 +176,11 @@ export function createModal({ ) } NEAR

-

This allowance is spendable by the application towards network fees incurred during use.

+ ${ + tx.actions[0].params.accessKey.permission.allowance === "0" + ? "

WARNING: this key will have unlimited allowance spendable towards network fees, only approve this transaction if you trust the application and you know what you are doing !!!

" + : "

This allowance is spendable by the application towards network fees incurred during use.

" + } ` : tx.actions[0].type === "DeleteKey" ? "

This is an optional transaction which removes the application access key. If you reject the transaction, the key will be reused when you login again.

" @@ -195,22 +208,6 @@ export function createModal({ ` : "Unknown transaction type." } - ${ - // Relayer onboarding - tx.actions[0].type === "AddKey" && - tx.actions[0].params.accessKey.permission !== "FullAccess" && - tx.actions[0].params.accessKey.permission.allowance === "0" - ? tx.actions[0].params.publicKey === relayerPublicKey && - tx.actions[0].params.accessKey.permission.receiverId === - tx.signerId && - tx.actions[0].params.accessKey.permission.methodNames?.length === - 1 && - tx.actions[0].params.accessKey.permission.methodNames[0] === - RLP_EXECUTE - ? "

This transaction will onboard your account and enable you to send the next transactions.

" - : "

WARNING: this key has unlimited allowance and can spend all your NEAR, only approve this transaction if you know what you are doing !!!

" - : "" - }

Transaction Details:

${JSON.stringify(tx.actions[0], null, 2)}

From d26fbb0ea1258f45e81a1fb321087069644ee4af Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Thu, 23 May 2024 11:41:57 +0900 Subject: [PATCH 14/45] feat: Parse error from NEAR transaction. --- packages/ethereum-wallets/src/lib/index.ts | 80 +++++++++++++++------- 1 file changed, 56 insertions(+), 24 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 73d356636..29164f2dd 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -6,6 +6,10 @@ import type { } from "near-api-js/lib/providers/provider"; import { JsonRpcProvider } from "near-api-js/lib/providers"; import { stringifyJsonOrBytes } from "near-api-js/lib/transaction"; +import { + parseResultError, + parseRpcError, +} from "near-api-js/lib/utils/rpc_errors"; import { type WalletModuleFactory, type WalletBehaviourFactory, @@ -22,6 +26,7 @@ import { switchChain, writeContract, waitForTransactionReceipt, + getTransactionReceipt, disconnect, estimateGas, type GetAccountReturnType, @@ -443,6 +448,7 @@ const EthereumWallets: WalletBehaviourFactory< const nearTxs = await transformTransactions(transactions); const [accountLogIn] = await getAccounts(); if (accountLogIn.publicKey) { + let accessKeyUsable; try { const accessKey = await provider.query({ request_type: "view_access_key", @@ -450,28 +456,34 @@ const EthereumWallets: WalletBehaviourFactory< account_id: accountLogIn.accountId, public_key: accountLogIn.publicKey, }); - const accessKeyUsable = validateAccessKey({ + accessKeyUsable = validateAccessKey({ transactions: nearTxs, accessKey, }); - if (accessKeyUsable) { - const signer = new nearAPI.InMemorySigner(_state.keystore); - const signedTransactions = await signTransactions( - nearTxs, - signer, - options.network - ); - const results: Array = []; - for (let i = 0; i < signedTransactions.length; i += 1) { - results.push(await provider.sendTransaction(signedTransactions[i])); - } - return results; - } } catch (error) { - logger.error( - "Failed to execute FunctionCall access key transaction, falling back to Ethereum wallet to sign and send transaction.", - error + logger.error(error); + accessKeyUsable = false; + } + if (accessKeyUsable) { + const signer = new nearAPI.InMemorySigner(_state.keystore); + const signedTransactions = await signTransactions( + nearTxs, + signer, + options.network ); + const results: Array = []; + for (let i = 0; i < signedTransactions.length; i += 1) { + const nearTx = await provider.sendTransaction(signedTransactions[i]); + if ( + typeof nearTx.status === "object" && + typeof nearTx.status.Failure === "object" && + nearTx.status.Failure !== null + ) { + throw parseResultError(nearTx); + } + results.push(nearTx); + } + return results; } } const { relayerPublicKey, onboardingTransaction } = @@ -505,14 +517,20 @@ const EthereumWallets: WalletBehaviourFactory< renderTxs({ selectedIndex: index }); const txHash = await executeTransaction({ tx, relayerPublicKey }); logger.log(`Sent transaction: ${txHash}`); - const receipt = await waitForTransactionReceipt(wagmiConfig, { - hash: txHash, - chainId: expectedChainId, - }); - logger.log("Receipt:", receipt); - if (receipt.status !== "success") { - throw new Error("Transaction execution failed."); + let receipt; + try { + receipt = await waitForTransactionReceipt(wagmiConfig, { + hash: txHash, + chainId: expectedChainId, + }); + } catch (error) { + logger.error(error); + receipt = await getTransactionReceipt(wagmiConfig, { + hash: txHash, + chainId: expectedChainId, + }); } + logger.log("Receipt:", receipt); const nearProvider = new JsonRpcProvider( // @ts-expect-error provider.provider.connection @@ -522,6 +540,20 @@ const EthereumWallets: WalletBehaviourFactory< receipt.nearTransactionHash, accountLogIn.accountId ); + if ( + receipt.status !== "success" && + nearTx.receipts_outcome.length > 1 && + typeof nearTx.receipts_outcome[1].outcome.status === "object" && + typeof nearTx.receipts_outcome[1].outcome.status.Failure === + "object" && + nearTx.receipts_outcome[1].outcome.status.Failure !== null + ) { + reject( + parseRpcError( + nearTx.receipts_outcome[1].outcome.status.Failure + ) + ); + } results.push(nearTx); } resolve(); From d2a0f3e952e90322f9a157690206918514d5f705 Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Mon, 27 May 2024 14:12:25 +0900 Subject: [PATCH 15/45] build: Update assets ethereum-wallets-icon.png. --- packages/ethereum-wallets/README.md | 2 +- .../assets/ethereum-wallets-icon.png | Bin 0 -> 96870 bytes .../assets/wallet-connect-icon.png | Bin 9112 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 packages/ethereum-wallets/assets/ethereum-wallets-icon.png delete mode 100644 packages/ethereum-wallets/assets/wallet-connect-icon.png diff --git a/packages/ethereum-wallets/README.md b/packages/ethereum-wallets/README.md index 0c0f2064d..b521e21b1 100644 --- a/packages/ethereum-wallets/README.md +++ b/packages/ethereum-wallets/README.md @@ -80,7 +80,7 @@ Project ID is required, please obtain it from [walletconnect.com](https://wallet - `web3Modal`: Web3Modal object for connecting an Ethereum wallet and switching network. - `chainId` (`number?`): Chain ID of the NEAR web3 rpc to connect to. Defaults to `397` (`mainnet`) or `398` (`testnet`) depending on the `setupWalletSelector` network configuration. - `rpcUrl` (`string?`): Custom NEAR web3 rpc endpoint to query Ethereum wallet transaction receipts, defaults to `todo` (`mainnet`) or `todo` (`testnet`) depending on the `setupWalletSelector` network configuration. -- `iconUrl` (`string?`): Image URL for the icon shown in the modal. This can also be a relative path or base64 encoded image. Defaults to `./assets/wallet-connect-icon.png`. +- `iconUrl` (`string?`): Image URL for the icon shown in the modal. This can also be a relative path or base64 encoded image. Defaults to `./assets/ethereum-wallets-icon.png`. Developent options (before the NEAR protocol upgrade to support 0x accounts natively): diff --git a/packages/ethereum-wallets/assets/ethereum-wallets-icon.png b/packages/ethereum-wallets/assets/ethereum-wallets-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1b01561736b0d8e4e65ad766ce7e02b49949b6cb GIT binary patch literal 96870 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 z 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 Hmf`;c4P?d! From 73aff7aba9ffb9993c718a7ed7961bc0c9e3b57a Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Mon, 27 May 2024 15:36:47 +0900 Subject: [PATCH 16/45] feat: Network not supported error message. --- packages/ethereum-wallets/src/lib/index.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 29164f2dd..7f431e96d 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -679,9 +679,17 @@ const EthereumWallets: WalletBehaviourFactory< const { selectedNetworkId } = web3Modal.getState(); if (selectedNetworkId !== expectedChainId) { - await switchChain(wagmiConfig, { - chainId: expectedChainId, - }); + try { + await switchChain(wagmiConfig, { + chainId: expectedChainId, + }); + } catch (error) { + disconnect(wagmiConfig); + logger.error(error); + throw new Error( + "Wallet does not support NEAR Protocol network, try adding the network manually inside wallet settings." + ); + } } const accountId = devMode ? address + "." + devModeAccount : address; From a52e7e22d19f5cda162ad5bffaac6fe53b33ea77 Mon Sep 17 00:00:00 2001 From: Pierre-Alain Ouvrard Date: Mon, 27 May 2024 16:45:20 +0900 Subject: [PATCH 17/45] feat: Optional wagmiCore param and dynamic import. --- packages/ethereum-wallets/README.md | 1 + packages/ethereum-wallets/src/lib/index.ts | 68 ++++++++++++++-------- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/packages/ethereum-wallets/README.md b/packages/ethereum-wallets/README.md index b521e21b1..d5f1534b8 100644 --- a/packages/ethereum-wallets/README.md +++ b/packages/ethereum-wallets/README.md @@ -81,6 +81,7 @@ Project ID is required, please obtain it from [walletconnect.com](https://wallet - `chainId` (`number?`): Chain ID of the NEAR web3 rpc to connect to. Defaults to `397` (`mainnet`) or `398` (`testnet`) depending on the `setupWalletSelector` network configuration. - `rpcUrl` (`string?`): Custom NEAR web3 rpc endpoint to query Ethereum wallet transaction receipts, defaults to `todo` (`mainnet`) or `todo` (`testnet`) depending on the `setupWalletSelector` network configuration. - `iconUrl` (`string?`): Image URL for the icon shown in the modal. This can also be a relative path or base64 encoded image. Defaults to `./assets/ethereum-wallets-icon.png`. +- `wagmiCore` (`typeof import("@wagmi/core")?`): Optional, @wagmi/core functions can be overidden by the dapp to interract with the wallet. Developent options (before the NEAR protocol upgrade to support 0x accounts natively): diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 7f431e96d..4cab17ed2 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -21,21 +21,22 @@ import { } from "@near-wallet-selector/core"; import { signTransactions } from "@near-wallet-selector/wallet-utils"; import { - watchAccount, - getAccount, - switchChain, - writeContract, - waitForTransactionReceipt, - getTransactionReceipt, - disconnect, - estimateGas, + type WriteContractParameters, type GetAccountReturnType, type Config, } from "@wagmi/core"; -import { type WriteContractParameters } from "@wagmi/core"; import { bytesToHex, keccak256, toHex } from "viem"; import bs58 from "bs58"; +// eslint-disable-next-line @typescript-eslint/consistent-type-imports +type WagmiCoreActionsType = typeof import("@wagmi/core"); +let wagmiCore: WagmiCoreActionsType | null = null; +const importWagmiCore = async () => { + return import("@wagmi/core").then((module) => { + wagmiCore = module; + }); +}; + import icon from "./icon"; import { createModal } from "./modal"; import { @@ -54,6 +55,7 @@ export interface EthereumWalletsParams { ) => () => void; getState: () => { open: boolean; selectedNetworkId?: number }; }; + wagmiCore?: WagmiCoreActionsType; chainId?: number; rpcUrl?: string; iconUrl?: string; @@ -99,6 +101,9 @@ const EthereumWallets: WalletBehaviourFactory< devModeAccount = "eth-wallet.testnet", }, }) => { + if (!wagmiCore) { + throw new Error("@wagmi/core not imported."); + } const _state = await setupEthereumWalletsState(id); const expectedChainId = chainId ?? options.network.networkId === "mainnet" ? 397 : 398; @@ -110,7 +115,7 @@ const EthereumWallets: WalletBehaviourFactory< : "https://near-wallet-relayer.testnet.aurora.dev"; const getAccounts = async (): Promise> => { - const address = getAccount(wagmiConfig).address?.toLowerCase(); + const address = wagmiCore!.getAccount(wagmiConfig).address?.toLowerCase(); const account = devMode ? address + "." + devModeAccount : address; if (!account || !address) { return []; @@ -263,13 +268,16 @@ const EthereumWallets: WalletBehaviourFactory< throw new Error("Invalid action type"); } } - const gas = await estimateGas(wagmiConfig, ethTx); - const result = await writeContract(wagmiConfig, { ...ethTx, gas }); + const gas = await wagmiCore!.estimateGas(wagmiConfig, ethTx); + const result = await wagmiCore!.writeContract(wagmiConfig, { + ...ethTx, + gas, + }); return result; }; const setupEvents = async () => { - const unwatchAccount = watchAccount(wagmiConfig, { + const unwatchAccount = wagmiCore!.watchAccount(wagmiConfig, { onChange: async (data) => { if (!data.address && data.status === "disconnected") { emitter.emit("signedOut", null); @@ -496,7 +504,7 @@ const EthereumWallets: WalletBehaviourFactory< } const { selectedNetworkId } = web3Modal.getState(); if (selectedNetworkId !== expectedChainId) { - await switchChain(wagmiConfig, { + await wagmiCore!.switchChain(wagmiConfig, { chainId: expectedChainId, }); } @@ -519,13 +527,16 @@ const EthereumWallets: WalletBehaviourFactory< logger.log(`Sent transaction: ${txHash}`); let receipt; try { - receipt = await waitForTransactionReceipt(wagmiConfig, { - hash: txHash, - chainId: expectedChainId, - }); + receipt = await wagmiCore!.waitForTransactionReceipt( + wagmiConfig, + { + hash: txHash, + chainId: expectedChainId, + } + ); } catch (error) { logger.error(error); - receipt = await getTransactionReceipt(wagmiConfig, { + receipt = await wagmiCore!.getTransactionReceipt(wagmiConfig, { hash: txHash, chainId: expectedChainId, }); @@ -610,7 +621,7 @@ const EthereumWallets: WalletBehaviourFactory< logger.error(error); } finally { emitter.emit("signedOut", null); - disconnect(wagmiConfig); + wagmiCore!.disconnect(wagmiConfig); } }; @@ -620,7 +631,7 @@ const EthereumWallets: WalletBehaviourFactory< let unwatchAccountConnected: (() => void) | undefined; let unsubscribeCloseModal: (() => void) | undefined; - const account = getAccount(wagmiConfig); + const account = wagmiCore!.getAccount(wagmiConfig); let address = account.address?.toLowerCase(); if (!address) { // NOTE: open web3Modal and wait for a wallet to be connected or the web3Modal to be closed. @@ -629,7 +640,7 @@ const EthereumWallets: WalletBehaviourFactory< const newData: GetAccountReturnType = await (() => { return new Promise((resolve, reject) => { try { - unwatchAccountConnected = watchAccount(wagmiConfig, { + unwatchAccountConnected = wagmiCore!.watchAccount(wagmiConfig, { onChange: (data: GetAccountReturnType) => { if (!data.address) { return; @@ -639,7 +650,7 @@ const EthereumWallets: WalletBehaviourFactory< }); unsubscribeCloseModal = web3Modal.subscribeEvents( (event: { data: { event: string } }) => { - const newAccount = getAccount(wagmiConfig); + const newAccount = wagmiCore!.getAccount(wagmiConfig); if ( event.data.event === "MODAL_CLOSE" && !newAccount.address @@ -680,11 +691,11 @@ const EthereumWallets: WalletBehaviourFactory< const { selectedNetworkId } = web3Modal.getState(); if (selectedNetworkId !== expectedChainId) { try { - await switchChain(wagmiConfig, { + await wagmiCore!.switchChain(wagmiConfig, { chainId: expectedChainId, }); } catch (error) { - disconnect(wagmiConfig); + wagmiCore!.disconnect(wagmiConfig); logger.error(error); throw new Error( "Wallet does not support NEAR Protocol network, try adding the network manually inside wallet settings." @@ -805,6 +816,13 @@ const EthereumWallets: WalletBehaviourFactory< export function setupEthereumWallets( params: EthereumWalletsParams ): WalletModuleFactory { + if (!wagmiCore) { + if (params.wagmiCore) { + wagmiCore = params.wagmiCore; + } else { + importWagmiCore(); + } + } return async () => { return { id: "ethereum-wallets", From 396fab06ca888790cc05dafa0dffa3dc55bd8de8 Mon Sep 17 00:00:00 2001 From: paouvrard Date: Tue, 28 May 2024 23:49:47 +0900 Subject: [PATCH 18/45] fix: Dynamic import on page reload. --- packages/ethereum-wallets/src/lib/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 4cab17ed2..f88088ef3 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -816,14 +816,14 @@ const EthereumWallets: WalletBehaviourFactory< export function setupEthereumWallets( params: EthereumWalletsParams ): WalletModuleFactory { - if (!wagmiCore) { - if (params.wagmiCore) { - wagmiCore = params.wagmiCore; - } else { - importWagmiCore(); - } - } return async () => { + if (!wagmiCore) { + if (params.wagmiCore) { + wagmiCore = params.wagmiCore; + } else { + await importWagmiCore(); + } + } return { id: "ethereum-wallets", type: "injected", From ec044bb4b881a4a8c7a4e6659ba86d23141954c9 Mon Sep 17 00:00:00 2001 From: santerisarle <57482122+santerisarle@users.noreply.github.com> Date: Wed, 29 May 2024 04:47:56 +0300 Subject: [PATCH 19/45] Add modal styling (#5) --- .vscode/settings.json | 3 +- packages/ethereum-wallets/src/lib/modal.ts | 555 ++++++++++++++++----- 2 files changed, 430 insertions(+), 128 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index a4a8998a1..ab2d991bc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,8 +2,7 @@ "eslint.format.enable": true, "prettier.enable": false, "editor.codeActionsOnSave": { - "source.fixAll.eslint": - true + "source.fixAll.eslint": "explicit" }, "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index 80617f47b..3f1afd46a 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -12,66 +12,251 @@ export function createModal({ relayerPublicKey: string; }) { const modalStyles = ` - .ethereum-wallet-modal-container { + .ethereum-wallet-modal *, + .ethereum-wallet-modal *::before, + .ethereum-wallet-modal *::after { + box-sizing: border-box; + } + .ethereum-wallet-modal button { + cursor: pointer; + top: auto; + } + .ethereum-wallet-modal button:hover { + top: auto; + } + .ethereum-wallet-modal button:focus-visible { + top: auto; + } + + .ethereum-wallet-modal { display: none; - position: fixed; + position: relative; z-index: 9999; + } + .ethereum-wallet-modal-backdrop { + position: fixed; left: 0; + right: 0; top: 0; - width: 100%; - height: 100%; + bottom: 0; background-color: rgba(0, 0, 0, 0.5); - overflow: auto; + } + .ethereum-wallet-modal-wrapper { + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + width: 100vw; + overflow-y: auto; + } + .ethereum-wallet-modal-container { + display: flex; + min-height: 100%; + align-items: center; + justify-content: center; + padding: 1rem; + text-align: center; } .ethereum-wallet-modal-content { - background-color: #efefef; - border-radius: 10px; - margin: 2% auto; + position: relative; + overflow: hidden; + border-radius: 1rem; + background-color: #fff; padding: 20px; - width: 40%; + text-align: left; + max-width: 400px; + width: 100%; + box-shadow: + 0px 4px 8px rgba(0, 0, 0, 0.06), + 0px 0px 0px 1px rgba(0, 0, 0, 0.06); + } + + .ethereum-wallet-modal h2 { + font-weight: 700; + font-size: 24px; + line-height: 30px; text-align: center; - color: #4b4b4b; - word-wrap: break-word; - overflow-wrap: break-word; + letter-spacing: -0.1px; + color: #202020; + margin: 0; + } + + .ethereum-wallet-txs { + margin: 20px 0 10px 0; + display: flex; + flex-direction: column; + row-gap: 8px; } + .ethereum-wallet-tx { - margin-bottom: 10px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + .ethereum-wallet-tx:not(.ethereum-wallet-tx-single) { + padding: 0 10px; + } + .ethereum-wallet-tx-list-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px 10px; + width: 100%; + } + .ethereum-wallet-tx-list-header p { + margin: 0; + font-size: 14px; + line-height: 20px; + color: #202020; + font-weight: 700; + } + .ethereum-wallet-tx-list-header svg { + height: 24px; + width: 24px; + } + + .ethereum-wallet-tx.ethereum-wallet-tx-signing { + background-color: #F9F9F9; + padding-bottom: 10px; + border-radius: 8px; + } + .ethereum-wallet-tx.ethereum-wallet-tx-pending { + background-color: #F9F9F9; + border-radius: 8px; + } + .ethereum-wallet-tx.ethereum-wallet-tx-completed { + background-color: #F2FCF5; + border-radius: 8px; + } + + .ethereum-wallet-tx-single .ethereum-wallet-tx-info-container { + border-top: 1px solid #EBEBEB; + border-bottom: 1px solid #EBEBEB; + } + .ethereum-wallet-tx-info-text > p { + color: #646464; + margin: 0; + font-weight: 500; + font-size: 12px; + line-height: 16px; + letter-spacing: 0.04px; + } + .ethereum-wallet-tx-info-text > p:not(:last-child) { + margin-bottom: 8px; + } + + .ethereum-wallet-tx-info-row { + padding: 14px 10px; + display: flex; + flex-direction: row; + justify-content: space-between; + column-gap: 20px; + } + .ethereum-wallet-tx-info-text { padding: 10px; - background-color: #efefef; - border-radius: 10px; - color: #4b4b4b; - border: solid; - border-color: #4b4b4b; - text-align: left - } - .ethereum-wallet-tx-completed { - background-color: #75ba8b; - color: #4b4b4b; - } - .ethereum-wallet-tx-signing { - background-color: #fce4a2; - color: #4b4b4b; - } - .cancel-ethereum-txs { - background: none; - border: none; - padding: 0; + } + .ethereum-wallet-tx-params, + .ethereum-wallet-tx-params dl { + margin: 0; + } + .ethereum-wallet-tx .ethereum-wallet-tx-params { + border-top: 1px solid #EBEBEB; + border-bottom: 1px solid #EBEBEB; + } + .ethereum-wallet-tx-params div:not(:last-child) { + border-bottom: 1px solid #EBEBEB; + } + .ethereum-wallet-tx-params dt { margin: 0; + font-size: 14px; + line-height: 20px; + color: #202020; + font-weight: 500; + } + .ethereum-wallet-tx-params dd { + margin: 0; + font-size: 14px; + line-height: 20px; + color: #202020; + font-weight: 700; + text-align: right; + word-break: break-all; + overflow-wrap: break-word; + } + + .ethereum-wallet-btn { + display: flex; + align-items: center; + justify-content: center; + border-radius: 8px; + color: #1C2024; + border: 1px solid rgba(1, 6, 47, 0.173) !important; + background-color: #fff !important; + } + .ethereum-wallet-btn:hover { + border: 1px solid rgba(1, 6, 47, 0.173); + background-color: #F2F2F5 !important; + } + .ethereum-wallet-btn:focus-visible { + outline: 2px solid; + outline-offset: 2px; + outline-color: #8B8D98; + border: 1px solid rgba(1, 6, 47, 0.173); + } + .ethereum-wallet-btn-cancel { + padding: 14px; + font-size: 14px; + line-height: 20px; + font-weight: 700; + width: 100%; + } + .ethereum-wallet-btn-details { + margin-top: 20px; + padding: 8px 12px; + font-weight: 500; + font-size: 12px; + line-height: 16px; + letter-spacing: 0.04px; + border-radius: 9999px; + } + + .ethereum-wallet-txs-details { + display: none; margin-top: 10px; - color: #4b4b4b; - font-size: inherit; - text-decoration: none; + padding: 10px; + background: #F1F1F1; + border-radius: 8px; + max-width: 100%; + overflow: auto; } - .cancel-ethereum-txs:hover { - text-decoration: underline; + .ethereum-wallet-txs-details p { + font-weight: 500; + font-size: 12px; + line-height: 16px; + letter-spacing: 0.04px; + color: #646464; + word-wrap: break-word; + overflow-wrap: break-word; } - .cancel-ethereum-txs:active { - background: none; + + .ethereum-wallet-txs-status { + display: flex; + justify-content: center; + align-items: center; + padding: 14px; + background: #F1F4FE; + border-radius: 8px; + width: 100%; + margin-top: 24px; } - @media only screen and (max-width: 800px) { - .ethereum-wallet-modal-content { - width: 100%; /* Full width for smaller screens */ - } + .ethereum-wallet-txs-status p { + margin: 0; + color: #384EAC; + font-weight: 700; + font-size: 14px; + line-height: 20px; } `; @@ -80,11 +265,26 @@ export function createModal({ styleElement.textContent = modalStyles; window.document.head.appendChild(styleElement); - // Create modal container + // Container with display none/block const modalContainer = window.document.createElement("div"); - modalContainer.classList.add("ethereum-wallet-modal-container"); + modalContainer.classList.add("ethereum-wallet-modal"); + modalContainer.setAttribute("aria-labelledby", "modal-title"); + modalContainer.setAttribute("role", "dialog"); + modalContainer.setAttribute("aria-modal", "true"); + + // Backdrop + const backdrop = window.document.createElement("div"); + backdrop.classList.add("ethereum-wallet-modal-backdrop"); + + // Wrapper for modal + const modalWrapper = window.document.createElement("div"); + modalWrapper.classList.add("ethereum-wallet-modal-wrapper"); - // Create modal content + // Modal content container + const modalContentContainer = window.document.createElement("div"); + modalContentContainer.classList.add("ethereum-wallet-modal-container"); + + // Modal content const modalContent = window.document.createElement("div"); modalContent.classList.add("ethereum-wallet-modal-content"); modalContent.innerHTML = ` @@ -92,19 +292,24 @@ export function createModal({ txs.length === 1 && txs[0].actions.length === 1 && txs[0].actions[0].type === "AddKey" - ? "

Log in

" + ? "

Log in

" : txs.length === 1 && txs[0].actions.length === 1 && txs[0].actions[0].type === "DeleteKey" ? "

Log out

" - : `

Execute ${txs.length} transaction(s)

` + : `

Execute ${txs.length} transaction${ + txs.length > 1 ? "s" : "" + }

` }
- + `; - // Append modal content to modal container - modalContainer.appendChild(modalContent); + // // Append the elements to form the complete structure + modalContentContainer.appendChild(modalContent); + modalWrapper.appendChild(modalContentContainer); + modalContainer.appendChild(backdrop); + modalContainer.appendChild(modalWrapper); // Append modal container to document body window.document.body.appendChild(modalContainer); @@ -122,7 +327,7 @@ export function createModal({ // On cancel button click window.document - .querySelector(".cancel-ethereum-txs") + .querySelector(".ethereum-wallet-btn-cancel") ?.addEventListener("click", () => { onCancel(); hideModal(); @@ -135,93 +340,191 @@ export function createModal({ container.innerHTML = ""; txs.forEach((tx, i) => { + const txNumber = i + 1; + const singleTx = txs.length === 1; const txElement = document.createElement("div"); + txElement.classList.add("ethereum-wallet-tx"); - if (i < selectedIndex) { - txElement.classList.add("ethereum-wallet-tx-completed"); + if (singleTx) { + txElement.classList.add("ethereum-wallet-tx-single"); } - if (i === selectedIndex) { - txElement.classList.add("ethereum-wallet-tx-signing"); + + const isCompleted = i < selectedIndex; + const isActive = i === selectedIndex; + const isPending = i > selectedIndex; + + if (!singleTx) { + if (isCompleted) { + txElement.classList.add("ethereum-wallet-tx-completed"); + } + if (isActive) { + txElement.classList.add("ethereum-wallet-tx-signing"); + } + if (isPending) { + txElement.classList.add("ethereum-wallet-tx-pending"); + } } txElement.innerHTML = ` ${ - // Transaction description - tx.actions[0].type === "AddKey" - ? tx.actions[0].params.accessKey.permission === "FullAccess" - ? "

WARNING: The application is requesting a FullAccess key, you can loose your account and all your assets, only approve this transaction if you know what you are doing !!!

" - : tx.actions[0].params.accessKey.permission.allowance === "0" && - tx.actions[0].params.publicKey === relayerPublicKey && - tx.actions[0].params.accessKey.permission.receiverId === - tx.signerId && - tx.actions[0].params.accessKey.permission.methodNames - ?.length === 1 && - tx.actions[0].params.accessKey.permission.methodNames[0] === - RLP_EXECUTE - ? "

This transaction will onboard your account and enable you to transact on NEAR Protocol.

" - : ` -

Connect to ${ - tx.actions[0].params.accessKey.permission.receiverId - }

-

- Network Fee Allowance: ${ - tx.actions[0].params.accessKey.permission.allowance === - "0" - ? "unlimited" - : formatUnits( - BigInt( - tx.actions[0].params.accessKey.permission - .allowance ?? DEFAULT_ACCESS_KEY_ALLOWANCE - ), - 24 - ) - } NEAR -

- ${ - tx.actions[0].params.accessKey.permission.allowance === "0" - ? "

WARNING: this key will have unlimited allowance spendable towards network fees, only approve this transaction if you trust the application and you know what you are doing !!!

" - : "

This allowance is spendable by the application towards network fees incurred during use.

" - } - ` - : tx.actions[0].type === "DeleteKey" - ? "

This is an optional transaction which removes the application access key. If you reject the transaction, the key will be reused when you login again.

" - : tx.actions[0].type === "FunctionCall" + isCompleted ? ` -

Contract execution:

-

from: ${tx.signerId}

-

to: ${tx.receiverId}

-

function: ${tx.actions[0].params.methodName}

-

- deposit: ${formatUnits( - BigInt(tx.actions[0].params.deposit), - 24 - )} NEAR -

- ` - : tx.actions[0].type === "Transfer" +
+

Transaction ${txNumber}

+ +
+ ` + : isPending ? ` -

- Transfer ${formatUnits( - BigInt(tx.actions[0].params.deposit), - 24 - )} NEAR from ${tx.signerId} to ${tx.receiverId} -

+
+

Transaction ${txNumber}

+ +
+ ` + : ` + ${ + !singleTx + ? ` +
+

Transaction ${txNumber}

+ +
` - : "Unknown transaction type." + : "" + } +
+ ${ + tx.actions[0].type === "AddKey" + ? tx.actions[0].params.accessKey.permission === "FullAccess" + ? ` +
+

WARNING: The application is requesting a FullAccess key. You can lose your account and all your assets. Only approve this transaction if you know what you are doing!

+

` + : tx.actions[0].params.accessKey.permission.allowance === + "0" && + tx.actions[0].params.publicKey === relayerPublicKey && + tx.actions[0].params.accessKey.permission.receiverId === + tx.signerId && + tx.actions[0].params.accessKey.permission.methodNames + ?.length === 1 && + tx.actions[0].params.accessKey.permission + .methodNames[0] === RLP_EXECUTE + ? ` +
+

This transaction will onboard your account and enable you to transact on NEAR Protocol.

+
` + : ` +
+

Connect to ${ + tx.actions[0].params.accessKey.permission.receiverId + }

+

+ Network Fee Allowance: ${ + tx.actions[0].params.accessKey.permission + .allowance === "0" + ? "unlimited" + : formatUnits( + BigInt( + tx.actions[0].params.accessKey.permission + .allowance ?? DEFAULT_ACCESS_KEY_ALLOWANCE + ), + 24 + ) + } NEAR +

+ ${ + tx.actions[0].params.accessKey.permission + .allowance === "0" + ? "

WARNING: this key will have unlimited allowance spendable towards network fees, only approve this transaction if you trust the application and you know what you are doing!

" + : "

This allowance is spendable by the application towards network fees incurred during use.

" + } +
+ ` + : tx.actions[0].type === "DeleteKey" + ? ` +
+

This is an optional transaction which removes the application access key. If you reject the transaction, the key will be reused when you login again.

+
+ ` + : tx.actions[0].type === "FunctionCall" + ? ` +
+
+
From
+
${tx.signerId}
+
+
+
To
+
${tx.receiverId}
+
+
+
Type
+
${tx.actions[0].params.methodName}
+
+
+
Deposit
+
${formatUnits( + BigInt(tx.actions[0].params.deposit), + 24 + )} NEAR
+
+
+ ` + : tx.actions[0].type === "Transfer" + ? ` +
+

+ Transfer ${formatUnits( + BigInt(tx.actions[0].params.deposit), + 24 + )} NEAR from ${tx.signerId} to ${tx.receiverId} +

+
+ ` + : ` +
+

Unknown transaction type.

+
+ ` + } +
+ +
+

${JSON.stringify(tx.actions[0], null, 2)}

+
+
+

Sign the transaction in your wallet

+
+ ` } -

Transaction Details:

-

${JSON.stringify(tx.actions[0], null, 2)}

-

- Status: ${ - i < selectedIndex - ? "completed" - : i === selectedIndex - ? "sign the transaction in your wallet..." - : "pending..." - } -

+ `; + container.appendChild(txElement); }); + + const toggleButton = window.document.querySelector( + ".ethereum-wallet-btn-details" + ); + const detailsContainer = window.document.querySelector( + ".ethereum-wallet-txs-details" + ) as HTMLElement | null; + + toggleButton?.addEventListener("click", () => { + if (!detailsContainer || !toggleButton) { + return; + } + + if ( + detailsContainer.style.display === "none" || + detailsContainer.style.display === "" + ) { + detailsContainer.style.display = "block"; + toggleButton.textContent = "Hide details"; + } else { + detailsContainer.style.display = "none"; + toggleButton.textContent = "Show details"; + } + }); }; return { showModal, hideModal, renderTxs }; } From 4deef6f0991f7d729a718bfeea52d46f1c328bfd Mon Sep 17 00:00:00 2001 From: paouvrard Date: Wed, 29 May 2024 11:57:31 +0900 Subject: [PATCH 20/45] refactor: Remove rpcUrl param, get explorer url from wagmiConfig. --- packages/ethereum-wallets/README.md | 1 - packages/ethereum-wallets/src/lib/index.ts | 32 ++++++++++++++------ packages/ethereum-wallets/src/lib/modal.ts | 35 +++++++++++++++++----- 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/packages/ethereum-wallets/README.md b/packages/ethereum-wallets/README.md index d5f1534b8..01f1565da 100644 --- a/packages/ethereum-wallets/README.md +++ b/packages/ethereum-wallets/README.md @@ -79,7 +79,6 @@ Project ID is required, please obtain it from [walletconnect.com](https://wallet - `wagmiConfig`: Wagmi Config for interacting with Ethereum wallets. - `web3Modal`: Web3Modal object for connecting an Ethereum wallet and switching network. - `chainId` (`number?`): Chain ID of the NEAR web3 rpc to connect to. Defaults to `397` (`mainnet`) or `398` (`testnet`) depending on the `setupWalletSelector` network configuration. -- `rpcUrl` (`string?`): Custom NEAR web3 rpc endpoint to query Ethereum wallet transaction receipts, defaults to `todo` (`mainnet`) or `todo` (`testnet`) depending on the `setupWalletSelector` network configuration. - `iconUrl` (`string?`): Image URL for the icon shown in the modal. This can also be a relative path or base64 encoded image. Defaults to `./assets/ethereum-wallets-icon.png`. - `wagmiCore` (`typeof import("@wagmi/core")?`): Optional, @wagmi/core functions can be overidden by the dapp to interract with the wallet. diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index f88088ef3..a322b7303 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -57,7 +57,6 @@ export interface EthereumWalletsParams { }; wagmiCore?: WagmiCoreActionsType; chainId?: number; - rpcUrl?: string; iconUrl?: string; devMode?: boolean; devModeAccount?: string; @@ -96,7 +95,6 @@ const EthereumWallets: WalletBehaviourFactory< wagmiConfig, web3Modal, chainId, - rpcUrl, devMode, devModeAccount = "eth-wallet.testnet", }, @@ -107,12 +105,18 @@ const EthereumWallets: WalletBehaviourFactory< const _state = await setupEthereumWalletsState(id); const expectedChainId = chainId ?? options.network.networkId === "mainnet" ? 397 : 398; - const nearRpc = - rpcUrl ?? devMode - ? "https://near-wallet-relayer.testnet.aurora.dev" - : options.network.networkId === "mainnet" - ? "https://near-wallet-relayer.mainnet.aurora.dev" - : "https://near-wallet-relayer.testnet.aurora.dev"; + const nearRpc = wagmiConfig.chains.find( + (chain) => chain.id === expectedChainId + )?.rpcUrls.default.http[0]; + if (!nearRpc) { + throw new Error("Failed to parse NEAR rpc url from wagmiConfig."); + } + const nearExplorer = wagmiConfig.chains.find( + (chain) => chain.id === expectedChainId + )?.blockExplorers?.default.url; + if (!nearExplorer) { + throw new Error("Failed to parse NEAR explorer url from wagmiConfig."); + } const getAccounts = async (): Promise> => { const address = wagmiCore!.getAccount(wagmiConfig).address?.toLowerCase(); @@ -517,14 +521,24 @@ const EthereumWallets: WalletBehaviourFactory< }, txs, relayerPublicKey, + explorerUrl: nearExplorer, }); showModal(); (async () => { try { + const ethTxHashes: Array = []; for (const [index, tx] of txs.entries()) { - renderTxs({ selectedIndex: index }); + renderTxs({ + selectedIndex: index, + ethTxHashes, + }); const txHash = await executeTransaction({ tx, relayerPublicKey }); logger.log(`Sent transaction: ${txHash}`); + ethTxHashes.push(txHash); + renderTxs({ + selectedIndex: index, + ethTxHashes, + }); let receipt; try { receipt = await wagmiCore!.waitForTransactionReceipt( diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index 3f1afd46a..946ed7b97 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -6,10 +6,12 @@ export function createModal({ onCancel, txs, relayerPublicKey, + explorerUrl, }: { onCancel: () => void; txs: Array; relayerPublicKey: string; + explorerUrl: string; }) { const modalStyles = ` .ethereum-wallet-modal *, @@ -67,7 +69,7 @@ export function createModal({ text-align: left; max-width: 400px; width: 100%; - box-shadow: + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.06), 0px 0px 0px 1px rgba(0, 0, 0, 0.06); } @@ -116,7 +118,7 @@ export function createModal({ height: 24px; width: 24px; } - + .ethereum-wallet-tx.ethereum-wallet-tx-signing { background-color: #F9F9F9; padding-bottom: 10px; @@ -333,7 +335,13 @@ export function createModal({ hideModal(); }); - const renderTxs = ({ selectedIndex }: { selectedIndex: number }) => { + const renderTxs = ({ + selectedIndex, + ethTxHashes, + }: { + selectedIndex: number; + ethTxHashes: Array; + }) => { const container = document.querySelector( ".ethereum-wallet-txs" ) as HTMLElement; @@ -352,6 +360,11 @@ export function createModal({ const isCompleted = i < selectedIndex; const isActive = i === selectedIndex; const isPending = i > selectedIndex; + const isSent = selectedIndex < ethTxHashes.length; + const explorerLink = + i < ethTxHashes.length + ? `${explorerUrl}/tx/${ethTxHashes[i]}` + : undefined; if (!singleTx) { if (isCompleted) { @@ -442,12 +455,12 @@ export function createModal({ : tx.actions[0].type === "DeleteKey" ? `
-

This is an optional transaction which removes the application access key. If you reject the transaction, the key will be reused when you login again.

+

This is an optional transaction which removes the application access key. If you reject the transaction, the key will be reused when you login next time.

` : tx.actions[0].type === "FunctionCall" ? ` -
+
From
${tx.signerId}
@@ -487,16 +500,22 @@ export function createModal({ ` }
- +

${JSON.stringify(tx.actions[0], null, 2)}

-

Sign the transaction in your wallet

+

+ ${ + isSent + ? "Sending transaction..." + : "Sign the transaction in your wallet..." + } +

` } - + `; container.appendChild(txElement); From ccb803db7521fbeabe0582c1aa98df6bdf81f7bb Mon Sep 17 00:00:00 2001 From: paouvrard Date: Wed, 29 May 2024 12:46:58 +0900 Subject: [PATCH 21/45] chore: Improve docs. --- .../wallet-selector.component.ts | 2 +- .../react/contexts/WalletSelectorContext.tsx | 2 +- packages/ethereum-wallets/README.md | 13 ++++++------ packages/ethereum-wallets/src/lib/index.ts | 20 ++++++++++++------- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts b/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts index c95013cf1..9095fd44a 100644 --- a/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts +++ b/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts @@ -57,7 +57,7 @@ const near: Chain = { blockExplorers: { default: { name: "NEAR Explorer", - url: "https://explorer.testnet.near.org", + url: "https://testnet.nearblocks.io", }, }, testnet: true, diff --git a/examples/react/contexts/WalletSelectorContext.tsx b/examples/react/contexts/WalletSelectorContext.tsx index 932ff12ce..6e4c7fef6 100644 --- a/examples/react/contexts/WalletSelectorContext.tsx +++ b/examples/react/contexts/WalletSelectorContext.tsx @@ -77,7 +77,7 @@ const near: Chain = { blockExplorers: { default: { name: "NEAR Explorer", - url: "https://explorer.testnet.near.org", + url: "https://testnet.nearblocks.io", }, }, testnet: true, diff --git a/packages/ethereum-wallets/README.md b/packages/ethereum-wallets/README.md index 01f1565da..915cc3610 100644 --- a/packages/ethereum-wallets/README.md +++ b/packages/ethereum-wallets/README.md @@ -7,17 +7,18 @@ Ethereum wallet support NEP: https://github.com/near/NEPs/issues/518 Any Ethereum wallet can be connected via Web3Modal: the dApp can chose which wallets to support and a multichain dApp can switch networks using the same wallet connection. -SignIn requires a switch to NEAR network, if the user switches to other networks he will be prompted to switch back to NEAR before a transaction is made. +SignIn requires switching to NEAR network to ensure that the wallet is compatible, if the user switches to other networks he will be prompted to switch back to NEAR before making a transaction. -Sign out prompts to remove the FunctionCall access key if there is one, this action is not blocking and the user can sign out without executing the transaction. +Sign out prompts to remove the FunctionCall access key if there is one, this action is non blocking and the user can sign out without executing the transaction. -A NEAR dApp can connect to multiple Ethereum wallet addresses. If the user switches to a new address in the Ethereum wallet, the NEAR wallet will be disconnected from the dApp so that it can reconnect with the signIn flow. -If the dApp doesn't require a FunctionCall access key or the Ethereum wallet address already signed in, then the address connects automatically when changed. - -`signMessage` and `verifyOwner` are not implemented because Ethereum wallets are not compatible with these standards, instead a dApp can use `eth_sign` or `eth_signTypedData_v4` to authenticate the wallet by interacting with it directly. +A NEAR dApp can connect to multiple Ethereum wallet addresses. If the user switches to a new address from the Ethereum wallet, the NEAR wallet will be disconnected so that it can reconnect with the signIn flow. If the dApp doesn't require a FunctionCall access key or the Ethereum wallet address already signed in, then the address connects automatically when changed. NEP-518 doesn't support multiple actions within the same transaction, so when multiple actions are requested, they are split into separate transactions and executed 1 by 1. +NEP-518 rpc relayer uses a FunctionCall access key to execute transactions on behalf of the user by calling `rlp_execute`. If this key is not yet added, the wallet will be onboarded before the first transaction is made. + +`signMessage` and `verifyOwner` are not implemented because Ethereum wallets are not compatible with these standards, instead a dApp can use `eth_sign` or `eth_signTypedData_v4` to authenticate the wallet by interacting with it directly. + ## Installation and Usage ```bash diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index a322b7303..03036a971 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -32,6 +32,8 @@ import bs58 from "bs58"; type WagmiCoreActionsType = typeof import("@wagmi/core"); let wagmiCore: WagmiCoreActionsType | null = null; const importWagmiCore = async () => { + // Commonjs support NA with @wagmi/core: + // https://wagmi.sh/core/guides/migrate-from-v1-to-v2#dropped-commonjs-support return import("@wagmi/core").then((module) => { wagmiCore = module; }); @@ -280,13 +282,16 @@ const EthereumWallets: WalletBehaviourFactory< return result; }; + // Watch Ethereum wallet changes. const setupEvents = async () => { const unwatchAccount = wagmiCore!.watchAccount(wagmiConfig, { onChange: async (data) => { + // Ethereum wallet disconnected: also disconnect NEAR account. if (!data.address && data.status === "disconnected") { emitter.emit("signedOut", null); return; } + // Ethereum wallet switched connected account: also switch NEAR account if already signed in or disconnect. if (data.address && data.status === "connected") { if (store.getState().contract?.contractId) { const address = data.address.toLowerCase(); @@ -348,6 +353,7 @@ const EthereumWallets: WalletBehaviourFactory< .flat(); }; + // Check if accessKey is usable to execute all transaction. const validateAccessKey = ({ transactions, accessKey, @@ -379,6 +385,7 @@ const EthereumWallets: WalletBehaviourFactory< }); }; + // Get the relayer public key and onboarding transaction if needed. const getRelayerOnboardingInfo = async ({ accountId, }: { @@ -456,9 +463,9 @@ const EthereumWallets: WalletBehaviourFactory< const signAndSendTransactions = async ( transactions: Array> ) => { - // If transactions can be executed with FunctionCall access key do it, otherwise execute 1 by 1 with Ethereum wallet. const nearTxs = await transformTransactions(transactions); const [accountLogIn] = await getAccounts(); + // If transactions can be executed with FunctionCall access key do it, otherwise execute 1 by 1 with Ethereum wallet. if (accountLogIn.publicKey) { let accessKeyUsable; try { @@ -504,6 +511,7 @@ const EthereumWallets: WalletBehaviourFactory< }); let txs = transformEthereumTransactions(nearTxs); if (onboardingTransaction) { + // Onboard the relayer before executing other transactions. txs = [onboardingTransaction, ...txs]; } const { selectedNetworkId } = web3Modal.getState(); @@ -605,7 +613,7 @@ const EthereumWallets: WalletBehaviourFactory< account_id: accountLogIn.accountId, public_key: accountLogIn.publicKey, }); - // NOTE: If connection problem with the wallet, the user can cancel from the modal to skip the disconnect transaction. + // If there is a connection problem with the wallet, the user can cancel from the modal to skip the disconnect transaction. // If not deleted, the access key will be reused during signIn. await signAndSendTransactions([ { @@ -616,10 +624,6 @@ const EthereumWallets: WalletBehaviourFactory< type: "DeleteKey", params: { publicKey: accountLogIn.publicKey, - /* - publicKey: - "ed25519:3HDMUBDSSup8jPL7FMLiduSPwir6HhX4zedvZmzy25So", - */ }, }, ], @@ -647,8 +651,8 @@ const EthereumWallets: WalletBehaviourFactory< let unsubscribeCloseModal: (() => void) | undefined; const account = wagmiCore!.getAccount(wagmiConfig); let address = account.address?.toLowerCase(); + // Open web3Modal and wait for a wallet to be connected or for the web3Modal to be closed. if (!address) { - // NOTE: open web3Modal and wait for a wallet to be connected or the web3Modal to be closed. try { web3Modal.open(); const newData: GetAccountReturnType = await (() => { @@ -711,12 +715,14 @@ const EthereumWallets: WalletBehaviourFactory< } catch (error) { wagmiCore!.disconnect(wagmiConfig); logger.error(error); + // TODO: add the link to onboarding page when available. throw new Error( "Wallet does not support NEAR Protocol network, try adding the network manually inside wallet settings." ); } } + // Login with FunctionCall access key, reuse keypair or create a new one. const accountId = devMode ? address + "." + devModeAccount : address; let publicKey; if (contractId) { From 34608cd7bc36dc68e818ad5689397d6c7ffb17ad Mon Sep 17 00:00:00 2001 From: paouvrard Date: Wed, 29 May 2024 14:04:01 +0900 Subject: [PATCH 22/45] build: Fix lint. --- package.json | 2 +- packages/ethereum-wallets/src/lib/modal.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index a9b7247a8..1e48957af 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "@nx/eslint-plugin": "16.0.0", "@nx/jest": "16.0.0", "@nx/js": "16.0.0", - "@nx/linter": "16.0.0", + "@nx/linter": "16.4.0", "@nx/next": "16.0.0", "@nx/react": "16.0.0", "@nx/web": "16.0.0", diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index 946ed7b97..9033e984e 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -361,6 +361,7 @@ export function createModal({ const isActive = i === selectedIndex; const isPending = i > selectedIndex; const isSent = selectedIndex < ethTxHashes.length; + // eslint-disable-next-line @typescript-eslint/no-unused-vars const explorerLink = i < ethTxHashes.length ? `${explorerUrl}/tx/${ethTxHashes[i]}` From ab88d319d79fce91767fd1b69535c9e2715fc180 Mon Sep 17 00:00:00 2001 From: santerisarle <57482122+santerisarle@users.noreply.github.com> Date: Fri, 31 May 2024 06:10:37 +0300 Subject: [PATCH 23/45] More design (#6) * Improve transfer type design * Format JSON better * Add text highlight * Add spinner * Add explorer link * Clean up --- packages/ethereum-wallets/src/lib/modal.ts | 109 ++++++++++++++++++--- 1 file changed, 97 insertions(+), 12 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index 9033e984e..a58b105b9 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -119,6 +119,23 @@ export function createModal({ width: 24px; } + .ethereum-wallet-tx-explorer-link { + height: 24px; + width: 24px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 6px; + } + .ethereum-wallet-tx-explorer-link:hover { + background-color: #DDF3E4; + } + .ethereum-wallet-tx-explorer-link svg { + height: 16px; + width: 16px; + color: #202020; + } + .ethereum-wallet-tx.ethereum-wallet-tx-signing { background-color: #F9F9F9; padding-bottom: 10px; @@ -230,6 +247,7 @@ export function createModal({ padding: 10px; background: #F1F1F1; border-radius: 8px; + width: 100%; max-width: 100%; overflow: auto; } @@ -241,9 +259,12 @@ export function createModal({ color: #646464; word-wrap: break-word; overflow-wrap: break-word; + white-space: pre-wrap; + margin: 0; } .ethereum-wallet-txs-status { + position: relative; display: flex; justify-content: center; align-items: center; @@ -260,6 +281,42 @@ export function createModal({ font-size: 14px; line-height: 20px; } + + .ethereum-wallet-tx-highlight { + position: relative; + z-index: 1; + } + .ethereum-wallet-tx-highlight::before { + content: ""; + position: absolute; + top: -4px; + left: -6px; + right: -6px; + bottom: -4px; + z-index: -1; + background-color: #DDF3E4; + border-radius: 8px; + } + + .ethereum-wallet-spinner { + position: absolute; + right: 14px; + top: 16px; + width: 16px; + height: 16px; + border: 2px solid #384EAC; + border-bottom-color: transparent; + border-radius: 50%; + animation: rotation 1s linear infinite; + } + @keyframes rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } + } `; // Create a style element and append the CSS styles @@ -294,7 +351,7 @@ export function createModal({ txs.length === 1 && txs[0].actions.length === 1 && txs[0].actions[0].type === "AddKey" - ? "

Log in

" + ? "

Log in

" : txs.length === 1 && txs[0].actions.length === 1 && txs[0].actions[0].type === "DeleteKey" @@ -361,7 +418,6 @@ export function createModal({ const isActive = i === selectedIndex; const isPending = i > selectedIndex; const isSent = selectedIndex < ethTxHashes.length; - // eslint-disable-next-line @typescript-eslint/no-unused-vars const explorerLink = i < ethTxHashes.length ? `${explorerUrl}/tx/${ethTxHashes[i]}` @@ -383,7 +439,18 @@ export function createModal({ isCompleted ? `
-

Transaction ${txNumber}

+
+

Transaction ${txNumber}

+ ${ + explorerLink + ? ` + + + + ` + : "" + } +
` @@ -472,11 +539,13 @@ export function createModal({
Type
-
${tx.actions[0].params.methodName}
+
${ + tx.actions[0].params.methodName + }
Deposit
-
${formatUnits( +
${formatUnits( BigInt(tx.actions[0].params.deposit), 24 )} NEAR
@@ -485,15 +554,30 @@ export function createModal({ ` : tx.actions[0].type === "Transfer" ? ` -
-

- Transfer ${formatUnits( +

+
+
From
+
${tx.signerId}
+
+
+
To
+
${tx.receiverId}
+
+
+
Type
+
${ + tx.actions[0].type + }
+
+
+
Amount
+
${formatUnits( BigInt(tx.actions[0].params.deposit), 24 - )} NEAR from ${tx.signerId} to ${tx.receiverId} -

-
- ` + )} NEAR +
+
+ ` : `

Unknown transaction type.

@@ -513,6 +597,7 @@ export function createModal({ : "Sign the transaction in your wallet..." }

+ ${isSent ? `
` : ""}
` } From f141026c2cdaf63c3babf049fb64edd464f21b8c Mon Sep 17 00:00:00 2001 From: paouvrard Date: Fri, 31 May 2024 12:14:37 +0900 Subject: [PATCH 24/45] style: Tweak text. --- packages/ethereum-wallets/src/lib/modal.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index a58b105b9..b4e3f5b6b 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -593,11 +593,11 @@ export function createModal({

${ isSent - ? "Sending transaction..." - : "Sign the transaction in your wallet..." + ? "Sending transaction" + : "Sign the transaction in your wallet" }

- ${isSent ? `
` : ""} +
` } From 72abcca75236dd592df4fa6a46dba030128962da Mon Sep 17 00:00:00 2001 From: paouvrard Date: Wed, 5 Jun 2024 19:04:45 +0900 Subject: [PATCH 25/45] fix: Custom chainId. --- packages/ethereum-wallets/src/lib/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 03036a971..dcacfe193 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -106,7 +106,7 @@ const EthereumWallets: WalletBehaviourFactory< } const _state = await setupEthereumWalletsState(id); const expectedChainId = - chainId ?? options.network.networkId === "mainnet" ? 397 : 398; + chainId ?? (options.network.networkId === "mainnet" ? 397 : 398); const nearRpc = wagmiConfig.chains.find( (chain) => chain.id === expectedChainId )?.rpcUrls.default.http[0]; From ab2bed4f88bc11d4b999cf249b712da3f12c0279 Mon Sep 17 00:00:00 2001 From: paouvrard Date: Wed, 5 Jun 2024 21:05:42 +0900 Subject: [PATCH 26/45] style: Hide yocto deposit. --- packages/ethereum-wallets/src/lib/modal.ts | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index b4e3f5b6b..766d490f1 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -543,13 +543,20 @@ export function createModal({ tx.actions[0].params.methodName } -
-
Deposit
-
${formatUnits( - BigInt(tx.actions[0].params.deposit), - 24 - )} NEAR
-
+ ${ + tx.actions[0].params.deposit === "1" || + tx.actions[0].params.deposit === "0" + ? "" + : ` +
+
Deposit
+
${formatUnits( + BigInt(tx.actions[0].params.deposit), + 24 + )} NEAR
+
+ ` + }
` : tx.actions[0].type === "Transfer" From 5e8a9afb949b9d9342bafd5da84e3d197e1e06c8 Mon Sep 17 00:00:00 2001 From: paouvrard Date: Thu, 13 Jun 2024 12:29:46 +0900 Subject: [PATCH 27/45] fix: Improve NEAR tx error parsing. --- packages/ethereum-wallets/src/lib/index.ts | 41 +++++++++++++--------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index dcacfe193..d6238b7ea 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -1,15 +1,13 @@ import * as nearAPI from "near-api-js"; import type { AccessKeyViewRaw, + ExecutionStatus, FinalExecutionOutcome, FunctionCallPermissionView, } from "near-api-js/lib/providers/provider"; import { JsonRpcProvider } from "near-api-js/lib/providers"; import { stringifyJsonOrBytes } from "near-api-js/lib/transaction"; -import { - parseResultError, - parseRpcError, -} from "near-api-js/lib/utils/rpc_errors"; +import { parseRpcError } from "near-api-js/lib/utils/rpc_errors"; import { type WalletModuleFactory, type WalletBehaviourFactory, @@ -493,12 +491,14 @@ const EthereumWallets: WalletBehaviourFactory< const results: Array = []; for (let i = 0; i < signedTransactions.length; i += 1) { const nearTx = await provider.sendTransaction(signedTransactions[i]); + logger.log("NEAR transaction:", nearTx); if ( typeof nearTx.status === "object" && typeof nearTx.status.Failure === "object" && nearTx.status.Failure !== null ) { - throw parseResultError(nearTx); + logger.error("Transaction execution error."); + throw parseRpcError(nearTx.status.Failure); } results.push(nearTx); } @@ -573,19 +573,26 @@ const EthereumWallets: WalletBehaviourFactory< receipt.nearTransactionHash, accountLogIn.accountId ); - if ( - receipt.status !== "success" && - nearTx.receipts_outcome.length > 1 && - typeof nearTx.receipts_outcome[1].outcome.status === "object" && - typeof nearTx.receipts_outcome[1].outcome.status.Failure === - "object" && - nearTx.receipts_outcome[1].outcome.status.Failure !== null - ) { - reject( - parseRpcError( - nearTx.receipts_outcome[1].outcome.status.Failure - ) + logger.log("NEAR transaction:", nearTx); + if (receipt.status !== "success") { + const failedOutcome = nearTx.receipts_outcome.find( + ({ outcome }) => + typeof outcome.status === "object" && + typeof outcome.status.Failure === "object" && + outcome.status.Failure !== null && + outcome.executor_id === tx.receiverId ); + if (failedOutcome) { + reject( + parseRpcError( + (failedOutcome.outcome.status as ExecutionStatus).Failure! + ) + ); + } else { + reject( + "Transaction execution error, failed to parse failure reason." + ); + } } results.push(nearTx); } From e2e738bcbd154e1351d498d84c228ad48e0de63b Mon Sep 17 00:00:00 2001 From: paouvrard Date: Thu, 20 Jun 2024 13:36:33 +0900 Subject: [PATCH 28/45] feat: Add alwaysOnboardDuringSignIn option. --- packages/ethereum-wallets/README.md | 1 + packages/ethereum-wallets/src/lib/index.ts | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/packages/ethereum-wallets/README.md b/packages/ethereum-wallets/README.md index 915cc3610..b76624107 100644 --- a/packages/ethereum-wallets/README.md +++ b/packages/ethereum-wallets/README.md @@ -82,6 +82,7 @@ Project ID is required, please obtain it from [walletconnect.com](https://wallet - `chainId` (`number?`): Chain ID of the NEAR web3 rpc to connect to. Defaults to `397` (`mainnet`) or `398` (`testnet`) depending on the `setupWalletSelector` network configuration. - `iconUrl` (`string?`): Image URL for the icon shown in the modal. This can also be a relative path or base64 encoded image. Defaults to `./assets/ethereum-wallets-icon.png`. - `wagmiCore` (`typeof import("@wagmi/core")?`): Optional, @wagmi/core functions can be overidden by the dapp to interract with the wallet. +- `alwaysOnboardDuringSignIn` (`boolean?`): A dapp without SignIn access key will not onboard the relayer by default, this option does the relayer onboarding during login. Developent options (before the NEAR protocol upgrade to support 0x accounts natively): diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index d6238b7ea..1788a4bf9 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -57,6 +57,7 @@ export interface EthereumWalletsParams { }; wagmiCore?: WagmiCoreActionsType; chainId?: number; + alwaysOnboardDuringSignIn?: boolean; iconUrl?: string; devMode?: boolean; devModeAccount?: string; @@ -95,6 +96,7 @@ const EthereumWallets: WalletBehaviourFactory< wagmiConfig, web3Modal, chainId, + alwaysOnboardDuringSignIn = false, devMode, devModeAccount = "eth-wallet.testnet", }, @@ -792,6 +794,9 @@ const EthereumWallets: WalletBehaviourFactory< throw error; } } + } else if (alwaysOnboardDuringSignIn) { + // Check onboarding status and onboard the relayer if needed. + await signAndSendTransactions([]); } const accountLogIn = { accountId, From 104bec480cee1dc10a27dffae40f21a1727dbf20 Mon Sep 17 00:00:00 2001 From: paouvrard Date: Fri, 21 Jun 2024 17:17:11 +0900 Subject: [PATCH 29/45] fix: Improve error handling during signIn. If any error happens, disconnect the Ethereum wallet to let the user connect again from the beginning. --- packages/ethereum-wallets/src/lib/index.ts | 243 +++++++++++---------- 1 file changed, 128 insertions(+), 115 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 1788a4bf9..6a12453e5 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -655,113 +655,120 @@ const EthereumWallets: WalletBehaviourFactory< return { async signIn({ contractId, methodNames = [] }) { logger.log("EthereumWallets:signIn", { contractId, methodNames }); - - let unwatchAccountConnected: (() => void) | undefined; - let unsubscribeCloseModal: (() => void) | undefined; - const account = wagmiCore!.getAccount(wagmiConfig); - let address = account.address?.toLowerCase(); - // Open web3Modal and wait for a wallet to be connected or for the web3Modal to be closed. - if (!address) { - try { - web3Modal.open(); - const newData: GetAccountReturnType = await (() => { - return new Promise((resolve, reject) => { - try { - unwatchAccountConnected = wagmiCore!.watchAccount(wagmiConfig, { - onChange: (data: GetAccountReturnType) => { - if (!data.address) { - return; + try { + let unwatchAccountConnected: (() => void) | undefined; + let unsubscribeCloseModal: (() => void) | undefined; + const account = wagmiCore!.getAccount(wagmiConfig); + let address = account.address?.toLowerCase(); + // Open web3Modal and wait for a wallet to be connected or for the web3Modal to be closed. + if (!address) { + try { + web3Modal.open(); + const newData: GetAccountReturnType = await (() => { + return new Promise((resolve, reject) => { + try { + unwatchAccountConnected = wagmiCore!.watchAccount( + wagmiConfig, + { + onChange: (data: GetAccountReturnType) => { + if (!data.address) { + return; + } + resolve(data); + }, } - resolve(data); - }, - }); - unsubscribeCloseModal = web3Modal.subscribeEvents( - (event: { data: { event: string } }) => { - const newAccount = wagmiCore!.getAccount(wagmiConfig); - if ( - event.data.event === "MODAL_CLOSE" && - !newAccount.address - ) { - logger.error( - "Web3Modal closed without connecting to an Ethereum wallet." - ); - reject( - "Web3Modal closed without connecting to an Ethereum wallet." - ); + ); + unsubscribeCloseModal = web3Modal.subscribeEvents( + (event: { data: { event: string } }) => { + const newAccount = wagmiCore!.getAccount(wagmiConfig); + if ( + event.data.event === "MODAL_CLOSE" && + !newAccount.address + ) { + logger.error( + "Web3Modal closed without connecting to an Ethereum wallet." + ); + reject( + "Web3Modal closed without connecting to an Ethereum wallet." + ); + } } - } - ); - } catch (error) { - reject("User rejected"); + ); + } catch (error) { + reject("User rejected"); + } + }); + })(); + address = newData.address?.toLowerCase(); + if (!address) { + throw new Error("Failed to get Ethereum wallet address"); + } + } catch (error: unknown) { + logger.error(error); + throw new Error("Failed to connect Ethereum wallet."); + } finally { + try { + // Prevent overshadowing the original exception + if (unwatchAccountConnected) { + unwatchAccountConnected(); } - }); - })(); - address = newData.address?.toLowerCase(); - if (!address) { - throw new Error("Failed to get Ethereum wallet address"); - } - } catch (error: unknown) { - logger.error(error); - throw new Error("Failed to connect Ethereum wallet."); - } finally { - if (unwatchAccountConnected) { - unwatchAccountConnected(); - } - if (unsubscribeCloseModal) { - unsubscribeCloseModal(); + if (unsubscribeCloseModal) { + unsubscribeCloseModal(); + } + } catch (error) { + logger.error(error); + } } + } else { + logger.log("Wallet already connected"); } - } else { - logger.log("Wallet already connected"); - } - - const { selectedNetworkId } = web3Modal.getState(); - if (selectedNetworkId !== expectedChainId) { - try { - await wagmiCore!.switchChain(wagmiConfig, { - chainId: expectedChainId, - }); - } catch (error) { - wagmiCore!.disconnect(wagmiConfig); - logger.error(error); - // TODO: add the link to onboarding page when available. - throw new Error( - "Wallet does not support NEAR Protocol network, try adding the network manually inside wallet settings." - ); - } - } - // Login with FunctionCall access key, reuse keypair or create a new one. - const accountId = devMode ? address + "." + devModeAccount : address; - let publicKey; - if (contractId) { - const keyPair = await _state.keystore.getKey( - options.network.networkId, - accountId - ); - let reUseKeyPair = false; - if (keyPair) { + const { selectedNetworkId } = web3Modal.getState(); + if (selectedNetworkId !== expectedChainId) { try { - await provider.query({ - request_type: "view_access_key", - finality: "final", - account_id: accountId, - public_key: keyPair.getPublicKey().toString(), + await wagmiCore!.switchChain(wagmiConfig, { + chainId: expectedChainId, }); - reUseKeyPair = true; } catch (error) { - logger.warn("Local access key cannot be reused."); - _state.keystore.removeKey(options.network.networkId, accountId); + logger.error(error); + // TODO: add the link to onboarding page when available. + throw new Error( + "Wallet didn't connect to NEAR Protocol network, try adding and selecting the network manually inside wallet settings." + ); } } - if (reUseKeyPair) { - publicKey = keyPair.getPublicKey().toString(); - logger.log("Reusing existing publicKey:", publicKey); - } else { - const newAccessKeyPair = nearAPI.utils.KeyPair.fromRandom("ed25519"); - publicKey = newAccessKeyPair.getPublicKey().toString(); - logger.log("Created new publicKey:", publicKey); - try { + + // Login with FunctionCall access key, reuse keypair or create a new one. + const accountId = devMode ? address + "." + devModeAccount : address; + let publicKey; + if (contractId) { + const keyPair = await _state.keystore.getKey( + options.network.networkId, + accountId + ); + let reUseKeyPair = false; + if (keyPair) { + try { + await provider.query({ + request_type: "view_access_key", + finality: "final", + account_id: accountId, + public_key: keyPair.getPublicKey().toString(), + }); + reUseKeyPair = true; + } catch (error) { + logger.warn("Local access key cannot be reused."); + _state.keystore.removeKey(options.network.networkId, accountId); + } + } + if (reUseKeyPair) { + publicKey = keyPair.getPublicKey().toString(); + logger.log("Reusing existing publicKey:", publicKey); + } else { + const newAccessKeyPair = + nearAPI.utils.KeyPair.fromRandom("ed25519"); + publicKey = newAccessKeyPair.getPublicKey().toString(); + logger.log("Created new publicKey:", publicKey); await signAndSendTransactions([ { signerId: accountId, @@ -789,28 +796,34 @@ const EthereumWallets: WalletBehaviourFactory< accountId, newAccessKeyPair ); - } catch (error) { - await signOut(); - throw error; } + } else if (alwaysOnboardDuringSignIn) { + // Check onboarding status and onboard the relayer if needed. + await signAndSendTransactions([]); } - } else if (alwaysOnboardDuringSignIn) { - // Check onboarding status and onboard the relayer if needed. - await signAndSendTransactions([]); - } - const accountLogIn = { - accountId, - publicKey, - }; - emitter.emit("signedIn", { - contractId: contractId, - methodNames: methodNames ?? [], - accounts: [accountLogIn], - }); - if (!_state.subscriptions.length) { - setupEvents(); + const accountLogIn = { + accountId, + publicKey, + }; + emitter.emit("signedIn", { + contractId: contractId, + methodNames: methodNames ?? [], + accounts: [accountLogIn], + }); + if (!_state.subscriptions.length) { + setupEvents(); + } + return [accountLogIn]; + } catch (error) { + try { + // Prevent overshadowing the original exception + // Disconnect to let user start again from the beginning: wallet selection. + wagmiCore!.disconnect(wagmiConfig); + } catch (err) { + logger.error(err); + } + throw error; } - return [accountLogIn]; }, signOut, From 35841f8be0ba1c6e8e1fabb317bf3c27d6772d1a Mon Sep 17 00:00:00 2001 From: paouvrard Date: Mon, 24 Jun 2024 11:54:24 +0900 Subject: [PATCH 30/45] feat: Log in with Ethereum flow. Auto connect to ethereum-wallets without showing the NEAR modal. --- examples/react/components/Content.tsx | 12 +++++- .../react/contexts/WalletSelectorContext.tsx | 39 ++++++++++++++++++- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/examples/react/components/Content.tsx b/examples/react/components/Content.tsx index 271442fa9..0fa5bc35c 100644 --- a/examples/react/components/Content.tsx +++ b/examples/react/components/Content.tsx @@ -180,7 +180,7 @@ const Content: React.FC = () => { ], }) .catch((err) => { - alert("Failed to add message"); + alert("Failed to add message " + err); console.log("Failed to add message"); throw err; @@ -379,6 +379,10 @@ const Content: React.FC = () => {
+
+ {/* @ts-ignore */} + +
); @@ -395,6 +399,12 @@ const Content: React.FC = () => { )} + {selector.store.getState().selectedWalletId === "ethereum-wallets" && ( +
+ {/* @ts-ignore */} + +
+ )}
handleSubmit(e as unknown as Submitted)} diff --git a/examples/react/contexts/WalletSelectorContext.tsx b/examples/react/contexts/WalletSelectorContext.tsx index 6e4c7fef6..2f455684d 100644 --- a/examples/react/contexts/WalletSelectorContext.tsx +++ b/examples/react/contexts/WalletSelectorContext.tsx @@ -1,5 +1,9 @@ import { setupCoin98Wallet } from "@near-wallet-selector/coin98-wallet"; -import type { AccountState, WalletSelector } from "@near-wallet-selector/core"; +import type { + AccountState, + InjectedWalletBehaviour, + WalletSelector, +} from "@near-wallet-selector/core"; import { setupWalletSelector } from "@near-wallet-selector/core"; import { setupHereWallet } from "@near-wallet-selector/here-wallet"; import { setupMathWallet } from "@near-wallet-selector/math-wallet"; @@ -33,7 +37,14 @@ import React, { } from "react"; import { distinctUntilChanged, map } from "rxjs"; import { createWeb3Modal } from "@web3modal/wagmi"; -import { reconnect, http, createConfig, type Config } from "@wagmi/core"; +import type { GetAccountReturnType } from "@wagmi/core"; +import { + reconnect, + http, + createConfig, + type Config, + watchAccount, +} from "@wagmi/core"; import { type Chain } from "@wagmi/core/chains"; import { injected, walletConnect } from "@wagmi/connectors"; @@ -120,6 +131,30 @@ export const WalletSelectorContextProvider: React.FC<{ const [accounts, setAccounts] = useState>([]); const [loading, setLoading] = useState(true); + // Log in with Ethereum flow: auto connect to ethereum-wallets without showing the NEAR modal. + useEffect(() => { + if (!selector || selector.store.getState().selectedWalletId) { + // A NEAR wallet is already connected. + return; + } + watchAccount(wagmiConfig, { + onChange: (data: GetAccountReturnType) => { + if (!data.address) { + return; + } + selector.store + .getState() + .modules.find((module) => module.id === "ethereum-wallets") + ?.wallet() + .then((wallet) => { + (wallet as InjectedWalletBehaviour).signIn({ + contractId: CONTRACT_ID, + }); + }); + }, + }); + }, [selector]); + const init = useCallback(async () => { const _selector = await setupWalletSelector({ network: "testnet", From 1fea570ce27e149512c3888f345f806e42d9a22a Mon Sep 17 00:00:00 2001 From: paouvrard Date: Mon, 24 Jun 2024 22:34:17 +0900 Subject: [PATCH 31/45] fix: Check isConnecting state. --- .../react/contexts/WalletSelectorContext.tsx | 14 ++++------- packages/ethereum-wallets/src/lib/index.ts | 23 ++++++++++++++----- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/examples/react/contexts/WalletSelectorContext.tsx b/examples/react/contexts/WalletSelectorContext.tsx index 2f455684d..2fd738126 100644 --- a/examples/react/contexts/WalletSelectorContext.tsx +++ b/examples/react/contexts/WalletSelectorContext.tsx @@ -142,15 +142,11 @@ export const WalletSelectorContextProvider: React.FC<{ if (!data.address) { return; } - selector.store - .getState() - .modules.find((module) => module.id === "ethereum-wallets") - ?.wallet() - .then((wallet) => { - (wallet as InjectedWalletBehaviour).signIn({ - contractId: CONTRACT_ID, - }); - }); + selector.wallet("ethereum-wallets").then((wallet) => + (wallet as InjectedWalletBehaviour).signIn({ + contractId: CONTRACT_ID, + }) + ); }, }); }, [selector]); diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 6a12453e5..c56eb7500 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -65,6 +65,7 @@ export interface EthereumWalletsParams { } interface EthereumWalletsState { + isConnecting: boolean; keystore: nearAPI.keyStores.KeyStore; subscriptions: Array; } @@ -79,6 +80,7 @@ const setupEthereumWalletsState = async ( return { keystore, subscriptions: [], + isConnecting: false, }; }; @@ -613,8 +615,8 @@ const EthereumWallets: WalletBehaviourFactory< const signOut = async () => { const [accountLogIn] = await getAccounts(); - try { - if (accountLogIn.publicKey) { + if (accountLogIn.publicKey) { + try { // Check that the key exists before making a transaction. await provider.query({ request_type: "view_access_key", @@ -642,20 +644,27 @@ const EthereumWallets: WalletBehaviourFactory< options.network.networkId, accountLogIn.accountId ); + } catch (error) { + logger.error(error); } - cleanup(); + } + try { + wagmiCore!.disconnect(wagmiConfig); } catch (error) { logger.error(error); - } finally { - emitter.emit("signedOut", null); - wagmiCore!.disconnect(wagmiConfig); } + emitter.emit("signedOut", null); + cleanup(); }; return { async signIn({ contractId, methodNames = [] }) { logger.log("EthereumWallets:signIn", { contractId, methodNames }); + if (_state.isConnecting) { + throw new Error("SignIn request already received."); + } try { + _state.isConnecting = true; let unwatchAccountConnected: (() => void) | undefined; let unsubscribeCloseModal: (() => void) | undefined; const account = wagmiCore!.getAccount(wagmiConfig); @@ -813,8 +822,10 @@ const EthereumWallets: WalletBehaviourFactory< if (!_state.subscriptions.length) { setupEvents(); } + _state.isConnecting = false; return [accountLogIn]; } catch (error) { + _state.isConnecting = false; try { // Prevent overshadowing the original exception // Disconnect to let user start again from the beginning: wallet selection. From 447254bf1ea5fa460125c4e0e22fd17dc705bf9b Mon Sep 17 00:00:00 2001 From: paouvrard Date: Mon, 24 Jun 2024 22:46:22 +0900 Subject: [PATCH 32/45] docs: Log in with Ethereum flow. --- packages/ethereum-wallets/README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/packages/ethereum-wallets/README.md b/packages/ethereum-wallets/README.md index b76624107..01acdb58c 100644 --- a/packages/ethereum-wallets/README.md +++ b/packages/ethereum-wallets/README.md @@ -89,6 +89,32 @@ Developent options (before the NEAR protocol upgrade to support 0x accounts nati - `devMode` (`boolean?`): During development NEAR protocol doesn't yet support `0x123...abc` accounts natively so in devMode the account with format `0x123...abc.eth-wallet.testnet` is used insead. Setup your devMode account at https://near-wallet-playground.testnet.aurora.dev - `devModeAccount` (`string?`): Modify the namespace of the devMode root accounts. +## Log in with Ethereum flow + +Dapps can connect to Ethereum wallets directly (using `w3m-button` for example) by watching the connected Ethereum account and connecting to the `ethereum-wallets` module automatically without opening the NEAR modal. + +```js +import { watchAccount } from "@wagmi/core"; +useEffect(() => { + if (!selector || selector.store.getState().selectedWalletId) { + // A NEAR wallet is already connected. + return + } + watchAccount(wagmiConfig, { + onChange: (data) => { + if (!data.address) { + return + } + selector.wallet("ethereum-wallets").then((wallet) => + wallet.signIn({ + contractId: CONTRACT_ID, + }) + ) + }, + }) +}, [selector]) +``` + ## License This repository is distributed under the terms of both the MIT license and the Apache License (Version 2.0). From fb701d04127ada3735100818acb5ae493a66c22b Mon Sep 17 00:00:00 2001 From: paouvrard Date: Tue, 25 Jun 2024 13:32:31 +0900 Subject: [PATCH 33/45] feat: Web3Modal is optional, default to injected wallet. --- packages/ethereum-wallets/README.md | 7 +- packages/ethereum-wallets/src/lib/index.ts | 113 +++++++++++---------- 2 files changed, 63 insertions(+), 57 deletions(-) diff --git a/packages/ethereum-wallets/README.md b/packages/ethereum-wallets/README.md index 01acdb58c..b727a9203 100644 --- a/packages/ethereum-wallets/README.md +++ b/packages/ethereum-wallets/README.md @@ -78,7 +78,7 @@ Project ID is required, please obtain it from [walletconnect.com](https://wallet ## Options - `wagmiConfig`: Wagmi Config for interacting with Ethereum wallets. -- `web3Modal`: Web3Modal object for connecting an Ethereum wallet and switching network. +- `web3Modal` (`Web3Modal?`): Web3Modal object for connecting an Ethereum wallet. If not provided this module will connect to the default injected wallet (MetaMask browser extension, embedded browser wallets...). - `chainId` (`number?`): Chain ID of the NEAR web3 rpc to connect to. Defaults to `397` (`mainnet`) or `398` (`testnet`) depending on the `setupWalletSelector` network configuration. - `iconUrl` (`string?`): Image URL for the icon shown in the modal. This can also be a relative path or base64 encoded image. Defaults to `./assets/ethereum-wallets-icon.png`. - `wagmiCore` (`typeof import("@wagmi/core")?`): Optional, @wagmi/core functions can be overidden by the dapp to interract with the wallet. @@ -115,6 +115,11 @@ useEffect(() => { }, [selector]) ``` +## Use without Web3Modal + +Web3Modal and Log in with Ethereum flows are the preferred UX for connecting to any Ethereum wallet. +But this module is also available to use without Web3Modal: it will connect to the default injected wallet (Metamask browser extension, embedded browser wallets...). + ## License This repository is distributed under the terms of both the MIT license and the Apache License (Version 2.0). diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index c56eb7500..16193bb4c 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -48,7 +48,7 @@ import { export interface EthereumWalletsParams { wagmiConfig: Config; - web3Modal: { + web3Modal?: { open: () => void; subscribeEvents: ( f: (event: { data: { event: string } }) => void @@ -518,12 +518,9 @@ const EthereumWallets: WalletBehaviourFactory< // Onboard the relayer before executing other transactions. txs = [onboardingTransaction, ...txs]; } - const { selectedNetworkId } = web3Modal.getState(); - if (selectedNetworkId !== expectedChainId) { - await wagmiCore!.switchChain(wagmiConfig, { - chainId: expectedChainId, - }); - } + await wagmiCore!.switchChain(wagmiConfig, { + chainId: expectedChainId, + }); const results: Array = []; await (() => { return new Promise((resolve, reject) => { @@ -672,43 +669,50 @@ const EthereumWallets: WalletBehaviourFactory< // Open web3Modal and wait for a wallet to be connected or for the web3Modal to be closed. if (!address) { try { - web3Modal.open(); - const newData: GetAccountReturnType = await (() => { - return new Promise((resolve, reject) => { - try { - unwatchAccountConnected = wagmiCore!.watchAccount( - wagmiConfig, - { - onChange: (data: GetAccountReturnType) => { - if (!data.address) { - return; + if (web3Modal) { + web3Modal.open(); + const newData: GetAccountReturnType = await (() => { + return new Promise((resolve, reject) => { + try { + unwatchAccountConnected = wagmiCore!.watchAccount( + wagmiConfig, + { + onChange: (data: GetAccountReturnType) => { + if (!data.address) { + return; + } + resolve(data); + }, + } + ); + unsubscribeCloseModal = web3Modal.subscribeEvents( + (event: { data: { event: string } }) => { + const newAccount = wagmiCore!.getAccount(wagmiConfig); + if ( + event.data.event === "MODAL_CLOSE" && + !newAccount.address + ) { + logger.error( + "Web3Modal closed without connecting to an Ethereum wallet." + ); + reject( + "Web3Modal closed without connecting to an Ethereum wallet." + ); } - resolve(data); - }, - } - ); - unsubscribeCloseModal = web3Modal.subscribeEvents( - (event: { data: { event: string } }) => { - const newAccount = wagmiCore!.getAccount(wagmiConfig); - if ( - event.data.event === "MODAL_CLOSE" && - !newAccount.address - ) { - logger.error( - "Web3Modal closed without connecting to an Ethereum wallet." - ); - reject( - "Web3Modal closed without connecting to an Ethereum wallet." - ); } - } - ); - } catch (error) { - reject("User rejected"); - } + ); + } catch (error) { + reject("User rejected"); + } + }); + })(); + address = newData.address?.toLowerCase(); + } else { + const { accounts } = await wagmiCore!.connect(wagmiConfig, { + connector: wagmiCore!.injected(), }); - })(); - address = newData.address?.toLowerCase(); + address = accounts[0]?.toLowerCase(); + } if (!address) { throw new Error("Failed to get Ethereum wallet address"); } @@ -732,19 +736,16 @@ const EthereumWallets: WalletBehaviourFactory< logger.log("Wallet already connected"); } - const { selectedNetworkId } = web3Modal.getState(); - if (selectedNetworkId !== expectedChainId) { - try { - await wagmiCore!.switchChain(wagmiConfig, { - chainId: expectedChainId, - }); - } catch (error) { - logger.error(error); - // TODO: add the link to onboarding page when available. - throw new Error( - "Wallet didn't connect to NEAR Protocol network, try adding and selecting the network manually inside wallet settings." - ); - } + try { + await wagmiCore!.switchChain(wagmiConfig, { + chainId: expectedChainId, + }); + } catch (error) { + logger.error(error); + // TODO: add the link to onboarding page when available. + throw new Error( + "Wallet didn't connect to NEAR Protocol network, try adding and selecting the network manually inside wallet settings." + ); } // Login with FunctionCall access key, reuse keypair or create a new one. @@ -884,8 +885,8 @@ export function setupEthereumWallets( id: "ethereum-wallets", type: "injected", metadata: { - name: "Ethereum Wallets", - description: "Ethereum wallets for NEAR.", + name: "Ethereum Wallet", + description: "Ethereum wallets (EOA) on NEAR Protocol.", iconUrl: params.iconUrl ?? icon, deprecated: params.deprecated ?? false, available: true, From 9a984a1cf249cbda819b87cb6623f8992e4ef33e Mon Sep 17 00:00:00 2001 From: paouvrard Date: Wed, 26 Jun 2024 10:41:17 +0900 Subject: [PATCH 34/45] fix: Wait for missing txStatus and receipt. --- packages/ethereum-wallets/src/lib/index.ts | 52 +++++++++++++++------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 16193bb4c..669bd6656 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -429,12 +429,15 @@ const EthereumWallets: WalletBehaviourFactory< key ); return { relayerPublicKey, onboardingTransaction: null }; - } catch (error) { - logger.warn( - "Need to add the relayer access key.", - relayerPublicKey, - error - ); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (error: any) { + logger.error(error); + if (!error.message?.includes("does not exist while viewing")) { + throw new Error( + "Failed to view the relayer public key (view_access_key)." + ); + } + logger.warn("Need to add the relayer access key:", relayerPublicKey); // Add the relayer's access key on-chain. return { relayerPublicKey, @@ -550,6 +553,7 @@ const EthereumWallets: WalletBehaviourFactory< }); let receipt; try { + // NOTE: error is thrown if tx failed so we catch it to get the receipt. receipt = await wagmiCore!.waitForTransactionReceipt( wagmiConfig, { @@ -559,21 +563,39 @@ const EthereumWallets: WalletBehaviourFactory< ); } catch (error) { logger.error(error); - receipt = await wagmiCore!.getTransactionReceipt(wagmiConfig, { - hash: txHash, - chainId: expectedChainId, - }); + while (!receipt) { + try { + await new Promise((r) => setTimeout(r, 1000)); + receipt = await wagmiCore!.getTransactionReceipt( + wagmiConfig, + { + hash: txHash, + chainId: expectedChainId, + } + ); + } catch (err) { + logger.log(err); + } + } } logger.log("Receipt:", receipt); const nearProvider = new JsonRpcProvider( // @ts-expect-error provider.provider.connection ); - const nearTx = await nearProvider.txStatus( - // @ts-expect-error - receipt.nearTransactionHash, - accountLogIn.accountId - ); + let nearTx; + while (!nearTx) { + try { + await new Promise((r) => setTimeout(r, 1000)); + nearTx = await nearProvider.txStatus( + // @ts-expect-error + receipt.nearTransactionHash, + accountLogIn.accountId + ); + } catch (err) { + logger.log(err); + } + } logger.log("NEAR transaction:", nearTx); if (receipt.status !== "success") { const failedOutcome = nearTx.receipts_outcome.find( From bc9203a536fef8db4cd5d26631458269b65036a3 Mon Sep 17 00:00:00 2001 From: paouvrard Date: Wed, 26 Jun 2024 22:26:57 +0900 Subject: [PATCH 35/45] fix: Handle alternative error message. --- packages/ethereum-wallets/src/lib/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 669bd6656..e6b2f1607 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -432,7 +432,10 @@ const EthereumWallets: WalletBehaviourFactory< // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (error: any) { logger.error(error); - if (!error.message?.includes("does not exist while viewing")) { + if ( + !error.message?.includes("does not exist while viewing") && + !error.message?.includes("has never been observed on the node") + ) { throw new Error( "Failed to view the relayer public key (view_access_key)." ); From 34d0f82d365a624b59117eecf616bd286a594a99 Mon Sep 17 00:00:00 2001 From: paouvrard Date: Thu, 27 Jun 2024 01:09:46 +0900 Subject: [PATCH 36/45] fix: Tweak log in with Ethereum flow. --- examples/react/contexts/WalletSelectorContext.tsx | 5 ++--- packages/ethereum-wallets/README.md | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/examples/react/contexts/WalletSelectorContext.tsx b/examples/react/contexts/WalletSelectorContext.tsx index 2fd738126..ade154015 100644 --- a/examples/react/contexts/WalletSelectorContext.tsx +++ b/examples/react/contexts/WalletSelectorContext.tsx @@ -133,13 +133,12 @@ export const WalletSelectorContextProvider: React.FC<{ // Log in with Ethereum flow: auto connect to ethereum-wallets without showing the NEAR modal. useEffect(() => { - if (!selector || selector.store.getState().selectedWalletId) { - // A NEAR wallet is already connected. + if (!selector) { return; } watchAccount(wagmiConfig, { onChange: (data: GetAccountReturnType) => { - if (!data.address) { + if (!data.address || selector.store.getState().selectedWalletId) { return; } selector.wallet("ethereum-wallets").then((wallet) => diff --git a/packages/ethereum-wallets/README.md b/packages/ethereum-wallets/README.md index b727a9203..4e8370404 100644 --- a/packages/ethereum-wallets/README.md +++ b/packages/ethereum-wallets/README.md @@ -96,13 +96,12 @@ Dapps can connect to Ethereum wallets directly (using `w3m-button` for example) ```js import { watchAccount } from "@wagmi/core"; useEffect(() => { - if (!selector || selector.store.getState().selectedWalletId) { - // A NEAR wallet is already connected. + if (!selector) { return } watchAccount(wagmiConfig, { onChange: (data) => { - if (!data.address) { + if (!data.address || selector.store.getState().selectedWalletId) { return } selector.wallet("ethereum-wallets").then((wallet) => From a7279169de6011ca42c2100d182223fc6112c21f Mon Sep 17 00:00:00 2001 From: paouvrard Date: Thu, 27 Jun 2024 01:25:54 +0900 Subject: [PATCH 37/45] fix: Disconnect wallet when switch to account without LAK. Log in with Ethereum flow expects the Ethereum wallet to be disconnected if the NEAR selector is disconnected. --- packages/ethereum-wallets/src/lib/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index e6b2f1607..dd6f7a523 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -302,6 +302,11 @@ const EthereumWallets: WalletBehaviourFactory< devMode ? address + "." + devModeAccount : address ); if (!keyPair) { + try { + wagmiCore!.disconnect(wagmiConfig); + } catch (error) { + logger.error(error); + } emitter.emit("signedOut", null); return; } From 8c93268fb2491b5d4e64c4fd5a095a3fe787849c Mon Sep 17 00:00:00 2001 From: paouvrard Date: Fri, 28 Jun 2024 13:04:41 +0900 Subject: [PATCH 38/45] fix: Use wagmi.simulateContract. --- packages/ethereum-wallets/src/lib/index.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index dd6f7a523..9f2ee5622 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -276,11 +276,8 @@ const EthereumWallets: WalletBehaviourFactory< throw new Error("Invalid action type"); } } - const gas = await wagmiCore!.estimateGas(wagmiConfig, ethTx); - const result = await wagmiCore!.writeContract(wagmiConfig, { - ...ethTx, - gas, - }); + const { request } = await wagmiCore!.simulateContract(wagmiConfig, ethTx); + const result = await wagmiCore!.writeContract(wagmiConfig, request); return result; }; From 35e85a196fe2ea64b1eda45d7e5085e27b63337c Mon Sep 17 00:00:00 2001 From: Pierre-Alain Date: Mon, 1 Jul 2024 15:05:05 +0900 Subject: [PATCH 39/45] feat: Confirm action and allow retry. (#11) * feat: Confirm action and allow retry. * Styling * Clean up * Edit buttons * chore: Rename. --------- Co-authored-by: santerisarle --- packages/ethereum-wallets/src/lib/index.ts | 56 +++++++++-- packages/ethereum-wallets/src/lib/modal.ts | 106 +++++++++++++++------ packages/ethereum-wallets/src/lib/utils.ts | 1 + 3 files changed, 130 insertions(+), 33 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 9f2ee5622..f7865aa84 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -44,6 +44,7 @@ import { DEFAULT_ACCESS_KEY_ALLOWANCE, RLP_EXECUTE, MAX_TGAS, + EthTxError, } from "./utils"; export interface EthereumWalletsParams { @@ -476,7 +477,7 @@ const EthereumWallets: WalletBehaviourFactory< const nearTxs = await transformTransactions(transactions); const [accountLogIn] = await getAccounts(); // If transactions can be executed with FunctionCall access key do it, otherwise execute 1 by 1 with Ethereum wallet. - if (accountLogIn.publicKey) { + if (accountLogIn.publicKey && nearTxs.length) { let accessKeyUsable; try { const accessKey = await provider.query({ @@ -545,17 +546,60 @@ const EthereumWallets: WalletBehaviourFactory< try { const ethTxHashes: Array = []; for (const [index, tx] of txs.entries()) { - renderTxs({ - selectedIndex: index, - ethTxHashes, - }); - const txHash = await executeTransaction({ tx, relayerPublicKey }); + let txHash; + let txError: string | null = null; + while (!txHash) { + try { + await (() => { + return new Promise((resolveTx, rejectTx) => { + renderTxs({ + selectedIndex: index, + ethTxHashes, + error: txError, + onConfirm: async () => { + try { + txError = null; + renderTxs({ + selectedIndex: index, + ethTxHashes, + error: txError, + }); + txHash = await executeTransaction({ + tx, + relayerPublicKey, + }); + resolveTx(); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (err: any) { + logger.error(err); + if ( + !err.message?.includes("reject") && + !err.message?.includes("denied") + ) { + txError = "Transaction execution error."; + } + rejectTx( + new EthTxError("Transaction request error.") + ); + } + }, + }); + }); + })(); + } catch (error) { + logger.error(error); + if (!(error instanceof EthTxError)) { + throw new Error("Ethereum modal render error."); + } + } + } logger.log(`Sent transaction: ${txHash}`); ethTxHashes.push(txHash); renderTxs({ selectedIndex: index, ethTxHashes, }); + await new Promise((r) => setTimeout(r, 2000)); let receipt; try { // NOTE: error is thrown if tx failed so we catch it to get the receipt. diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index 766d490f1..4dc8cb36a 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -213,6 +213,10 @@ export function createModal({ color: #1C2024; border: 1px solid rgba(1, 6, 47, 0.173) !important; background-color: #fff !important; + padding: 14px; + font-size: 14px; + line-height: 20px; + font-weight: 700; } .ethereum-wallet-btn:hover { border: 1px solid rgba(1, 6, 47, 0.173); @@ -224,15 +228,12 @@ export function createModal({ outline-color: #8B8D98; border: 1px solid rgba(1, 6, 47, 0.173); } - .ethereum-wallet-btn-cancel { - padding: 14px; - font-size: 14px; - line-height: 20px; - font-weight: 700; - width: 100%; + .ethereum-wallet-btn-sm { + padding: 10px 14px; + font-size: 12px; + line-height: 16px; } - .ethereum-wallet-btn-details { - margin-top: 20px; + .ethereum-wallet-btn-xs { padding: 8px 12px; font-weight: 500; font-size: 12px; @@ -240,6 +241,34 @@ export function createModal({ letter-spacing: 0.04px; border-radius: 9999px; } + .ethereum-wallet-btn-confirm { + width: 100%; + margin-top: 24px; + } + .ethereum-wallet-btn-cancel { + width: 100%; + background-color: #FFF9F9 !important; + color: #dc2626 !important; + border: 1px solid #fecaca !important; + } + .ethereum-wallet-btn-cancel:hover { + background-color: #fef2f2 !important; + } + .ethereum-wallet-btn-details { + margin-top: 20px; + border-radius: 9999px; + } + + .ethereum-wallet-tx-error { + font-size: 14px; + line-height: 20px; + color: #dc2626; + font-weight: 700; + text-align: center; + text-wrap: balance; + margin-top: 20px; + margin-bottom: 0px; + } .ethereum-wallet-txs-details { display: none; @@ -273,6 +302,7 @@ export function createModal({ border-radius: 8px; width: 100%; margin-top: 24px; + border: 1px solid rgba(0,0,0,0); } .ethereum-wallet-txs-status p { margin: 0; @@ -344,24 +374,30 @@ export function createModal({ modalContentContainer.classList.add("ethereum-wallet-modal-container"); // Modal content + const isLogIn = txs.find((tx) => tx.actions[0].type === "AddKey"); + const isOnboard = txs.find( + (tx) => + tx.actions[0].type === "AddKey" && + tx.actions[0].params.publicKey === relayerPublicKey + ); const modalContent = window.document.createElement("div"); modalContent.classList.add("ethereum-wallet-modal-content"); modalContent.innerHTML = ` ${ - txs.length === 1 && - txs[0].actions.length === 1 && - txs[0].actions[0].type === "AddKey" - ? "

Log in

" + txs.length === 1 && isLogIn + ? `

${isOnboard ? "Onboard" : "Log in"}

` : txs.length === 1 && txs[0].actions.length === 1 && txs[0].actions[0].type === "DeleteKey" ? "

Log out

" - : `

Execute ${txs.length} transaction${ + : isLogIn + ? `

Log in: execute ${txs.length} transaction${ txs.length > 1 ? "s" : "" }

` + : `

Send ${txs.length} transaction${txs.length > 1 ? "s" : ""}

` }
- + `; // // Append the elements to form the complete structure @@ -395,9 +431,13 @@ export function createModal({ const renderTxs = ({ selectedIndex, ethTxHashes, + error, + onConfirm, }: { selectedIndex: number; ethTxHashes: Array; + error?: string | null; + onConfirm?: () => void; }) => { const container = document.querySelector( ".ethereum-wallet-txs" @@ -592,27 +632,39 @@ export function createModal({ ` } - +

${JSON.stringify(tx.actions[0], null, 2)}

-
-

- ${ - isSent - ? "Sending transaction" - : "Sign the transaction in your wallet" - } -

-
-
+ ${error ? `

${error}

` : ""} + ${ + onConfirm + ? `` + : `
+

+ ${ + isSent + ? "Sending transaction" + : "Confirm in your wallet" + } +

+
+
` + } ` } - `; - container.appendChild(txElement); }); + if (onConfirm) { + window.document + .querySelector(`#confirm-btn-${selectedIndex}`) + ?.addEventListener("click", () => { + onConfirm(); + }); + } const toggleButton = window.document.querySelector( ".ethereum-wallet-btn-details" diff --git a/packages/ethereum-wallets/src/lib/utils.ts b/packages/ethereum-wallets/src/lib/utils.ts index d8b961bae..2c44202b7 100644 --- a/packages/ethereum-wallets/src/lib/utils.ts +++ b/packages/ethereum-wallets/src/lib/utils.ts @@ -9,3 +9,4 @@ export const ETHEREUM_ACCOUNT_ABI = parseAbi([ export const DEFAULT_ACCESS_KEY_ALLOWANCE = "250000000000000000000000"; // 0.25 NEAR export const RLP_EXECUTE = "rlp_execute"; export const MAX_TGAS = BigInt(270e12); // Handle overhead of rlp_execute to validate the Ethereum transaction. +export class EthTxError extends Error {} From a40b49859640acb44c39083131a13b23119cab5b Mon Sep 17 00:00:00 2001 From: paouvrard Date: Mon, 1 Jul 2024 15:30:46 +0900 Subject: [PATCH 40/45] fix: Hide Web3Modal after signIn. --- packages/ethereum-wallets/src/lib/index.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index f7865aa84..30632668a 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -51,6 +51,7 @@ export interface EthereumWalletsParams { wagmiConfig: Config; web3Modal?: { open: () => void; + close: () => void; subscribeEvents: ( f: (event: { data: { event: string } }) => void ) => () => void; @@ -895,6 +896,14 @@ const EthereumWallets: WalletBehaviourFactory< setupEvents(); } _state.isConnecting = false; + try { + // Hide modal which stays open after adding a new network. + if (web3Modal) { + web3Modal.close(); + } + } catch (error) { + logger.error(error); + } return [accountLogIn]; } catch (error) { _state.isConnecting = false; From d8e4619640344ec4980636ed156e0be5cd78e104 Mon Sep 17 00:00:00 2001 From: paouvrard Date: Mon, 1 Jul 2024 15:50:35 +0900 Subject: [PATCH 41/45] chore: Rename. --- packages/ethereum-wallets/src/lib/modal.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index 4dc8cb36a..7a12c46bd 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -391,7 +391,7 @@ export function createModal({ txs[0].actions[0].type === "DeleteKey" ? "

Log out

" : isLogIn - ? `

Log in: execute ${txs.length} transaction${ + ? `

Log in: send ${txs.length} transaction${ txs.length > 1 ? "s" : "" }

` : `

Send ${txs.length} transaction${txs.length > 1 ? "s" : ""}

` From 334874192ef03495f42a68c19044624d0d0db5d9 Mon Sep 17 00:00:00 2001 From: paouvrard Date: Wed, 10 Jul 2024 10:28:30 +0900 Subject: [PATCH 42/45] feat: 1wei free onboarding. --- packages/ethereum-wallets/src/lib/index.ts | 7 ++++--- packages/ethereum-wallets/src/lib/modal.ts | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 30632668a..0633bf670 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -208,9 +208,10 @@ const EthereumWallets: WalletBehaviourFactory< tx.actions[0].params.publicKey === relayerPublicKey && tx.receiverId === tx.actions[0].params.accessKey.permission.receiverId - ? // Fix 0 gasPrice to avoid wallet errors when account has 0 NEAR balance. - // The onboarding transaction is always free. - BigInt(0) + ? // Free onboarding tx: fix 1 wei gasPrice because some wallets ignore 0 gasPrice. + // Rpc will also return a dust eth_getBalance for accounts not yet onboarded to trick wallets + // into accepting this free transaction even before the user owns NEAR. + BigInt(1) : undefined, chainId: expectedChainId, type: "legacy", diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index 7a12c46bd..ae29a51eb 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -531,7 +531,7 @@ export function createModal({ .methodNames[0] === RLP_EXECUTE ? `
-

This transaction will onboard your account and enable you to transact on NEAR Protocol.

+

This one-time transaction will onboard your account and enable you to transact on NEAR Protocol.

` : `
From 71533ff80ca27c708ea785464bda0ff89991f81f Mon Sep 17 00:00:00 2001 From: paouvrard Date: Tue, 16 Jul 2024 15:01:08 +0900 Subject: [PATCH 43/45] build: Upgrade Ethereum dependencies. --- .../wallet-selector.component.ts | 5 +- .../react/contexts/WalletSelectorContext.tsx | 5 +- package.json | 8 +- packages/ethereum-wallets/README.md | 6 +- yarn.lock | 318 ++++++++++-------- 5 files changed, 191 insertions(+), 151 deletions(-) diff --git a/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts b/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts index cb1d18f57..edefade3a 100644 --- a/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts +++ b/examples/angular/src/app/pages/wallet-selector/wallet-selector.component.ts @@ -89,9 +89,8 @@ reconnect(wagmiConfig); const web3Modal = createWeb3Modal({ wagmiConfig: wagmiConfig, projectId, - featuredWalletIds: [ - "ecc4036f814562b41a5268adc86270fba1365471402006302e70169465b7ac18", // Zerion - ], + enableOnramp: false, + allWallets: "SHOW", }); @Component({ diff --git a/examples/react/contexts/WalletSelectorContext.tsx b/examples/react/contexts/WalletSelectorContext.tsx index ae44ab5ad..a53d22afa 100644 --- a/examples/react/contexts/WalletSelectorContext.tsx +++ b/examples/react/contexts/WalletSelectorContext.tsx @@ -120,9 +120,8 @@ reconnect(wagmiConfig); const web3Modal = createWeb3Modal({ wagmiConfig: wagmiConfig, projectId, - featuredWalletIds: [ - "ecc4036f814562b41a5268adc86270fba1365471402006302e70169465b7ac18", // Zerion - ], + enableOnramp: false, + allWallets: "SHOW", }); export const WalletSelectorContextProvider: React.FC<{ diff --git a/package.json b/package.json index 06d4bbc4b..a6f078c7e 100644 --- a/package.json +++ b/package.json @@ -99,10 +99,10 @@ "@near-snap/sdk": "^0.6.0", "@peersyst/near-mobile-signer": "^1.0.10", "@ramper/near": "^0.0.30", - "@tanstack/react-query": "5.36.2", + "@tanstack/react-query": "5.24.8", "@walletconnect/modal": "^2.6.2", "@walletconnect/sign-client": "2.13.0", - "@web3modal/wagmi": "4.2.0", + "@web3modal/wagmi": "5.0.6", "better-sqlite3": "^9.3.0", "big.js": "^6.1.1", "bn.js": "^5.2.0", @@ -132,8 +132,8 @@ "tweetnacl": "^1.0.3", "tweetnacl-util": "^0.15.1", "url": "^0.11.0", - "viem": "2.10.5", - "wagmi": "2.8.8", + "viem": "2.16.2", + "wagmi": "2.10.9", "zone.js": "0.12.0" }, "devDependencies": { diff --git a/packages/ethereum-wallets/README.md b/packages/ethereum-wallets/README.md index 4e8370404..011ca94ba 100644 --- a/packages/ethereum-wallets/README.md +++ b/packages/ethereum-wallets/README.md @@ -36,7 +36,7 @@ Visit https://docs.walletconnect.com for the latest configuration of Web3Modal. ```ts import type { Config } from "@wagmi/core"; import { reconnect, http, createConfig } from "@wagmi/core"; -import { coinbaseWallet, walletConnect, injected } from "@wagmi/connectors"; +import { walletConnect, injected } from "@wagmi/connectors"; import { setupWalletSelector } from "@near-wallet-selector/core"; import { setupEthereumWallets } from "@near-wallet-selector/ethereum-wallets"; @@ -48,10 +48,6 @@ const wagmiConfig: Config = createConfig({ connectors: [ walletConnect({ projectId, metadata, showQrModal: false }), injected({ shimDisconnect: true }), - coinbaseWallet({ - appName, - appLogoUrl, - }), ], }); reconnect(wagmiConfig); diff --git a/yarn.lock b/yarn.lock index 6beed71e5..1e4e892bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2492,13 +2492,20 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0": +"@babel/runtime@^7.21.0": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.23.2": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.8.tgz#5d958c3827b13cc6d05e038c07fb2e5e3420d82e" + integrity sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.9.2": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" @@ -2635,16 +2642,13 @@ dependencies: "@chainsafe/is-ip" "^2.0.1" -"@coinbase/wallet-sdk@3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.9.1.tgz#503a14671bb392d653623ef2340934e213ac971f" - integrity sha512-cGUE8wm1/cMI8irRMVOqbFWYcnNugqCtuy2lnnHfgloBg+GRLs9RsrkOUDMdv/StfUeeKhCDyYudsXXvcL1xIA== +"@coinbase/wallet-sdk@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-4.0.4.tgz#634cd89bac93eeaf381a1f026476794e53431ed6" + integrity sha512-74c040CRnGhfRjr3ArnkAgud86erIqdkPHNt5HR1k9u97uTIZCJww9eGYT67Qf7gHPpGS/xW8Be1D4dvRm63FA== dependencies: - bn.js "^5.2.1" buffer "^6.0.3" clsx "^1.2.1" - eth-block-tracker "^7.1.0" - eth-json-rpc-filters "^6.0.0" eventemitter3 "^5.0.1" keccak "^3.0.3" preact "^10.16.0" @@ -3976,33 +3980,33 @@ resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.1.tgz#e89b840a7af8097a8ed4953d8dc8470d1302d3ef" integrity sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw== -"@metamask/sdk-communication-layer@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.20.2.tgz#7f7fd334b2d26abd1a5a1ec1ffadf823a9589344" - integrity sha512-TN+whYbCClFSkx52Ild1RcjoRyz8YZgwNvZeooIcZIvCfBM6U9W5273KGiY7WLc/oO4KKmFk17d7vMO4gNvhhw== +"@metamask/sdk-communication-layer@0.26.4": + version "0.26.4" + resolved "https://registry.yarnpkg.com/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.26.4.tgz#dda8e33a327f29962095b82c598799b852e40d81" + integrity sha512-+X4GEc5mV1gWK4moSswVlKsUh+RsA48qPlkxBLTUxQODSnyBe0TRMxE6mH+bSrfponnTzvBkGUXyEjvDwDjDHw== dependencies: bufferutil "^4.0.8" date-fns "^2.29.3" debug "^4.3.4" - utf-8-validate "^6.0.3" + utf-8-validate "^5.0.2" uuid "^8.3.2" -"@metamask/sdk-install-modal-web@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@metamask/sdk-install-modal-web/-/sdk-install-modal-web-0.20.2.tgz#1cf0eb3c26291de7598190878fa9a893c4eb2d66" - integrity sha512-0QiaZhV15AGdN1zU2jfTI32eC3YkwEpzDfR9+oiZ9bd2G72c6lYBhTsmDGUd01aP6A+bqJR5PjI8Wh2AWtoLeA== +"@metamask/sdk-install-modal-web@0.26.4": + version "0.26.4" + resolved "https://registry.yarnpkg.com/@metamask/sdk-install-modal-web/-/sdk-install-modal-web-0.26.4.tgz#3e0700988fb148ebc9f48adb327a54498ac899db" + integrity sha512-7Cx7ZsaExbMwghlRrUWWI0Ksg0m7K60LtMjfuDpjvjWqoZa9MoPxitGDEXNbLaqvKn39ebPvNcPzQ6czA4ilTw== dependencies: qr-code-styling "^1.6.0-rc.1" -"@metamask/sdk@0.20.3": - version "0.20.3" - resolved "https://registry.yarnpkg.com/@metamask/sdk/-/sdk-0.20.3.tgz#73851d68ffe5d45c1872c024182922530b187b7a" - integrity sha512-HZ9NwA+LxiXzuy0YWbWsuD4xejQtp85bhcCAf8UgpA/0dOyF3RS4dKDdBBXSyRgk3RWPjeJgHxioaH4CmBmiRA== +"@metamask/sdk@0.26.4": + version "0.26.4" + resolved "https://registry.yarnpkg.com/@metamask/sdk/-/sdk-0.26.4.tgz#4efa48c2def851956110e545c0fe6304a9019684" + integrity sha512-9Yh41KJkD9RhW0lRijnQzPV0ptblLorLdTsf5GnAl3yE72QIfaPBtsDxzLtX+0QLppiFfj7o8vRBYvBApG9k+Q== dependencies: "@metamask/onboarding" "^1.0.1" "@metamask/providers" "^15.0.0" - "@metamask/sdk-communication-layer" "0.20.2" - "@metamask/sdk-install-modal-web" "0.20.2" + "@metamask/sdk-communication-layer" "0.26.4" + "@metamask/sdk-install-modal-web" "0.26.4" "@types/dom-screen-wake-lock" "^1.0.0" bowser "^2.9.0" cross-fetch "^4.0.0" @@ -4010,7 +4014,7 @@ eciesjs "^0.3.15" eth-rpc-errors "^4.0.3" eventemitter2 "^6.4.7" - i18next "22.5.1" + i18next "23.11.5" i18next-browser-languagedetector "7.1.0" obj-multiplex "^1.0.0" pump "^3.0.0" @@ -7211,17 +7215,17 @@ resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== -"@tanstack/query-core@5.36.1": - version "5.36.1" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.36.1.tgz#ae46f935c4752812a56c6815305061a3da82e7b8" - integrity sha512-BteWYEPUcucEu3NBcDAgKuI4U25R9aPrHSP6YSf2NvaD2pSlIQTdqOfLRsxH9WdRYg7k0Uom35Uacb6nvbIMJg== +"@tanstack/query-core@5.24.8": + version "5.24.8" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.24.8.tgz#b407546a726ecd4d60b8682dec2ca84ac9eab81e" + integrity sha512-yH7KnfXMf10p1U5GffTQzFi2Miiw6WJZImGYGdV7eqa5ZbKO8qVx9lOA9SfhIaJXomrMp1Yz5w/CBhVM3yWeTA== -"@tanstack/react-query@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.36.2.tgz#1b7dc4c2fa0e48912335f0a157dd942cfa269326" - integrity sha512-bHNa+5dead+j6SA8WVlEOPxcGfteVFgdyFTCFcxBgjnPf0fFpHUc7aNZBCnvmPXqy/BeQa9zTuU9ectb7i8ZXA== +"@tanstack/react-query@5.24.8": + version "5.24.8" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.24.8.tgz#9de1423a710bcdfce90df82acaf494659edb6221" + integrity sha512-jB3JS9SzDmBySk9VVOTPt/0ixWEb3K3dy9IExlVl/1NouY3N7HzAqG/1d4m6E9eFfKJoLvA/hBksaLu0lw627A== dependencies: - "@tanstack/query-core" "5.36.1" + "@tanstack/query-core" "5.24.8" "@testing-library/dom@^8.5.0": version "8.14.0" @@ -8131,22 +8135,23 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz#48c46eab21e0730921986ce742563ae83fe7fe34" integrity sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A== -"@wagmi/connectors@4.3.10": - version "4.3.10" - resolved "https://registry.yarnpkg.com/@wagmi/connectors/-/connectors-4.3.10.tgz#b4ae30712fe0e818efa2a188cdcfc81b1e971f15" - integrity sha512-IZcsocBfDq6pe8sxkDgP2k9YNqv8udl2eSr2hx2JCESA44ixx5zRjoGNMAkKxlzM6uXjXLJKp/g1KYlpmoHkDg== +"@wagmi/connectors@5.0.21": + version "5.0.21" + resolved "https://registry.yarnpkg.com/@wagmi/connectors/-/connectors-5.0.21.tgz#0fee2d59c764e69804067aa0cb60650fbe6c7227" + integrity sha512-lbjXEv6HhOa9nXZ5r6NGFJdaadCt2Yj9hSWHjKuiTobrE6dEGQqG16mCQS17yXcvXpI62Q/sW6SL347JrBju/Q== dependencies: - "@coinbase/wallet-sdk" "3.9.1" - "@metamask/sdk" "0.20.3" + "@coinbase/wallet-sdk" "4.0.4" + "@metamask/sdk" "0.26.4" "@safe-global/safe-apps-provider" "0.18.1" "@safe-global/safe-apps-sdk" "8.1.0" "@walletconnect/ethereum-provider" "2.13.0" "@walletconnect/modal" "2.6.2" + cbw-sdk "npm:@coinbase/wallet-sdk@3.9.3" -"@wagmi/core@2.9.8": - version "2.9.8" - resolved "https://registry.yarnpkg.com/@wagmi/core/-/core-2.9.8.tgz#dad0e4688372526d387576f904da83cb1123a0f9" - integrity sha512-VQJMHZIZta53xFfEels/ig3w3iRFlH3dwQMcn70ZBL8c9RpecE5yus2Wxih4TOaB32hIkOtg4zla1abHG+u4Wg== +"@wagmi/core@2.11.6": + version "2.11.6" + resolved "https://registry.yarnpkg.com/@wagmi/core/-/core-2.11.6.tgz#bfb592e76fe5c863e4faec545874abdc4df00fe8" + integrity sha512-Ohk7Bh+Q8kjzxEHImIq98CnPduz8n1a5bdwJi6F7zU3h62crhlVq7fZBYoBhoDgmX0ROVOMr8WW3XU3XhRwUOw== dependencies: eventemitter3 "5.0.1" mipd "0.0.5" @@ -8493,103 +8498,119 @@ "@walletconnect/window-getters" "^1.0.1" tslib "1.14.1" -"@web3modal/common@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@web3modal/common/-/common-4.2.0.tgz#cecc1a3bf46d54d19b0bf0f9536cbd2134fa6016" - integrity sha512-f5viBpEAmXmy0xdBdjluq8MZaoxJrpU2eJzKRcQ/gtFhuiZFsdavLMqflG5AUNCF+elBTc+BZw3sGAT2N1rAnQ== +"@web3modal/common@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/common/-/common-5.0.6.tgz#f575ae34c59298029053c59c3a9b2ee7282686b2" + integrity sha512-VRLjA8FvHsnA3s0B+7ZbiXE5scQAZE7100RbbrjTjyJbseiU/W9gGoGcKW2NyBmfBrGQY3SXs62CCqcVQNMT4A== dependencies: bignumber.js "9.1.2" dayjs "1.11.10" -"@web3modal/core@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@web3modal/core/-/core-4.2.0.tgz#0ee567814494afb01a2372548206a37e6d962a23" - integrity sha512-8HEaq8sDA+o62VASOF5faxtaQa6RC8ZXCcAV6A3uR4SI8JXu6BrnkdyCvHgOaMSUpDJ+hAgjDPp2qK2PnDuIhw== +"@web3modal/core@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/core/-/core-5.0.6.tgz#e3c89f10ef15e35a8266ce3aa706292ce89656ea" + integrity sha512-C3g2V/fYfV34mmn/h7YFsi8VSFXnaj508pHps0H3t/9UrKsEdvbl91rvxbWg7tulh4ZtMK4SOJVmuoEgbzGcaw== dependencies: - "@web3modal/common" "4.2.0" - "@web3modal/wallet" "4.2.0" + "@web3modal/common" "5.0.6" + "@web3modal/wallet" "5.0.6" valtio "1.11.2" -"@web3modal/polyfills@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@web3modal/polyfills/-/polyfills-4.2.0.tgz#ed48049e794378da97bb9fedd9d2b8ce1aae4180" - integrity sha512-tWuj6UxaoAPogwsr/cv/XYLJCIyhlEf2XqDtVpOuAr3blhw1t+um8CycscT5OBU6aboW/S96yWhrd6buBnup3g== +"@web3modal/polyfills@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/polyfills/-/polyfills-5.0.6.tgz#1866e354b2abbfa4d5d9c63ccb349f3cbbb5320a" + integrity sha512-nisOsY9s0eU5ljYw8xIhrSDnMJAncB2bUIRwXYQGrI5Ly+jVd3XeINDtsOAsFVRz08+IC+H1eFt8DZEV1rKpFQ== dependencies: buffer "6.0.3" -"@web3modal/scaffold-react@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@web3modal/scaffold-react/-/scaffold-react-4.2.0.tgz#7c6657fd4638eb477b2ea534de90d29c2794db40" - integrity sha512-lDkEHFfgBcx2tu7V8I6qKnYlMybUL7WwPBCKi3CDFhxsjXyOvnmbXRsuMuma546N59eRteXxpimXfHNYpS6pqg== +"@web3modal/scaffold-react@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold-react/-/scaffold-react-5.0.6.tgz#b47b4a0cb9086abbf99de7e2cff6ec3d70555a7c" + integrity sha512-6hcJSOQrBTe9Cgz7GEldcggWUKoWpLHf6bKieW0xAcfRWZUEU3jPJz79Y/zj7jNf+Z8lvARPP8qPmyB8uI0upg== dependencies: - "@web3modal/scaffold" "4.2.0" + "@web3modal/scaffold" "5.0.6" -"@web3modal/scaffold-utils@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@web3modal/scaffold-utils/-/scaffold-utils-4.2.0.tgz#add002aa7e27f59768e0c9cd6a8cf9bf30d0e018" - integrity sha512-HAMPKPAAkDxp435011NGcCXeWtCCCwewBdkU6OLq04g74biYRf9c4lT3i6mEAgjl5EOI5wv9t7t+13p9UbK34A== +"@web3modal/scaffold-ui@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold-ui/-/scaffold-ui-5.0.6.tgz#d165423d9f11a002ac510f65dec419c6808de2b2" + integrity sha512-U5NK+CML+e88cLcUUPBydI9o7kPxbhHL+JNPwxXWyCHfGFPuSYesuxKQKTp4ZL5wZ6FUI1RbgwDT9CX65+D4Qw== dependencies: - "@web3modal/core" "4.2.0" - "@web3modal/polyfills" "4.2.0" - valtio "1.11.2" + "@web3modal/common" "5.0.6" + "@web3modal/core" "5.0.6" + "@web3modal/scaffold-utils" "5.0.6" + "@web3modal/siwe" "5.0.6" + "@web3modal/ui" "5.0.6" + "@web3modal/wallet" "5.0.6" + lit "3.1.0" -"@web3modal/scaffold-vue@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@web3modal/scaffold-vue/-/scaffold-vue-4.2.0.tgz#fe5c3c63cb91da3e937468d6ac75de720713b888" - integrity sha512-+O+s4ZiRsa8S2slMkA9BPjDgb3dGxi4rrBft7URDbi4tC2/hUDteLPGhTmSJcu7xuz3Fyc2Nsj6GBH+ozwWjoA== +"@web3modal/scaffold-utils@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold-utils/-/scaffold-utils-5.0.6.tgz#7dd234a9f08b5e73afd21ef57cdd9087e08830b2" + integrity sha512-/yNwlo/SlvY0Vi3kr/qoUCdhz978A7XlUqdcnk4mdEBFs0X0BzJbdfQ75xuKHXD+1ZU38HTV3lRH/XAbxbT5IA== dependencies: - "@web3modal/scaffold" "4.2.0" + "@web3modal/core" "5.0.6" + "@web3modal/polyfills" "5.0.6" + valtio "1.11.2" -"@web3modal/scaffold@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@web3modal/scaffold/-/scaffold-4.2.0.tgz#9fb83959b4a45c704c03f3b798a9c89caf3344d8" - integrity sha512-hrJFBGMRcLKGpjr7c8uqPBSgs33mu2Jh7vn0VrlICaN/BGVMuWfsleE7BMkTJDvCpBGCj73V6pTOonj+lXtATw== - dependencies: - "@web3modal/common" "4.2.0" - "@web3modal/core" "4.2.0" - "@web3modal/siwe" "4.2.0" - "@web3modal/ui" "4.2.0" - "@web3modal/wallet" "4.2.0" +"@web3modal/scaffold-vue@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold-vue/-/scaffold-vue-5.0.6.tgz#49b552600755cc532c4648d6ce0b1120fc66ece4" + integrity sha512-uannt8oVKjBFDXSY4wcAgK7oRyMOU/BLPA9duxYbVXcCTYeJSfv9v6/70Xb/CA0oIIW4MH2neqbbwzYGSTx1Eg== + dependencies: + "@web3modal/scaffold" "5.0.6" + +"@web3modal/scaffold@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/scaffold/-/scaffold-5.0.6.tgz#90367c53b2056fcafb8fdaa50f62bc5c4204b7ba" + integrity sha512-KqcFJH5V8pMh4OHLV7dsTZTCNXUjsB7EKPEPpyq9bru60fiCz5PniS6nWRrZEmS7+BMNDr3cv/SVvg3+Rrvl+g== + dependencies: + "@web3modal/common" "5.0.6" + "@web3modal/core" "5.0.6" + "@web3modal/scaffold-ui" "5.0.6" + "@web3modal/scaffold-utils" "5.0.6" + "@web3modal/siwe" "5.0.6" + "@web3modal/ui" "5.0.6" + "@web3modal/wallet" "5.0.6" lit "3.1.0" -"@web3modal/siwe@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@web3modal/siwe/-/siwe-4.2.0.tgz#81e846eececc76f6f201c965771b7ca878599f31" - integrity sha512-GimG+iBawd3nHr1k0Y/rpWAP/pSCd93xpo3OwkKHjhTSSM3GbA0/aY/GPcGR1VKA9FYDNALHgP2fwSHFgya8Bg== +"@web3modal/siwe@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/siwe/-/siwe-5.0.6.tgz#77fc78c42b8752d59bcb82ee0b081e920a2708cb" + integrity sha512-2Z4Ho4aysguZIUSgiA+MkQiK4fL2QwTI2m3WI/BmbwNf7BpMWGKawO4dhzNtpLGUU2BeEPXYfLG9XhxOFllRUQ== dependencies: "@walletconnect/utils" "2.12.0" - "@web3modal/core" "4.2.0" - "@web3modal/scaffold-utils" "4.2.0" + "@web3modal/core" "5.0.6" + "@web3modal/scaffold-utils" "5.0.6" lit "3.1.0" valtio "1.11.2" -"@web3modal/ui@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@web3modal/ui/-/ui-4.2.0.tgz#f441339996a43d3c56135ec9cac89b737337a485" - integrity sha512-jSGy8MWhkxfx6nng+4HrKVJD9gyXBrXR1LZHzEEVxdZsQtnrPIjiTvgkE/7FEJjkd4DI+WU0t91/NYNeFraAbg== +"@web3modal/ui@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/ui/-/ui-5.0.6.tgz#440b24a83760138b9c75bda15050f7180b73735d" + integrity sha512-Rywu2V2p8RFo3mLLcnaqyJMVPH176qii4IxIs+wuNh49KNqWvCaJ0gp/k54X3xt+yyi3VH3pnsS9EG7wPGm+7Q== dependencies: lit "3.1.0" qrcode "1.5.3" -"@web3modal/wagmi@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@web3modal/wagmi/-/wagmi-4.2.0.tgz#857060367c169ef84ff4821ce80909ee0d21aa90" - integrity sha512-mhATH10j2vHeqMKMnhxzfbCClxMCNOUR4k4zvZZjA/Prae3yCvOiulZGoYxqYuiLcS7otmZ5uxJdvVV0BhWKkg== +"@web3modal/wagmi@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/wagmi/-/wagmi-5.0.6.tgz#24cc1e19169fe724cbc98945de7cb3f1358484b4" + integrity sha512-ZS898MQN/w4nWe9q7F65vMO7TbJAJA3/Bz9NyLkDEJUvzdG1JWRggs5g8U0ZjlpfTbKKV2masgh9GnOrzjI+GQ== dependencies: "@walletconnect/ethereum-provider" "2.13.0" - "@web3modal/polyfills" "4.2.0" - "@web3modal/scaffold" "4.2.0" - "@web3modal/scaffold-react" "4.2.0" - "@web3modal/scaffold-utils" "4.2.0" - "@web3modal/scaffold-vue" "4.2.0" - "@web3modal/siwe" "4.2.0" - -"@web3modal/wallet@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@web3modal/wallet/-/wallet-4.2.0.tgz#a205da6ed91b1b935696e986dd2bf23e95eead4a" - integrity sha512-5dhZ481nmDAcrMh/ZUR9iHV4sOz86bjlGUf1CohQEYv9KzXtoRXtYERRSvibizXwcolgplk1pqHGSMilUKxAnw== + "@web3modal/polyfills" "5.0.6" + "@web3modal/scaffold" "5.0.6" + "@web3modal/scaffold-react" "5.0.6" + "@web3modal/scaffold-utils" "5.0.6" + "@web3modal/scaffold-vue" "5.0.6" + "@web3modal/siwe" "5.0.6" + +"@web3modal/wallet@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@web3modal/wallet/-/wallet-5.0.6.tgz#7f8d14740f190ddda10dc19354b89d21e8b7889e" + integrity sha512-kJbp8cYHgvHc2t/lRESFrVyE8nC5jFwv1X7xpkDSrRJP+461D9UsKFWiQHW1MzDy30+D7HOaMQso/EPt8H1p0A== dependencies: - "@web3modal/polyfills" "4.2.0" + "@walletconnect/logger" "2.1.2" + "@web3modal/polyfills" "5.0.6" zod "3.22.4" "@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": @@ -8859,10 +8880,10 @@ abitype@0.9.8: resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.8.tgz#1f120b6b717459deafd213dfbf3a3dd1bf10ae8c" integrity sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ== -abitype@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" - integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== +abitype@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.4.tgz#a817ff44860e8a84e9a37ed22aa9b738dbb51dba" + integrity sha512-UivtYZOGJGE8rsrM/N5vdRkUpqEZVmuTumfTuolm7m/6O09wprd958rx8kUBwVAAAhQDveGAgD0GJdBuR8s6tw== abort-controller@^3.0.0: version "3.0.0" @@ -10345,6 +10366,21 @@ cborg@^1.5.4, cborg@^1.6.0: resolved "https://registry.yarnpkg.com/cborg/-/cborg-1.10.2.tgz#83cd581b55b3574c816f82696307c7512db759a1" integrity sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug== +"cbw-sdk@npm:@coinbase/wallet-sdk@3.9.3": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.9.3.tgz#daf10cb0c85d0363315b7270cb3f02bedc408aab" + integrity sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw== + dependencies: + bn.js "^5.2.1" + buffer "^6.0.3" + clsx "^1.2.1" + eth-block-tracker "^7.1.0" + eth-json-rpc-filters "^6.0.0" + eventemitter3 "^5.0.1" + keccak "^3.0.3" + preact "^10.16.0" + sha.js "^2.4.11" + chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -14646,12 +14682,12 @@ i18next-browser-languagedetector@7.1.0: dependencies: "@babel/runtime" "^7.19.4" -i18next@22.5.1: - version "22.5.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.5.1.tgz#99df0b318741a506000c243429a7352e5f44d424" - integrity sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA== +i18next@23.11.5: + version "23.11.5" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.11.5.tgz#d71eb717a7e65498d87d0594f2664237f9e361ef" + integrity sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA== dependencies: - "@babel/runtime" "^7.20.6" + "@babel/runtime" "^7.23.2" iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" @@ -15562,6 +15598,11 @@ isows@1.0.3: resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== +isows@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.4.tgz#810cd0d90cc4995c26395d2aa4cfa4037ebdf061" + integrity sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -23422,10 +23463,10 @@ use-sync-external-store@1.2.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== -utf-8-validate@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" - integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== +utf-8-validate@^5.0.2: + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== dependencies: node-gyp-build "^4.3.0" @@ -23538,19 +23579,19 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -viem@2.10.5: - version "2.10.5" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.10.5.tgz#97e53421e20886b34e4e5e03d01f8b6e320d216f" - integrity sha512-rzU2y6poYgXu7axcQmwddaJ/nGP3tjtslXdUCu+PvryeXACuuqoyP3chjTEHciG84a663gYbrVGbxNUFA3aURQ== +viem@2.16.2: + version "2.16.2" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.16.2.tgz#227e14c61afc9057d2290501649e37f7ed0379be" + integrity sha512-qor3v1cJFR3jcPtcJxPbKfKURAH2agNf2IWZIaSReV6teNLERiu4Sr7kbqpkIeTAEpiDCVQwg336M+mub1m+pg== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" "@noble/hashes" "1.3.2" "@scure/bip32" "1.3.2" "@scure/bip39" "1.2.1" - abitype "1.0.0" - isows "1.0.3" - ws "8.13.0" + abitype "1.0.4" + isows "1.0.4" + ws "8.17.1" viem@^1.0.0, viem@^1.1.4: version "1.21.4" @@ -23598,13 +23639,13 @@ w3c-xmlserializer@^4.0.0: dependencies: xml-name-validator "^4.0.0" -wagmi@2.8.8: - version "2.8.8" - resolved "https://registry.yarnpkg.com/wagmi/-/wagmi-2.8.8.tgz#094dc5fc9b421791105081bba25ee9ab77126def" - integrity sha512-M1RynFKP/WQuJY97UGnUVIItm9Gub8q67DAlPe8AYsKvk7j9vmj72BhAGrZqGKnHNMarR8ODYspoP8fMfO/4sA== +wagmi@2.10.9: + version "2.10.9" + resolved "https://registry.yarnpkg.com/wagmi/-/wagmi-2.10.9.tgz#12830963aa9ee3e5ade94b84dd14543607a7c2e9" + integrity sha512-pYGTLmVIAC4q/a90i+vlrkJL86n5Kf/gwhhi65XtQklpsUQWrKDmn4dsY1/yFeAmZ/1yx1mpxYpX3LI97eTuWA== dependencies: - "@wagmi/connectors" "4.3.10" - "@wagmi/core" "2.9.8" + "@wagmi/connectors" "5.0.21" + "@wagmi/core" "2.11.6" use-sync-external-store "1.2.0" walk-up-path@^1.0.0: @@ -24130,6 +24171,11 @@ ws@8.13.0, ws@^8.11.0, ws@^8.13.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== +ws@8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + ws@^7.5.1: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" From 2221a62937af9733c758fe705c3469388c7ee61e Mon Sep 17 00:00:00 2001 From: paouvrard Date: Thu, 25 Jul 2024 10:55:04 +0900 Subject: [PATCH 44/45] build: Fix Angular. --- examples/angular/project.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/angular/project.json b/examples/angular/project.json index 8ea15dc74..661711cf8 100644 --- a/examples/angular/project.json +++ b/examples/angular/project.json @@ -125,7 +125,7 @@ { "type": "initial", "maximumWarning": "500kb", - "maximumError": "5mb" + "maximumError": "6mb" }, { "type": "anyComponentStyle", From 6a4757d58329d96f096e75e9014bb019510f1386 Mon Sep 17 00:00:00 2001 From: Pierre-Alain Date: Thu, 25 Jul 2024 11:19:29 +0900 Subject: [PATCH 45/45] feat: Chain switch modal. (#13) * feat: Chain switch modal. * Add styling * Rows to cols --------- Co-authored-by: santerisarle --- packages/ethereum-wallets/src/lib/index.ts | 68 +-- packages/ethereum-wallets/src/lib/modal.ts | 431 +++++--------------- packages/ethereum-wallets/src/lib/styles.ts | 345 ++++++++++++++++ 3 files changed, 477 insertions(+), 367 deletions(-) create mode 100644 packages/ethereum-wallets/src/lib/styles.ts diff --git a/packages/ethereum-wallets/src/lib/index.ts b/packages/ethereum-wallets/src/lib/index.ts index 0633bf670..9f9951317 100644 --- a/packages/ethereum-wallets/src/lib/index.ts +++ b/packages/ethereum-wallets/src/lib/index.ts @@ -38,7 +38,7 @@ const importWagmiCore = async () => { }; import icon from "./icon"; -import { createModal } from "./modal"; +import { createTxModal, createChainSwitchModal } from "./modal"; import { ETHEREUM_ACCOUNT_ABI, DEFAULT_ACCESS_KEY_ALLOWANCE, @@ -111,15 +111,15 @@ const EthereumWallets: WalletBehaviourFactory< const _state = await setupEthereumWalletsState(id); const expectedChainId = chainId ?? (options.network.networkId === "mainnet" ? 397 : 398); - const nearRpc = wagmiConfig.chains.find( - (chain) => chain.id === expectedChainId - )?.rpcUrls.default.http[0]; + const chain = wagmiConfig.chains.find((c) => c.id === expectedChainId); + if (!chain) { + throw new Error("Failed to parse NEAR chain from wagmiConfig."); + } + const nearRpc = chain.rpcUrls.default.http[0]; if (!nearRpc) { throw new Error("Failed to parse NEAR rpc url from wagmiConfig."); } - const nearExplorer = wagmiConfig.chains.find( - (chain) => chain.id === expectedChainId - )?.blockExplorers?.default.url; + const nearExplorer = chain.blockExplorers?.default.url; if (!nearExplorer) { throw new Error("Failed to parse NEAR explorer url from wagmiConfig."); } @@ -473,6 +473,29 @@ const EthereumWallets: WalletBehaviourFactory< } }; + const switchChain = async () => { + const account = wagmiCore!.getAccount(wagmiConfig); + if (account.chainId !== expectedChainId) { + const { showModal, hideModal } = createChainSwitchModal({ + chain, + }); + showModal(); + try { + await wagmiCore!.switchChain(wagmiConfig, { + chainId: expectedChainId, + }); + } catch (error) { + logger.error(error); + // TODO: add the link to onboarding page when available. + throw new Error( + "Wallet didn't connect to NEAR Protocol network, try adding and selecting the network manually inside wallet settings." + ); + // NOTE: we don't hide the modal in case of error to allow the user to add the network manually. + } + hideModal(); + } + }; + const signAndSendTransactions = async ( transactions: Array> ) => { @@ -529,13 +552,11 @@ const EthereumWallets: WalletBehaviourFactory< // Onboard the relayer before executing other transactions. txs = [onboardingTransaction, ...txs]; } - await wagmiCore!.switchChain(wagmiConfig, { - chainId: expectedChainId, - }); + await switchChain(); const results: Array = []; await (() => { return new Promise((resolve, reject) => { - const { showModal, hideModal, renderTxs } = createModal({ + const { showModal, hideModal, renderTxs } = createTxModal({ onCancel: () => { reject("User canceled Ethereum wallet transaction(s)."); }, @@ -737,14 +758,14 @@ const EthereumWallets: WalletBehaviourFactory< _state.isConnecting = true; let unwatchAccountConnected: (() => void) | undefined; let unsubscribeCloseModal: (() => void) | undefined; - const account = wagmiCore!.getAccount(wagmiConfig); + let account = wagmiCore!.getAccount(wagmiConfig); let address = account.address?.toLowerCase(); // Open web3Modal and wait for a wallet to be connected or for the web3Modal to be closed. if (!address) { try { if (web3Modal) { web3Modal.open(); - const newData: GetAccountReturnType = await (() => { + await (() => { return new Promise((resolve, reject) => { try { unwatchAccountConnected = wagmiCore!.watchAccount( @@ -765,9 +786,6 @@ const EthereumWallets: WalletBehaviourFactory< event.data.event === "MODAL_CLOSE" && !newAccount.address ) { - logger.error( - "Web3Modal closed without connecting to an Ethereum wallet." - ); reject( "Web3Modal closed without connecting to an Ethereum wallet." ); @@ -779,13 +797,13 @@ const EthereumWallets: WalletBehaviourFactory< } }); })(); - address = newData.address?.toLowerCase(); } else { - const { accounts } = await wagmiCore!.connect(wagmiConfig, { + await wagmiCore!.connect(wagmiConfig, { connector: wagmiCore!.injected(), }); - address = accounts[0]?.toLowerCase(); } + account = wagmiCore!.getAccount(wagmiConfig); + address = account.address?.toLowerCase(); if (!address) { throw new Error("Failed to get Ethereum wallet address"); } @@ -809,17 +827,7 @@ const EthereumWallets: WalletBehaviourFactory< logger.log("Wallet already connected"); } - try { - await wagmiCore!.switchChain(wagmiConfig, { - chainId: expectedChainId, - }); - } catch (error) { - logger.error(error); - // TODO: add the link to onboarding page when available. - throw new Error( - "Wallet didn't connect to NEAR Protocol network, try adding and selecting the network manually inside wallet settings." - ); - } + await switchChain(); // Login with FunctionCall access key, reuse keypair or create a new one. const accountId = devMode ? address + "." + devModeAccount : address; diff --git a/packages/ethereum-wallets/src/lib/modal.ts b/packages/ethereum-wallets/src/lib/modal.ts index ae29a51eb..ea8c46067 100644 --- a/packages/ethereum-wallets/src/lib/modal.ts +++ b/packages/ethereum-wallets/src/lib/modal.ts @@ -1,8 +1,10 @@ import type { Transaction } from "@near-wallet-selector/core"; import { formatUnits } from "viem"; +import type { Chain } from "viem"; import { DEFAULT_ACCESS_KEY_ALLOWANCE, RLP_EXECUTE } from "./utils"; +import { modalStyles } from "./styles"; -export function createModal({ +export function createTxModal({ onCancel, txs, relayerPublicKey, @@ -13,342 +15,6 @@ export function createModal({ relayerPublicKey: string; explorerUrl: string; }) { - const modalStyles = ` - .ethereum-wallet-modal *, - .ethereum-wallet-modal *::before, - .ethereum-wallet-modal *::after { - box-sizing: border-box; - } - .ethereum-wallet-modal button { - cursor: pointer; - top: auto; - } - .ethereum-wallet-modal button:hover { - top: auto; - } - .ethereum-wallet-modal button:focus-visible { - top: auto; - } - - .ethereum-wallet-modal { - display: none; - position: relative; - z-index: 9999; - } - .ethereum-wallet-modal-backdrop { - position: fixed; - left: 0; - right: 0; - top: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.5); - } - .ethereum-wallet-modal-wrapper { - position: fixed; - left: 0; - right: 0; - top: 0; - bottom: 0; - width: 100vw; - overflow-y: auto; - } - .ethereum-wallet-modal-container { - display: flex; - min-height: 100%; - align-items: center; - justify-content: center; - padding: 1rem; - text-align: center; - } - .ethereum-wallet-modal-content { - position: relative; - overflow: hidden; - border-radius: 1rem; - background-color: #fff; - padding: 20px; - text-align: left; - max-width: 400px; - width: 100%; - box-shadow: - 0px 4px 8px rgba(0, 0, 0, 0.06), - 0px 0px 0px 1px rgba(0, 0, 0, 0.06); - } - - .ethereum-wallet-modal h2 { - font-weight: 700; - font-size: 24px; - line-height: 30px; - text-align: center; - letter-spacing: -0.1px; - color: #202020; - margin: 0; - } - - .ethereum-wallet-txs { - margin: 20px 0 10px 0; - display: flex; - flex-direction: column; - row-gap: 8px; - } - - .ethereum-wallet-tx { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - } - .ethereum-wallet-tx:not(.ethereum-wallet-tx-single) { - padding: 0 10px; - } - .ethereum-wallet-tx-list-header { - display: flex; - justify-content: space-between; - align-items: center; - padding: 12px 10px; - width: 100%; - } - .ethereum-wallet-tx-list-header p { - margin: 0; - font-size: 14px; - line-height: 20px; - color: #202020; - font-weight: 700; - } - .ethereum-wallet-tx-list-header svg { - height: 24px; - width: 24px; - } - - .ethereum-wallet-tx-explorer-link { - height: 24px; - width: 24px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 6px; - } - .ethereum-wallet-tx-explorer-link:hover { - background-color: #DDF3E4; - } - .ethereum-wallet-tx-explorer-link svg { - height: 16px; - width: 16px; - color: #202020; - } - - .ethereum-wallet-tx.ethereum-wallet-tx-signing { - background-color: #F9F9F9; - padding-bottom: 10px; - border-radius: 8px; - } - .ethereum-wallet-tx.ethereum-wallet-tx-pending { - background-color: #F9F9F9; - border-radius: 8px; - } - .ethereum-wallet-tx.ethereum-wallet-tx-completed { - background-color: #F2FCF5; - border-radius: 8px; - } - - .ethereum-wallet-tx-single .ethereum-wallet-tx-info-container { - border-top: 1px solid #EBEBEB; - border-bottom: 1px solid #EBEBEB; - } - .ethereum-wallet-tx-info-text > p { - color: #646464; - margin: 0; - font-weight: 500; - font-size: 12px; - line-height: 16px; - letter-spacing: 0.04px; - } - .ethereum-wallet-tx-info-text > p:not(:last-child) { - margin-bottom: 8px; - } - - .ethereum-wallet-tx-info-row { - padding: 14px 10px; - display: flex; - flex-direction: row; - justify-content: space-between; - column-gap: 20px; - } - .ethereum-wallet-tx-info-text { - padding: 10px; - } - .ethereum-wallet-tx-params, - .ethereum-wallet-tx-params dl { - margin: 0; - } - .ethereum-wallet-tx .ethereum-wallet-tx-params { - border-top: 1px solid #EBEBEB; - border-bottom: 1px solid #EBEBEB; - } - .ethereum-wallet-tx-params div:not(:last-child) { - border-bottom: 1px solid #EBEBEB; - } - .ethereum-wallet-tx-params dt { - margin: 0; - font-size: 14px; - line-height: 20px; - color: #202020; - font-weight: 500; - } - .ethereum-wallet-tx-params dd { - margin: 0; - font-size: 14px; - line-height: 20px; - color: #202020; - font-weight: 700; - text-align: right; - word-break: break-all; - overflow-wrap: break-word; - } - - .ethereum-wallet-btn { - display: flex; - align-items: center; - justify-content: center; - border-radius: 8px; - color: #1C2024; - border: 1px solid rgba(1, 6, 47, 0.173) !important; - background-color: #fff !important; - padding: 14px; - font-size: 14px; - line-height: 20px; - font-weight: 700; - } - .ethereum-wallet-btn:hover { - border: 1px solid rgba(1, 6, 47, 0.173); - background-color: #F2F2F5 !important; - } - .ethereum-wallet-btn:focus-visible { - outline: 2px solid; - outline-offset: 2px; - outline-color: #8B8D98; - border: 1px solid rgba(1, 6, 47, 0.173); - } - .ethereum-wallet-btn-sm { - padding: 10px 14px; - font-size: 12px; - line-height: 16px; - } - .ethereum-wallet-btn-xs { - padding: 8px 12px; - font-weight: 500; - font-size: 12px; - line-height: 16px; - letter-spacing: 0.04px; - border-radius: 9999px; - } - .ethereum-wallet-btn-confirm { - width: 100%; - margin-top: 24px; - } - .ethereum-wallet-btn-cancel { - width: 100%; - background-color: #FFF9F9 !important; - color: #dc2626 !important; - border: 1px solid #fecaca !important; - } - .ethereum-wallet-btn-cancel:hover { - background-color: #fef2f2 !important; - } - .ethereum-wallet-btn-details { - margin-top: 20px; - border-radius: 9999px; - } - - .ethereum-wallet-tx-error { - font-size: 14px; - line-height: 20px; - color: #dc2626; - font-weight: 700; - text-align: center; - text-wrap: balance; - margin-top: 20px; - margin-bottom: 0px; - } - - .ethereum-wallet-txs-details { - display: none; - margin-top: 10px; - padding: 10px; - background: #F1F1F1; - border-radius: 8px; - width: 100%; - max-width: 100%; - overflow: auto; - } - .ethereum-wallet-txs-details p { - font-weight: 500; - font-size: 12px; - line-height: 16px; - letter-spacing: 0.04px; - color: #646464; - word-wrap: break-word; - overflow-wrap: break-word; - white-space: pre-wrap; - margin: 0; - } - - .ethereum-wallet-txs-status { - position: relative; - display: flex; - justify-content: center; - align-items: center; - padding: 14px; - background: #F1F4FE; - border-radius: 8px; - width: 100%; - margin-top: 24px; - border: 1px solid rgba(0,0,0,0); - } - .ethereum-wallet-txs-status p { - margin: 0; - color: #384EAC; - font-weight: 700; - font-size: 14px; - line-height: 20px; - } - - .ethereum-wallet-tx-highlight { - position: relative; - z-index: 1; - } - .ethereum-wallet-tx-highlight::before { - content: ""; - position: absolute; - top: -4px; - left: -6px; - right: -6px; - bottom: -4px; - z-index: -1; - background-color: #DDF3E4; - border-radius: 8px; - } - - .ethereum-wallet-spinner { - position: absolute; - right: 14px; - top: 16px; - width: 16px; - height: 16px; - border: 2px solid #384EAC; - border-bottom-color: transparent; - border-radius: 50%; - animation: rotation 1s linear infinite; - } - @keyframes rotation { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } - } - `; - // Create a style element and append the CSS styles const styleElement = window.document.createElement("style"); styleElement.textContent = modalStyles; @@ -692,3 +358,94 @@ export function createModal({ }; return { showModal, hideModal, renderTxs }; } + +export function createChainSwitchModal({ chain }: { chain: Chain }) { + // Create a style element and append the CSS styles + const styleElement = window.document.createElement("style"); + styleElement.textContent = modalStyles; + window.document.head.appendChild(styleElement); + + // Container with display none/block + const modalContainer = window.document.createElement("div"); + modalContainer.classList.add("ethereum-wallet-modal"); + modalContainer.setAttribute("aria-labelledby", "modal-title"); + modalContainer.setAttribute("role", "dialog"); + modalContainer.setAttribute("aria-modal", "true"); + + // Backdrop + const backdrop = window.document.createElement("div"); + backdrop.classList.add("ethereum-wallet-modal-backdrop"); + + // Wrapper for modal + const modalWrapper = window.document.createElement("div"); + modalWrapper.classList.add("ethereum-wallet-modal-wrapper"); + + // Modal content container + const modalContentContainer = window.document.createElement("div"); + modalContentContainer.classList.add("ethereum-wallet-modal-container"); + + // Modal content + const modalContent = window.document.createElement("div"); + modalContent.classList.add("ethereum-wallet-modal-content"); + modalContent.innerHTML = ` +

Switch Network

+
+
+

Please approve the switch network request in your wallet.

+

If you experience problems connecting you may need to add the network manually from your wallet settings and try again.

+
+
+
+
Network Name
+
${chain.name}
+
+
+
RPC URL
+
${chain.rpcUrls.default.http[0]}
+
+
+
Chain ID
+
${chain.id}
+
+
+
Symbol
+
${chain.nativeCurrency.symbol}
+
+
+
Block Explorer URL
+
${chain.blockExplorers?.default.url}
+
+
+
+ + `; + + // // Append the elements to form the complete structure + modalContentContainer.appendChild(modalContent); + modalWrapper.appendChild(modalContentContainer); + modalContainer.appendChild(backdrop); + modalContainer.appendChild(modalWrapper); + + // Append modal container to document body + window.document.body.appendChild(modalContainer); + + // Function to show the modal + const showModal = () => { + modalContainer.style.display = "block"; + }; + + // Function to hide the modal + const hideModal = () => { + // modalContainer.style.display = "none"; + modalContainer.remove(); + }; + + // On cancel button click + window.document + .querySelector(".ethereum-wallet-btn-cancel") + ?.addEventListener("click", () => { + hideModal(); + }); + + return { showModal, hideModal }; +} diff --git a/packages/ethereum-wallets/src/lib/styles.ts b/packages/ethereum-wallets/src/lib/styles.ts new file mode 100644 index 000000000..91fc762e1 --- /dev/null +++ b/packages/ethereum-wallets/src/lib/styles.ts @@ -0,0 +1,345 @@ +export const modalStyles = ` + .ethereum-wallet-modal *, + .ethereum-wallet-modal *::before, + .ethereum-wallet-modal *::after { + box-sizing: border-box; + } + .ethereum-wallet-modal button { + cursor: pointer; + top: auto; + } + .ethereum-wallet-modal button:hover { + top: auto; + } + .ethereum-wallet-modal button:focus-visible { + top: auto; + } + + .ethereum-wallet-modal dt { + flex-shrink: 0; + margin: 0; + font-size: 14px; + line-height: 20px; + color: #202020; + font-weight: 500; + } + .ethereum-wallet-modal dd { + margin: 0; + font-size: 14px; + line-height: 20px; + color: #202020; + font-weight: 700; + text-align: right; + word-break: break-all; + overflow-wrap: break-word; + } + + .ethereum-wallet-modal { + display: none; + position: relative; + z-index: 9999; + } + .ethereum-wallet-modal-backdrop { + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + } + .ethereum-wallet-modal-wrapper { + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + width: 100vw; + overflow-y: auto; + } + .ethereum-wallet-modal-container { + display: flex; + min-height: 100%; + align-items: center; + justify-content: center; + padding: 1rem; + text-align: center; + } + .ethereum-wallet-modal-content { + position: relative; + overflow: hidden; + border-radius: 1rem; + background-color: #fff; + padding: 20px; + text-align: left; + max-width: 400px; + width: 100%; + box-shadow: + 0px 4px 8px rgba(0, 0, 0, 0.06), + 0px 0px 0px 1px rgba(0, 0, 0, 0.06); + } + + .ethereum-wallet-modal h2 { + font-weight: 700; + font-size: 24px; + line-height: 30px; + text-align: center; + letter-spacing: -0.1px; + color: #202020; + margin: 0; + } + + .ethereum-wallet-txs { + margin: 20px 0 10px 0; + display: flex; + flex-direction: column; + row-gap: 8px; + } + + .ethereum-wallet-tx { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + .ethereum-wallet-tx:not(.ethereum-wallet-tx-single) { + padding: 0 10px; + } + .ethereum-wallet-tx-list-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px 10px; + width: 100%; + } + .ethereum-wallet-tx-list-header p { + margin: 0; + font-size: 14px; + line-height: 20px; + color: #202020; + font-weight: 700; + } + .ethereum-wallet-tx-list-header svg { + height: 24px; + width: 24px; + } + + .ethereum-wallet-tx-explorer-link { + height: 24px; + width: 24px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 6px; + } + .ethereum-wallet-tx-explorer-link:hover { + background-color: #DDF3E4; + } + .ethereum-wallet-tx-explorer-link svg { + height: 16px; + width: 16px; + color: #202020; + } + + .ethereum-wallet-tx.ethereum-wallet-tx-signing { + background-color: #F9F9F9; + padding-bottom: 10px; + border-radius: 8px; + } + .ethereum-wallet-tx.ethereum-wallet-tx-pending { + background-color: #F9F9F9; + border-radius: 8px; + } + .ethereum-wallet-tx.ethereum-wallet-tx-completed { + background-color: #F2FCF5; + border-radius: 8px; + } + + .ethereum-wallet-tx-single .ethereum-wallet-tx-info-container { + border-top: 1px solid #EBEBEB; + border-bottom: 1px solid #EBEBEB; + } + .ethereum-wallet-tx-info-text > p { + color: #646464; + margin: 0; + font-weight: 500; + font-size: 12px; + line-height: 16px; + letter-spacing: 0.04px; + } + .ethereum-wallet-tx-info-text > p:not(:last-child) { + margin-bottom: 8px; + } + + .ethereum-wallet-tx-info-row { + padding: 14px 10px; + display: flex; + flex-direction: row; + justify-content: space-between; + column-gap: 20px; + } + .ethereum-wallet-tx-info-col { + padding: 14px 10px; + display: flex; + flex-direction: column; + justify-content: start; + row-gap: 4px; + align-items: start; + } + .ethereum-wallet-tx-info-text { + padding: 10px; + } + .ethereum-wallet-tx-params, + .ethereum-wallet-tx-params dl { + margin: 0; + } + .ethereum-wallet-tx .ethereum-wallet-tx-params { + border-top: 1px solid #EBEBEB; + border-bottom: 1px solid #EBEBEB; + } + .ethereum-wallet-tx-params div:not(:last-child) { + border-bottom: 1px solid #EBEBEB; + } + + .ethereum-wallet-btn { + display: flex; + align-items: center; + justify-content: center; + border-radius: 8px; + color: #1C2024; + border: 1px solid rgba(1, 6, 47, 0.173) !important; + background-color: #fff !important; + padding: 14px; + font-size: 14px; + line-height: 20px; + font-weight: 700; + } + .ethereum-wallet-btn:hover { + border: 1px solid rgba(1, 6, 47, 0.173); + background-color: #F2F2F5 !important; + } + .ethereum-wallet-btn:focus-visible { + outline: 2px solid; + outline-offset: 2px; + outline-color: #8B8D98; + border: 1px solid rgba(1, 6, 47, 0.173); + } + .ethereum-wallet-btn-sm { + padding: 10px 14px; + font-size: 12px; + line-height: 16px; + } + .ethereum-wallet-btn-xs { + padding: 8px 12px; + font-weight: 500; + font-size: 12px; + line-height: 16px; + letter-spacing: 0.04px; + border-radius: 9999px; + } + .ethereum-wallet-btn-confirm { + width: 100%; + margin-top: 24px; + } + .ethereum-wallet-btn-cancel { + width: 100%; + background-color: #FFF9F9 !important; + color: #dc2626 !important; + border: 1px solid #fecaca !important; + } + .ethereum-wallet-btn-cancel:hover { + background-color: #fef2f2 !important; + } + .ethereum-wallet-btn-details { + margin-top: 20px; + border-radius: 9999px; + } + + .ethereum-wallet-tx-error { + font-size: 14px; + line-height: 20px; + color: #dc2626; + font-weight: 700; + text-align: center; + text-wrap: balance; + margin-top: 20px; + margin-bottom: 0px; + } + + .ethereum-wallet-txs-details { + display: none; + margin-top: 10px; + padding: 10px; + background: #F1F1F1; + border-radius: 8px; + width: 100%; + max-width: 100%; + overflow: auto; + } + .ethereum-wallet-txs-details p { + font-weight: 500; + font-size: 12px; + line-height: 16px; + letter-spacing: 0.04px; + color: #646464; + word-wrap: break-word; + overflow-wrap: break-word; + white-space: pre-wrap; + margin: 0; + } + + .ethereum-wallet-txs-status { + position: relative; + display: flex; + justify-content: center; + align-items: center; + padding: 14px; + background: #F1F4FE; + border-radius: 8px; + width: 100%; + margin-top: 24px; + border: 1px solid rgba(0,0,0,0); + } + .ethereum-wallet-txs-status p { + margin: 0; + color: #384EAC; + font-weight: 700; + font-size: 14px; + line-height: 20px; + } + + .ethereum-wallet-tx-highlight { + position: relative; + z-index: 1; + } + .ethereum-wallet-tx-highlight::before { + content: ""; + position: absolute; + top: -4px; + left: -6px; + right: -6px; + bottom: -4px; + z-index: -1; + background-color: #DDF3E4; + border-radius: 8px; + } + + .ethereum-wallet-spinner { + position: absolute; + right: 14px; + top: 16px; + width: 16px; + height: 16px; + border: 2px solid #384EAC; + border-bottom-color: transparent; + border-radius: 50%; + animation: rotation 1s linear infinite; + } + @keyframes rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } + } +`;