From 18f4edc27e60393452909be29bb5736a5e2e6738 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Sat, 6 Apr 2024 16:15:21 -0300 Subject: [PATCH 01/39] feat: ethereum wallet connector implementation started --- packages/connectors/package.json | 1 + packages/connectors/src/defaultConnectors.ts | 2 + packages/connectors/src/index.ts | 1 + packages/ethereum-connector/package.json | 53 + .../signature-verification/Forc.lock | 13 + .../signature-verification/Forc.toml | 2 + .../fuel-toolchain.toml | 6 + .../verification-predicate/Forc.toml | 5 + .../release/verification-predicate-abi.json | 65 + .../release/verification-predicate-bin-root | 1 + .../out/release/verification-predicate.bin | Bin 0 -> 2008 bytes .../verification-predicate/src/main.sw | 101 + .../src/EthereumWalletConnector.ts | 191 + packages/ethereum-connector/src/Predicate.ts | 35 + packages/ethereum-connector/src/constants.ts | 10 + packages/ethereum-connector/src/index.ts | 1 + packages/ethereum-connector/src/types.ts | 16 + .../ethereum-connector/src/utils/eip-1193.ts | 7 + .../src/utils/ethereum-icon.ts | 2 + .../src/utils/generatePredicateResources.ts | 42 + .../ethereum-connector/src/utils/predicate.ts | 60 + .../src/utils/predicateResources.ts | 81 + packages/ethereum-connector/tsconfig.json | 16 + packages/ethereum-connector/tsup.config.js | 9 + packages/ethereum-connector/vite.config.ts | 27 + pnpm-lock.yaml | 7024 +++++++++++++++-- 26 files changed, 7163 insertions(+), 608 deletions(-) create mode 100644 packages/ethereum-connector/package.json create mode 100644 packages/ethereum-connector/signature-verification/Forc.lock create mode 100644 packages/ethereum-connector/signature-verification/Forc.toml create mode 100644 packages/ethereum-connector/signature-verification/fuel-toolchain.toml create mode 100644 packages/ethereum-connector/signature-verification/verification-predicate/Forc.toml create mode 100644 packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json create mode 100644 packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root create mode 100644 packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin create mode 100644 packages/ethereum-connector/signature-verification/verification-predicate/src/main.sw create mode 100644 packages/ethereum-connector/src/EthereumWalletConnector.ts create mode 100644 packages/ethereum-connector/src/Predicate.ts create mode 100644 packages/ethereum-connector/src/constants.ts create mode 100644 packages/ethereum-connector/src/index.ts create mode 100644 packages/ethereum-connector/src/types.ts create mode 100644 packages/ethereum-connector/src/utils/eip-1193.ts create mode 100644 packages/ethereum-connector/src/utils/ethereum-icon.ts create mode 100644 packages/ethereum-connector/src/utils/generatePredicateResources.ts create mode 100644 packages/ethereum-connector/src/utils/predicate.ts create mode 100644 packages/ethereum-connector/src/utils/predicateResources.ts create mode 100644 packages/ethereum-connector/tsconfig.json create mode 100644 packages/ethereum-connector/tsup.config.js create mode 100644 packages/ethereum-connector/vite.config.ts diff --git a/packages/connectors/package.json b/packages/connectors/package.json index 59d764a44..eda69ac34 100644 --- a/packages/connectors/package.json +++ b/packages/connectors/package.json @@ -25,6 +25,7 @@ "@fuel-connectors/fuel-wallet": "workspace:*", "@fuel-connectors/fuelet-wallet": "workspace:*", "@fuel-connectors/evm-connector": "workspace:*", + "@fuel-connectors/ethereum-connector": "workspace:*", "fuels": "0.79.0", "terser": "5.29.2", "tsup": "8.0.2", diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index 510d1a573..48ccc3f01 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -1,3 +1,4 @@ +import { EthereumWalletConnector } from '@fuel-connectors/ethereum-connector'; import { EVMWalletConnector } from '@fuel-connectors/evm-connector'; import { FuelWalletDevelopmentConnector } from '@fuel-connectors/fuel-development-wallet'; import { FuelWalletConnector } from '@fuel-connectors/fuel-wallet'; @@ -15,6 +16,7 @@ export function defaultConnectors({ new FuelWalletConnector(), new FueletWalletConnector(), new EVMWalletConnector(), + new EthereumWalletConnector(), ]; if (devMode) { diff --git a/packages/connectors/src/index.ts b/packages/connectors/src/index.ts index af6f3b5dd..a5f0d3742 100644 --- a/packages/connectors/src/index.ts +++ b/packages/connectors/src/index.ts @@ -3,3 +3,4 @@ export * from '@fuel-connectors/fuel-development-wallet'; export * from '@fuel-connectors/fuel-wallet'; export * from '@fuel-connectors/fuelet-wallet'; export * from '@fuel-connectors/evm-connector'; +export * from '@fuel-connectors/ethereum-connector'; diff --git a/packages/ethereum-connector/package.json b/packages/ethereum-connector/package.json new file mode 100644 index 000000000..e4c812812 --- /dev/null +++ b/packages/ethereum-connector/package.json @@ -0,0 +1,53 @@ +{ + "name": "@fuel-connectors/ethereum-connector", + "version": "0.0.1", + "type": "module", + "files": [ + "dist" + ], + "main": "./dist/wallet-connector-ethereum.umd.cjs", + "module": "./dist/wallet-connector-ethereum.js", + "exports": { + ".": { + "import": "./dist/wallet-connector-ethereum.js", + "require": "./dist/wallet-connector-ethereum.umd.cjs" + } + }, + "types": "./dist/index.d.ts", + "scripts": { + "build:forc": "pnpm fuels-forc build --release --path ./signature-verification", + "build:resources": "pnpm run build:forc && tsup --dts-only ./src/utils/generatePredicateResources.ts", + "build": "pnpm run build:resources && tsup --dts-only", + "build:watch": "pnpm run build:resources && tsup --watch --dts-only", + "ts:check": "tsc --noEmit", + "test": "vitest" + }, + "peerDependencies": { + "fuels": ">=0.77.0" + }, + "dependencies": { + "@ethereumjs/util": "^9.0.1", + "@ethersproject/bytes": "^5.7.0", + "@wagmi/connectors": "4.1.24", + "@wagmi/core": "2.6.15", + "@web3modal/wagmi": "4.1.5", + "memoizee": "^0.4.15", + "viem": "2.9.9" + }, + "devDependencies": { + "@fuel-ts/account": "^0.79.0", + "@fuel-ts/forc": "0.79.0", + "@fuel-ts/fuel-core": "^0.79.0", + "@types/memoizee": "^0.4.11", + "fuels": "^0.79.0", + "jsdom": "24.0.0", + "ts-loader": "^9.5.1", + "ts-node": "^10.9.2", + "tsup": "8.0.2", + "tsx": "^4.7.0", + "typescript": "5.4.3", + "vite": "^5.0.10", + "vite-plugin-dts": "^3.6.4", + "vitest": "^1.4.0" + } +} diff --git a/packages/ethereum-connector/signature-verification/Forc.lock b/packages/ethereum-connector/signature-verification/Forc.lock new file mode 100644 index 000000000..5c6fc3df1 --- /dev/null +++ b/packages/ethereum-connector/signature-verification/Forc.lock @@ -0,0 +1,13 @@ +[[package]] +name = "core" +source = "path+from-root-566CA1D5F8BEAFBF" + +[[package]] +name = "std" +source = "git+https://github.com/fuellabs/sway?tag=v0.49.3#0dc6570377ee9c4a6359ade597fa27351e02a728" +dependencies = ["core"] + +[[package]] +name = "verification-predicate" +source = "member" +dependencies = ["std"] diff --git a/packages/ethereum-connector/signature-verification/Forc.toml b/packages/ethereum-connector/signature-verification/Forc.toml new file mode 100644 index 000000000..69e455ae7 --- /dev/null +++ b/packages/ethereum-connector/signature-verification/Forc.toml @@ -0,0 +1,2 @@ +[workspace] +members = ["verification-predicate"] diff --git a/packages/ethereum-connector/signature-verification/fuel-toolchain.toml b/packages/ethereum-connector/signature-verification/fuel-toolchain.toml new file mode 100644 index 000000000..2fd4b0e21 --- /dev/null +++ b/packages/ethereum-connector/signature-verification/fuel-toolchain.toml @@ -0,0 +1,6 @@ +[toolchain] +channel = "beta-5" + +[components] +forc = "0.50.0" +fuel-core = "0.22.0" diff --git a/packages/ethereum-connector/signature-verification/verification-predicate/Forc.toml b/packages/ethereum-connector/signature-verification/verification-predicate/Forc.toml new file mode 100644 index 000000000..b7483f5b9 --- /dev/null +++ b/packages/ethereum-connector/signature-verification/verification-predicate/Forc.toml @@ -0,0 +1,5 @@ +[project] +authors = ["Fuel Labs "] +entry = "main.sw" +license = "Apache-2.0" +name = "verification-predicate" diff --git a/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json b/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json new file mode 100644 index 000000000..e32e338e4 --- /dev/null +++ b/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json @@ -0,0 +1,65 @@ +{ + "types": [ + { + "typeId": 0, + "type": "b256", + "components": null, + "typeParameters": null + }, + { + "typeId": 1, + "type": "bool", + "components": null, + "typeParameters": null + }, + { + "typeId": 2, + "type": "struct EvmAddress", + "components": [ + { + "name": "value", + "type": 0, + "typeArguments": null + } + ], + "typeParameters": null + }, + { + "typeId": 3, + "type": "u64", + "components": null, + "typeParameters": null + } + ], + "functions": [ + { + "inputs": [ + { + "name": "witness_index", + "type": 3, + "typeArguments": null + } + ], + "name": "main", + "output": { + "name": "", + "type": 1, + "typeArguments": null + }, + "attributes": null + } + ], + "loggedTypes": [], + "messagesTypes": [], + "configurables": [ + { + "name": "SIGNER", + "configurableType": { + "name": "", + "type": 2, + "typeArguments": [] + }, + "offset": 1952 + } + ] +} \ No newline at end of file diff --git a/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root b/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root new file mode 100644 index 000000000..27770df53 --- /dev/null +++ b/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root @@ -0,0 +1 @@ +0xad8bfa6ad9c15d9d57af61964c2372ed1fa1ace00aeefbc8ed5cf07192510d68 \ No newline at end of file diff --git a/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin b/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin new file mode 100644 index 0000000000000000000000000000000000000000..af05cc157a982b1cca19cdfc3842e7f45234556a GIT binary patch literal 2008 zcma)7K~LO96nM1{gOQl3jRIk!XiBhTk#&!Zp6e*TQ^LE~Q^WOKp_hz?< z20VKC6>IX}SY!V^CF8N6pJ?d*4^j@(xp3)DQ0>N7M4Fv67Kb zi3MY^m_IxgAvfiXq%3bHB`X-`w(lyRyQ1DbRz4H6ddz}KydmHp+@b7j?6os7xBmco zZUvV})Q?yy`_ri`=DItXZjgj?uan+mkJA_aRWf*oMs4D4PQ%d6M32b>UM74hAr7~E z;>8Etiya&ll@xCt&Ln=GE>>D z#Hj22(>o4+F&;70nBJ`M*IA8w32e=*#`hSoeTf_rQSa@f_bDE{-p+cJM$|6q`-&gb zGmV+aDrWtVBUdZuN^!aeJY0C)WpFkke5Ud%L7&-jWjhAkMmGifDif7-FUh*MxN3*`QRp0j3kn3880l7Gb8BTEc zt6ecwTs1pOP9iECvyrITBP;3?MSZ44eX|htrv{>@T|Jvi*f@J+c)MiOPgIYp+Qr5{ zjDE&F#&eSv6JbdwCh5hRtj7g87Z1q4VjX(x`m-Eaown3&`imAUFQ(q6he!J#axd-DWlym>I}&u3M7x-C^6F zPUr0mmhBwN%v)IIV_n{e2Z3n_m}bskYQ7Uwe|aeCuNR|!rxf*f%fL9CW8^8uRq%QH z1e_)1N%VnHUC-Yhy<^n7BmYM7Vye$1) zypgGVQOV$~%Z{nziV1BV4Aa#i1kh zo|Z3!EouuIj9R9KRZ#t^az($MQ}?p48ne*tu*P_2sUhfAD2OdC^E*TzL@kzL!>%ce z*kAdhkIl2V@g8QgjoFbla0kF0zQm2bbf4xYE;Oq#O-3MqdkQ+>26q>Ng}6Pda1(G-!GPZ+R*D<K78d9sNeUymK&Pd`+B5yMRbq) Jifj44_dk{?8HNA= literal 0 HcmV?d00001 diff --git a/packages/ethereum-connector/signature-verification/verification-predicate/src/main.sw b/packages/ethereum-connector/signature-verification/verification-predicate/src/main.sw new file mode 100644 index 000000000..8571bf84d --- /dev/null +++ b/packages/ethereum-connector/signature-verification/verification-predicate/src/main.sw @@ -0,0 +1,101 @@ +predicate; + +use std::{ + b512::B512, + bytes::Bytes, + constants::ZERO_B256, + tx::{ + tx_id, + tx_witness_data, + }, + vm::evm::{ + ecr::ec_recover_evm_address, + evm_address::EvmAddress, + }, +}; + +/// Personal sign prefix for Ethereum inclusive of the 32 bytes for the length of the Tx ID. +/// +/// # Additional Information +/// +/// Take "\x19Ethereum Signed Message:\n32" and converted to hex. +/// The 00000000 at the end is the padding added by Sway to fill the word. +const ETHEREUM_PREFIX = 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000; + +struct SignedData { + /// The id of the transaction to be signed. + transaction_id: b256, + /// EIP-191 personal sign prefix. + ethereum_prefix: b256, + /// Additional data used for reserving memory for hashing (hack). + #[allow(dead_code)] + empty: b256, +} + +configurable { + /// The Ethereum address that signed the transaction. + SIGNER: EvmAddress = EvmAddress { + value: ZERO_B256, + }, +} + +fn main(witness_index: u64) -> bool { + // Retrieve the Ethereum signature from the witness data in the Tx at the specified index. + let signature: B512 = tx_witness_data(witness_index); + + // Hash the Fuel Tx (as the signed message) and attempt to recover the signer from the signature. + let result = ec_recover_evm_address(signature, personal_sign_hash(tx_id())); + + // If the signers match then the predicate has validated the Tx. + if result.is_ok() { + if SIGNER == result.unwrap() { + return true; + } + } + + // Otherwise, an invalid signature has been passed and we invalidate the Tx. + false +} + +/// Return the Keccak-256 hash of the transaction ID in the format of EIP-191. +/// +/// # Arguments +/// +/// * `transaction_id`: [b256] - Fuel Tx ID. +fn personal_sign_hash(transaction_id: b256) -> b256 { + // Hack, allocate memory to reduce manual `asm` code. + let data = SignedData { + transaction_id, + ethereum_prefix: ETHEREUM_PREFIX, + empty: ZERO_B256, + }; + + // Pointer to the data we have signed external to Sway. + let data_ptr = asm(ptr: data.transaction_id) { + ptr + }; + + // The Ethereum prefix is 28 bytes (plus padding we exclude). + // The Tx ID is 32 bytes at the end of the prefix. + let len_to_hash = 28 + 32; + + // Create a buffer in memory to overwrite with the result being the hash. + let mut buffer = b256::min(); + + // Copy the Tx ID to the end of the prefix and hash the exact len of the prefix and id (without + // the padding at the end because that would alter the hash). + asm( + hash: buffer, + tx_id: data_ptr, + end_of_prefix: data_ptr + len_to_hash, + prefix: data.ethereum_prefix, + id_len: 32, + hash_len: len_to_hash, + ) { + mcp end_of_prefix tx_id id_len; + k256 hash prefix hash_len; + } + + // The buffer contains the hash. + buffer +} diff --git a/packages/ethereum-connector/src/EthereumWalletConnector.ts b/packages/ethereum-connector/src/EthereumWalletConnector.ts new file mode 100644 index 000000000..cbd8a0724 --- /dev/null +++ b/packages/ethereum-connector/src/EthereumWalletConnector.ts @@ -0,0 +1,191 @@ +import { + type AbiMap, + type Asset, + type ConnectorMetadata, + FuelConnector, + FuelConnectorEventTypes, + type JsonAbi, + type Network, + type TransactionRequestLike, + type Version, + Provider, +} from 'fuels'; +import { mainnet } from '@wagmi/core/chains'; +import { + type Web3Modal, + createWeb3Modal, + defaultWagmiConfig, +} from '@web3modal/wagmi'; + +import { ETHEREUM_ICON } from './utils/ethereum-icon'; +import type { EVMWalletConnectorConfig } from './types'; +import { type Config, reconnect } from '@wagmi/core'; +import { BETA_5_URL } from './constants'; + +export class EthereumWalletConnector extends FuelConnector { + name = 'Ethereum Wallets'; + metadata: ConnectorMetadata = { + image: ETHEREUM_ICON, + install: { + action: 'Install', + description: 'Install Ethereum Wallet to connect to Fuel', + link: 'https://ethereum.org/en/wallets/find-wallet/', + }, + }; + + config: EVMWalletConnectorConfig = {}; + + installed = false; + connected = false; + + wagmiProjectId = ''; + + ethConfig: Config | null = null; + fuelProvider: Provider | null = null; + + events = { + ...FuelConnectorEventTypes, + }; + + web3Modal: Web3Modal | null = null; + + constructor(config: EVMWalletConnectorConfig = {}) { + super(); + + this.configProviders(config); + } + + async configProviders(config: EVMWalletConnectorConfig = {}) { + const metadata = { + name: 'Web3Modal', + description: 'Web3Modal Example', + url: 'http://localhost:5173', // origin must match your domain & subdomain. + icons: ['https://avatars.githubusercontent.com/u/37784886'], + }; + + const chains = [mainnet] as const; + this.ethConfig = defaultWagmiConfig({ + chains, + projectId: this.wagmiProjectId, + metadata, + }); + + reconnect(this.ethConfig); + + // 3. Create modal + this.web3Modal = createWeb3Modal({ + wagmiConfig: this.ethConfig, + projectId: this.wagmiProjectId, + enableAnalytics: true, // Optional - defaults to your Cloud configuration + enableOnramp: true, // Optional - false as default + }); + + this.config = Object.assign(config, { + fuelProvider: config.fuelProvider || Provider.create(BETA_5_URL), + }); + } + + /** + * ============================================================ + * Application communication methods + * ============================================================ + */ + + /** + * ============================================================ + * Connector methods + * ============================================================ + */ + + async ping(): Promise { + return true; + } + + async version(): Promise { + return { app: '0.0.0', network: '0.0.0' }; + } + + async isConnected(): Promise { + return true; + } + + async accounts(): Promise> { + return ['']; + } + + async connect(): Promise { + if (!this.web3Modal) { + throw new Error('Web3Modal not initialized'); + } + + if (!(await this.isConnected())) { + this.web3Modal.open(); + } + + return this.connected; + } + + async disconnect(): Promise { + if (await this.isConnected()) { + } + + return false; + } + + async signMessage(_address: string, _message: string): Promise { + throw new Error('A predicate account cannot sign messages'); + } + + async sendTransaction( + address: string, + transaction: TransactionRequestLike, + ): Promise { + console.log({ address, transaction }); + + return ''; + } + + async currentAccount(): Promise { + return ''; + } + + async addAssets(_assets: Asset[]): Promise { + throw new Error('Method not implemented.'); + } + + async addAsset(_asset: Asset): Promise { + throw new Error('Method not implemented.'); + } + + async assets(): Promise> { + return []; + } + + async addNetwork(_networkUrl: string): Promise { + throw new Error('Method not implemented.'); + } + + async selectNetwork(_network: Network): Promise { + throw new Error('Method not implemented.'); + } + + async networks(): Promise { + return [await this.currentNetwork()]; + } + + async currentNetwork(): Promise { + return { url: '', chainId: 0 }; + } + + async addAbi(_abiMap: AbiMap): Promise { + throw new Error('Method not implemented.'); + } + + async getAbi(_contractId: string): Promise { + throw Error('Cannot get contractId ABI for a predicate'); + } + + async hasAbi(_contractId: string): Promise { + throw Error('A predicate account cannot have an ABI'); + } +} diff --git a/packages/ethereum-connector/src/Predicate.ts b/packages/ethereum-connector/src/Predicate.ts new file mode 100644 index 000000000..3cd4ec8e4 --- /dev/null +++ b/packages/ethereum-connector/src/Predicate.ts @@ -0,0 +1,35 @@ +import type { EIP1193Provider } from './utils/eip-1193'; +import { getPredicateAddress } from './utils/predicate'; +import { predicates } from './utils/predicateResources'; + +export class PredicateAccount { + private predicate = predicates['verification-predicate']; + + async getPredicateFromAddress(address: string, ethProvider: EIP1193Provider) { + const accounts = await this.getPredicateAccounts(ethProvider); + + return accounts.find((account) => account.predicateAccount === address); + } + + async getPredicateAccounts(ethProvider: EIP1193Provider): Promise< + Array<{ + ethAccount: string; + predicateAccount: string; + }> + > { + const ethAccounts: Array = await ethProvider.request({ + method: 'eth_accounts', + }); + + const accounts = ethAccounts.map((account) => ({ + ethAccount: account, + predicateAccount: getPredicateAddress( + account, + this.predicate.bytecode, + this.predicate.abi, + ), + })); + + return accounts; + } +} diff --git a/packages/ethereum-connector/src/constants.ts b/packages/ethereum-connector/src/constants.ts new file mode 100644 index 000000000..7dbe6f206 --- /dev/null +++ b/packages/ethereum-connector/src/constants.ts @@ -0,0 +1,10 @@ +import type { EIP1193Provider } from './utils/eip-1193'; + +declare global { + interface Window { + ethereum: any; + } +} +const HAS_WINDOW = typeof window !== 'undefined'; +export const WINDOW = HAS_WINDOW ? window : null; +export const BETA_5_URL = 'https://beta-5.fuel.network/graphql'; diff --git a/packages/ethereum-connector/src/index.ts b/packages/ethereum-connector/src/index.ts new file mode 100644 index 000000000..c5dfffbf4 --- /dev/null +++ b/packages/ethereum-connector/src/index.ts @@ -0,0 +1 @@ +export * from './EthereumWalletConnector'; diff --git a/packages/ethereum-connector/src/types.ts b/packages/ethereum-connector/src/types.ts new file mode 100644 index 000000000..aafffdc41 --- /dev/null +++ b/packages/ethereum-connector/src/types.ts @@ -0,0 +1,16 @@ +import type { Provider } from 'fuels'; +import type { EIP1193Provider } from './utils/eip-1193'; + +export type EVMWalletConnectorConfig = { + fuelProvider?: Provider | Promise; + ethProvider?: EIP1193Provider; +}; + +export enum EVMWalletConnectorEvents { + //accounts + ACCOUNTS_CHANGED = 'accountsChanged', + + //connections + CONNECT = 'connect', + DISCONNECT = 'disconnect', +} diff --git a/packages/ethereum-connector/src/utils/eip-1193.ts b/packages/ethereum-connector/src/utils/eip-1193.ts new file mode 100644 index 000000000..11b5f113b --- /dev/null +++ b/packages/ethereum-connector/src/utils/eip-1193.ts @@ -0,0 +1,7 @@ +import type EventEmitter from 'node:events'; + +export interface EIP1193Provider extends EventEmitter { + // biome-ignore lint/suspicious/noExplicitAny: + request(args: { method: string; params?: any[] }): Promise; + providers?: EIP1193Provider[]; +} diff --git a/packages/ethereum-connector/src/utils/ethereum-icon.ts b/packages/ethereum-connector/src/utils/ethereum-icon.ts new file mode 100644 index 000000000..9afee0920 --- /dev/null +++ b/packages/ethereum-connector/src/utils/ethereum-icon.ts @@ -0,0 +1,2 @@ +export const ETHEREUM_ICON = + 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTUzNSIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDQxNyIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPjxwYXRoIGZpbGw9IiMzNDM0MzQiIGQ9Ik0xMjcuOTYxIDBsLTIuNzk1IDkuNXYyNzUuNjY4bDIuNzk1IDIuNzkgMTI3Ljk2Mi03NS42Mzh6Ii8+PHBhdGggZmlsbD0iIzhDOEM4QyIgZD0iTTEyNy45NjIgMEwwIDIxMi4zMmwxMjcuOTYyIDc1LjYzOVYxNTQuMTU4eiIvPjxwYXRoIGZpbGw9IiMzQzNDM0IiIGQ9Ik0xMjcuOTYxIDMxMi4xODdsLTEuNTc1IDEuOTJ2OTguMTk5bDEuNTc1IDQuNkwyNTYgMjM2LjU4N3oiLz48cGF0aCBmaWxsPSIjOEM4QzhDIiBkPSJNMTI3Ljk2MiA0MTYuOTA1di0xMDQuNzJMMCAyMzYuNTg1eiIvPjxwYXRoIGZpbGw9IiMxNDE0MTQiIGQ9Ik0xMjcuOTYxIDI4Ny45NThsMTI3Ljk2LTc1LjYzNy0xMjcuOTYtNTguMTYyeiIvPjxwYXRoIGZpbGw9IiMzOTM5MzkiIGQ9Ik0wIDIxMi4zMmwxMjcuOTYgNzUuNjM4di0xMzMuOHoiLz4KCTxtZXRhZGF0YT4KCQk8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnJkZnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CgkJCTxyZGY6RGVzY3JpcHRpb24gYWJvdXQ9Imh0dHBzOi8vaWNvbnNjb3V0LmNvbS9sZWdhbCNsaWNlbnNlcyIgZGM6dGl0bGU9ImV0aGVyZXVtLTEtY29tcGFueS1icmFuZC1sb2dvIiBkYzpkZXNjcmlwdGlvbj0iZXRoZXJldW0tMS1jb21wYW55LWJyYW5kLWxvZ28iIGRjOnB1Ymxpc2hlcj0iSWNvbnNjb3V0IiBkYzpkYXRlPSIyMDE3LTA3LTEyIiBkYzpmb3JtYXQ9ImltYWdlL3N2Zyt4bWwiIGRjOmxhbmd1YWdlPSJlbiI+CgkJCQk8ZGM6Y3JlYXRvcj4KCQkJCQk8cmRmOkJhZz4KCQkJCQkJPHJkZjpsaT5JY29uIE1hZmlhPC9yZGY6bGk+CgkJCQkJPC9yZGY6QmFnPgoJCQkJPC9kYzpjcmVhdG9yPgoJCQk8L3JkZjpEZXNjcmlwdGlvbj4KCQk8L3JkZjpSREY+CiAgICA8L21ldGFkYXRhPjwvc3ZnPgo='; diff --git a/packages/ethereum-connector/src/utils/generatePredicateResources.ts b/packages/ethereum-connector/src/utils/generatePredicateResources.ts new file mode 100644 index 000000000..384b53abb --- /dev/null +++ b/packages/ethereum-connector/src/utils/generatePredicateResources.ts @@ -0,0 +1,42 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const predicates = ['verification-predicate']; + +let code = 'export const predicates = {\n'; + +predicates.forEach((predicate) => { + const outputDirectory = `${__dirname}/../../signature-verification/${predicate}/out/release`; + const abiPath = `${outputDirectory}/${predicate}-abi.json`; + const bytecodePath = `${outputDirectory}/${predicate}.bin`; + + const abi = fs.readFileSync(abiPath, 'utf8'); + const bytecode = fs.readFileSync(bytecodePath); + + code += ` '${predicate}': {\n`; + code += ` abi: ${abi},\n`; + code += ` bytecode: base64ToUint8Array('${bytecode.toString( + 'base64', + )}'),\n`; + code += ' },\n'; +}); + +code += ` +}; + +function base64ToUint8Array(base64: string) { + var binaryString = atob(base64); + var bytes = new Uint8Array(binaryString.length); + for (var i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; +} +`; + +fs.writeFileSync(`${__dirname}/predicateResources.ts`, code); +console.log('Generated'); diff --git a/packages/ethereum-connector/src/utils/predicate.ts b/packages/ethereum-connector/src/utils/predicate.ts new file mode 100644 index 000000000..a4a95ba5f --- /dev/null +++ b/packages/ethereum-connector/src/utils/predicate.ts @@ -0,0 +1,60 @@ +import { type BytesLike, arrayify } from '@ethersproject/bytes'; +import { + Address, + type InputValue, + type JsonAbi, + Predicate, + type Provider, + getPredicateRoot, +} from 'fuels'; +import memoize from 'memoizee'; + +export const getPredicateAddress = memoize( + ( + ethAddress: string, + predicateBytecode: BytesLike, + predicateAbi: JsonAbi, + ): string => { + const configurable = { + SIGNER: Address.fromB256( + ethAddress.replace('0x', '0x000000000000000000000000'), + ).toEvmAddress(), + }; + + // @ts-ignore + const { predicateBytes } = Predicate.processPredicateData( + predicateBytecode, + predicateAbi, + configurable, + ); + const address = Address.fromB256(getPredicateRoot(predicateBytes)); + + return address.toString(); + }, +); + +export const createPredicate = memoize(function createPredicate< + TInputData extends InputValue[], +>( + ethAddress: string, + provider: Provider, + predicateBytecode: BytesLike, + predicateAbi: JsonAbi, + inputData?: TInputData, +): Predicate { + const configurable = { + SIGNER: Address.fromB256( + ethAddress.replace('0x', '0x000000000000000000000000'), + ).toEvmAddress(), + }; + + const predicate = new Predicate({ + bytecode: arrayify(predicateBytecode), + abi: predicateAbi, + provider, + configurableConstants: configurable, + inputData, + }); + + return predicate; +}); diff --git a/packages/ethereum-connector/src/utils/predicateResources.ts b/packages/ethereum-connector/src/utils/predicateResources.ts new file mode 100644 index 000000000..e6192f823 --- /dev/null +++ b/packages/ethereum-connector/src/utils/predicateResources.ts @@ -0,0 +1,81 @@ +export const predicates = { + 'verification-predicate': { + abi: { + types: [ + { + typeId: 0, + type: 'b256', + components: null, + typeParameters: null, + }, + { + typeId: 1, + type: 'bool', + components: null, + typeParameters: null, + }, + { + typeId: 2, + type: 'struct EvmAddress', + components: [ + { + name: 'value', + type: 0, + typeArguments: null, + }, + ], + typeParameters: null, + }, + { + typeId: 3, + type: 'u64', + components: null, + typeParameters: null, + }, + ], + functions: [ + { + inputs: [ + { + name: 'witness_index', + type: 3, + typeArguments: null, + }, + ], + name: 'main', + output: { + name: '', + type: 1, + typeArguments: null, + }, + attributes: null, + }, + ], + loggedTypes: [], + messagesTypes: [], + configurables: [ + { + name: 'SIGNER', + configurableType: { + name: '', + type: 2, + typeArguments: [], + }, + offset: 1952, + }, + ], + }, + bytecode: base64ToUint8Array( + 'dAAAA0cAAAAAAAAAAAAHSF38wAEQ//MAGuxQAJEABrhxRAADYUkSAHZIAAJhQRIMdAAAB3JMAAITSSTAWkkgAXZIAAJhQRJKdAAAASQAAABdQQAAXU/wDxBNMwBdU/AQEFFDAF1f8BAQXXMAYUEEAVBHs1ga6QAAGuUQACD4MwBY++ACUPvgBHQAAMIaQ9AAUEe2eHJIAEAoRQSAUEO2eBpEAABySAAgKO0UgFBHsCBySAAgKEU0gFBHsEBySAAgKEV0gFBHtMhySABgKEe0gFBHtMhQS7SockwAIChJRMBQS7SoXU/wCBBNFMBQU7TIUFFAIF1X8AldW/AIKE0VQEFJRYBQR7SoUEuwyHJMACAbTATAEE0kwHJQACAoTXUAckwAIBtMFMAQTSTAclAAIChNdQBQT7HQclAAQChNJQBQS7YQclAAQChJNQBQS7YQUE+wiHJQAEAoTQUAUEOygHJQACAoQRUAPkk0ABpAgAATQQBAdkAAClBDsjhf7ABHUEe2EFBJAAhyTABAKEkUwFBLs/hyRABIKEkEQHQAAAZQQ7GIX+wQMV/sADlQS7P4ckQASChJBEBQQ7WockQASChBJEBQQ7KgckQASChBJEBdQ7B/E0EAQHZAADxQQ7WoUEey6HJIAEgoRQSAXUOwtRNBAAB2QAABNgAAAFBDsuhQQQAIUEe1KHJIAEAoRQSAUEO1KHJEACAbRARAEEUEQFBDtShySAAgG0gUgBBJBIBQQ7FIckwAIChBFMBQRQAgckwAIChFJMBQR7O4ckgAQChFBIBQQ7OYGukQABrlAAAg+DMAWPvgAlD74AR0AABiGkPQAFBHtfBySAAgKEUEgFBDshBf7ABCUEe18FBLtYhyTAAgKEkUwFBHtYhwRAAMUEe1iFBLsQhyTAAgKEkUwFBFAAhyTAAgKEUkwFBLtEByRAAoKEkEQHQAAApQQ7KgUEEAQFBHsGBf7BAMUEkQIHJMAAgoSQTAUEu0QHJAACgoSRQAUEO2UHJEACgoQSRAXUOwiBNBAABcR/BQdkAAARpEAAB2RAABdAAAG1BDtlBQR7MwckgAKChFBIBdQ7DKE0EAAHZAAAE2AAAAUEOzMFBBAAhQR7VockgAIChFBIBQQ7EoXUfwERBFEwBySAAgKEEUgFBHtWhQS7RockwAIChJBMBQQ7SIckwAIChBFMChQSQgdkAAASQAAABcQ/BQJEAAABrwUACRAAAoX/EAAF/xEAFf8SACX/EwA1/zsAQa7FAAkQAAABpDoAAaR5AAGkvgAHJMAEAoRQTAGvUQAJIAAAAa+SAAWfBQKF1DwABdR8ABXUvAAl1PwANd78AEkgAAKEr4AAAa8FAAkQAAOF/xAABf8RABX/EgAl/xMANf8UAEX/FQBV/zsAYa7FAAkQAAeBpDoAAaR5AAGkvgAF1P8BAQTTMAGlAAACZQAAAaUHAAX+1ACF/sAAlf7AAKUFOwQHJUAEAo7QVAGuuwABrlQAAg+DMAWPvgAlD74AR0AAAWUEOwWHJQACAoQTUAUEOwWF1PsAhdU7AKQUE1AHJMACAoRQTAGvUQAJIAAHga+SAAWfBQOF1DwABdR8ABXUvAAl1PwANdU8AEXVfABV3vwAaSAAA4SvgAABrwUACRAABYX/EAAF/xEAFf8SACX/EwA1/xQARf8VAFX/FgBl/xcAdf8YAIX/GQCV/zsAoa7FAAkQAAQBpDoAAaZ5AAGmPgAF1H8AkmRAAAGkRwAHJIACAo7QSAGkuwAF1NIABdUSABXVUgAl1JIANfRTAAX0VAAV9FUAJfRSADXUvwCRNJIAB2SAAsXUmQAhNJIAB2SAAiXUmQAl1P8AkQSSTAXU2QAl1RkABdVZABFVklQHZYAAF0AAAHJkgAABpYcAAVXVAAdlwAAXQAAAEoWUVAGlFgAF9lQAAaWAAAXVPwCRZRZQB2UAAFX2UgAV9lIAIaRAAAJkQAAHQAAA9dUZAAEFFEwBBRRYAQVRWAXFVQAF5RUAAQWWBAdQAADl9lEABdR/AJX2UQAV1H8AlfZRACGkQAACZEAABQQQAgXUfwCSZEAAAaRHAAUEuwIHJMACAoSQTAXUEgAF1NIAFdUSACXUkgA19FAABfRTABX0VAAl9FIANdQ/AJE0EAAHZAACxdQZACE0EAAHZAACJdQZACXUvwCRBBBIBdSZACXU2QAF1RkAEVVQUAdlQAAXQAAAcmQAAAGlRwABVZQAB2WAABdAAAAShVNQAaTVAAX2UwABpUAABdT/AJFk1UwHZMAAVfZQABX2UAAhpAAAAmQAAAdAAAD11NkAAQTTSAEE01QBBRFUBcUUAAXk1AABBVUEB1AAAOX2UQAF1D8AlfZQABXUPwCV9lAAIaQAAAJkAAABr0AACSAABAGvmAAFnwUFhdQ8AAXUfAAV1LwAJdT8ADXVPABF1XwAVdW8AGXV/AB11jwAhdZ8AJXe/ACpIAAFhK+AAARwAAABlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZToKMzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdIAAAAAAAAB2gAAAAAAAAHoA==', + ), + }, +}; + +function base64ToUint8Array(base64: string) { + const binaryString = atob(base64); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; +} diff --git a/packages/ethereum-connector/tsconfig.json b/packages/ethereum-connector/tsconfig.json new file mode 100644 index 000000000..610622201 --- /dev/null +++ b/packages/ethereum-connector/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "target": "ES2022", + "lib": ["DOM", "ES2022"], + "module": "es2022", + "moduleResolution": "Node", + "strict": true, + "noUncheckedIndexedAccess": true, + "declaration": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "outDir": "./dist" + }, + "exclude": ["./dist/**/*"] +} diff --git a/packages/ethereum-connector/tsup.config.js b/packages/ethereum-connector/tsup.config.js new file mode 100644 index 000000000..8e0c2622e --- /dev/null +++ b/packages/ethereum-connector/tsup.config.js @@ -0,0 +1,9 @@ +import baseConfig from '@fuels/tsup-config'; +import { defineConfig } from 'tsup'; + +export default defineConfig((options) => ({ + ...baseConfig(options, { withReact: false }), + format: ['cjs'], + external: ['fuels'], + entry: ['src/index.ts'], +})); diff --git a/packages/ethereum-connector/vite.config.ts b/packages/ethereum-connector/vite.config.ts new file mode 100644 index 000000000..91a22e45b --- /dev/null +++ b/packages/ethereum-connector/vite.config.ts @@ -0,0 +1,27 @@ +// vite.config.js +import { resolve } from 'node:path'; +import { defineConfig } from 'vite'; +import dts from 'vite-plugin-dts'; + +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +export default defineConfig({ + plugins: [ + dts({ + include: [resolve(__dirname, 'src/')], + }), + ], + define: { + __dirname: JSON.stringify(path.dirname(__filename)), + __filename: JSON.stringify(fileURLToPath(import.meta.url)), + }, + build: { + lib: { + entry: path.resolve('src/index.ts'), + name: '@fuels/wallet-connector-ethereum', + // the proper extensions will be added + fileName: 'wallet-connector-ethereum', + }, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 60f537990..95feb9012 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,6 +99,9 @@ importers: packages/connectors: devDependencies: + '@fuel-connectors/ethereum-connector': + specifier: workspace:* + version: link:../ethereum-connector '@fuel-connectors/evm-connector': specifier: workspace:* version: link:../evm-connector @@ -124,6 +127,73 @@ importers: specifier: 5.4.3 version: 5.4.3 + packages/ethereum-connector: + dependencies: + '@ethereumjs/util': + specifier: ^9.0.1 + version: 9.0.3 + '@ethersproject/bytes': + specifier: ^5.7.0 + version: 5.7.0 + '@wagmi/connectors': + specifier: 4.1.24 + version: 4.1.24(@wagmi/core@2.6.15)(react-native@0.73.6)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) + '@wagmi/core': + specifier: 2.6.15 + version: 2.6.15(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) + '@web3modal/wagmi': + specifier: 4.1.5 + version: 4.1.5(@wagmi/connectors@4.1.24)(@wagmi/core@2.6.15)(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0)(viem@2.9.9) + memoizee: + specifier: ^0.4.15 + version: 0.4.15 + viem: + specifier: 2.9.9 + version: 2.9.9(typescript@5.4.3) + devDependencies: + '@fuel-ts/account': + specifier: ^0.79.0 + version: 0.79.0(dexie@4.0.1) + '@fuel-ts/forc': + specifier: 0.79.0 + version: 0.79.0 + '@fuel-ts/fuel-core': + specifier: ^0.79.0 + version: 0.79.0 + '@types/memoizee': + specifier: ^0.4.11 + version: 0.4.11 + fuels: + specifier: ^0.79.0 + version: 0.79.0(dexie@4.0.1) + jsdom: + specifier: 24.0.0 + version: 24.0.0 + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.4.3)(webpack@5.91.0) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.12.4)(typescript@5.4.3) + tsup: + specifier: 8.0.2 + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) + tsx: + specifier: ^4.7.0 + version: 4.7.2 + typescript: + specifier: 5.4.3 + version: 5.4.3 + vite: + specifier: ^5.0.10 + version: 5.2.6(@types/node@20.12.4) + vite-plugin-dts: + specifier: ^3.6.4 + version: 3.8.1(@types/node@20.12.4)(typescript@5.4.3)(vite@5.2.6) + vitest: + specifier: ^1.4.0 + version: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0) + packages/evm-connector: dependencies: '@ethereumjs/util': @@ -165,7 +235,7 @@ importers: version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) tsx: specifier: ^4.7.0 - version: 4.7.1 + version: 4.7.2 typescript: specifier: 5.4.3 version: 5.4.3 @@ -174,7 +244,7 @@ importers: version: 5.2.6(@types/node@20.12.4) vite-plugin-dts: specifier: ^3.6.4 - version: 3.7.3(@types/node@20.12.4)(typescript@5.4.3)(vite@5.2.6) + version: 3.8.1(@types/node@20.12.4)(typescript@5.4.3)(vite@5.2.6) vitest: specifier: ^1.4.0 version: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0) @@ -248,6 +318,10 @@ importers: packages: + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + dev: false + /@adraffy/ens-normalize@1.10.1: resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} @@ -262,7 +336,6 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - dev: true /@babel/code-frame@7.24.2: resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} @@ -270,24 +343,22 @@ packages: dependencies: '@babel/highlight': 7.24.2 picocolors: 1.0.0 - dev: true - /@babel/compat-data@7.24.1: - resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} + /@babel/compat-data@7.24.4: + resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.24.3: - resolution: {integrity: sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==} + /@babel/core@7.24.4: + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 + '@babel/generator': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) - '@babel/helpers': 7.24.1 - '@babel/parser': 7.24.1 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 '@babel/template': 7.24.0 '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 @@ -298,33 +369,88 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/generator@7.24.1: - resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} + /@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - dev: true + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: false + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: false /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.24.1 + '@babel/compat-data': 7.24.4 '@babel/helper-validator-option': 7.23.5 browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 - dev: true + + /@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@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/core@7.24.4) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: false + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: false + + /@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.4): + resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.24.0 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-function-name@7.23.0: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} @@ -332,72 +458,116 @@ packages: dependencies: '@babel/template': 7.24.0 '@babel/types': 7.24.0 - dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 - dev: true + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: false /@babel/helper-module-imports@7.24.3: resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 - dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.3): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 - dev: true + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: false /@babel/helper-plugin-utils@7.24.0: resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} engines: {node: '>=6.9.0'} - dev: true + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: false + + /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: false /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 - dev: true + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: false /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 - dev: true /@babel/helper-string-parser@7.24.1: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helpers@7.24.1: - resolution: {integrity: sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==} + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 + dev: false + + /@babel/helpers@7.24.4: + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 @@ -405,7 +575,6 @@ packages: '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color - dev: true /@babel/highlight@7.24.2: resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} @@ -415,116 +584,1209 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - dev: true - /@babel/parser@7.24.1: - resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.24.0 - dev: true - /@babel/plugin-transform-react-jsx-self@7.24.1(@babel/core@7.24.3): - resolution: {integrity: sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==} + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.24.0 - dev: true + dev: false - /@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.24.3): - resolution: {integrity: sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - dev: true + dev: false - /@babel/runtime@7.24.1: - resolution: {integrity: sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 dependencies: - regenerator-runtime: 0.14.1 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + dev: false - /@babel/runtime@7.24.4: - resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - regenerator-runtime: 0.14.1 + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.24.0 + dev: false - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.24.4): + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 - dev: true + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + dev: false - /@babel/traverse@7.24.1: - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: false - /@babel/types@7.24.0: - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + /@babel/plugin-proposal-export-default-from@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-+0hrgGGV3xyYIjOrD/bUZk/iUwOIGuoANfRfVg1cPhYBxF+TIXSEcc42DqzBICmWsnAQ+SfKedY0bj8QD+LuMg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-export-default-from': 7.24.1(@babel/core@7.24.4) + dev: false - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + dev: false - /@biomejs/biome@1.6.3: - resolution: {integrity: sha512-Xnp/TIpIcTnRA4LwerJuoGYQJEqwXtn5AL0U0OPXll/QGbAKmcUAfizU880xTwZRD4f53iceqODLDaD3wxYlIw==} - engines: {node: '>=14.*'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.6.3 - '@biomejs/cli-darwin-x64': 1.6.3 - '@biomejs/cli-linux-arm64': 1.6.3 - '@biomejs/cli-linux-arm64-musl': 1.6.3 - '@biomejs/cli-linux-x64': 1.6.3 - '@biomejs/cli-linux-x64-musl': 1.6.3 - '@biomejs/cli-win32-arm64': 1.6.3 - '@biomejs/cli-win32-x64': 1.6.3 - dev: true + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + dev: false - /@biomejs/cli-darwin-arm64@1.6.3: - resolution: {integrity: sha512-0E8PGu3/8HSkBJdtjno+niJE1ANS/12D7sPK65vw5lTBYmmaYwJdfclDp6XO0IAX7uVd3/YtXlsEua0SVrNt3Q==} - engines: {node: '>=14.*'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.24.4): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.24.4 + '@babel/core': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + dev: false - /@biomejs/cli-darwin-x64@1.6.3: - resolution: {integrity: sha512-UWu0We/aIRtWXgJKe6ygWt2xR0yXs64BwWqtZbfxBojRn3jgW8UdFAkV5yiUOX3TQlsV6BZH1EQaUAVsccUeeA==} - engines: {node: '>=14.*'} + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + dev: false + + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.4): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@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/core@7.24.4) + dev: false + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + dev: false + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-export-default-from@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4): + resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 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/core@7.24.4) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: false + + /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/template': 7.24.0 + dev: false + + /@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + + /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-simple-access': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@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/core@7.24.4) + dev: false + + /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-react-jsx-self@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + + /@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4): + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/types': 7.24.0 + dev: false + + /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + regenerator-transform: 0.15.2 + dev: false + + /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.4): + resolution: {integrity: sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 + babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.4) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) + babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.4) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + + /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-typescript@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) + dev: false + + /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + dev: false + + /@babel/preset-env@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.24.4 + '@babel/core': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.4) + '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) + '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4) + babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.4) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) + babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.4) + core-js-compat: 3.36.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/preset-flow@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.4) + dev: false + + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/types': 7.24.0 + esutils: 2.0.3 + dev: false + + /@babel/preset-typescript@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) + dev: false + + /@babel/register@7.23.7(@babel/core@7.24.4): + resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.6 + source-map-support: 0.5.21 + dev: false + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: false + + /@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.1 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + + /@biomejs/biome@1.6.3: + resolution: {integrity: sha512-Xnp/TIpIcTnRA4LwerJuoGYQJEqwXtn5AL0U0OPXll/QGbAKmcUAfizU880xTwZRD4f53iceqODLDaD3wxYlIw==} + engines: {node: '>=14.*'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.6.3 + '@biomejs/cli-darwin-x64': 1.6.3 + '@biomejs/cli-linux-arm64': 1.6.3 + '@biomejs/cli-linux-arm64-musl': 1.6.3 + '@biomejs/cli-linux-x64': 1.6.3 + '@biomejs/cli-linux-x64-musl': 1.6.3 + '@biomejs/cli-win32-arm64': 1.6.3 + '@biomejs/cli-win32-x64': 1.6.3 + dev: true + + /@biomejs/cli-darwin-arm64@1.6.3: + resolution: {integrity: sha512-0E8PGu3/8HSkBJdtjno+niJE1ANS/12D7sPK65vw5lTBYmmaYwJdfclDp6XO0IAX7uVd3/YtXlsEua0SVrNt3Q==} + engines: {node: '>=14.*'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@biomejs/cli-darwin-x64@1.6.3: + resolution: {integrity: sha512-UWu0We/aIRtWXgJKe6ygWt2xR0yXs64BwWqtZbfxBojRn3jgW8UdFAkV5yiUOX3TQlsV6BZH1EQaUAVsccUeeA==} + engines: {node: '>=14.*'} cpu: [x64] os: [darwin] requiresBuild: true @@ -588,7 +1850,7 @@ packages: /@changesets/apply-release-plan@7.0.0: resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@changesets/config': 3.0.0 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.0 @@ -606,7 +1868,7 @@ packages: /@changesets/assemble-release-plan@6.0.0: resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.0.0 '@changesets/types': 6.0.0 @@ -634,7 +1896,7 @@ packages: resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} hasBin: true dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@changesets/apply-release-plan': 7.0.0 '@changesets/assemble-release-plan': 6.0.0 '@changesets/changelog-git': 0.2.0 @@ -708,7 +1970,7 @@ packages: /@changesets/get-release-plan@4.0.0: resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@changesets/assemble-release-plan': 6.0.0 '@changesets/config': 3.0.0 '@changesets/pre': 2.0.0 @@ -724,7 +1986,7 @@ packages: /@changesets/git@3.0.0: resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -749,7 +2011,7 @@ packages: /@changesets/pre@2.0.0: resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -759,7 +2021,7 @@ packages: /@changesets/read@0.6.0: resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@changesets/git': 3.0.0 '@changesets/logger': 0.1.0 '@changesets/parse': 0.4.0 @@ -780,13 +2042,29 @@ packages: /@changesets/write@0.3.0: resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.8 dev: true + /@coinbase/wallet-sdk@3.9.1: + resolution: {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.1 + eventemitter3: 5.0.1 + keccak: 3.0.4 + preact: 10.20.1 + sha.js: 2.4.11 + transitivePeerDependencies: + - supports-color + dev: false + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -794,6 +2072,120 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true + /@emotion/babel-plugin@11.11.0: + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + dependencies: + '@babel/helper-module-imports': 7.24.3 + '@babel/runtime': 7.24.4 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/serialize': 1.1.4 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + dev: false + + /@emotion/cache@11.11.0: + resolution: {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 + dev: false + + /@emotion/hash@0.9.1: + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + dev: false + + /@emotion/is-prop-valid@1.2.2: + resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} + dependencies: + '@emotion/memoize': 0.8.1 + dev: false + + /@emotion/memoize@0.8.1: + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + dev: false + + /@emotion/react@11.11.4(react@18.2.0): + resolution: {integrity: sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.4 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + dev: false + + /@emotion/serialize@1.1.4: + resolution: {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.1.3 + dev: false + + /@emotion/sheet@1.2.2: + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} + dev: false + + /@emotion/styled@11.11.5(@emotion/react@11.11.4)(react@18.2.0): + resolution: {integrity: sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@emotion/babel-plugin': 11.11.0 + '@emotion/is-prop-valid': 1.2.2 + '@emotion/react': 11.11.4(react@18.2.0) + '@emotion/serialize': 1.1.4 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + react: 18.2.0 + dev: false + + /@emotion/unitless@0.8.1: + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + dev: false + + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.2.0 + dev: false + + /@emotion/utils@1.2.1: + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} + dev: false + + /@emotion/weak-memoize@0.3.1: + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + dev: false + /@esbuild/aix-ppc64@0.19.12: resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} @@ -1383,12 +2775,44 @@ packages: dev: true optional: true + /@ethereumjs/common@3.2.0: + resolution: {integrity: sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==} + dependencies: + '@ethereumjs/util': 8.1.0 + crc-32: 1.2.2 + dev: false + + /@ethereumjs/rlp@4.0.1: + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + dev: false + /@ethereumjs/rlp@5.0.2: resolution: {integrity: sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==} engines: {node: '>=18'} hasBin: true dev: false + /@ethereumjs/tx@4.2.0: + resolution: {integrity: sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==} + engines: {node: '>=14'} + dependencies: + '@ethereumjs/common': 3.2.0 + '@ethereumjs/rlp': 4.0.1 + '@ethereumjs/util': 8.1.0 + ethereum-cryptography: 2.1.3 + dev: false + + /@ethereumjs/util@8.1.0: + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.1.3 + micro-ftch: 0.3.1 + dev: false + /@ethereumjs/util@9.0.3: resolution: {integrity: sha512-PmwzWDflky+7jlZIFqiGsBPap12tk9zK5SVH9YW2OEnDN7OEhCjUOMzbOqwuClrbkSIkM2ERivd7sXZ48Rh/vg==} engines: {node: '>=18'} @@ -1713,7 +3137,17 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - graphql: 16.8.1 + graphql: 16.8.1 + + /@hapi/hoek@9.3.0: + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + dev: false + + /@hapi/topo@5.1.0: + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: false /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -1726,17 +3160,73 @@ packages: wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 + /@isaacs/ttlcache@1.4.1: + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} + dev: false + /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: true + /@jest/create-cache-key-function@29.7.0: + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + dev: false + + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.4 + jest-mock: 29.7.0 + dev: false + + /@jest/fake-timers@29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.12.4 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: false + /@jest/schemas@29.6.3: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.27.8 - dev: true + + /@jest/types@26.6.2: + resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} + engines: {node: '>= 10.14.2'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.12.4 + '@types/yargs': 15.0.19 + chalk: 4.1.2 + dev: false + + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.12.4 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + dev: false /@jridgewell/gen-mapping@0.3.5: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} @@ -1745,35 +3235,29 @@ packages: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.25 - dev: true /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/source-map@0.3.6: resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -1782,10 +3266,26 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@lit-labs/ssr-dom-shim@1.2.0: + resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==} + dev: false + + /@lit/reactive-element@1.6.3: + resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + dev: false + + /@lit/reactive-element@2.0.4: + resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + dev: false + /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -1794,7 +3294,7 @@ packages: /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -1802,32 +3302,226 @@ packages: read-yaml-file: 1.1.0 dev: true - /@microsoft/api-extractor-model@7.28.3(@types/node@20.12.4): - resolution: {integrity: sha512-wT/kB2oDbdZXITyDh2SQLzaWwTOFbV326fP0pUwNW00WeliARs0qjmXBWmGWardEzp2U3/axkO3Lboqun6vrig==} + /@metamask/eth-json-rpc-provider@1.0.1: + resolution: {integrity: sha512-whiUMPlAOrVGmX8aKYVPvlKyG4CpQXiNNyt74vE1xb5sPvmx5oA7B/kOi/JdBvhGQq97U1/AVdXEdk2zkP8qyA==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/json-rpc-engine': 7.3.3 + '@metamask/safe-event-emitter': 3.1.1 + '@metamask/utils': 5.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/json-rpc-engine@7.3.3: + resolution: {integrity: sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg==} + engines: {node: '>=16.0.0'} + dependencies: + '@metamask/rpc-errors': 6.2.1 + '@metamask/safe-event-emitter': 3.1.1 + '@metamask/utils': 8.4.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/object-multiplex@1.3.0: + resolution: {integrity: sha512-czcQeVYdSNtabd+NcYQnrM69MciiJyd1qvKH8WM2Id3C0ZiUUX5Xa/MK+/VUk633DBhVOwdNzAKIQ33lGyA+eQ==} + engines: {node: '>=12.0.0'} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + readable-stream: 2.3.8 + dev: false + + /@metamask/onboarding@1.0.1: + resolution: {integrity: sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ==} + dependencies: + bowser: 2.11.0 + dev: false + + /@metamask/post-message-stream@6.2.0: + resolution: {integrity: sha512-WunZ0bruClF862mvbKQGETn5SM0XKGmocPMQR1Ew6sYix9/FDzeoZnoI8RkXk01E+70FCdxhTE/r8kk5SFOuTw==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/utils': 5.0.2 + readable-stream: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/providers@10.2.1: + resolution: {integrity: sha512-p2TXw2a1Nb8czntDGfeIYQnk4LLVbd5vlcb3GY//lylYlKdSqp+uUTegCvxiFblRDOT68jsY8Ib1VEEzVUOolA==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/object-multiplex': 1.3.0 + '@metamask/safe-event-emitter': 2.0.0 + '@types/chrome': 0.0.136 + detect-browser: 5.3.0 + eth-rpc-errors: 4.0.3 + extension-port-stream: 2.1.1 + fast-deep-equal: 2.0.1 + is-stream: 2.0.1 + json-rpc-engine: 6.1.0 + json-rpc-middleware-stream: 4.2.3 + pump: 3.0.0 + webextension-polyfill-ts: 0.25.0 + dev: false + + /@metamask/rpc-errors@6.2.1: + resolution: {integrity: sha512-VTgWkjWLzb0nupkFl1duQi9Mk8TGT9rsdnQg6DeRrYEFxtFOh0IF8nAwxM/4GWqDl6uIB06lqUBgUrAVWl62Bw==} + engines: {node: '>=16.0.0'} + dependencies: + '@metamask/utils': 8.4.0 + fast-safe-stringify: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/safe-event-emitter@2.0.0: + resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} + dev: false + + /@metamask/safe-event-emitter@3.1.1: + resolution: {integrity: sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw==} + engines: {node: '>=12.0.0'} + dev: false + + /@metamask/sdk-communication-layer@0.14.3: + resolution: {integrity: sha512-yjSbj8y7fFbQXv2HBzUX6D9C8BimkCYP6BDV7hdw53W8b/GlYCtXVxUFajQ9tuO1xPTRjR/xt/dkdr2aCi6WGw==} + dependencies: + bufferutil: 4.0.8 + cross-fetch: 3.1.8 + date-fns: 2.30.0 + eciesjs: 0.3.18 + eventemitter2: 6.4.9 + socket.io-client: 4.7.5(bufferutil@4.0.8)(utf-8-validate@6.0.3) + utf-8-validate: 6.0.3 + uuid: 8.3.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@metamask/sdk-install-modal-web@0.14.1(react-native@0.73.6): + resolution: {integrity: sha512-emT8HKbnfVwGhPxyUfMja6DWzvtJvDEBQxqCVx93H0HsyrrOzOC43iGCAosslw6o5h7gOfRKLqWmK8V7jQAS2Q==} + dependencies: + '@emotion/react': 11.11.4(react@18.2.0) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.2.0) + i18next: 22.5.1 + qr-code-styling: 1.6.0-rc.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-i18next: 13.5.0(i18next@22.5.1)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react-native + dev: false + + /@metamask/sdk@0.14.3(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-BYLs//nY2wioVSih78gOQI6sLIYY3vWkwVqXGYUgkBV+bi49bv+9S0m+hZ2cwiRaxfMYtKs0KvhAQ8weiYwDrg==} + peerDependencies: + react: ^18.2.0 + react-native: '*' + peerDependenciesMeta: + react: + optional: true + react-native: + optional: true + dependencies: + '@metamask/onboarding': 1.0.1 + '@metamask/post-message-stream': 6.2.0 + '@metamask/providers': 10.2.1 + '@metamask/sdk-communication-layer': 0.14.3 + '@metamask/sdk-install-modal-web': 0.14.1(react-native@0.73.6) + '@react-native-async-storage/async-storage': 1.23.1(react-native@0.73.6) + '@types/dom-screen-wake-lock': 1.0.3 + bowser: 2.11.0 + cross-fetch: 4.0.0 + eciesjs: 0.3.18 + eth-rpc-errors: 4.0.3 + eventemitter2: 6.4.9 + extension-port-stream: 2.1.1 + i18next: 22.5.1 + i18next-browser-languagedetector: 7.2.1 + obj-multiplex: 1.0.0 + pump: 3.0.0 + qrcode-terminal-nooctal: 0.12.1 + react: 18.2.0 + react-i18next: 13.5.0(i18next@22.5.1)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0) + react-native: 0.73.6(@babel/core@7.24.4)(@babel/preset-env@7.24.4)(react@18.2.0) + react-native-webview: 11.26.1(react-native@0.73.6)(react@18.2.0) + readable-stream: 2.3.8 + rollup-plugin-visualizer: 5.12.0 + socket.io-client: 4.7.5(bufferutil@4.0.8)(utf-8-validate@6.0.3) + util: 0.12.5 + uuid: 8.3.2 + transitivePeerDependencies: + - '@types/react' + - bufferutil + - encoding + - react-dom + - rollup + - supports-color + - utf-8-validate + dev: false + + /@metamask/utils@5.0.2: + resolution: {integrity: sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g==} + engines: {node: '>=14.0.0'} + dependencies: + '@ethereumjs/tx': 4.2.0 + '@types/debug': 4.1.12 + debug: 4.3.4 + semver: 7.6.0 + superstruct: 1.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/utils@8.4.0: + resolution: {integrity: sha512-dbIc3C7alOe0agCuBHM1h71UaEaEqOk2W8rAtEn8QGz4haH2Qq7MoK6i7v2guzvkJVVh79c+QCzIqphC3KvrJg==} + engines: {node: '>=16.0.0'} + dependencies: + '@ethereumjs/tx': 4.2.0 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.6 + '@types/debug': 4.1.12 + debug: 4.3.4 + pony-cause: 2.1.10 + semver: 7.6.0 + superstruct: 1.0.4 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@microsoft/api-extractor-model@7.28.13(@types/node@20.12.4): + resolution: {integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.62.0(@types/node@20.12.4) + '@rushstack/node-core-library': 4.0.2(@types/node@20.12.4) transitivePeerDependencies: - '@types/node' dev: true - /@microsoft/api-extractor@7.39.0(@types/node@20.12.4): - resolution: {integrity: sha512-PuXxzadgnvp+wdeZFPonssRAj/EW4Gm4s75TXzPk09h3wJ8RS3x7typf95B4vwZRrPTQBGopdUl+/vHvlPdAcg==} + /@microsoft/api-extractor@7.43.0(@types/node@20.12.4): + resolution: {integrity: sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.28.3(@types/node@20.12.4) + '@microsoft/api-extractor-model': 7.28.13(@types/node@20.12.4) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.62.0(@types/node@20.12.4) - '@rushstack/rig-package': 0.5.1 - '@rushstack/ts-command-line': 4.17.1 - colors: 1.2.5 + '@rushstack/node-core-library': 4.0.2(@types/node@20.12.4) + '@rushstack/rig-package': 0.5.2 + '@rushstack/terminal': 0.10.0(@types/node@20.12.4) + '@rushstack/ts-command-line': 4.19.1(@types/node@20.12.4) lodash: 4.17.21 + minimatch: 3.0.8 resolve: 1.22.8 semver: 7.5.4 source-map: 0.6.1 - typescript: 5.3.3 + typescript: 5.4.2 transitivePeerDependencies: - '@types/node' dev: true @@ -1845,6 +3539,68 @@ packages: resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} dev: true + /@motionone/animation@10.17.0: + resolution: {integrity: sha512-ANfIN9+iq1kGgsZxs+Nz96uiNcPLGTXwfNo2Xz/fcJXniPYpaz/Uyrfa+7I5BPLxCP82sh7quVDudf1GABqHbg==} + dependencies: + '@motionone/easing': 10.17.0 + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + tslib: 2.6.2 + dev: false + + /@motionone/dom@10.17.0: + resolution: {integrity: sha512-cMm33swRlCX/qOPHWGbIlCl0K9Uwi6X5RiL8Ma6OrlJ/TP7Q+Np5GE4xcZkFptysFjMTi4zcZzpnNQGQ5D6M0Q==} + dependencies: + '@motionone/animation': 10.17.0 + '@motionone/generators': 10.17.0 + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + hey-listen: 1.0.8 + tslib: 2.6.2 + dev: false + + /@motionone/easing@10.17.0: + resolution: {integrity: sha512-Bxe2wSuLu/qxqW4rBFS5m9tMLOw+QBh8v5A7Z5k4Ul4sTj5jAOfZG5R0bn5ywmk+Fs92Ij1feZ5pmC4TeXA8Tg==} + dependencies: + '@motionone/utils': 10.17.0 + tslib: 2.6.2 + dev: false + + /@motionone/generators@10.17.0: + resolution: {integrity: sha512-T6Uo5bDHrZWhIfxG/2Aut7qyWQyJIWehk6OB4qNvr/jwA/SRmixwbd7SOrxZi1z5rH3LIeFFBKK1xHnSbGPZSQ==} + dependencies: + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + tslib: 2.6.2 + dev: false + + /@motionone/svelte@10.16.4: + resolution: {integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==} + dependencies: + '@motionone/dom': 10.17.0 + tslib: 2.6.2 + dev: false + + /@motionone/types@10.17.0: + resolution: {integrity: sha512-EgeeqOZVdRUTEHq95Z3t8Rsirc7chN5xFAPMYFobx8TPubkEfRSm5xihmMUkbaR2ErKJTUw3347QDPTHIW12IA==} + dev: false + + /@motionone/utils@10.17.0: + resolution: {integrity: sha512-bGwrki4896apMWIj9yp5rAS2m0xyhxblg6gTB/leWDPt+pb410W8lYWsxyurX+DH+gO1zsQsfx2su/c1/LtTpg==} + dependencies: + '@motionone/types': 10.17.0 + hey-listen: 1.0.8 + tslib: 2.6.2 + dev: false + + /@motionone/vue@10.16.4: + resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} + deprecated: Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion + dependencies: + '@motionone/dom': 10.17.0 + tslib: 2.6.2 + dev: false + /@noble/curves@1.2.0: resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} dependencies: @@ -1874,26 +3630,167 @@ packages: resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + dev: true + + /@parcel/watcher-android-arm64@2.4.1: + resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-darwin-arm64@2.4.1: + resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-darwin-x64@2.4.1: + resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-freebsd-x64@2.4.1: + resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm-glibc@2.4.1: + resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm64-glibc@2.4.1: + resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm64-musl@2.4.1: + resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-x64-glibc@2.4.1: + resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-x64-musl@2.4.1: + resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-wasm@2.4.1: + resolution: {integrity: sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA==} + engines: {node: '>= 10.0.0'} + dependencies: + is-glob: 4.0.3 + micromatch: 4.0.5 + dev: false + bundledDependencies: + - napi-wasm + + /@parcel/watcher-win32-arm64@2.4.1: + resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-win32-ia32@2.4.1: + resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + /@parcel/watcher-win32-x64@2.4.1: + resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + /@parcel/watcher@2.4.1: + resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} + engines: {node: '>= 10.0.0'} dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - dev: true + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.5 + node-addon-api: 7.1.0 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.4.1 + '@parcel/watcher-darwin-arm64': 2.4.1 + '@parcel/watcher-darwin-x64': 2.4.1 + '@parcel/watcher-freebsd-x64': 2.4.1 + '@parcel/watcher-linux-arm-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-musl': 2.4.1 + '@parcel/watcher-linux-x64-glibc': 2.4.1 + '@parcel/watcher-linux-x64-musl': 2.4.1 + '@parcel/watcher-win32-arm64': 2.4.1 + '@parcel/watcher-win32-ia32': 2.4.1 + '@parcel/watcher-win32-x64': 2.4.1 + dev: false /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -1904,7 +3801,7 @@ packages: /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 dev: false /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0): @@ -1920,7 +3817,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.71)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.71)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) @@ -1940,7 +3837,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@types/react': 18.2.71 react: 18.2.0 dev: false @@ -1954,7 +3851,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@types/react': 18.2.71 react: 18.2.0 dev: false @@ -2006,7 +3903,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.71)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) @@ -2083,7 +3980,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.71 '@types/react-dom': 18.2.22 @@ -2104,7 +4001,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.71)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.71)(react@18.2.0) '@types/react': 18.2.71 @@ -2126,7 +4023,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.1 + '@babel/runtime': 7.24.4 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.71)(react@18.2.0) '@types/react': 18.2.71 '@types/react-dom': 18.2.22 @@ -2143,121 +4040,474 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.71)(react@18.2.0) - '@types/react': 18.2.71 - react: 18.2.0 + '@babel/runtime': 7.24.4 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.71)(react@18.2.0) + '@types/react': 18.2.71 + react: 18.2.0 + dev: false + + /@radix-ui/react-toast@1.1.5(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.71)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.71)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.71)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.71)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.71)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.71 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.71)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@types/react': 18.2.71 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.71)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.71)(react@18.2.0) + '@types/react': 18.2.71 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.71)(react@18.2.0): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.71)(react@18.2.0) + '@types/react': 18.2.71 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.71)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@types/react': 18.2.71 + react: 18.2.0 + dev: false + + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.4 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.71 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@react-native-async-storage/async-storage@1.23.1(react-native@0.73.6): + resolution: {integrity: sha512-Qd2kQ3yi6Y3+AcUlrHxSLlnBvpdCEMVGFlVBneVOjaFaPU61g1huc38g339ysXspwY1QZA2aNhrk/KlHGO+ewA==} + peerDependencies: + react-native: ^0.0.0-0 || >=0.60 <1.0 + dependencies: + merge-options: 3.0.4 + react-native: 0.73.6(@babel/core@7.24.4)(@babel/preset-env@7.24.4)(react@18.2.0) + dev: false + + /@react-native-community/cli-clean@12.3.6: + resolution: {integrity: sha512-gUU29ep8xM0BbnZjwz9MyID74KKwutq9x5iv4BCr2im6nly4UMf1B1D+V225wR7VcDGzbgWjaezsJShLLhC5ig==} + dependencies: + '@react-native-community/cli-tools': 12.3.6 + chalk: 4.1.2 + execa: 5.1.1 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-config@12.3.6: + resolution: {integrity: sha512-JGWSYQ9EAK6m2v0abXwFLEfsqJ1zkhzZ4CV261QZF9MoUNB6h57a274h1MLQR9mG6Tsh38wBUuNfEPUvS1vYew==} + dependencies: + '@react-native-community/cli-tools': 12.3.6 + chalk: 4.1.2 + cosmiconfig: 5.2.1 + deepmerge: 4.3.1 + glob: 7.2.3 + joi: 17.12.3 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-debugger-ui@12.3.6: + resolution: {integrity: sha512-SjUKKsx5FmcK9G6Pb6UBFT0s9JexVStK5WInmANw75Hm7YokVvHEgtprQDz2Uvy5znX5g2ujzrkIU//T15KQzA==} + dependencies: + serve-static: 1.15.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@react-native-community/cli-doctor@12.3.6: + resolution: {integrity: sha512-fvBDv2lTthfw4WOQKkdTop2PlE9GtfrlNnpjB818MhcdEnPjfQw5YaTUcnNEGsvGomdCs1MVRMgYXXwPSN6OvQ==} + dependencies: + '@react-native-community/cli-config': 12.3.6 + '@react-native-community/cli-platform-android': 12.3.6 + '@react-native-community/cli-platform-ios': 12.3.6 + '@react-native-community/cli-tools': 12.3.6 + chalk: 4.1.2 + command-exists: 1.2.9 + deepmerge: 4.3.1 + envinfo: 7.11.1 + execa: 5.1.1 + hermes-profile-transformer: 0.0.6 + node-stream-zip: 1.15.0 + ora: 5.4.1 + semver: 7.6.0 + strip-ansi: 5.2.0 + wcwidth: 1.0.1 + yaml: 2.4.1 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-hermes@12.3.6: + resolution: {integrity: sha512-sNGwfOCl8OAIjWCkwuLpP8NZbuO0dhDI/2W7NeOGDzIBsf4/c4MptTrULWtGIH9okVPLSPX0NnRyGQ+mSwWyuQ==} + dependencies: + '@react-native-community/cli-platform-android': 12.3.6 + '@react-native-community/cli-tools': 12.3.6 + chalk: 4.1.2 + hermes-profile-transformer: 0.0.6 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-platform-android@12.3.6: + resolution: {integrity: sha512-DeDDAB8lHpuGIAPXeeD9Qu2+/wDTFPo99c8uSW49L0hkmZJixzvvvffbGQAYk32H0TmaI7rzvzH+qzu7z3891g==} + dependencies: + '@react-native-community/cli-tools': 12.3.6 + chalk: 4.1.2 + execa: 5.1.1 + fast-xml-parser: 4.3.6 + glob: 7.2.3 + logkitty: 0.7.1 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-platform-ios@12.3.6: + resolution: {integrity: sha512-3eZ0jMCkKUO58wzPWlvAPRqezVKm9EPZyaPyHbRPWU8qw7JqkvnRlWIaYDGpjCJgVW4k2hKsEursLtYKb188tg==} + dependencies: + '@react-native-community/cli-tools': 12.3.6 + chalk: 4.1.2 + execa: 5.1.1 + fast-xml-parser: 4.3.6 + glob: 7.2.3 + ora: 5.4.1 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-plugin-metro@12.3.6: + resolution: {integrity: sha512-3jxSBQt4fkS+KtHCPSyB5auIT+KKIrPCv9Dk14FbvOaEh9erUWEm/5PZWmtboW1z7CYeNbFMeXm9fM2xwtVOpg==} + dev: false + + /@react-native-community/cli-server-api@12.3.6: + resolution: {integrity: sha512-80NIMzo8b2W+PL0Jd7NjiJW9mgaT8Y8wsIT/lh6mAvYH7mK0ecDJUYUTAAv79Tbo1iCGPAr3T295DlVtS8s4yQ==} + dependencies: + '@react-native-community/cli-debugger-ui': 12.3.6 + '@react-native-community/cli-tools': 12.3.6 + compression: 1.7.4 + connect: 3.7.0 + errorhandler: 1.5.1 + nocache: 3.0.4 + pretty-format: 26.6.2 + serve-static: 1.15.0 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@react-native-community/cli-tools@12.3.6: + resolution: {integrity: sha512-FPEvZn19UTMMXUp/piwKZSh8cMEfO8G3KDtOwo53O347GTcwNrKjgZGtLSPELBX2gr+YlzEft3CoRv2Qmo83fQ==} + dependencies: + appdirsjs: 1.2.7 + chalk: 4.1.2 + find-up: 5.0.0 + mime: 2.6.0 + node-fetch: 2.7.0 + open: 6.4.0 + ora: 5.4.1 + semver: 7.6.0 + shell-quote: 1.8.1 + sudo-prompt: 9.2.1 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-types@12.3.6: + resolution: {integrity: sha512-xPqTgcUtZowQ8WKOkI9TLGBwH2bGggOC4d2FFaIRST3gTcjrEeGRNeR5aXCzJFIgItIft8sd7p2oKEdy90+01Q==} + dependencies: + joi: 17.12.3 + dev: false + + /@react-native-community/cli@12.3.6: + resolution: {integrity: sha512-647OSi6xBb8FbwFqX9zsJxOzu685AWtrOUWHfOkbKD+5LOpGORw+GQo0F9rWZnB68rLQyfKUZWJeaD00pGv5fw==} + engines: {node: '>=18'} + hasBin: true + dependencies: + '@react-native-community/cli-clean': 12.3.6 + '@react-native-community/cli-config': 12.3.6 + '@react-native-community/cli-debugger-ui': 12.3.6 + '@react-native-community/cli-doctor': 12.3.6 + '@react-native-community/cli-hermes': 12.3.6 + '@react-native-community/cli-plugin-metro': 12.3.6 + '@react-native-community/cli-server-api': 12.3.6 + '@react-native-community/cli-tools': 12.3.6 + '@react-native-community/cli-types': 12.3.6 + chalk: 4.1.2 + commander: 9.5.0 + deepmerge: 4.3.1 + execa: 5.1.1 + find-up: 4.1.0 + fs-extra: 8.1.0 + graceful-fs: 4.2.11 + prompts: 2.4.2 + semver: 7.6.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@react-native/assets-registry@0.73.1: + resolution: {integrity: sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg==} + engines: {node: '>=18'} + dev: false + + /@react-native/babel-plugin-codegen@0.73.4(@babel/preset-env@7.24.4): + resolution: {integrity: sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==} + engines: {node: '>=18'} + dependencies: + '@react-native/codegen': 0.73.3(@babel/preset-env@7.24.4) + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color dev: false - /@radix-ui/react-toast@1.1.5(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw==} + /@react-native/babel-preset@0.73.21(@babel/core@7.24.4)(@babel/preset-env@7.24.4): + resolution: {integrity: sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==} + engines: {node: '>=18'} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.71)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.71)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.71)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.71)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.71)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.71 - '@types/react-dom': 18.2.22 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@babel/core': '*' + dependencies: + '@babel/core': 7.24.4 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.24.4) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-export-default-from': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.24.4) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-export-default-from': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.4) + '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4) + '@babel/template': 7.24.0 + '@react-native/babel-plugin-codegen': 0.73.4(@babel/preset-env@7.24.4) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.24.4) + react-refresh: 0.14.0 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.71)(react@18.2.0): - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + /@react-native/codegen@0.73.3(@babel/preset-env@7.24.4): + resolution: {integrity: sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==} + engines: {node: '>=18'} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@babel/preset-env': ^7.1.6 dependencies: - '@babel/runtime': 7.24.1 - '@types/react': 18.2.71 - react: 18.2.0 + '@babel/parser': 7.24.4 + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + flow-parser: 0.206.0 + glob: 7.2.3 + invariant: 2.2.4 + jscodeshift: 0.14.0(@babel/preset-env@7.24.4) + mkdirp: 0.5.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.71)(react@18.2.0): - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + /@react-native/community-cli-plugin@0.73.17(@babel/core@7.24.4)(@babel/preset-env@7.24.4): + resolution: {integrity: sha512-F3PXZkcHg+1ARIr6FRQCQiB7ZAA+MQXGmq051metRscoLvgYJwj7dgC8pvgy0kexzUkHu5BNKrZeySzUft3xuQ==} + engines: {node: '>=18'} dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.71)(react@18.2.0) - '@types/react': 18.2.71 - react: 18.2.0 + '@react-native-community/cli-server-api': 12.3.6 + '@react-native-community/cli-tools': 12.3.6 + '@react-native/dev-middleware': 0.73.8 + '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.24.4)(@babel/preset-env@7.24.4) + chalk: 4.1.2 + execa: 5.1.1 + metro: 0.80.8 + metro-config: 0.80.8 + metro-core: 0.80.8 + node-fetch: 2.7.0 + readline: 1.3.0 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.71)(react@18.2.0): - resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + /@react-native/debugger-frontend@0.73.3: + resolution: {integrity: sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw==} + engines: {node: '>=18'} + dev: false + + /@react-native/dev-middleware@0.73.8: + resolution: {integrity: sha512-oph4NamCIxkMfUL/fYtSsE+JbGOnrlawfQ0kKtDQ5xbOjPKotKoXqrs1eGwozNKv7FfQ393stk1by9a6DyASSg==} + engines: {node: '>=18'} dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.71)(react@18.2.0) - '@types/react': 18.2.71 - react: 18.2.0 + '@isaacs/ttlcache': 1.4.1 + '@react-native/debugger-frontend': 0.73.3 + chrome-launcher: 0.15.2 + chromium-edge-launcher: 1.0.0 + connect: 3.7.0 + debug: 2.6.9 + node-fetch: 2.7.0 + open: 7.4.2 + serve-static: 1.15.0 + temp-dir: 2.0.0 + ws: 6.2.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.71)(react@18.2.0): - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + /@react-native/gradle-plugin@0.73.4: + resolution: {integrity: sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg==} + engines: {node: '>=18'} + dev: false + + /@react-native/js-polyfills@0.73.1: + resolution: {integrity: sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g==} + engines: {node: '>=18'} + dev: false + + /@react-native/metro-babel-transformer@0.73.15(@babel/core@7.24.4)(@babel/preset-env@7.24.4): + resolution: {integrity: sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==} + engines: {node: '>=18'} peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@babel/core': '*' dependencies: - '@babel/runtime': 7.24.1 - '@types/react': 18.2.71 - react: 18.2.0 + '@babel/core': 7.24.4 + '@react-native/babel-preset': 0.73.21(@babel/core@7.24.4)(@babel/preset-env@7.24.4) + hermes-parser: 0.15.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color dev: false - /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + /@react-native/normalize-colors@0.73.2: + resolution: {integrity: sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==} + dev: false + + /@react-native/virtualized-lists@0.73.4(react-native@0.73.6): + resolution: {integrity: sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog==} + engines: {node: '>=18'} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + react-native: '*' dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.71)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.71 - '@types/react-dom': 18.2.22 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + invariant: 2.2.4 + nullthrows: 1.1.1 + react-native: 0.73.6(@babel/core@7.24.4)(@babel/preset-env@7.24.4)(react@18.2.0) dev: false /@rollup/pluginutils@5.1.0: @@ -2274,112 +4524,128 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/rollup-android-arm-eabi@4.13.0: - resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==} + /@rollup/rollup-android-arm-eabi@4.14.0: + resolution: {integrity: sha512-jwXtxYbRt1V+CdQSy6Z+uZti7JF5irRKF8hlKfEnF/xJpcNGuuiZMBvuoYM+x9sr9iWGnzrlM0+9hvQ1kgkf1w==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.13.0: - resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==} + /@rollup/rollup-android-arm64@4.14.0: + resolution: {integrity: sha512-fI9nduZhCccjzlsA/OuAwtFGWocxA4gqXGTLvOyiF8d+8o0fZUeSztixkYjcGq1fGZY3Tkq4yRvHPFxU+jdZ9Q==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.13.0: - resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==} + /@rollup/rollup-darwin-arm64@4.14.0: + resolution: {integrity: sha512-BcnSPRM76/cD2gQC+rQNGBN6GStBs2pl/FpweW8JYuz5J/IEa0Fr4AtrPv766DB/6b2MZ/AfSIOSGw3nEIP8SA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.13.0: - resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==} + /@rollup/rollup-darwin-x64@4.14.0: + resolution: {integrity: sha512-LDyFB9GRolGN7XI6955aFeI3wCdCUszFWumWU0deHA8VpR3nWRrjG6GtGjBrQxQKFevnUTHKCfPR4IvrW3kCgQ==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.13.0: - resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==} + /@rollup/rollup-linux-arm-gnueabihf@4.14.0: + resolution: {integrity: sha512-ygrGVhQP47mRh0AAD0zl6QqCbNsf0eTo+vgwkY6LunBcg0f2Jv365GXlDUECIyoXp1kKwL5WW6rsO429DBY/bA==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.13.0: - resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==} + /@rollup/rollup-linux-arm64-gnu@4.14.0: + resolution: {integrity: sha512-x+uJ6MAYRlHGe9wi4HQjxpaKHPM3d3JjqqCkeC5gpnnI6OWovLdXTpfa8trjxPLnWKyBsSi5kne+146GAxFt4A==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.13.0: - resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==} + /@rollup/rollup-linux-arm64-musl@4.14.0: + resolution: {integrity: sha512-nrRw8ZTQKg6+Lttwqo6a2VxR9tOroa2m91XbdQ2sUUzHoedXlsyvY1fN4xWdqz8PKmf4orDwejxXHjh7YBGUCA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.13.0: - resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==} + /@rollup/rollup-linux-powerpc64le-gnu@4.14.0: + resolution: {integrity: sha512-xV0d5jDb4aFu84XKr+lcUJ9y3qpIWhttO3Qev97z8DKLXR62LC3cXT/bMZXrjLF9X+P5oSmJTzAhqwUbY96PnA==} + cpu: [ppc64le] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.14.0: + resolution: {integrity: sha512-SDDhBQwZX6LPRoPYjAZWyL27LbcBo7WdBFWJi5PI9RPCzU8ijzkQn7tt8NXiXRiFMJCVpkuMkBf4OxSxVMizAw==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.13.0: - resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==} + /@rollup/rollup-linux-s390x-gnu@4.14.0: + resolution: {integrity: sha512-RxB/qez8zIDshNJDufYlTT0ZTVut5eCpAZ3bdXDU9yTxBzui3KhbGjROK2OYTTor7alM7XBhssgoO3CZ0XD3qA==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.14.0: + resolution: {integrity: sha512-C6y6z2eCNCfhZxT9u+jAM2Fup89ZjiG5pIzZIDycs1IwESviLxwkQcFRGLjnDrP+PT+v5i4YFvlcfAs+LnreXg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.13.0: - resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==} + /@rollup/rollup-linux-x64-musl@4.14.0: + resolution: {integrity: sha512-i0QwbHYfnOMYsBEyjxcwGu5SMIi9sImDVjDg087hpzXqhBSosxkE7gyIYFHgfFl4mr7RrXksIBZ4DoLoP4FhJg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.13.0: - resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==} + /@rollup/rollup-win32-arm64-msvc@4.14.0: + resolution: {integrity: sha512-Fq52EYb0riNHLBTAcL0cun+rRwyZ10S9vKzhGKKgeD+XbwunszSY0rVMco5KbOsTlwovP2rTOkiII/fQ4ih/zQ==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.13.0: - resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==} + /@rollup/rollup-win32-ia32-msvc@4.14.0: + resolution: {integrity: sha512-e/PBHxPdJ00O9p5Ui43+vixSgVf4NlLsmV6QneGERJ3lnjIua/kim6PRFe3iDueT1rQcgSkYP8ZBBXa/h4iPvw==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.13.0: - resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==} + /@rollup/rollup-win32-x64-msvc@4.14.0: + resolution: {integrity: sha512-aGg7iToJjdklmxlUlJh/PaPNa4PmqHfyRMLunbL3eaMO0gp656+q1zOKkpJ/CVe9CryJv6tAN1HDoR8cNGzkag==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /@rushstack/node-core-library@3.62.0(@types/node@20.12.4): - resolution: {integrity: sha512-88aJn2h8UpSvdwuDXBv1/v1heM6GnBf3RjEy6ZPP7UnzHNCqOHA2Ut+ScYUbXcqIdfew9JlTAe3g+cnX9xQ/Aw==} + /@rushstack/node-core-library@4.0.2(@types/node@20.12.4): + resolution: {integrity: sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: @@ -2387,7 +4653,6 @@ packages: optional: true dependencies: '@types/node': 20.12.4 - colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 @@ -2396,26 +4661,78 @@ packages: z-schema: 5.0.5 dev: true - /@rushstack/rig-package@0.5.1: - resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==} + /@rushstack/rig-package@0.5.2: + resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==} dependencies: resolve: 1.22.8 strip-json-comments: 3.1.1 dev: true - /@rushstack/ts-command-line@4.17.1: - resolution: {integrity: sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==} + /@rushstack/terminal@0.10.0(@types/node@20.12.4): + resolution: {integrity: sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@rushstack/node-core-library': 4.0.2(@types/node@20.12.4) + '@types/node': 20.12.4 + supports-color: 8.1.1 + dev: true + + /@rushstack/ts-command-line@4.19.1(@types/node@20.12.4): + resolution: {integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==} dependencies: + '@rushstack/terminal': 0.10.0(@types/node@20.12.4) '@types/argparse': 1.0.38 argparse: 1.0.10 - colors: 1.2.5 string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' dev: true + /@safe-global/safe-apps-provider@0.18.1(typescript@5.4.3): + resolution: {integrity: sha512-V4a05A3EgJcriqtDoJklDz1BOinWhC6P0hjUSxshA4KOZM7rGPCTto/usXs09zr1vvL28evl/NldSTv97j2bmg==} + dependencies: + '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.4.3) + events: 3.3.0 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@safe-global/safe-apps-sdk@8.1.0(typescript@5.4.3): + resolution: {integrity: sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w==} + dependencies: + '@safe-global/safe-gateway-typescript-sdk': 3.19.0 + viem: 1.21.4(typescript@5.4.3) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@safe-global/safe-gateway-typescript-sdk@3.19.0: + resolution: {integrity: sha512-TRlP05KY6t3wjLJ74FiirWlEt3xTclnUQM2YdYto1jx5G1o0meMnugIUZXhzm7Bs3rDEDNhz/aDf2KMSZtoCFg==} + engines: {node: '>=16'} + dev: false + /@scure/base@1.1.6: resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} dev: false + /@scure/bip32@1.3.2: + resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.6 + dev: false + /@scure/bip32@1.3.3: resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} dependencies: @@ -2424,6 +4741,13 @@ packages: '@scure/base': 1.1.6 dev: false + /@scure/bip39@1.2.1: + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + dependencies: + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.6 + dev: false + /@scure/bip39@1.2.2: resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} dependencies: @@ -2431,9 +4755,154 @@ packages: '@scure/base': 1.1.6 dev: false + /@sideway/address@4.1.5: + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: false + + /@sideway/formula@3.0.1: + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + dev: false + + /@sideway/pinpoint@2.0.0: + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + dev: false + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true + + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + dependencies: + type-detect: 4.0.8 + dev: false + + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + dependencies: + '@sinonjs/commons': 3.0.1 + dev: false + + /@socket.io/component-emitter@3.1.0: + resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} + dev: false + + /@stablelib/aead@1.0.1: + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} + dev: false + + /@stablelib/binary@1.0.1: + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} + dependencies: + '@stablelib/int': 1.0.1 + dev: false + + /@stablelib/bytes@1.0.1: + resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} + dev: false + + /@stablelib/chacha20poly1305@1.0.1: + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} + dependencies: + '@stablelib/aead': 1.0.1 + '@stablelib/binary': 1.0.1 + '@stablelib/chacha': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/poly1305': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/chacha@1.0.1: + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/constant-time@1.0.1: + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} + dev: false + + /@stablelib/ed25519@1.0.3: + resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} + dependencies: + '@stablelib/random': 1.0.2 + '@stablelib/sha512': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/hash@1.0.1: + resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} + dev: false + + /@stablelib/hkdf@1.0.1: + resolution: {integrity: sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==} + dependencies: + '@stablelib/hash': 1.0.1 + '@stablelib/hmac': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/hmac@1.0.1: + resolution: {integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==} + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/int@1.0.1: + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} + dev: false + + /@stablelib/keyagreement@1.0.1: + resolution: {integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==} + dependencies: + '@stablelib/bytes': 1.0.1 + dev: false + + /@stablelib/poly1305@1.0.1: + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/random@1.0.2: + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/sha256@1.0.1: + resolution: {integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/sha512@1.0.1: + resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/wipe@1.0.1: + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} + dev: false + + /@stablelib/x25519@1.0.3: + resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} + dependencies: + '@stablelib/keyagreement': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/wipe': 1.0.1 + dev: false /@tanstack/query-core@5.28.8: resolution: {integrity: sha512-cx64XHeB0kvKxFt22ibvegPeOxnaWVFUbAuhXoIrb7+XePEexHWoB9Kq5n9qroNPkRwQZwgFAP9HNbQz5ohoIg==} @@ -2461,8 +4930,8 @@ packages: '@tanstack/query-core': 5.28.8 react: 18.2.0 - /@tsconfig/node10@1.0.10: - resolution: {integrity: sha512-PiaIWIoPvO6qm6t114ropMCagj6YAF24j9OkCA2mJDXFnlionEwhsBCJ8yek4aib575BI3OkART/90WsgHgLWw==} + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} dev: true /@tsconfig/node12@1.0.11: @@ -2484,7 +4953,7 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 @@ -2500,7 +4969,7 @@ packages: /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 dev: true @@ -2513,7 +4982,24 @@ packages: /@types/bn.js@5.1.5: resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} dependencies: - '@types/node': 20.11.30 + '@types/node': 20.12.4 + + /@types/chrome@0.0.136: + resolution: {integrity: sha512-XDEiRhLkMd+SB7Iw3ZUIj/fov3wLd4HyTdLltVszkgl1dBfc3Rb7oPMVZ2Mz2TLqnF7Ow+StbR8E7r9lqpb4DA==} + dependencies: + '@types/filesystem': 0.0.36 + '@types/har-format': 1.2.15 + dev: false + + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: false + + /@types/dom-screen-wake-lock@1.0.3: + resolution: {integrity: sha512-3Iten7X3Zgwvk6kh6/NRdwN7WbZ760YgFCsF5AxDifltUQzW1RaW+WRmcVtgwFzLjaNu64H+0MPJ13yRa8g3Dw==} + dev: false /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -2533,9 +5019,34 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true + /@types/filesystem@0.0.36: + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} + dependencies: + '@types/filewriter': 0.0.33 + dev: false + + /@types/filewriter@0.0.33: + resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} + dev: false + + /@types/har-format@1.2.15: + resolution: {integrity: sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==} + dev: false + /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: true + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + dev: false + + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + dev: false /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -2555,6 +5066,10 @@ packages: resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} dev: true + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: false + /@types/node@10.12.18: resolution: {integrity: sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==} @@ -2565,21 +5080,19 @@ packages: /@types/node@18.15.13: resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} - /@types/node@20.11.30: - resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} - dependencies: - undici-types: 5.26.5 - /@types/node@20.12.4: resolution: {integrity: sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==} dependencies: undici-types: 5.26.5 - dev: true /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: false + /@types/prop-types@15.7.12: resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -2598,19 +5111,49 @@ packages: /@types/scheduler@0.23.0: resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} + /@types/secp256k1@4.0.6: + resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} + dependencies: + '@types/node': 20.12.4 + dev: false + /@types/semver@7.5.8: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: false + + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + dev: false + + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: false + + /@types/yargs@15.0.19: + resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: false + + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: false + /@vitejs/plugin-react@4.2.1(vite@5.2.6): resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 dependencies: - '@babel/core': 7.24.3 - '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.3) + '@babel/core': 7.24.4 + '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.4) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 vite: 5.2.6(@types/node@20.12.4) @@ -2630,11 +5173,11 @@ packages: istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.4 istanbul-reports: 3.1.7 - magic-string: 0.30.8 + magic-string: 0.30.9 magicast: 0.3.3 picocolors: 1.0.0 std-env: 3.7.0 - strip-literal: 2.0.0 + strip-literal: 2.1.0 test-exclude: 6.0.0 v8-to-istanbul: 9.2.0 vitest: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0) @@ -2661,7 +5204,7 @@ packages: /@vitest/snapshot@1.4.0: resolution: {integrity: sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==} dependencies: - magic-string: 0.30.8 + magic-string: 0.30.9 pathe: 1.1.2 pretty-format: 29.7.0 dev: true @@ -2696,50 +5239,641 @@ packages: /@volar/typescript@1.11.1: resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} dependencies: - '@volar/language-core': 1.11.1 - path-browserify: 1.0.1 - dev: true + '@volar/language-core': 1.11.1 + path-browserify: 1.0.1 + dev: true + + /@vue/compiler-core@3.4.21: + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} + dependencies: + '@babel/parser': 7.24.4 + '@vue/shared': 3.4.21 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + dev: true + + /@vue/compiler-dom@3.4.21: + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} + dependencies: + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/language-core@1.8.27(typescript@5.4.3): + resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@volar/language-core': 1.11.1 + '@volar/source-map': 1.11.1 + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 + computeds: 0.0.1 + minimatch: 9.0.4 + muggle-string: 0.3.1 + path-browserify: 1.0.1 + typescript: 5.4.3 + vue-template-compiler: 2.7.16 + dev: true + + /@vue/shared@3.4.21: + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + dev: true + + /@wagmi/connectors@4.1.24(@wagmi/core@2.6.15)(react-native@0.73.6)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9): + resolution: {integrity: sha512-gFziI7E3m+ESJmEnsvlm/eMlboKwdfGqOOQIU068MoZ+ZcNxoLZe4gu8CqnrmG7ksdPtwG38prsMl96opZexIA==} + peerDependencies: + '@wagmi/core': 2.6.15 + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@coinbase/wallet-sdk': 3.9.1 + '@metamask/sdk': 0.14.3(react-native@0.73.6)(react@18.2.0) + '@safe-global/safe-apps-provider': 0.18.1(typescript@5.4.3) + '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.4.3) + '@wagmi/core': 2.6.15(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) + '@walletconnect/ethereum-provider': 2.11.2(react@18.2.0) + '@walletconnect/modal': 2.6.2(react@18.2.0) + typescript: 5.4.3 + viem: 2.9.9(typescript@5.4.3) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - react + - react-dom + - react-native + - rollup + - supports-color + - uWebSockets.js + - utf-8-validate + - zod + dev: false + + /@wagmi/core@2.6.15(react@18.2.0)(typescript@5.4.3)(viem@2.9.9): + resolution: {integrity: sha512-P3w7NIPBs6Pt3j8k5Tq9cVYjvUiyuEAk3WxZfUG5NyaveLqs3b6IC6Frl63zriSV3Bj0tdJJXhEVoIIeIUqMCA==} + peerDependencies: + '@tanstack/query-core': '>=5.0.0' + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + '@tanstack/query-core': + optional: true + typescript: + optional: true + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.5(typescript@5.4.3) + typescript: 5.4.3 + viem: 2.9.9(typescript@5.4.3) + zustand: 4.4.1(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - bufferutil + - immer + - react + - utf-8-validate + - zod + dev: false + + /@walletconnect/core@2.11.2: + resolution: {integrity: sha512-bB4SiXX8hX3/hyBfVPC5gwZCXCl+OPj+/EDVM71iAO3TDsh78KPbrVAbDnnsbHzZVHlsMohtXX3j5XVsheN3+g==} + dependencies: + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@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 + isomorphic-unfetch: 3.1.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + + /@walletconnect/environment@1.0.1: + resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/ethereum-provider@2.11.2(react@18.2.0): + resolution: {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(react@18.2.0) + '@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 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - react + - uWebSockets.js + - utf-8-validate + dev: false + + /@walletconnect/events@1.0.1: + resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/heartbeat@1.2.1: + resolution: {integrity: sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-http-connection@1.0.7: + resolution: {integrity: sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + cross-fetch: 3.1.8 + tslib: 1.14.1 + transitivePeerDependencies: + - encoding + dev: false + + /@walletconnect/jsonrpc-provider@1.0.13: + resolution: {integrity: sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-types@1.0.3: + resolution: {integrity: sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==} + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-utils@1.0.8: + resolution: {integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==} + dependencies: + '@walletconnect/environment': 1.0.1 + '@walletconnect/jsonrpc-types': 1.0.3 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-ws-connection@1.0.14: + resolution: {integrity: sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@walletconnect/keyvaluestorage@1.1.1: + resolution: {integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==} + peerDependencies: + '@react-native-async-storage/async-storage': 1.x + peerDependenciesMeta: + '@react-native-async-storage/async-storage': + optional: true + dependencies: + '@walletconnect/safe-json': 1.0.2 + idb-keyval: 6.2.1 + unstorage: 1.10.2(idb-keyval@6.2.1) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + dev: false + + /@walletconnect/logger@2.0.1: + resolution: {integrity: sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ==} + dependencies: + pino: 7.11.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/modal-core@2.6.2(react@18.2.0): + resolution: {integrity: sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA==} + dependencies: + valtio: 1.11.2(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@walletconnect/modal-ui@2.6.2(react@18.2.0): + resolution: {integrity: sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA==} + dependencies: + '@walletconnect/modal-core': 2.6.2(react@18.2.0) + lit: 2.8.0 + motion: 10.16.2 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@walletconnect/modal@2.6.2(react@18.2.0): + resolution: {integrity: sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA==} + dependencies: + '@walletconnect/modal-core': 2.6.2(react@18.2.0) + '@walletconnect/modal-ui': 2.6.2(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@walletconnect/relay-api@1.0.9: + resolution: {integrity: sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg==} + dependencies: + '@walletconnect/jsonrpc-types': 1.0.3 + tslib: 1.14.1 + dev: false + + /@walletconnect/relay-auth@1.0.4: + resolution: {integrity: sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==} + dependencies: + '@stablelib/ed25519': 1.0.3 + '@stablelib/random': 1.0.2 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + uint8arrays: 3.1.1 + dev: false + + /@walletconnect/safe-json@1.0.2: + resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/sign-client@2.11.2: + resolution: {integrity: sha512-MfBcuSz2GmMH+P7MrCP46mVE5qhP0ZyWA0FyIH6/WuxQ6G+MgKsGfaITqakpRPsykWOJq8tXMs3XvUPDU413OQ==} + dependencies: + '@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.2 + '@walletconnect/utils': 2.11.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + + /@walletconnect/time@1.0.2: + resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/types@2.11.2: + resolution: {integrity: sha512-p632MFB+lJbip2cvtXPBQslpUdiw1sDtQ5y855bOlAGquay+6fZ4h1DcDePeKQDQM3P77ax2a9aNPZxV6y/h1Q==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.0.1 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + dev: false + + /@walletconnect/universal-provider@2.11.2: + resolution: {integrity: sha512-cNtIn5AVoDxKAJ4PmB8m5adnf5mYQMUamEUPKMVvOPscfGtIMQEh9peKsh2AN5xcRVDbgluC01Id545evFyymw==} + 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/logger': 2.0.1 + '@walletconnect/sign-client': 2.11.2 + '@walletconnect/types': 2.11.2 + '@walletconnect/utils': 2.11.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + + /@walletconnect/utils@2.11.2: + resolution: {integrity: sha512-LyfdmrnZY6dWqlF4eDrx5jpUwsB2bEPjoqR5Z6rXPiHJKUOdJt7az+mNOn5KTSOlRpd1DmozrBrWr+G9fFLYVw==} + 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.9 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.11.2 + '@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.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + dev: false + + /@walletconnect/window-getters@1.0.1: + resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/window-metadata@1.0.1: + resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + dependencies: + '@walletconnect/window-getters': 1.0.1 + tslib: 1.14.1 + dev: false + + /@web3modal/common@4.1.5: + resolution: {integrity: sha512-VDvpUJt9lJz7p6zElZUSRkcbXBDVbqb5OWKvzvtIs+I7mvrrGrjb3q+h0HV1ssWwgl0WTuE9mR4r9BLlrG4osw==} + dependencies: + dayjs: 1.11.10 + dev: false + + /@web3modal/core@4.1.5(react@18.2.0): + resolution: {integrity: sha512-s+froXmRWjk6O+Ccq3/ksHz2WHc9/QtV8HBxxWE1Y+EXP8NkgujvT2ig9+asHIBxHkESCIUWE+llNBoim9C2KQ==} + dependencies: + '@web3modal/common': 4.1.5 + '@web3modal/wallet': 4.1.5 + valtio: 1.11.2(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@web3modal/polyfills@4.1.5: + resolution: {integrity: sha512-74CGHzgNbB4BgF3Nr/YMhc3y6E3k08/o+VxOSvOlQvfK/nxrKWHcblOVh8A2+kFFP85HqAIy8OSmx8aV6j6vtA==} + dependencies: + buffer: 6.0.3 + dev: false + + /@web3modal/scaffold-react@4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0): + resolution: {integrity: sha512-bOEeh/xd8lYei82cqVYNvO+Ee2GbgqpMw74ih8uBPsQzCWOl1o983K33YFBN0nFzR/Q2gLHxccuRcoP698mhZA==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@web3modal/scaffold': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) + react: 18.2.0 + transitivePeerDependencies: + - '@types/react' + - '@web3modal/siwe' + - '@web3modal/wallet' + dev: false + + /@web3modal/scaffold-utils@4.1.5(react@18.2.0): + resolution: {integrity: sha512-fEptPNm5cgQgIYNDdb0IEnxtK5l45AKKKKQ+v4dO4MtIatduxWdkBAN6/FAiysxHIXKBx4zxpdcijgDr38zteA==} + dependencies: + '@web3modal/core': 4.1.5(react@18.2.0) + '@web3modal/polyfills': 4.1.5 + valtio: 1.11.2(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@web3modal/scaffold-vue@4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0): + resolution: {integrity: sha512-rb7YD4GABlG4Wa1Kk2DJYIXpPjfmKqa/hdF5zqBi+E8S2M//od6smTaz6matZPV5OQ28kxvufdNoVBfNagbh4A==} + peerDependencies: + vue: '>=3' + peerDependenciesMeta: + vue: + optional: true + dependencies: + '@web3modal/scaffold': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@web3modal/siwe' + - '@web3modal/wallet' + - react + dev: false - /@vue/compiler-core@3.4.21: - resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} + /@web3modal/scaffold@4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0): + resolution: {integrity: sha512-Sbbh51WkleMzfo3spWF11yrq/JKyf0e7tE36fL2OGVbVRBVjszZ+CHJjrUJhMw1UgySnkLOE2IL1PQlKNjESyQ==} + peerDependencies: + '@web3modal/siwe': 4.1.5 + '@web3modal/wallet': 4.1.5 + dependencies: + '@web3modal/common': 4.1.5 + '@web3modal/core': 4.1.5(react@18.2.0) + '@web3modal/siwe': 4.1.5(react@18.2.0) + '@web3modal/ui': 4.1.5 + '@web3modal/wallet': 4.1.5 + lit: 3.1.0 + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@web3modal/siwe@4.1.5(react@18.2.0): + resolution: {integrity: sha512-TiE4p7EgGuXHviNVtJVMUg0cpiU9EVzF/qBgriPhBl/uUlSsv/ekeR6u6vkhlB5PuBUC/LdysHBJPuenhF7QQw==} dependencies: - '@babel/parser': 7.24.1 - '@vue/shared': 3.4.21 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.0 - dev: true + '@web3modal/core': 4.1.5(react@18.2.0) + '@web3modal/scaffold-utils': 4.1.5(react@18.2.0) + lit: 3.1.0 + valtio: 1.11.2(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + dev: false - /@vue/compiler-dom@3.4.21: - resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} + /@web3modal/ui@4.1.5: + resolution: {integrity: sha512-aeSwOfnhS9zcJRj0cmelOWW3xYKN94JY1UwPDQCW0e12Abd2iXnxe1G8cO+gqJSai5SxP3ZWs+b2F4bRQ2ubnA==} dependencies: - '@vue/compiler-core': 3.4.21 - '@vue/shared': 3.4.21 - dev: true + lit: 3.1.0 + qrcode: 1.5.3 + dev: false - /@vue/language-core@1.8.27(typescript@5.4.3): - resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} + /@web3modal/wagmi@4.1.5(@wagmi/connectors@4.1.24)(@wagmi/core@2.6.15)(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0)(viem@2.9.9): + resolution: {integrity: sha512-1h1wo6tJCwsZs1D7ymnrHbXbkum3k3zxcr7u6HctP1Ur2BFr7+ndALR/WlnEenBJTu5LILd9iqaf9QvFOSOyvg==} peerDependencies: - typescript: '*' + '@wagmi/connectors': '>=4.0.0' + '@wagmi/core': '>=2.0.0' + '@web3modal/siwe': 4.1.5 + react: '>=17' + react-dom: '>=17' + viem: '>=2.0.0' + vue: '>=3' peerDependenciesMeta: - typescript: + react: + optional: true + react-dom: + optional: true + vue: optional: true dependencies: - '@volar/language-core': 1.11.1 - '@volar/source-map': 1.11.1 - '@vue/compiler-dom': 3.4.21 - '@vue/shared': 3.4.21 - computeds: 0.0.1 - minimatch: 9.0.4 - muggle-string: 0.3.1 - path-browserify: 1.0.1 - typescript: 5.4.3 - vue-template-compiler: 2.7.16 - dev: true + '@wagmi/connectors': 4.1.24(@wagmi/core@2.6.15)(react-native@0.73.6)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) + '@wagmi/core': 2.6.15(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) + '@web3modal/polyfills': 4.1.5 + '@web3modal/scaffold': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) + '@web3modal/scaffold-react': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) + '@web3modal/scaffold-utils': 4.1.5(react@18.2.0) + '@web3modal/scaffold-vue': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) + '@web3modal/siwe': 4.1.5(react@18.2.0) + react: 18.2.0 + viem: 2.9.9(typescript@5.4.3) + transitivePeerDependencies: + - '@types/react' + - '@web3modal/wallet' + dev: false - /@vue/shared@3.4.21: - resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} - dev: true + /@web3modal/wallet@4.1.5: + resolution: {integrity: sha512-IuvesjuDloI/J5K8QDFZhx9WbgVNP3cV6Xjp/olxoVDmMfTlFQs0LbYpcmRxsU3O6EZCSjd2rcKld1Z39VhEuw==} + dependencies: + '@web3modal/polyfills': 4.1.5 + zod: 3.22.4 + dev: false /@webassemblyjs/ast@1.12.1: resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} @@ -2855,6 +5989,49 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true + /abitype@0.9.8(typescript@5.4.3): + resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.4.3 + dev: false + + /abitype@1.0.0(typescript@5.4.3): + resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.4.3 + dev: false + + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + /acorn-import-assertions@1.9.0(acorn@8.11.3): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: @@ -2872,13 +6049,12 @@ packages: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} dependencies: debug: 4.3.4 @@ -2903,6 +6079,10 @@ packages: uri-js: 4.4.1 dev: true + /anser@1.4.10: + resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} + dev: false + /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -2913,6 +6093,19 @@ packages: engines: {node: '>=14.16'} dev: true + /ansi-fragments@0.2.1: + resolution: {integrity: sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==} + dependencies: + colorette: 1.4.0 + slice-ansi: 2.1.0 + strip-ansi: 5.2.0 + dev: false + + /ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + dev: false + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2926,7 +6119,6 @@ packages: engines: {node: '>=4'} dependencies: color-convert: 1.9.3 - dev: true /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} @@ -2937,7 +6129,6 @@ packages: /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - dev: true /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} @@ -2954,6 +6145,10 @@ packages: normalize-path: 3.0.0 picomatch: 2.3.1 + /appdirsjs@1.2.7: + resolution: {integrity: sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==} + dev: false + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true @@ -2966,7 +6161,6 @@ packages: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 - dev: true /aria-hidden@1.2.4: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} @@ -2994,7 +6188,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: true @@ -3005,7 +6199,7 @@ packages: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 @@ -3017,10 +6211,36 @@ packages: engines: {node: '>=0.10.0'} dev: true + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: false + /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true + /ast-types@0.15.2: + resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.2 + dev: false + + /astral-regex@1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} + engines: {node: '>=4'} + dev: false + + /async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + dev: false + + /async-mutex@0.2.6: + resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} + dependencies: + tslib: 2.6.2 + dev: false + /async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: @@ -3029,6 +6249,11 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + /atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: false + /autoprefixer@10.4.19(postcss@8.4.38): resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} engines: {node: ^10 || ^12 || >=14} @@ -3037,7 +6262,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001600 + caniuse-lite: 1.0.30001606 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -3050,11 +6275,75 @@ packages: engines: {node: '>= 0.4'} dependencies: possible-typed-array-names: 1.0.0 - dev: true + + /babel-core@7.0.0-bridge.0(@babel/core@7.24.4): + resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + dev: false + + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.24.4 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + dev: false + + /babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.4): + resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.24.4 + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + core-js-compat: 3.36.1 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.4): + resolution: {integrity: sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.24.4): + resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} + dependencies: + '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.4) + transitivePeerDependencies: + - '@babel/core' + dev: false /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + /bech32@2.0.0: resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} @@ -3069,9 +6358,25 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: false + /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + /bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + dev: false + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -3095,20 +6400,50 @@ packages: wcwidth: 1.0.1 dev: true + /brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: false + /browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001600 - electron-to-chromium: 1.4.717 + caniuse-lite: 1.0.30001606 + electron-to-chromium: 1.4.728 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) - dev: true + + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: false /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.0 + dev: false /bundle-require@4.0.2(esbuild@0.18.20): resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} @@ -3129,6 +6464,11 @@ packages: esbuild: 0.19.12 load-tsconfig: 0.2.5 + /bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: false + /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -3143,7 +6483,30 @@ packages: function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - dev: true + + /caller-callsite@2.0.0: + resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} + engines: {node: '>=4'} + dependencies: + callsites: 2.0.0 + dev: false + + /caller-path@2.0.0: + resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==} + engines: {node: '>=4'} + dependencies: + caller-callsite: 2.0.0 + dev: false + + /callsites@2.0.0: + resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} + engines: {node: '>=4'} + dev: false + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: false /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} @@ -3162,11 +6525,14 @@ packages: /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - dev: true - /caniuse-lite@1.0.30001600: - resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==} - dev: true + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: false + + /caniuse-lite@1.0.30001606: + resolution: {integrity: sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg==} /chai@4.4.1: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} @@ -3188,7 +6554,6 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -3226,15 +6591,57 @@ packages: optionalDependencies: fsevents: 2.3.3 + /chrome-launcher@0.15.2: + resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} + engines: {node: '>=12.13.0'} + hasBin: true + dependencies: + '@types/node': 20.12.4 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + transitivePeerDependencies: + - supports-color + dev: false + /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: true + /chromium-edge-launcher@1.0.0: + resolution: {integrity: sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==} + dependencies: + '@types/node': 20.12.4 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + mkdirp: 1.0.4 + rimraf: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: false + /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - dev: true + + /citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + dependencies: + consola: 3.2.3 + dev: false + + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: false /cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} @@ -3243,6 +6650,11 @@ packages: restore-cursor: 4.0.0 dev: true + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: false + /cli-table@0.3.11: resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} engines: {node: '>= 0.2.0'} @@ -3257,13 +6669,21 @@ packages: string-width: 7.1.0 dev: true + /clipboardy@4.0.0: + resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} + engines: {node: '>=18'} + dependencies: + execa: 8.0.1 + is-wsl: 3.1.0 + is64bit: 2.0.0 + dev: false + /cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: true /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} @@ -3272,12 +6692,24 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true + + /clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + dev: false /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - dev: true + + /clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: false /clsx@2.1.0: resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} @@ -3288,7 +6720,6 @@ packages: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 - dev: true /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -3298,11 +6729,14 @@ packages: /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + dev: false + /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true @@ -3311,17 +6745,16 @@ packages: resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} engines: {node: '>=0.1.90'} - /colors@1.2.5: - resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} - engines: {node: '>=0.1.90'} - dev: true - /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 + /command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + dev: false + /commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} @@ -3329,7 +6762,6 @@ packages: /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} @@ -3340,10 +6772,36 @@ packages: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false + /compare-versions@6.1.0: resolution: {integrity: sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==} dev: true + /compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + /computeds@0.0.1: resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} dev: true @@ -3351,9 +6809,70 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + /connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + dev: false + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: false + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + + /cookie-es@1.1.0: + resolution: {integrity: sha512-L2rLOcK0wzWSfSDA33YR+PUHDG10a8px7rUHKWbGLP4YfbsMed2KFUw5fczvDPbT98DDe3LEzviswl810apTEw==} + dev: false + + /core-js-compat@3.36.1: + resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + dependencies: + browserslist: 4.23.0 + dev: false + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + + /cosmiconfig@5.2.1: + resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} + engines: {node: '>=4'} + dependencies: + import-fresh: 2.0.0 + is-directory: 0.3.1 + js-yaml: 3.14.1 + parse-json: 4.0.0 + dev: false + + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + + /crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -3366,6 +6885,14 @@ packages: transitivePeerDependencies: - encoding + /cross-fetch@4.0.0: + resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false + /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: @@ -3382,6 +6909,15 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /crossws@0.2.4: + resolution: {integrity: sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg==} + peerDependencies: + uWebSockets.js: '*' + peerDependenciesMeta: + uWebSockets.js: + optional: true + dev: false + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -3467,10 +7003,32 @@ packages: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} dev: true + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.24.4 + dev: false + + /dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + dev: false + /de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} dev: true + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -3491,7 +7049,6 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: true /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -3504,12 +7061,16 @@ packages: /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - dev: true /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: false + /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} @@ -3517,11 +7078,15 @@ packages: type-detect: 4.0.8 dev: true + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: false + /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - dev: true /define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} @@ -3530,7 +7095,11 @@ packages: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: true + + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: false /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} @@ -3541,15 +7110,56 @@ packages: object-keys: 1.1.1 dev: true + /defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + dev: false + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + /denodeify@1.2.1: + resolution: {integrity: sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==} + dev: false + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /deprecated-react-native-prop-types@5.0.0: + resolution: {integrity: sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ==} + engines: {node: '>=18'} + dependencies: + '@react-native/normalize-colors': 0.73.2 + invariant: 2.2.4 + prop-types: 15.8.1 + dev: false + + /destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + dev: false + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /detect-browser@5.3.0: + resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + dev: false + /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} dev: true + /detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + dev: false + /detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} dev: false @@ -3578,6 +7188,10 @@ packages: engines: {node: '>=0.3.1'} dev: true + /dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + dev: false + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -3599,12 +7213,44 @@ packages: engines: {node: '>=10'} dev: true + /duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + dev: false + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /electron-to-chromium@1.4.717: - resolution: {integrity: sha512-6Fmg8QkkumNOwuZ/5mIbMU9WI3H2fmn5ajcVya64I5Yr5CcNmO7vcLt0Y7c96DCiMO5/9G+4sI2r6eEvdg1F7A==} - dev: true + /eciesjs@0.3.18: + resolution: {integrity: sha512-RQhegEtLSyIiGJmFTZfvCTHER/fymipXFVx6OwSRYD6hOuy+6Kjpk0dGvIfP9kxn/smBpxQy71uxpGO406ITCw==} + dependencies: + '@types/secp256k1': 4.0.6 + futoin-hkdf: 1.5.3 + secp256k1: 5.0.0 + dev: false + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /electron-to-chromium@1.4.728: + resolution: {integrity: sha512-Ud1v7hJJYIqehlUJGqR6PF1Ek8l80zWwxA6nGxigBsGJ9f9M2fciHyrIiNMerSHSH3p+0/Ia7jIlnDkt41h5cw==} + + /elliptic@6.5.5: + resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false /emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} @@ -3616,6 +7262,40 @@ packages: /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + /encode-utf8@1.0.3: + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + dev: false + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: false + + /engine.io-client@6.5.3(bufferutil@4.0.8)(utf-8-validate@6.0.3): + resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-parser: 5.2.2 + ws: 8.11.0(bufferutil@4.0.8)(utf-8-validate@6.0.3) + xmlhttprequest-ssl: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /engine.io-parser@5.2.2: + resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==} + engines: {node: '>=10.0.0'} + dev: false + /enhanced-resolve@5.16.0: resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} engines: {node: '>=10.13.0'} @@ -3637,14 +7317,33 @@ packages: engines: {node: '>=0.12'} dev: true + /envinfo@7.11.1: + resolution: {integrity: sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==} + engines: {node: '>=4'} + hasBin: true + dev: false + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - dev: true - /es-abstract@1.23.2: - resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==} + /error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + dependencies: + stackframe: 1.3.4 + dev: false + + /errorhandler@1.5.1: + resolution: {integrity: sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==} + engines: {node: '>= 0.8'} + dependencies: + accepts: 1.3.8 + escape-html: 1.0.3 + dev: false + + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 @@ -3700,12 +7399,10 @@ packages: engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 - dev: true /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - dev: true /es-module-lexer@1.5.0: resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} @@ -3872,12 +7569,24 @@ packages: /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} - dev: true + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - dev: true + + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: false + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: false /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} @@ -3901,7 +7610,6 @@ packages: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - dev: true /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -3930,6 +7638,53 @@ packages: '@types/estree': 1.0.5 dev: true + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: false + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /eth-block-tracker@7.1.0: + resolution: {integrity: sha512-8YdplnuE1IK4xfqpf4iU7oBxnOYAc35934o083G8ao+8WM8QQtt/mVlAY6yIAdY1eMeLqg4Z//PZjJGmWGPMRg==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/eth-json-rpc-provider': 1.0.1 + '@metamask/safe-event-emitter': 3.1.1 + '@metamask/utils': 5.0.2 + json-rpc-random-id: 1.0.1 + pify: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /eth-json-rpc-filters@6.0.1: + resolution: {integrity: sha512-ITJTvqoCw6OVMLs7pI8f4gG92n/St6x80ACtHodeS+IXmO0w+t1T5OOzfSt7KLSMLRkVUoexV7tztLgDxg+iig==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/safe-event-emitter': 3.1.1 + async-mutex: 0.2.6 + eth-query: 2.1.2 + json-rpc-engine: 6.1.0 + pify: 5.0.0 + dev: false + + /eth-query@2.1.2: + resolution: {integrity: sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==} + dependencies: + json-rpc-random-id: 1.0.1 + xtend: 4.0.2 + dev: false + + /eth-rpc-errors@4.0.3: + resolution: {integrity: sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==} + dependencies: + fast-safe-stringify: 2.1.1 + dev: false + /ethereum-cryptography@2.1.3: resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} dependencies: @@ -3961,9 +7716,17 @@ packages: es5-ext: 0.10.64 dev: false + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false + + /eventemitter2@6.4.9: + resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} + dev: false + /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} @@ -3982,7 +7745,6 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true /execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} @@ -3997,7 +7759,6 @@ packages: onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 - dev: true /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} @@ -4009,6 +7770,13 @@ packages: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} dev: true + /extension-port-stream@2.1.1: + resolution: {integrity: sha512-qknp5o5rj2J9CRKfVB8KJr+uXQlrojNZzdESUPhKYLXf97TPcGf6qWWKmpsNNtUyOdzFhab1ON0jzouNxHHvow==} + engines: {node: '>=12.0.0'} + dependencies: + webextension-polyfill: 0.10.0 + dev: false + /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -4022,6 +7790,10 @@ packages: resolution: {integrity: sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==} engines: {node: ^10.17.0 || ^12.0.0 || >= 13.7.0} + /fast-deep-equal@2.0.1: + resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + dev: false + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -4041,25 +7813,86 @@ packages: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true + /fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + dev: false + + /fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + dev: false + + /fast-xml-parser@4.3.6: + resolution: {integrity: sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + /fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: false + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + /filter-obj@1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + dev: false + + /finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + dev: false + + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false + + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: false + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -4067,7 +7900,6 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true /find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} @@ -4076,11 +7908,19 @@ packages: pkg-dir: 4.2.0 dev: true + /flow-enums-runtime@0.0.6: + resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} + dev: false + + /flow-parser@0.206.0: + resolution: {integrity: sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w==} + engines: {node: '>=0.4.0'} + dev: false + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 - dev: true /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} @@ -4110,6 +7950,11 @@ packages: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -4126,7 +7971,6 @@ packages: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -4184,7 +8028,6 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} @@ -4192,7 +8035,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 functions-have-names: 1.2.3 dev: true @@ -4200,15 +8043,18 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true + /futoin-hkdf@1.5.3: + resolution: {integrity: sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ==} + engines: {node: '>=8'} + dev: false + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - dev: true /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - dev: true /get-east-asian-width@1.2.0: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} @@ -4228,22 +8074,23 @@ packages: has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 - dev: true /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} dev: false + /get-port-please@3.1.2: + resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} + dev: false + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - dev: true /get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - dev: true /get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} @@ -4301,7 +8148,6 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: true /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} @@ -4326,11 +8172,9 @@ packages: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.4 - dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} @@ -4362,6 +8206,23 @@ packages: resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + /h3@1.11.1: + resolution: {integrity: sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A==} + dependencies: + cookie-es: 1.1.0 + crossws: 0.2.4 + defu: 6.1.4 + destr: 2.0.3 + iron-webcrypto: 1.1.0 + ohash: 1.1.3 + radix3: 1.1.2 + ufo: 1.5.3 + uncrypto: 0.1.3 + unenv: 1.9.0 + transitivePeerDependencies: + - uWebSockets.js + dev: false + /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -4386,7 +8247,6 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -4396,37 +8256,84 @@ packages: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: es-define-property: 1.0.0 - dev: true /has-proto@1.0.3: resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} - dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - dev: true /has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: true + + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false /hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 - dev: true /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true dev: true + /hermes-estree@0.15.0: + resolution: {integrity: sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==} + dev: false + + /hermes-estree@0.20.1: + resolution: {integrity: sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==} + dev: false + + /hermes-parser@0.15.0: + resolution: {integrity: sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==} + dependencies: + hermes-estree: 0.15.0 + dev: false + + /hermes-parser@0.20.1: + resolution: {integrity: sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==} + dependencies: + hermes-estree: 0.20.1 + dev: false + + /hermes-profile-transformer@0.0.6: + resolution: {integrity: sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==} + engines: {node: '>=8'} + dependencies: + source-map: 0.7.4 + dev: false + + /hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + dev: false + + /hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -4442,21 +8349,43 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true + /html-parse-stringify@3.0.1: + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + dependencies: + void-elements: 3.1.0 + dev: false + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + /http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true + /http-shutdown@1.2.2: + resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: false + /https-proxy-agent@7.0.4: resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -4469,12 +8398,10 @@ packages: /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - dev: true /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - dev: true /husky@9.0.11: resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} @@ -4482,6 +8409,18 @@ packages: hasBin: true dev: true + /i18next-browser-languagedetector@7.2.1: + resolution: {integrity: sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw==} + dependencies: + '@babel/runtime': 7.24.4 + dev: false + + /i18next@22.5.1: + resolution: {integrity: sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==} + dependencies: + '@babel/runtime': 7.24.4 + dev: false + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4496,16 +8435,53 @@ packages: safer-buffer: 2.1.2 dev: true + /idb-keyval@6.2.1: + resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + dev: false + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} dev: true + /image-size@1.1.1: + resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} + engines: {node: '>=16.x'} + hasBin: true + dependencies: + queue: 6.0.2 + dev: false + + /import-fresh@2.0.0: + resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} + engines: {node: '>=4'} + dependencies: + caller-path: 2.0.0 + resolve-from: 3.0.0 + dev: false + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: false + /import-lazy@4.0.0: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} dev: true + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: false + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -4535,6 +8511,18 @@ packages: loose-envify: 1.4.0 dev: false + /iron-webcrypto@1.1.0: + resolution: {integrity: sha512-5vgYsCakNlaQub1orZK5QmNYhwYtcllTkZBp5sfIaCqY93Cf6l+v2rtE+E4TMbcfjxDMCdrO8wmp7+ZvhDECLA==} + dev: false + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: false + /is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} @@ -4545,7 +8533,6 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} @@ -4570,13 +8557,11 @@ packages: /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - dev: true /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.2 - dev: true /is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} @@ -4592,10 +8577,32 @@ packages: has-tostringtag: 1.0.2 dev: true + /is-directory@0.3.1: + resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==} + engines: {node: '>=0.10.0'} + dev: false + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: false + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: false + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + /is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: false + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -4612,12 +8619,32 @@ packages: get-east-asian-width: 1.2.0 dev: true + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: false + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: false + + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: false + /is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -4639,6 +8666,18 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: false + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: false + /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true @@ -4665,12 +8704,10 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -4698,7 +8735,11 @@ packages: engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.15 - dev: true + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: false /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} @@ -4711,6 +8752,36 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-wsl@1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + dev: false + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: false + + /is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + dependencies: + is-inside-container: 1.0.0 + dev: false + + /is64bit@2.0.0: + resolution: {integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==} + engines: {node: '>=18'} + dependencies: + system-architecture: 0.1.0 + dev: false + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: false + /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true @@ -4718,6 +8789,28 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: false + + /isomorphic-unfetch@3.1.0: + resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} + dependencies: + node-fetch: 2.7.0 + unfetch: 4.2.0 + transitivePeerDependencies: + - encoding + dev: false + + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: false + /istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -4759,6 +8852,71 @@ packages: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.12.4 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: false + + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: false + + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.24.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: false + + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.12.4 + jest-util: 29.7.0 + dev: false + + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.12.4 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: false + + /jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + dev: false + /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -4768,15 +8926,34 @@ packages: supports-color: 8.1.1 dev: true + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@types/node': 20.12.4 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: false + /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true - dev: true /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true + /joi@17.12.3: + resolution: {integrity: sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g==} + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + dev: false + /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -4784,8 +8961,8 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - /js-tokens@8.0.3: - resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} + /js-tokens@9.0.0: + resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} dev: true /js-yaml@3.14.1: @@ -4794,7 +8971,44 @@ packages: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true + + /jsc-android@250231.0.0: + resolution: {integrity: sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==} + dev: false + + /jsc-safe-url@0.2.4: + resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} + dev: false + + /jscodeshift@0.14.0(@babel/preset-env@7.24.4): + resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} + hasBin: true + peerDependencies: + '@babel/preset-env': ^7.1.6 + dependencies: + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + '@babel/preset-flow': 7.24.1(@babel/core@7.24.4) + '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/register': 7.23.7(@babel/core@7.24.4) + babel-core: 7.0.0-bridge.0(@babel/core@7.24.4) + chalk: 4.1.2 + flow-parser: 0.206.0 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + neo-async: 2.6.2 + node-dir: 0.1.17 + recast: 0.21.5 + temp: 0.8.4 + write-file-atomic: 2.4.3 + transitivePeerDependencies: + - supports-color + dev: false /jsdom@24.0.0: resolution: {integrity: sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==} @@ -4832,19 +9046,47 @@ packages: - utf-8-validate dev: true + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: false + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - dev: true + + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: false /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true /json-rpc-2.0@1.7.0: resolution: {integrity: sha512-asnLgC1qD5ytP+fvBP8uL0rvj+l8P6iYICbzZ8dVxCpESffVjzA7KkYkbKCIbavs7cllwH1ZUaNtJwphdeRqpg==} + /json-rpc-engine@6.1.0: + resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + eth-rpc-errors: 4.0.3 + dev: false + + /json-rpc-middleware-stream@4.2.3: + resolution: {integrity: sha512-4iFb0yffm5vo3eFKDbQgke9o17XBcLQ2c3sONrXSbcOLzP8LTojqo8hRGVgtJShhm5q4ZDSNq039fAx9o65E1w==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/safe-event-emitter': 3.1.1 + json-rpc-engine: 6.1.0 + readable-stream: 2.3.8 + dev: false + + /json-rpc-random-id@1.0.1: + resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} + dev: false + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true @@ -4853,22 +9095,37 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - dev: true /jsonc-parser@3.2.1: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} - dev: true /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 - dev: true + + /keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.0 + readable-stream: 3.6.2 + dev: false + + /keyvaluestorage-interface@1.0.0: + resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} + dev: false /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - dev: true + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: false /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} @@ -4879,6 +9136,20 @@ packages: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} dev: true + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: false + + /lighthouse-logger@1.4.2: + resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + dependencies: + debug: 2.6.9 + marky: 1.2.5 + transitivePeerDependencies: + - supports-color + dev: false + /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -4896,7 +9167,6 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /lint-staged@15.2.2: resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==} @@ -4917,6 +9187,32 @@ packages: - supports-color dev: true + /listhen@1.7.2: + resolution: {integrity: sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g==} + hasBin: true + dependencies: + '@parcel/watcher': 2.4.1 + '@parcel/watcher-wasm': 2.4.1 + citty: 0.1.6 + clipboardy: 4.0.0 + consola: 3.2.3 + crossws: 0.2.4 + defu: 6.1.4 + get-port-please: 3.1.2 + h3: 1.11.1 + http-shutdown: 1.2.2 + jiti: 1.21.0 + mlly: 1.6.1 + node-forge: 1.3.1 + pathe: 1.1.2 + std-env: 3.7.0 + ufo: 1.5.3 + untun: 0.1.3 + uqr: 0.1.2 + transitivePeerDependencies: + - uWebSockets.js + dev: false + /listr2@8.0.1: resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} engines: {node: '>=18.0.0'} @@ -4929,6 +9225,50 @@ packages: wrap-ansi: 9.0.0 dev: true + /lit-element@3.3.3: + resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + '@lit/reactive-element': 1.6.3 + lit-html: 2.8.0 + dev: false + + /lit-element@4.0.4: + resolution: {integrity: sha512-98CvgulX6eCPs6TyAIQoJZBCQPo80rgXR+dVBs61cstJXqtI+USQZAbA4gFHh6L/mxBx9MrgPLHLsUgDUHAcCQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + '@lit/reactive-element': 2.0.4 + lit-html: 3.1.2 + dev: false + + /lit-html@2.8.0: + resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + dependencies: + '@types/trusted-types': 2.0.7 + dev: false + + /lit-html@3.1.2: + resolution: {integrity: sha512-3OBZSUrPnAHoKJ9AMjRL/m01YJxQMf+TMHanNtTHG68ubjnZxK0RFl102DPzsw4mWnHibfZIBJm3LWCZ/LmMvg==} + dependencies: + '@types/trusted-types': 2.0.7 + dev: false + + /lit@2.8.0: + resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} + dependencies: + '@lit/reactive-element': 1.6.3 + lit-element: 3.3.3 + lit-html: 2.8.0 + dev: false + + /lit@3.1.0: + resolution: {integrity: sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==} + dependencies: + '@lit/reactive-element': 2.0.4 + lit-element: 4.0.4 + lit-html: 3.1.2 + dev: false + /load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4956,19 +9296,25 @@ packages: pkg-types: 1.0.3 dev: true + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: false + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 - dev: true /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 - dev: true /lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} @@ -4976,13 +9322,16 @@ packages: /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: false + /lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} dev: true /lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - dev: true /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} @@ -4992,9 +9341,21 @@ packages: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true + /lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + dev: false + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: false + /log-update@6.0.0: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} engines: {node: '>=18'} @@ -5006,6 +9367,15 @@ packages: wrap-ansi: 9.0.0 dev: true + /logkitty@0.7.1: + resolution: {integrity: sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==} + hasBin: true + dependencies: + ansi-fragments: 0.2.1 + dayjs: 1.11.10 + yargs: 15.4.1 + dev: false + /long@4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} @@ -5036,14 +9406,12 @@ packages: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 - dev: true /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: true /lru-queue@0.1.0: resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} @@ -5051,8 +9419,8 @@ packages: es5-ext: 0.10.64 dev: false - /magic-string@0.30.8: - resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + /magic-string@0.30.9: + resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -5061,11 +9429,19 @@ packages: /magicast@0.3.3: resolution: {integrity: sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 source-map-js: 1.2.0 dev: true + /make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + dependencies: + pify: 4.0.1 + semver: 5.7.2 + dev: false + /make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -5077,6 +9453,12 @@ packages: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: false + /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} @@ -5087,6 +9469,14 @@ packages: engines: {node: '>=8'} dev: true + /marky@1.2.5: + resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} + dev: false + + /memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + dev: false + /memoizee@0.4.15: resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} dependencies: @@ -5117,22 +9507,242 @@ packages: yargs-parser: 18.1.3 dev: true + /merge-options@3.0.4: + resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + engines: {node: '>=10'} + dependencies: + is-plain-obj: 2.1.0 + dev: false + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true + /metro-babel-transformer@0.80.8: + resolution: {integrity: sha512-TTzNwRZb2xxyv4J/+yqgtDAP2qVqH3sahsnFu6Xv4SkLqzrivtlnyUbaeTdJ9JjtADJUEjCbgbFgUVafrXdR9Q==} + engines: {node: '>=18'} + dependencies: + '@babel/core': 7.24.4 + hermes-parser: 0.20.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-cache-key@0.80.8: + resolution: {integrity: sha512-qWKzxrLsRQK5m3oH8ePecqCc+7PEhR03cJE6Z6AxAj0idi99dHOSitTmY0dclXVB9vP2tQIAE8uTd8xkYGk8fA==} + engines: {node: '>=18'} + dev: false + + /metro-cache@0.80.8: + resolution: {integrity: sha512-5svz+89wSyLo7BxdiPDlwDTgcB9kwhNMfNhiBZPNQQs1vLFXxOkILwQiV5F2EwYT9DEr6OPZ0hnJkZfRQ8lDYQ==} + engines: {node: '>=18'} + dependencies: + metro-core: 0.80.8 + rimraf: 3.0.2 + dev: false + + /metro-config@0.80.8: + resolution: {integrity: sha512-VGQJpfJawtwRzGzGXVUoohpIkB0iPom4DmSbAppKfumdhtLA8uVeEPp2GM61kL9hRvdbMhdWA7T+hZFDlo4mJA==} + engines: {node: '>=18'} + dependencies: + connect: 3.7.0 + cosmiconfig: 5.2.1 + jest-validate: 29.7.0 + metro: 0.80.8 + metro-cache: 0.80.8 + metro-core: 0.80.8 + metro-runtime: 0.80.8 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /metro-core@0.80.8: + resolution: {integrity: sha512-g6lud55TXeISRTleW6SHuPFZHtYrpwNqbyFIVd9j9Ofrb5IReiHp9Zl8xkAfZQp8v6ZVgyXD7c130QTsCz+vBw==} + engines: {node: '>=18'} + dependencies: + lodash.throttle: 4.1.1 + metro-resolver: 0.80.8 + dev: false + + /metro-file-map@0.80.8: + resolution: {integrity: sha512-eQXMFM9ogTfDs2POq7DT2dnG7rayZcoEgRbHPXvhUWkVwiKkro2ngcBE++ck/7A36Cj5Ljo79SOkYwHaWUDYDw==} + engines: {node: '>=18'} + dependencies: + anymatch: 3.1.3 + debug: 2.6.9 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.5 + node-abort-controller: 3.1.1 + nullthrows: 1.1.1 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-minify-terser@0.80.8: + resolution: {integrity: sha512-y8sUFjVvdeUIINDuW1sejnIjkZfEF+7SmQo0EIpYbWmwh+kq/WMj74yVaBWuqNjirmUp1YNfi3alT67wlbBWBQ==} + engines: {node: '>=18'} + dependencies: + terser: 5.29.2 + dev: false + + /metro-resolver@0.80.8: + resolution: {integrity: sha512-JdtoJkP27GGoZ2HJlEsxs+zO7jnDUCRrmwXJozTlIuzLHMRrxgIRRby9fTCbMhaxq+iA9c+wzm3iFb4NhPmLbQ==} + engines: {node: '>=18'} + dev: false + + /metro-runtime@0.80.8: + resolution: {integrity: sha512-2oScjfv6Yb79PelU1+p8SVrCMW9ZjgEiipxq7jMRn8mbbtWzyv3g8Mkwr+KwOoDFI/61hYPUbY8cUnu278+x1g==} + engines: {node: '>=18'} + dependencies: + '@babel/runtime': 7.24.4 + dev: false + + /metro-source-map@0.80.8: + resolution: {integrity: sha512-+OVISBkPNxjD4eEKhblRpBf463nTMk3KMEeYS8Z4xM/z3qujGJGSsWUGRtH27+c6zElaSGtZFiDMshEb8mMKQg==} + engines: {node: '>=18'} + dependencies: + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + invariant: 2.2.4 + metro-symbolicate: 0.80.8 + nullthrows: 1.1.1 + ob1: 0.80.8 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-symbolicate@0.80.8: + resolution: {integrity: sha512-nwhYySk79jQhwjL9QmOUo4wS+/0Au9joEryDWw7uj4kz2yvw1uBjwmlql3BprQCBzRdB3fcqOP8kO8Es+vE31g==} + engines: {node: '>=18'} + hasBin: true + dependencies: + invariant: 2.2.4 + metro-source-map: 0.80.8 + nullthrows: 1.1.1 + source-map: 0.5.7 + through2: 2.0.5 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-transform-plugins@0.80.8: + resolution: {integrity: sha512-sSu8VPL9Od7w98MftCOkQ1UDeySWbsIAS5I54rW22BVpPnI3fQ42srvqMLaJUQPjLehUanq8St6OMBCBgH/UWw==} + engines: {node: '>=18'} + dependencies: + '@babel/core': 7.24.4 + '@babel/generator': 7.24.4 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-transform-worker@0.80.8: + resolution: {integrity: sha512-+4FG3TQk3BTbNqGkFb2uCaxYTfsbuFOCKMMURbwu0ehCP8ZJuTUramkaNZoATS49NSAkRgUltgmBa4YaKZ5mqw==} + engines: {node: '>=18'} + dependencies: + '@babel/core': 7.24.4 + '@babel/generator': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + metro: 0.80.8 + metro-babel-transformer: 0.80.8 + metro-cache: 0.80.8 + metro-cache-key: 0.80.8 + metro-minify-terser: 0.80.8 + metro-source-map: 0.80.8 + metro-transform-plugins: 0.80.8 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /metro@0.80.8: + resolution: {integrity: sha512-in7S0W11mg+RNmcXw+2d9S3zBGmCARDxIwoXJAmLUQOQoYsRP3cpGzyJtc7WOw8+FXfpgXvceD0u+PZIHXEL7g==} + engines: {node: '>=18'} + hasBin: true + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/core': 7.24.4 + '@babel/generator': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + accepts: 1.3.8 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 2.6.9 + denodeify: 1.2.1 + error-stack-parser: 2.1.4 + graceful-fs: 4.2.11 + hermes-parser: 0.20.1 + image-size: 1.1.1 + invariant: 2.2.4 + jest-worker: 29.7.0 + jsc-safe-url: 0.2.4 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.80.8 + metro-cache: 0.80.8 + metro-cache-key: 0.80.8 + metro-config: 0.80.8 + metro-core: 0.80.8 + metro-file-map: 0.80.8 + metro-resolver: 0.80.8 + metro-runtime: 0.80.8 + metro-source-map: 0.80.8 + metro-symbolicate: 0.80.8 + metro-transform-plugins: 0.80.8 + metro-transform-worker: 0.80.8 + mime-types: 2.1.35 + node-fetch: 2.7.0 + nullthrows: 1.1.1 + rimraf: 3.0.2 + serialize-error: 2.1.0 + source-map: 0.5.7 + strip-ansi: 6.0.1 + throat: 5.0.0 + ws: 7.5.9 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + dev: false + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} @@ -5144,21 +9754,51 @@ packages: dependencies: mime-db: 1.52.0 + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: false + + /mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: false + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: true /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - dev: true /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} dev: true + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false + + /minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: false + + /minimatch@3.0.8: + resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + dependencies: + brace-expansion: 1.1.11 + dev: true + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -5186,6 +9826,22 @@ packages: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} + /mipd@0.0.5(typescript@5.4.3): + resolution: {integrity: sha512-gbKA784D2WKb5H/GtqEv+Ofd1S9Zj+Z/PGDIl1u1QAbswkxD28BQ5bSXQxkeBzPBABg1iDSbiwGG1XqlOxRspA==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.4.3 + viem: 1.21.4(typescript@5.4.3) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + /mixme@0.5.10: resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} engines: {node: '>= 8.0.0'} @@ -5209,11 +9865,29 @@ packages: pathe: 1.1.2 pkg-types: 1.0.3 ufo: 1.5.3 - dev: true + + /motion@10.16.2: + resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} + dependencies: + '@motionone/animation': 10.17.0 + '@motionone/dom': 10.17.0 + '@motionone/svelte': 10.16.4 + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + '@motionone/vue': 10.16.4 + dev: false + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -5222,6 +9896,10 @@ packages: resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} dev: true + /multiformats@9.9.0: + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + dev: false + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -5239,6 +9917,11 @@ packages: hasBin: true dev: true + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -5246,6 +9929,39 @@ packages: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} dev: false + /nocache@3.0.4: + resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} + engines: {node: '>=12.0.0'} + dev: false + + /node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: false + + /node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + dev: false + + /node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + dev: false + + /node-addon-api@7.1.0: + resolution: {integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==} + engines: {node: ^16 || ^18 || >= 20} + dev: false + + /node-dir@0.1.17: + resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} + engines: {node: '>= 0.10.5'} + dependencies: + minimatch: 3.1.2 + dev: false + + /node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + dev: false + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -5257,9 +9973,27 @@ packages: dependencies: whatwg-url: 5.0.0 + /node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: false + + /node-gyp-build@4.8.0: + resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} + hasBin: true + dev: false + + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: false + /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true + + /node-stream-zip@1.15.0: + resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} + engines: {node: '>=0.12.0'} + dev: false /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -5284,23 +10018,37 @@ packages: engines: {node: '>=8'} dependencies: path-key: 3.1.1 - dev: true /npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 - dev: true + + /nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + dev: false /nwsapi@2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} dev: true + /ob1@0.80.8: + resolution: {integrity: sha512-QHJQk/lXMmAW8I7AIM3in1MSlwe1umR72Chhi8B7Xnq6mzjhBKkA6Fy/zAhQnGkA4S912EPCEvTij5yh+EQTAA==} + engines: {node: '>=18'} + dev: false + + /obj-multiplex@1.0.0: + resolution: {integrity: sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + readable-stream: 2.3.8 + dev: false + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: true /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} @@ -5326,6 +10074,41 @@ packages: object-keys: 1.1.1 dev: true + /ofetch@1.3.4: + resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==} + dependencies: + destr: 2.0.3 + node-fetch-native: 1.6.4 + ufo: 1.5.3 + dev: false + + /ohash@1.1.3: + resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + dev: false + + /on-exit-leak-free@0.2.0: + resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + dev: false + + /on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: false + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -5336,14 +10119,51 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: true /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 - dev: true + + /open@6.4.0: + resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} + engines: {node: '>=8'} + dependencies: + is-wsl: 1.1.0 + dev: false + + /open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: false /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} @@ -5366,14 +10186,12 @@ packages: engines: {node: '>=6'} dependencies: p-try: 2.2.0 - dev: true /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 - dev: true /p-limit@5.0.0: resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} @@ -5382,19 +10200,24 @@ packages: yocto-queue: 1.0.0 dev: true + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: false + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 - dev: true /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 - dev: true /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} @@ -5404,7 +10227,21 @@ packages: /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: false + + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: false /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} @@ -5414,7 +10251,6 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} @@ -5422,14 +10258,23 @@ packages: entities: 4.5.0 dev: true + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: false + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - dev: true /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} @@ -5442,11 +10287,9 @@ packages: /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - dev: true /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-scurry@1.10.2: resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} @@ -5458,11 +10301,9 @@ packages: /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dev: true /pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - dev: true /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} @@ -5470,7 +10311,6 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -5487,15 +10327,58 @@ packages: engines: {node: '>=0.10.0'} dev: true + /pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: false + /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - dev: true + + /pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + dev: false + + /pino-abstract-transport@0.5.0: + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + dependencies: + duplexify: 4.1.3 + split2: 4.2.0 + dev: false + + /pino-std-serializers@4.0.0: + resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + dev: false + + /pino@7.11.0: + resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 0.2.0 + pino-abstract-transport: 0.5.0 + pino-std-serializers: 4.0.0 + process-warning: 1.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.1.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 2.8.0 + thread-stream: 0.15.2 + dev: false /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - dev: true + + /pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + dependencies: + find-up: 3.0.0 + dev: false /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} @@ -5510,7 +10393,16 @@ packages: jsonc-parser: 3.2.1 mlly: 1.6.1 pathe: 1.1.2 - dev: true + + /pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + dev: false + + /pony-cause@2.1.10: + resolution: {integrity: sha512-3IKLNXclQgkU++2fSi93sQ6BznFuxSLB11HdvZQ6JW/spahf/P1pAHBQEahr20rs0htZW0UDkM1HmA+nZkXKsw==} + engines: {node: '>=12.0.0'} + dev: false /portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} @@ -5525,7 +10417,6 @@ packages: /possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - dev: true /postcss-import@15.1.0(postcss@8.4.38): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} @@ -5563,7 +10454,6 @@ packages: dependencies: lilconfig: 3.1.1 postcss: 8.4.38 - ts-node: 10.9.2(@types/node@20.11.30)(typescript@5.4.3) yaml: 2.4.1 dev: true @@ -5615,6 +10505,10 @@ packages: source-map-js: 1.2.0 dev: true + /preact@10.20.1: + resolution: {integrity: sha512-JIFjgFg9B2qnOoGiYMVBtrcFxHqn+dNXbq76bVmcaHYJFYR4lW67AOcXgAYQQTDYXDOg/kTZrKPNCdRgJ2UJmw==} + dev: false + /preferred-pm@3.1.3: resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} engines: {node: '>=10'} @@ -5631,6 +10525,16 @@ packages: hasBin: true dev: true + /pretty-format@26.6.2: + resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} + engines: {node: '>= 10'} + dependencies: + '@jest/types': 26.6.2 + ansi-regex: 5.0.1 + ansi-styles: 4.3.0 + react-is: 17.0.2 + dev: false + /pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5638,11 +10542,48 @@ packages: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 - dev: true + + /process-nextick-args@1.0.7: + resolution: {integrity: sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==} + dev: false + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: false + + /process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + dev: false + + /promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + dev: false + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: false + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false /property-expr@2.0.6: resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + /proxy-compare@2.5.1: + resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + dev: false + /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true @@ -5651,11 +10592,54 @@ packages: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: false + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true + /qr-code-styling@1.6.0-rc.1: + resolution: {integrity: sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q==} + dependencies: + qrcode-generator: 1.4.4 + dev: false + + /qrcode-generator@1.4.4: + resolution: {integrity: sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==} + dev: false + + /qrcode-terminal-nooctal@0.12.1: + resolution: {integrity: sha512-jy/kkD0iIMDjTucB+5T6KBsnirlhegDH47vHgrj5MejchSQmi/EAMM0xMFeePgV9CJkkAapNakpVUWYgHvtdKg==} + hasBin: true + dev: false + + /qrcode@1.5.3: + resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + dijkstrajs: 1.0.3 + encode-utf8: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + dev: false + + /query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + dev: false + /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true @@ -5664,11 +10648,25 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /queue@6.0.2: + resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + dependencies: + inherits: 2.0.4 + dev: false + + /quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: false + /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} dev: true + /radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + dev: false + /ramda@0.29.1: resolution: {integrity: sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==} @@ -5678,6 +10676,21 @@ packages: safe-buffer: 5.2.1 dev: true + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /react-devtools-core@4.28.5: + resolution: {integrity: sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==} + dependencies: + shell-quote: 1.8.1 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: @@ -5687,14 +10700,108 @@ packages: react: 18.2.0 scheduler: 0.23.0 + /react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA==} + peerDependencies: + i18next: '>= 23.2.3' + react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + '@babel/runtime': 7.24.4 + html-parse-stringify: 3.0.1 + i18next: 22.5.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-native: 0.73.6(@babel/core@7.24.4)(@babel/preset-env@7.24.4)(react@18.2.0) + dev: false + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: false + + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: false + /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true + + /react-native-webview@11.26.1(react-native@0.73.6)(react@18.2.0): + resolution: {integrity: sha512-hC7BkxOpf+z0UKhxFSFTPAM4shQzYmZHoELa6/8a/MspcjEP7ukYKpuSUTLDywQditT8yI9idfcKvfZDKQExGw==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + escape-string-regexp: 2.0.0 + invariant: 2.2.4 + react: 18.2.0 + react-native: 0.73.6(@babel/core@7.24.4)(@babel/preset-env@7.24.4)(react@18.2.0) + dev: false + + /react-native@0.73.6(@babel/core@7.24.4)(@babel/preset-env@7.24.4)(react@18.2.0): + resolution: {integrity: sha512-oqmZe8D2/VolIzSPZw+oUd6j/bEmeRHwsLn1xLA5wllEYsZ5zNuMsDus235ONOnCRwexqof/J3aztyQswSmiaA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + react: 18.2.0 + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native-community/cli': 12.3.6 + '@react-native-community/cli-platform-android': 12.3.6 + '@react-native-community/cli-platform-ios': 12.3.6 + '@react-native/assets-registry': 0.73.1 + '@react-native/codegen': 0.73.3(@babel/preset-env@7.24.4) + '@react-native/community-cli-plugin': 0.73.17(@babel/core@7.24.4)(@babel/preset-env@7.24.4) + '@react-native/gradle-plugin': 0.73.4 + '@react-native/js-polyfills': 0.73.1 + '@react-native/normalize-colors': 0.73.2 + '@react-native/virtualized-lists': 0.73.4(react-native@0.73.6) + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + base64-js: 1.5.1 + chalk: 4.1.2 + deprecated-react-native-prop-types: 5.0.0 + event-target-shim: 5.0.1 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + jsc-android: 250231.0.0 + memoize-one: 5.2.1 + metro-runtime: 0.80.8 + metro-source-map: 0.80.8 + mkdirp: 0.5.6 + nullthrows: 1.1.1 + pretty-format: 26.6.2 + promise: 8.3.0 + react: 18.2.0 + react-devtools-core: 4.28.5 + react-refresh: 0.14.0 + react-shallow-renderer: 16.15.0(react@18.2.0) + regenerator-runtime: 0.13.11 + scheduler: 0.24.0-canary-efb381bbf-20230505 + stacktrace-parser: 0.1.10 + whatwg-fetch: 3.6.20 + ws: 6.2.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false /react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} - dev: true /react-remove-scroll-bar@2.3.6(@types/react@18.2.71)(react@18.2.0): resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} @@ -5731,6 +10838,16 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.71)(react@18.2.0) dev: false + /react-shallow-renderer@16.15.0(react@18.2.0): + resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + object-assign: 4.1.1 + react: 18.2.0 + react-is: 18.2.0 + dev: false + /react-style-singleton@2.2.1(@types/react@18.2.71)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} @@ -5789,12 +10906,64 @@ packages: strip-bom: 3.0.0 dev: true + /readable-stream@2.3.3: + resolution: {integrity: sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 1.0.7 + safe-buffer: 5.1.2 + string_decoder: 1.0.3 + util-deprecate: 1.0.2 + dev: false + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 + /readline@1.3.0: + resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} + dev: false + + /real-require@0.1.0: + resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + engines: {node: '>= 12.13.0'} + dev: false + + /recast@0.21.5: + resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} + engines: {node: '>= 4'} + dependencies: + ast-types: 0.15.2 + esprima: 4.0.1 + source-map: 0.6.1 + tslib: 2.6.2 + dev: false + /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -5803,9 +10972,30 @@ packages: strip-indent: 3.0.0 dev: true + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: false + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: false + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.24.4 + dev: false + /regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} @@ -5816,19 +11006,46 @@ packages: set-function-name: 2.0.2 dev: true + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: false + + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: false + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - dev: true /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true + /resolve-from@3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + dev: false + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: false + /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -5852,7 +11069,14 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true + + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: false /restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} @@ -5871,12 +11095,35 @@ packages: resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} dev: true + /rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: false + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 + /rollup-plugin-visualizer@5.12.0: + resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rollup: + optional: true + dependencies: + open: 8.4.2 + picomatch: 2.3.1 + source-map: 0.7.4 + yargs: 17.7.2 + dev: false + /rollup@3.29.4: resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -5885,26 +11132,28 @@ packages: fsevents: 2.3.3 dev: true - /rollup@4.13.0: - resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==} + /rollup@4.14.0: + resolution: {integrity: sha512-Qe7w62TyawbDzB4yt32R0+AbIo6m1/sqO7UPzFS8Z/ksL5mrfhA0v4CavfdmFav3D+ub4QeAgsGEe84DoWe/nQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.13.0 - '@rollup/rollup-android-arm64': 4.13.0 - '@rollup/rollup-darwin-arm64': 4.13.0 - '@rollup/rollup-darwin-x64': 4.13.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.13.0 - '@rollup/rollup-linux-arm64-gnu': 4.13.0 - '@rollup/rollup-linux-arm64-musl': 4.13.0 - '@rollup/rollup-linux-riscv64-gnu': 4.13.0 - '@rollup/rollup-linux-x64-gnu': 4.13.0 - '@rollup/rollup-linux-x64-musl': 4.13.0 - '@rollup/rollup-win32-arm64-msvc': 4.13.0 - '@rollup/rollup-win32-ia32-msvc': 4.13.0 - '@rollup/rollup-win32-x64-msvc': 4.13.0 + '@rollup/rollup-android-arm-eabi': 4.14.0 + '@rollup/rollup-android-arm64': 4.14.0 + '@rollup/rollup-darwin-arm64': 4.14.0 + '@rollup/rollup-darwin-x64': 4.14.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.14.0 + '@rollup/rollup-linux-arm64-gnu': 4.14.0 + '@rollup/rollup-linux-arm64-musl': 4.14.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.14.0 + '@rollup/rollup-linux-riscv64-gnu': 4.14.0 + '@rollup/rollup-linux-s390x-gnu': 4.14.0 + '@rollup/rollup-linux-x64-gnu': 4.14.0 + '@rollup/rollup-linux-x64-musl': 4.14.0 + '@rollup/rollup-win32-arm64-msvc': 4.14.0 + '@rollup/rollup-win32-ia32-msvc': 4.14.0 + '@rollup/rollup-win32-x64-msvc': 4.14.0 fsevents: 2.3.3 dev: true @@ -5928,9 +11177,12 @@ packages: isarray: 2.0.5 dev: true + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true /safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} @@ -5941,6 +11193,11 @@ packages: is-regex: 1.1.4 dev: true + /safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + dev: false + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true @@ -5957,6 +11214,12 @@ packages: dependencies: loose-envify: 1.4.0 + /scheduler@0.24.0-canary-efb381bbf-20230505: + resolution: {integrity: sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==} + dependencies: + loose-envify: 1.4.0 + dev: false + /schema-utils@3.3.0: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} @@ -5966,15 +11229,23 @@ packages: ajv-keywords: 3.5.2(ajv@6.12.6) dev: true + /secp256k1@5.0.0: + resolution: {integrity: sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + elliptic: 6.5.5 + node-addon-api: 5.1.0 + node-gyp-build: 4.8.0 + dev: false + /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true - dev: true /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - dev: true /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} @@ -5990,7 +11261,32 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: true + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serialize-error@2.1.0: + resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==} + engines: {node: '>=0.10.0'} + dev: false /serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -5998,9 +11294,20 @@ packages: randombytes: 2.1.0 dev: true + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true /set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} @@ -6012,7 +11319,6 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: true /set-function-name@2.0.2: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} @@ -6024,6 +11330,25 @@ packages: has-property-descriptors: 1.0.2 dev: true + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + dependencies: + kind-of: 6.0.3 + dev: false + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -6046,6 +11371,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: false + /side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -6062,16 +11391,27 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: false + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - dev: true + + /slice-ansi@2.1.0: + resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.0 + dev: false /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} @@ -6102,6 +11442,36 @@ packages: yargs: 15.4.1 dev: true + /socket.io-client@4.7.5(bufferutil@4.0.8)(utf-8-validate@6.0.3): + resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-client: 6.5.3(bufferutil@4.0.8)(utf-8-validate@6.0.3) + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /sonic-boom@2.8.0: + resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} + dependencies: + atomic-sleep: 1.0.0 + dev: false + /source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -6112,7 +11482,11 @@ packages: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true + + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: false /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} @@ -6121,7 +11495,6 @@ packages: /source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} - dev: true /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} @@ -6159,17 +11532,57 @@ packages: resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} dev: true + /split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + dev: false + + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: false /stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true + /stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: false + + /stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + dependencies: + type-fest: 0.7.1 + dev: false + + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: false + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + /std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - dev: true + + /stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + dev: false /stream-transform@2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} @@ -6177,6 +11590,11 @@ packages: mixme: 0.5.10 dev: true + /strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + dev: false + /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -6213,7 +11631,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-object-atoms: 1.0.0 dev: true @@ -6234,6 +11652,31 @@ packages: es-object-atoms: 1.0.0 dev: true + /string_decoder@1.0.3: + resolution: {integrity: sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==} + dependencies: + safe-buffer: 5.1.2 + dev: false + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: false + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + dependencies: + ansi-regex: 4.1.1 + dev: false + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -6254,12 +11697,10 @@ packages: /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: true /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - dev: true /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -6273,12 +11714,20 @@ packages: engines: {node: '>=8'} dev: true - /strip-literal@2.0.0: - resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} + /strip-literal@2.1.0: + resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} dependencies: - js-tokens: 8.0.3 + js-tokens: 9.0.0 dev: true + /strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: false + + /stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + dev: false + /sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -6293,12 +11742,20 @@ packages: ts-interface-checker: 0.1.13 dev: true + /sudo-prompt@9.2.1: + resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} + dev: false + + /superstruct@1.0.4: + resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} + engines: {node: '>=14.0.0'} + dev: false + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -6311,17 +11768,20 @@ packages: engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - dev: true /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true + /system-architecture@0.1.0: + resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} + engines: {node: '>=18'} + dev: false + /tai64@1.0.0: resolution: {integrity: sha512-bfidqCho3mtZsqNFyVXc4obhDmRIUbQp2godk137z/z47BJ+oKYIVHgJrdYOAciRJ6+P2iDjDtcm/DgQ7I11fQ==} dependencies: @@ -6365,6 +11825,18 @@ packages: engines: {node: '>=6'} dev: true + /temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + dev: false + + /temp@0.8.4: + resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} + engines: {node: '>=6.0.0'} + dependencies: + rimraf: 2.6.3 + dev: false + /term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -6391,7 +11863,7 @@ packages: jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.30.3 + terser: 5.29.2 webpack: 5.91.0(esbuild@0.19.12) dev: true @@ -6404,18 +11876,6 @@ packages: acorn: 8.11.3 commander: 2.20.3 source-map-support: 0.5.21 - dev: true - - /terser@5.30.3: - resolution: {integrity: sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 - commander: 2.20.3 - source-map-support: 0.5.21 - dev: true /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} @@ -6439,6 +11899,23 @@ packages: any-promise: 1.3.0 dev: true + /thread-stream@0.15.2: + resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} + dependencies: + real-require: 0.1.0 + dev: false + + /throat@5.0.0: + resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} + dev: false + + /through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + dev: false + /timers-ext@0.1.7: resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} dependencies: @@ -6467,10 +11944,13 @@ packages: os-tmpdir: 1.0.2 dev: true + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: false + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -6478,6 +11958,11 @@ packages: dependencies: is-number: 7.0.0 + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + /toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} @@ -6521,53 +12006,22 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true - - /ts-loader@9.5.1(typescript@5.4.3)(webpack@5.91.0): - resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} - engines: {node: '>=12.0.0'} - peerDependencies: - typescript: '*' - webpack: ^5.0.0 - dependencies: - chalk: 4.1.2 - enhanced-resolve: 5.16.0 - micromatch: 4.0.5 - semver: 7.6.0 - source-map: 0.7.4 - typescript: 5.4.3 - webpack: 5.91.0(esbuild@0.19.12) - dev: true - - /ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.3): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + dev: true + + /ts-loader@9.5.1(typescript@5.4.3)(webpack@5.91.0): + resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.10 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.30 - acorn: 8.11.3 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 + chalk: 4.1.2 + enhanced-resolve: 5.16.0 + micromatch: 4.0.5 + semver: 7.6.0 + source-map: 0.7.4 typescript: 5.4.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 + webpack: 5.91.0(esbuild@0.19.12) dev: true /ts-node@10.9.2(@types/node@20.12.4)(typescript@5.4.3): @@ -6585,7 +12039,7 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.10 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 @@ -6601,6 +12055,10 @@ packages: yn: 3.1.1 dev: true + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false + /tslib@2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} @@ -6672,7 +12130,7 @@ packages: joycon: 3.1.1 postcss-load-config: 4.0.2(ts-node@10.9.2) resolve-from: 5.0.0 - rollup: 4.13.0 + rollup: 4.14.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 @@ -6682,8 +12140,8 @@ packages: - ts-node dev: true - /tsx@4.7.1: - resolution: {integrity: sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==} + /tsx@4.7.2: + resolution: {integrity: sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==} engines: {node: '>=18.0.0'} hasBin: true dependencies: @@ -6770,7 +12228,6 @@ packages: /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - dev: true /type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} @@ -6782,6 +12239,11 @@ packages: engines: {node: '>=8'} dev: true + /type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + dev: false + /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} @@ -6845,8 +12307,8 @@ packages: hasBin: true dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.2: + resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -6855,11 +12317,9 @@ packages: resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} hasBin: true - dev: true /ufo@1.5.3: resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} - dev: true /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} @@ -6868,6 +12328,12 @@ packages: requiresBuild: true optional: true + /uint8arrays@3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} + dependencies: + multiformats: 9.9.0 + dev: false + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -6877,6 +12343,10 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + dev: false + /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -6885,16 +12355,125 @@ packages: engines: {node: '>=18.0'} dev: true + /unenv@1.9.0: + resolution: {integrity: sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g==} + dependencies: + consola: 3.2.3 + defu: 6.1.4 + mime: 3.0.0 + node-fetch-native: 1.6.4 + pathe: 1.1.2 + dev: false + + /unfetch@4.2.0: + resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} + dev: false + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: false + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: false + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: false + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: false + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - dev: true /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} dev: true + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /unstorage@1.10.2(idb-keyval@6.2.1): + resolution: {integrity: sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==} + peerDependencies: + '@azure/app-configuration': ^1.5.0 + '@azure/cosmos': ^4.0.0 + '@azure/data-tables': ^13.2.2 + '@azure/identity': ^4.0.1 + '@azure/keyvault-secrets': ^4.8.0 + '@azure/storage-blob': ^12.17.0 + '@capacitor/preferences': ^5.0.7 + '@netlify/blobs': ^6.5.0 || ^7.0.0 + '@planetscale/database': ^1.16.0 + '@upstash/redis': ^1.28.4 + '@vercel/kv': ^1.0.1 + idb-keyval: ^6.2.1 + ioredis: ^5.3.2 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/kv': + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + dependencies: + anymatch: 3.1.3 + chokidar: 3.6.0 + destr: 2.0.3 + h3: 1.11.1 + idb-keyval: 6.2.1 + listhen: 1.7.2 + lru-cache: 10.2.0 + mri: 1.2.0 + node-fetch-native: 1.6.4 + ofetch: 1.3.4 + ufo: 1.5.3 + transitivePeerDependencies: + - uWebSockets.js + dev: false + + /untun@0.1.3: + resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} + hasBin: true + dependencies: + citty: 0.1.6 + consola: 3.2.3 + pathe: 1.1.2 + dev: false + /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -6904,7 +12483,10 @@ packages: browserslist: 4.23.0 escalade: 3.1.2 picocolors: 1.0.0 - dev: true + + /uqr@0.1.2: + resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} + dev: false /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -6950,9 +12532,44 @@ packages: tslib: 2.6.2 dev: false + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /utf-8-validate@6.0.3: + resolution: {integrity: sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.0 + dev: false + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + dev: false + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} @@ -6983,6 +12600,74 @@ packages: engines: {node: '>= 0.10'} dev: true + /valtio@1.11.2(react@18.2.0): + resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=16.8' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + dependencies: + proxy-compare: 2.5.1 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + + /viem@1.21.4(typescript@5.4.3): + resolution: {integrity: sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + 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(typescript@5.4.3) + isows: 1.0.3(ws@8.13.0) + typescript: 5.4.3 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /viem@2.9.9(typescript@5.4.3): + resolution: {integrity: sha512-SUIHBL6M5IIlqDCMEQwAAvHzeglaM4FEqM6bCI+srLXtFYmrpV4tWhnpobQRNwh4f7HIksmKLLZ+cytv8FfnJQ==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + 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(typescript@5.4.3) + isows: 1.0.3(ws@8.13.0) + typescript: 5.4.3 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + /vite-node@1.4.0(@types/node@20.12.4): resolution: {integrity: sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==} engines: {node: ^18.0.0 || >=20.0.0} @@ -7004,8 +12689,8 @@ packages: - terser dev: true - /vite-plugin-dts@3.7.3(@types/node@20.12.4)(typescript@5.4.3)(vite@5.2.6): - resolution: {integrity: sha512-26eTlBYdpjRLWCsTJebM8vkCieE+p9gP3raf+ecDnzzK5E3FG6VE1wcy55OkRpfWWVlVvKkYFe6uvRHYWx7Nog==} + /vite-plugin-dts@3.8.1(@types/node@20.12.4)(typescript@5.4.3)(vite@5.2.6): + resolution: {integrity: sha512-zEYyQxH7lKto1VTKZHF3ZZeOPkkJgnMrePY4VxDHfDSvDjmYMMfWjZxYmNwW8QxbaItWJQhhXY+geAbyNphI7g==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -7014,11 +12699,12 @@ packages: vite: optional: true dependencies: - '@microsoft/api-extractor': 7.39.0(@types/node@20.12.4) + '@microsoft/api-extractor': 7.43.0(@types/node@20.12.4) '@rollup/pluginutils': 5.1.0 '@vue/language-core': 1.8.27(typescript@5.4.3) debug: 4.3.4 kolorist: 1.8.0 + magic-string: 0.30.9 typescript: 5.4.3 vite: 5.2.6(@types/node@20.12.4) vue-tsc: 1.8.27(typescript@5.4.3) @@ -7059,7 +12745,7 @@ packages: '@types/node': 20.12.4 esbuild: 0.20.2 postcss: 8.4.38 - rollup: 4.13.0 + rollup: 4.14.0 optionalDependencies: fsevents: 2.3.3 dev: true @@ -7101,11 +12787,11 @@ packages: execa: 8.0.1 jsdom: 24.0.0 local-pkg: 0.5.0 - magic-string: 0.30.8 + magic-string: 0.30.9 pathe: 1.1.2 picocolors: 1.0.0 std-env: 3.7.0 - strip-literal: 2.0.0 + strip-literal: 2.1.0 tinybench: 2.6.0 tinypool: 0.8.3 vite: 5.2.6(@types/node@20.12.4) @@ -7121,6 +12807,15 @@ packages: - terser dev: true + /vlq@1.0.1: + resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} + dev: false + + /void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + dev: false + /vue-template-compiler@2.7.16: resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} dependencies: @@ -7147,6 +12842,12 @@ packages: xml-name-validator: 5.0.0 dev: true + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: false + /watchpack@2.4.1: resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} engines: {node: '>=10.13.0'} @@ -7159,13 +12860,27 @@ packages: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - dev: true /web-streams-polyfill@4.0.0: resolution: {integrity: sha512-0zJXHRAYEjM2tUfZ2DiSOHAa2aw1tisnnhU3ufD57R8iefL+DcdJyRBRyJpG+NUimDgbTI/lH+gAE1PAvV3Cgw==} engines: {node: '>= 8'} dev: true + /webextension-polyfill-ts@0.25.0: + resolution: {integrity: sha512-ikQhwwHYkpBu00pFaUzIKY26I6L87DeRI+Q6jBT1daZUNuu8dSrg5U9l/ZbqdaQ1M/TTSPKeAa3kolP5liuedw==} + deprecated: This project has moved to @types/webextension-polyfill + dependencies: + webextension-polyfill: 0.7.0 + dev: false + + /webextension-polyfill@0.10.0: + resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==} + dev: false + + /webextension-polyfill@0.7.0: + resolution: {integrity: sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==} + dev: false + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -7230,6 +12945,10 @@ packages: iconv-lite: 0.6.3 dev: true + /whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + dev: false + /whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} @@ -7269,7 +12988,6 @@ packages: /which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: true /which-pm@2.0.0: resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} @@ -7288,7 +13006,6 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 - dev: true /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} @@ -7323,7 +13040,6 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -7353,6 +13069,70 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + /write-file-atomic@2.4.3: + resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + dependencies: + graceful-fs: 4.2.11 + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + dev: false + + /ws@6.2.2: + resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + async-limiter: 1.0.1 + dev: false + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.11.0(bufferutil@4.0.8)(utf-8-validate@6.0.3): + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 6.0.3 + dev: false + + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /ws@8.16.0: resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} engines: {node: '>=10.0.0'} @@ -7387,14 +13167,22 @@ packages: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true + /xmlhttprequest-ssl@2.0.0: + resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + engines: {node: '>=0.4.0'} + dev: false + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - dev: true /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} @@ -7402,11 +13190,14 @@ packages: /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} @@ -7417,7 +13208,6 @@ packages: resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} engines: {node: '>= 14'} hasBin: true - dev: true /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} @@ -7425,12 +13215,10 @@ packages: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - dev: true /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - dev: true /yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} @@ -7447,7 +13235,6 @@ packages: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - dev: true /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} @@ -7460,7 +13247,6 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} @@ -7470,7 +13256,6 @@ packages: /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - dev: true /yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} @@ -7500,3 +13285,26 @@ packages: optionalDependencies: commander: 9.5.0 dev: true + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false + + /zustand@4.4.1(react@18.2.0): + resolution: {integrity: sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + dependencies: + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false From 0bf8d599f670115cef234526e6c16b450e9fecb7 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Sun, 7 Apr 2024 20:19:50 -0300 Subject: [PATCH 02/39] feat: connector renamed and all methods implemented --- .../src/EthereumWalletConnector.ts | 191 ---- packages/ethereum-connector/src/index.ts | 1 - packages/ethereum-connector/src/types.ts | 16 - .../package.json | 14 +- .../signature-verification/Forc.lock | 0 .../signature-verification/Forc.toml | 0 .../fuel-toolchain.toml | 0 .../verification-predicate/Forc.toml | 0 .../release/verification-predicate-abi.json | 2 +- .../release/verification-predicate-bin-root | 0 .../out/release/verification-predicate.bin | Bin .../verification-predicate/src/main.sw | 0 .../src/Predicate.ts | 0 .../src/constants.ts | 7 - packages/walletconnect-connector/src/index.ts | 1 + packages/walletconnect-connector/src/types.ts | 24 + .../src/utils/eip-1193.ts | 0 .../src/utils/ethereum-icon.ts | 0 .../src/utils/generatePredicateResources.ts | 0 .../src/utils/predicate.ts | 0 .../src/utils/predicateResources.ts | 0 .../src/walletconnectWalletConnector.ts | 397 ++++++++ .../tsconfig.json | 0 .../tsup.config.js | 0 .../vite.config.ts | 4 +- pnpm-lock.yaml | 870 +++++++++++++++++- 26 files changed, 1294 insertions(+), 233 deletions(-) delete mode 100644 packages/ethereum-connector/src/EthereumWalletConnector.ts delete mode 100644 packages/ethereum-connector/src/index.ts delete mode 100644 packages/ethereum-connector/src/types.ts rename packages/{ethereum-connector => walletconnect-connector}/package.json (79%) rename packages/{ethereum-connector => walletconnect-connector}/signature-verification/Forc.lock (100%) rename packages/{ethereum-connector => walletconnect-connector}/signature-verification/Forc.toml (100%) rename packages/{ethereum-connector => walletconnect-connector}/signature-verification/fuel-toolchain.toml (100%) rename packages/{ethereum-connector => walletconnect-connector}/signature-verification/verification-predicate/Forc.toml (100%) rename packages/{ethereum-connector => walletconnect-connector}/signature-verification/verification-predicate/out/release/verification-predicate-abi.json (99%) rename packages/{ethereum-connector => walletconnect-connector}/signature-verification/verification-predicate/out/release/verification-predicate-bin-root (100%) rename packages/{ethereum-connector => walletconnect-connector}/signature-verification/verification-predicate/out/release/verification-predicate.bin (100%) rename packages/{ethereum-connector => walletconnect-connector}/signature-verification/verification-predicate/src/main.sw (100%) rename packages/{ethereum-connector => walletconnect-connector}/src/Predicate.ts (100%) rename packages/{ethereum-connector => walletconnect-connector}/src/constants.ts (57%) create mode 100644 packages/walletconnect-connector/src/index.ts create mode 100644 packages/walletconnect-connector/src/types.ts rename packages/{ethereum-connector => walletconnect-connector}/src/utils/eip-1193.ts (100%) rename packages/{ethereum-connector => walletconnect-connector}/src/utils/ethereum-icon.ts (100%) rename packages/{ethereum-connector => walletconnect-connector}/src/utils/generatePredicateResources.ts (100%) rename packages/{ethereum-connector => walletconnect-connector}/src/utils/predicate.ts (100%) rename packages/{ethereum-connector => walletconnect-connector}/src/utils/predicateResources.ts (100%) create mode 100644 packages/walletconnect-connector/src/walletconnectWalletConnector.ts rename packages/{ethereum-connector => walletconnect-connector}/tsconfig.json (100%) rename packages/{ethereum-connector => walletconnect-connector}/tsup.config.js (100%) rename packages/{ethereum-connector => walletconnect-connector}/vite.config.ts (84%) diff --git a/packages/ethereum-connector/src/EthereumWalletConnector.ts b/packages/ethereum-connector/src/EthereumWalletConnector.ts deleted file mode 100644 index cbd8a0724..000000000 --- a/packages/ethereum-connector/src/EthereumWalletConnector.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { - type AbiMap, - type Asset, - type ConnectorMetadata, - FuelConnector, - FuelConnectorEventTypes, - type JsonAbi, - type Network, - type TransactionRequestLike, - type Version, - Provider, -} from 'fuels'; -import { mainnet } from '@wagmi/core/chains'; -import { - type Web3Modal, - createWeb3Modal, - defaultWagmiConfig, -} from '@web3modal/wagmi'; - -import { ETHEREUM_ICON } from './utils/ethereum-icon'; -import type { EVMWalletConnectorConfig } from './types'; -import { type Config, reconnect } from '@wagmi/core'; -import { BETA_5_URL } from './constants'; - -export class EthereumWalletConnector extends FuelConnector { - name = 'Ethereum Wallets'; - metadata: ConnectorMetadata = { - image: ETHEREUM_ICON, - install: { - action: 'Install', - description: 'Install Ethereum Wallet to connect to Fuel', - link: 'https://ethereum.org/en/wallets/find-wallet/', - }, - }; - - config: EVMWalletConnectorConfig = {}; - - installed = false; - connected = false; - - wagmiProjectId = ''; - - ethConfig: Config | null = null; - fuelProvider: Provider | null = null; - - events = { - ...FuelConnectorEventTypes, - }; - - web3Modal: Web3Modal | null = null; - - constructor(config: EVMWalletConnectorConfig = {}) { - super(); - - this.configProviders(config); - } - - async configProviders(config: EVMWalletConnectorConfig = {}) { - const metadata = { - name: 'Web3Modal', - description: 'Web3Modal Example', - url: 'http://localhost:5173', // origin must match your domain & subdomain. - icons: ['https://avatars.githubusercontent.com/u/37784886'], - }; - - const chains = [mainnet] as const; - this.ethConfig = defaultWagmiConfig({ - chains, - projectId: this.wagmiProjectId, - metadata, - }); - - reconnect(this.ethConfig); - - // 3. Create modal - this.web3Modal = createWeb3Modal({ - wagmiConfig: this.ethConfig, - projectId: this.wagmiProjectId, - enableAnalytics: true, // Optional - defaults to your Cloud configuration - enableOnramp: true, // Optional - false as default - }); - - this.config = Object.assign(config, { - fuelProvider: config.fuelProvider || Provider.create(BETA_5_URL), - }); - } - - /** - * ============================================================ - * Application communication methods - * ============================================================ - */ - - /** - * ============================================================ - * Connector methods - * ============================================================ - */ - - async ping(): Promise { - return true; - } - - async version(): Promise { - return { app: '0.0.0', network: '0.0.0' }; - } - - async isConnected(): Promise { - return true; - } - - async accounts(): Promise> { - return ['']; - } - - async connect(): Promise { - if (!this.web3Modal) { - throw new Error('Web3Modal not initialized'); - } - - if (!(await this.isConnected())) { - this.web3Modal.open(); - } - - return this.connected; - } - - async disconnect(): Promise { - if (await this.isConnected()) { - } - - return false; - } - - async signMessage(_address: string, _message: string): Promise { - throw new Error('A predicate account cannot sign messages'); - } - - async sendTransaction( - address: string, - transaction: TransactionRequestLike, - ): Promise { - console.log({ address, transaction }); - - return ''; - } - - async currentAccount(): Promise { - return ''; - } - - async addAssets(_assets: Asset[]): Promise { - throw new Error('Method not implemented.'); - } - - async addAsset(_asset: Asset): Promise { - throw new Error('Method not implemented.'); - } - - async assets(): Promise> { - return []; - } - - async addNetwork(_networkUrl: string): Promise { - throw new Error('Method not implemented.'); - } - - async selectNetwork(_network: Network): Promise { - throw new Error('Method not implemented.'); - } - - async networks(): Promise { - return [await this.currentNetwork()]; - } - - async currentNetwork(): Promise { - return { url: '', chainId: 0 }; - } - - async addAbi(_abiMap: AbiMap): Promise { - throw new Error('Method not implemented.'); - } - - async getAbi(_contractId: string): Promise { - throw Error('Cannot get contractId ABI for a predicate'); - } - - async hasAbi(_contractId: string): Promise { - throw Error('A predicate account cannot have an ABI'); - } -} diff --git a/packages/ethereum-connector/src/index.ts b/packages/ethereum-connector/src/index.ts deleted file mode 100644 index c5dfffbf4..000000000 --- a/packages/ethereum-connector/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './EthereumWalletConnector'; diff --git a/packages/ethereum-connector/src/types.ts b/packages/ethereum-connector/src/types.ts deleted file mode 100644 index aafffdc41..000000000 --- a/packages/ethereum-connector/src/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Provider } from 'fuels'; -import type { EIP1193Provider } from './utils/eip-1193'; - -export type EVMWalletConnectorConfig = { - fuelProvider?: Provider | Promise; - ethProvider?: EIP1193Provider; -}; - -export enum EVMWalletConnectorEvents { - //accounts - ACCOUNTS_CHANGED = 'accountsChanged', - - //connections - CONNECT = 'connect', - DISCONNECT = 'disconnect', -} diff --git a/packages/ethereum-connector/package.json b/packages/walletconnect-connector/package.json similarity index 79% rename from packages/ethereum-connector/package.json rename to packages/walletconnect-connector/package.json index e4c812812..bba1bcab7 100644 --- a/packages/ethereum-connector/package.json +++ b/packages/walletconnect-connector/package.json @@ -1,16 +1,14 @@ { - "name": "@fuel-connectors/ethereum-connector", + "name": "@fuel-connectors/walletconnect-connector", "version": "0.0.1", "type": "module", - "files": [ - "dist" - ], - "main": "./dist/wallet-connector-ethereum.umd.cjs", - "module": "./dist/wallet-connector-ethereum.js", + "files": ["dist"], + "main": "./dist/wallet-connector-walletconnect.umd.cjs", + "module": "./dist/wallet-connector-walletconnect.js", "exports": { ".": { - "import": "./dist/wallet-connector-ethereum.js", - "require": "./dist/wallet-connector-ethereum.umd.cjs" + "import": "./dist/wallet-connector-walletconnect.js", + "require": "./dist/wallet-connector-walletconnect.umd.cjs" } }, "types": "./dist/index.d.ts", diff --git a/packages/ethereum-connector/signature-verification/Forc.lock b/packages/walletconnect-connector/signature-verification/Forc.lock similarity index 100% rename from packages/ethereum-connector/signature-verification/Forc.lock rename to packages/walletconnect-connector/signature-verification/Forc.lock diff --git a/packages/ethereum-connector/signature-verification/Forc.toml b/packages/walletconnect-connector/signature-verification/Forc.toml similarity index 100% rename from packages/ethereum-connector/signature-verification/Forc.toml rename to packages/walletconnect-connector/signature-verification/Forc.toml diff --git a/packages/ethereum-connector/signature-verification/fuel-toolchain.toml b/packages/walletconnect-connector/signature-verification/fuel-toolchain.toml similarity index 100% rename from packages/ethereum-connector/signature-verification/fuel-toolchain.toml rename to packages/walletconnect-connector/signature-verification/fuel-toolchain.toml diff --git a/packages/ethereum-connector/signature-verification/verification-predicate/Forc.toml b/packages/walletconnect-connector/signature-verification/verification-predicate/Forc.toml similarity index 100% rename from packages/ethereum-connector/signature-verification/verification-predicate/Forc.toml rename to packages/walletconnect-connector/signature-verification/verification-predicate/Forc.toml diff --git a/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json b/packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json similarity index 99% rename from packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json rename to packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json index e32e338e4..663ee3a9f 100644 --- a/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json +++ b/packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json @@ -62,4 +62,4 @@ "offset": 1952 } ] -} \ No newline at end of file +} diff --git a/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root b/packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root similarity index 100% rename from packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root rename to packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root diff --git a/packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin b/packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin similarity index 100% rename from packages/ethereum-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin rename to packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin diff --git a/packages/ethereum-connector/signature-verification/verification-predicate/src/main.sw b/packages/walletconnect-connector/signature-verification/verification-predicate/src/main.sw similarity index 100% rename from packages/ethereum-connector/signature-verification/verification-predicate/src/main.sw rename to packages/walletconnect-connector/signature-verification/verification-predicate/src/main.sw diff --git a/packages/ethereum-connector/src/Predicate.ts b/packages/walletconnect-connector/src/Predicate.ts similarity index 100% rename from packages/ethereum-connector/src/Predicate.ts rename to packages/walletconnect-connector/src/Predicate.ts diff --git a/packages/ethereum-connector/src/constants.ts b/packages/walletconnect-connector/src/constants.ts similarity index 57% rename from packages/ethereum-connector/src/constants.ts rename to packages/walletconnect-connector/src/constants.ts index 7dbe6f206..0f4b4747b 100644 --- a/packages/ethereum-connector/src/constants.ts +++ b/packages/walletconnect-connector/src/constants.ts @@ -1,10 +1,3 @@ -import type { EIP1193Provider } from './utils/eip-1193'; - -declare global { - interface Window { - ethereum: any; - } -} const HAS_WINDOW = typeof window !== 'undefined'; export const WINDOW = HAS_WINDOW ? window : null; export const BETA_5_URL = 'https://beta-5.fuel.network/graphql'; diff --git a/packages/walletconnect-connector/src/index.ts b/packages/walletconnect-connector/src/index.ts new file mode 100644 index 000000000..daca7efc2 --- /dev/null +++ b/packages/walletconnect-connector/src/index.ts @@ -0,0 +1 @@ +export * from './walletconnectWalletConnector'; diff --git a/packages/walletconnect-connector/src/types.ts b/packages/walletconnect-connector/src/types.ts new file mode 100644 index 000000000..58aa0587f --- /dev/null +++ b/packages/walletconnect-connector/src/types.ts @@ -0,0 +1,24 @@ +import type { Provider as FuelProvider } from 'fuels'; + +export type EthereumWalletConnectorConfig = { + fuelProvider?: FuelProvider | Promise; + ethProvider?: unknown | Promise; +}; + +export enum EthereumWalletConnectorEvents { + //accounts + ACCOUNTS_CHANGED = 'accountsChanged', + + //chain + CHAIN_CHANGED = 'chainChanged', + + //session + SESSION_EVENT = 'session_event', + + //connection uri + DISPLAY_URI = 'display_uri', + + //connections + CONNECT = 'connect', + DISCONNECT = 'disconnect', +} diff --git a/packages/ethereum-connector/src/utils/eip-1193.ts b/packages/walletconnect-connector/src/utils/eip-1193.ts similarity index 100% rename from packages/ethereum-connector/src/utils/eip-1193.ts rename to packages/walletconnect-connector/src/utils/eip-1193.ts diff --git a/packages/ethereum-connector/src/utils/ethereum-icon.ts b/packages/walletconnect-connector/src/utils/ethereum-icon.ts similarity index 100% rename from packages/ethereum-connector/src/utils/ethereum-icon.ts rename to packages/walletconnect-connector/src/utils/ethereum-icon.ts diff --git a/packages/ethereum-connector/src/utils/generatePredicateResources.ts b/packages/walletconnect-connector/src/utils/generatePredicateResources.ts similarity index 100% rename from packages/ethereum-connector/src/utils/generatePredicateResources.ts rename to packages/walletconnect-connector/src/utils/generatePredicateResources.ts diff --git a/packages/ethereum-connector/src/utils/predicate.ts b/packages/walletconnect-connector/src/utils/predicate.ts similarity index 100% rename from packages/ethereum-connector/src/utils/predicate.ts rename to packages/walletconnect-connector/src/utils/predicate.ts diff --git a/packages/ethereum-connector/src/utils/predicateResources.ts b/packages/walletconnect-connector/src/utils/predicateResources.ts similarity index 100% rename from packages/ethereum-connector/src/utils/predicateResources.ts rename to packages/walletconnect-connector/src/utils/predicateResources.ts diff --git a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts new file mode 100644 index 000000000..c4c144ac9 --- /dev/null +++ b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts @@ -0,0 +1,397 @@ +import { hexToBytes } from '@ethereumjs/util'; +import { hexlify, splitSignature } from '@ethersproject/bytes'; +import { coinbaseWallet, walletConnect } from '@wagmi/connectors'; +import { + http, + type Config, + createConfig, + disconnect, + getAccount, + injected, + reconnect, +} from '@wagmi/core'; +import { mainnet } from '@wagmi/core/chains'; +import { type Web3Modal, createWeb3Modal } from '@web3modal/wagmi'; +import { + type AbiMap, + type Asset, + type ConnectorMetadata, + FuelConnector, + FuelConnectorEventTypes, + Provider as FuelProvider, + type JsonAbi, + type Network, + type TransactionRequestLike, + type Version, + transactionRequestify, +} from 'fuels'; +import { PredicateAccount } from './Predicate'; +import { BETA_5_URL, WINDOW } from './constants'; +import { + type EthereumWalletConnectorConfig, + EthereumWalletConnectorEvents, +} from './types'; +import type { EIP1193Provider } from './utils/eip-1193'; +import { ETHEREUM_ICON } from './utils/ethereum-icon'; +import { createPredicate } from './utils/predicate'; +import { predicates } from './utils/predicateResources'; + +export class WalletconnectWalletConnector extends FuelConnector { + name = 'Ethereum Wallets'; + connected = false; + installed = false; + events = { ...FuelConnectorEventTypes, ...EthereumWalletConnectorEvents }; + metadata: ConnectorMetadata = { + image: ETHEREUM_ICON, + install: { + action: 'Install', + description: 'Install Ethereum Wallet to connect to Fuel', + link: 'https://ethereum.org/en/wallets/find-wallet/', + }, + }; + + ethConfig: Config | null = null; + + wagmiProjectId = '0e0f5503e675e719c07e73ff5f38d31f'; + + ethProvider: unknown | null = null; + fuelProvider: FuelProvider | null = null; + ethModal: Web3Modal | null = null; + + private predicateAccount: PredicateAccount; + private predicate = predicates['verification-predicate']; + private setupLock = false; + private _currentAccount: string | null = null; + private config: EthereumWalletConnectorConfig = {}; + private _ethereumEvents = 0; + + constructor(config: EthereumWalletConnectorConfig = {}) { + super(); + + this.predicateAccount = new PredicateAccount(); + + this.configProviders(config); + this.setupEthereumEvents(); + } + + // * WEB3MODAL AND WAGMI + async configProviders(config: EthereumWalletConnectorConfig = {}) { + const metadata = { + name: 'Web3Modal', + description: 'Web3Modal Example', + url: 'https://web3modal.com', // url must match your domain & subdomain + icons: ['https://avatars.githubusercontent.com/u/37784886'], + }; + + this.ethConfig = createConfig({ + chains: [mainnet], + transports: { + [mainnet.id]: http(), + }, + connectors: [ + walletConnect({ + projectId: this.wagmiProjectId, + metadata, + showQrModal: false, + }), + injected({ shimDisconnect: true }), + coinbaseWallet({ + appName: metadata.name, + appLogoUrl: metadata.icons[0], + }), + ], + }); + reconnect(this.ethConfig); + + this.ethModal = createWeb3Modal({ + wagmiConfig: this.ethConfig, + projectId: this.wagmiProjectId, + enableAnalytics: true, // Optional - defaults to your Cloud configuration + enableOnramp: true, // Optional - false as default + }); + + this.config = Object.assign(config, { + fuelProvider: config.fuelProvider || FuelProvider.create(BETA_5_URL), + ethProvider: this.ethConfig?.connectors[0]?.getProvider(), + }); + } + // * WEB3MODAL AND WAGMI + + setupEthereumEvents() { + this._ethereumEvents = Number( + setInterval(() => { + //@ts-ignore + if (WINDOW?.ethereum) { + clearInterval(this._ethereumEvents); + window.dispatchEvent( + new CustomEvent('FuelConnector', { detail: this }), + ); + } + }, 500), + ); + } + + // * WEB3MODAL AND WAGMI + async getLazyEthereum() { + reconnect(this.ethConfig as Config); + + const ethProvider = await getAccount( + this.ethConfig as Config, + ).connector?.getProvider(); + + if (!ethProvider) { + if (WINDOW?.ethereum) { + //@ts-ignore + return WINDOW.ethereum; + } + return null; + } + + return ethProvider; + } + // * WEB3MODAL AND WAGMI + + /** + * ============================================================ + * Application communication methods + * ============================================================ + */ + + async getProviders() { + if (!this.fuelProvider || !this.ethProvider) { + this.ethProvider = (await this.getLazyEthereum()) as EIP1193Provider; + + if (!this.ethProvider) { + throw new Error('Ethereum provider not found'); + } + + this.fuelProvider = (await this.config.fuelProvider) ?? null; + + if (!this.fuelProvider) { + throw new Error('Fuel provider not found'); + } + } + + return { + fuelProvider: this.fuelProvider, + ethProvider: this.ethProvider, + }; + } + + async setup() { + if (this.setupLock) return; + this.setupLock = true; + + await this.setupCurrentAccount(); + await this.setupEventBridge(); + } + + async setupEventBridge() { + const { ethProvider } = await this.getProviders(); + //@ts-ignore + ethProvider.on(this.events.ACCOUNTS_CHANGED, async (accounts) => { + this.emit('accounts', await this.accounts()); + if (this._currentAccount !== accounts[0]) { + await this.setupCurrentAccount(); + } + }); + //@ts-ignore + ethProvider.on(this.events.CONNECT, async (_arg) => { + this.emit('connection', await this.isConnected()); + }); + //@ts-ignore + ethProvider.on(this.events.DISCONNECT, async (_arg) => { + this.emit('connection', await this.isConnected()); + }); + } + + async setupCurrentAccount() { + const [currentAccount = null] = await this.accounts(); + + this._currentAccount = currentAccount; + this.emit('currentAccount', currentAccount); + } + + /** + * ============================================================ + * Connector methods + * ============================================================ + */ + + async ping(): Promise { + await this.configProviders(); + await this.setup(); + + return true; + } + + async version(): Promise { + return { app: '0.0.0', network: '0.0.0' }; + } + + async isConnected(): Promise { + const accounts = await this.accounts(); + + return accounts.length > 0; + } + + async accounts(): Promise> { + const { ethProvider } = await this.getProviders(); + + const accounts = + //@ts-ignore + await this.predicateAccount.getPredicateAccounts(ethProvider); + + return accounts.map((account) => account.predicateAccount); + } + + async connect(): Promise { + if (!(await this.isConnected())) { + await this.ethModal?.open(); + + this.emit(this.events.connection, true); + + // @ts-ignore + this.on(this.events.CONNECTION, (connection: boolean) => { + this.connected = connection; + }); + + return true; + } + + return this.connected; + } + + async disconnect(): Promise { + if (await this.isConnected()) { + await disconnect(this.ethConfig as Config); + + this.emit(this.events.connection, false); + this.emit(this.events.accounts, []); + this.emit(this.events.currentAccount, null); + } + + return false; + } + + async signMessage(_address: string, _message: string): Promise { + throw new Error('A predicate account cannot sign messages'); + } + + async sendTransaction( + address: string, + transaction: TransactionRequestLike, + ): Promise { + if (!(await this.isConnected())) { + throw Error('No connected accounts'); + } + + const { ethProvider, fuelProvider } = await this.getProviders(); + const chainId = fuelProvider.getChainId(); + const account = await this.predicateAccount.getPredicateFromAddress( + address, + //@ts-ignore + ethProvider, + ); + if (!account) { + throw Error(`No account found for ${address}`); + } + const transactionRequest = transactionRequestify(transaction); + + // Create a predicate and set the witness index to call in predicate` + const predicate = createPredicate( + account.ethAccount, + fuelProvider, + this.predicate.bytecode, + this.predicate.abi, + [transactionRequest.witnesses.length], + ); + predicate.connect(fuelProvider); + + // Attach missing inputs (including estimated predicate gas usage) / outputs to the request + await predicate.provider.estimateTxDependencies(transactionRequest); + + // To each input of the request, attach the predicate and its data + const requestWithPredicateAttached = + predicate.populateTransactionPredicateData(transactionRequest); + + const txID = requestWithPredicateAttached.getTransactionId(chainId); + //@ts-ignore + const signature = await ethProvider.request({ + method: 'personal_sign', + params: [txID, account.ethAccount], + }); + + // Transform the signature into compact form for Sway to understand + const compactSignature = splitSignature(hexToBytes(signature)).compact; + transactionRequest.witnesses.push(compactSignature); + + const transactionWithPredicateEstimated = + await fuelProvider.estimatePredicates(requestWithPredicateAttached); + + const response = await fuelProvider.operations.submit({ + encodedTransaction: hexlify( + transactionWithPredicateEstimated.toTransactionBytes(), + ), + }); + + return response.submit.id; + } + + async currentAccount(): Promise { + if (!(await this.isConnected())) { + throw Error('No connected accounts'); + } + + const account = getAccount(this.ethConfig as Config).address; + + if (!account) { + throw Error('No connected accounts'); + } + + return account; + } + + async addAssets(_assets: Asset[]): Promise { + throw new Error('Method not implemented.'); + } + + async addAsset(_asset: Asset): Promise { + throw new Error('Method not implemented.'); + } + + async assets(): Promise> { + return []; + } + + async addNetwork(_networkUrl: string): Promise { + throw new Error('Method not implemented.'); + } + + async selectNetwork(_network: Network): Promise { + throw new Error('Method not implemented.'); + } + + async networks(): Promise { + return [await this.currentNetwork()]; + } + + async currentNetwork(): Promise { + const { fuelProvider } = await this.getProviders(); + const chainId = fuelProvider.getChainId(); + + return { url: fuelProvider.url, chainId: chainId }; + } + + async addAbi(_abiMap: AbiMap): Promise { + throw new Error('Method not implemented.'); + } + + async getAbi(_contractId: string): Promise { + throw Error('Cannot get contractId ABI for a predicate'); + } + + async hasAbi(_contractId: string): Promise { + throw Error('A predicate account cannot have an ABI'); + } +} diff --git a/packages/ethereum-connector/tsconfig.json b/packages/walletconnect-connector/tsconfig.json similarity index 100% rename from packages/ethereum-connector/tsconfig.json rename to packages/walletconnect-connector/tsconfig.json diff --git a/packages/ethereum-connector/tsup.config.js b/packages/walletconnect-connector/tsup.config.js similarity index 100% rename from packages/ethereum-connector/tsup.config.js rename to packages/walletconnect-connector/tsup.config.js diff --git a/packages/ethereum-connector/vite.config.ts b/packages/walletconnect-connector/vite.config.ts similarity index 84% rename from packages/ethereum-connector/vite.config.ts rename to packages/walletconnect-connector/vite.config.ts index 91a22e45b..ac83f03b3 100644 --- a/packages/ethereum-connector/vite.config.ts +++ b/packages/walletconnect-connector/vite.config.ts @@ -19,9 +19,9 @@ export default defineConfig({ build: { lib: { entry: path.resolve('src/index.ts'), - name: '@fuels/wallet-connector-ethereum', + name: '@fuels/wallet-connector-walletconnect', // the proper extensions will be added - fileName: 'wallet-connector-ethereum', + fileName: 'wallet-connector-walletconnect', }, }, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95feb9012..802ccdbc6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -122,7 +122,7 @@ importers: version: 5.29.2 tsup: specifier: 8.0.2 - version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) + version: 8.0.2(typescript@5.4.3) typescript: specifier: 5.4.3 version: 5.4.3 @@ -141,9 +141,15 @@ importers: '@wagmi/core': specifier: 2.6.15 version: 2.6.15(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) + '@web3modal/ethers': + specifier: 4.1.5 + version: 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(ethers@5.7.2)(react@18.2.0) '@web3modal/wagmi': specifier: 4.1.5 version: 4.1.5(@wagmi/connectors@4.1.24)(@wagmi/core@2.6.15)(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0)(viem@2.9.9) + ethers: + specifier: 5.7.2 + version: 5.7.2 memoizee: specifier: ^0.4.15 version: 0.4.15 @@ -194,6 +200,67 @@ importers: specifier: ^1.4.0 version: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0) + packages/ethereum-connector-ether: + dependencies: + '@ethereumjs/util': + specifier: ^9.0.1 + version: 9.0.3 + '@ethersproject/bytes': + specifier: ^5.7.0 + version: 5.7.0 + '@web3modal/ethers5': + specifier: 4.1.5 + version: 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(ethers@5.7.2)(react@18.2.0) + ethers: + specifier: 5.7.2 + version: 5.7.2 + memoizee: + specifier: ^0.4.15 + version: 0.4.15 + devDependencies: + '@fuel-ts/account': + specifier: ^0.79.0 + version: 0.79.0(dexie@4.0.1) + '@fuel-ts/forc': + specifier: 0.79.0 + version: 0.79.0 + '@fuel-ts/fuel-core': + specifier: ^0.79.0 + version: 0.79.0 + '@types/memoizee': + specifier: ^0.4.11 + version: 0.4.11 + fuels: + specifier: ^0.79.0 + version: 0.79.0(dexie@4.0.1) + jsdom: + specifier: 24.0.0 + version: 24.0.0 + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.4.3)(webpack@5.91.0) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.12.4)(typescript@5.4.3) + tsup: + specifier: 8.0.2 + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) + tsx: + specifier: ^4.7.0 + version: 4.7.2 + typescript: + specifier: 5.4.3 + version: 5.4.3 + vite: + specifier: ^5.0.10 + version: 5.2.6(@types/node@20.12.4) + vite-plugin-dts: + specifier: ^3.6.4 + version: 3.8.1(@types/node@20.12.4)(typescript@5.4.3)(vite@5.2.6) + vitest: + specifier: ^1.4.0 + version: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0) + packages/evm-connector: dependencies: '@ethereumjs/util': @@ -259,7 +326,7 @@ importers: version: 0.79.0(dexie@4.0.1) tsup: specifier: 8.0.2 - version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) + version: 8.0.2(typescript@5.4.3) typescript: specifier: 5.4.3 version: 5.4.3 @@ -284,7 +351,7 @@ importers: version: 0.79.0(dexie@4.0.1) tsup: specifier: 8.0.2 - version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) + version: 8.0.2(typescript@5.4.3) typescript: specifier: 5.4.3 version: 5.4.3 @@ -305,7 +372,7 @@ importers: version: 0.79.0(dexie@4.0.1) tsup: specifier: 8.0.2 - version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) + version: 8.0.2(typescript@5.4.3) typescript: specifier: 5.4.3 version: 5.4.3 @@ -316,6 +383,73 @@ importers: specifier: 4.0.0 version: 4.0.0 + packages/walletconnect-connector: + dependencies: + '@ethereumjs/util': + specifier: ^9.0.1 + version: 9.0.3 + '@ethersproject/bytes': + specifier: ^5.7.0 + version: 5.7.0 + '@wagmi/connectors': + specifier: 4.1.24 + version: 4.1.24(@wagmi/core@2.6.15)(react-native@0.73.6)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) + '@wagmi/core': + specifier: 2.6.15 + version: 2.6.15(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) + '@web3modal/wagmi': + specifier: 4.1.5 + version: 4.1.5(@wagmi/connectors@4.1.24)(@wagmi/core@2.6.15)(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0)(viem@2.9.9) + memoizee: + specifier: ^0.4.15 + version: 0.4.15 + viem: + specifier: 2.9.9 + version: 2.9.9(typescript@5.4.3) + devDependencies: + '@fuel-ts/account': + specifier: ^0.79.0 + version: 0.79.0(dexie@4.0.1) + '@fuel-ts/forc': + specifier: 0.79.0 + version: 0.79.0 + '@fuel-ts/fuel-core': + specifier: ^0.79.0 + version: 0.79.0 + '@types/memoizee': + specifier: ^0.4.11 + version: 0.4.11 + fuels: + specifier: ^0.79.0 + version: 0.79.0(dexie@4.0.1) + jsdom: + specifier: 24.0.0 + version: 24.0.0 + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.4.3)(webpack@5.91.0) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.12.4)(typescript@5.4.3) + tsup: + specifier: 8.0.2 + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) + tsx: + specifier: ^4.7.0 + version: 4.7.2 + typescript: + specifier: 5.4.3 + version: 5.4.3 + vite: + specifier: ^5.0.10 + version: 5.2.6(@types/node@20.12.4) + vite-plugin-dts: + specifier: ^3.6.4 + version: 3.8.1(@types/node@20.12.4)(typescript@5.4.3)(vite@5.2.6) + vitest: + specifier: ^1.4.0 + version: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0) + packages: /@adraffy/ens-normalize@1.10.0: @@ -2821,16 +2955,321 @@ packages: ethereum-cryptography: 2.1.3 dev: false + /@ethersproject/abi@5.7.0: + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + + /@ethersproject/abstract-provider@5.7.0: + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + dev: false + + /@ethersproject/abstract-signer@5.7.0: + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + dev: false + + /@ethersproject/address@5.7.0: + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + dev: false + + /@ethersproject/base64@5.7.0: + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + dev: false + + /@ethersproject/basex@5.7.0: + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + dev: false + + /@ethersproject/bignumber@5.7.0: + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + dev: false + /@ethersproject/bytes@5.7.0: resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} dependencies: '@ethersproject/logger': 5.7.0 dev: false + /@ethersproject/constants@5.7.0: + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + dev: false + + /@ethersproject/contracts@5.7.0: + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + dev: false + + /@ethersproject/hash@5.7.0: + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + + /@ethersproject/hdnode@5.7.0: + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + dev: false + + /@ethersproject/json-wallets@5.7.0: + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + dev: false + + /@ethersproject/keccak256@5.7.0: + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + dev: false + /@ethersproject/logger@5.7.0: resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} dev: false + /@ethersproject/networks@5.7.1: + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/pbkdf2@5.7.0: + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + dev: false + + /@ethersproject/properties@5.7.0: + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/providers@5.7.2: + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@ethersproject/random@5.7.0: + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/rlp@5.7.0: + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/sha2@5.7.0: + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + dev: false + + /@ethersproject/signing-key@5.7.0: + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + dev: false + + /@ethersproject/solidity@5.7.0: + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + + /@ethersproject/strings@5.7.0: + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/transactions@5.7.0: + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + dev: false + + /@ethersproject/units@5.7.0: + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/wallet@5.7.0: + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + dev: false + + /@ethersproject/web@5.7.1: + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + + /@ethersproject/wordlists@5.7.0: + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + /@fuel-ts/abi-coder@0.79.0: resolution: {integrity: sha512-Jdp0megar7aFP+jecnUvd1SR488wYG0AMb0C7lXpXoWIryk8DwHv8odIMXnj5WA7/VpApXiREgYoTCFs8k65oA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -4729,7 +5168,7 @@ packages: resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} dependencies: '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 + '@noble/hashes': 1.3.3 '@scure/base': 1.1.6 dev: false @@ -4744,7 +5183,7 @@ packages: /@scure/bip39@1.2.1: resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: - '@noble/hashes': 1.3.2 + '@noble/hashes': 1.3.3 '@scure/base': 1.1.6 dev: false @@ -5356,6 +5795,46 @@ packages: - zod dev: false + /@walletconnect/core@2.11.1: + resolution: {integrity: sha512-T57Vd7YdbHPsy3tthBuwrhaZNafN0+PqjISFRNeJy/bsKdXxpJg2hGSARuOTpCO7V6VcaatqlaSMuG3DrnG5rA==} + dependencies: + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@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.1 + '@walletconnect/utils': 2.11.1 + events: 3.3.0 + isomorphic-unfetch: 3.1.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + /@walletconnect/core@2.11.2: resolution: {integrity: sha512-bB4SiXX8hX3/hyBfVPC5gwZCXCl+OPj+/EDVM71iAO3TDsh78KPbrVAbDnnsbHzZVHlsMohtXX3j5XVsheN3+g==} dependencies: @@ -5402,6 +5881,41 @@ packages: tslib: 1.14.1 dev: false + /@walletconnect/ethereum-provider@2.11.1(react@18.2.0): + resolution: {integrity: sha512-UfQH0ho24aa2M1xYmanbJv2ggQPebKmQytp2j20QEvURJ2R0v7YKWZ+0PfwOs6o6cuGw6gGxy/0WQXQRZSAsfg==} + 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(react@18.2.0) + '@walletconnect/sign-client': 2.11.1 + '@walletconnect/types': 2.11.1 + '@walletconnect/universal-provider': 2.11.1 + '@walletconnect/utils': 2.11.1 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - react + - uWebSockets.js + - utf-8-validate + dev: false + /@walletconnect/ethereum-provider@2.11.2(react@18.2.0): resolution: {integrity: sha512-BUDqee0Uy2rCZVkW5Ao3q6Ado/3fePYnFdryVF+YL6bPhj+xQZ5OfKodl+uvs7Rwq++O5wTX2RqOTzpW7+v+Mg==} dependencies: @@ -5587,6 +6101,38 @@ packages: tslib: 1.14.1 dev: false + /@walletconnect/sign-client@2.11.1: + resolution: {integrity: sha512-s3oKSx6/F5X2WmkV1jfJImBFACf9Km5HpTb+n5q+mobJVpUQw/clvoVyIrNNppLhm1V1S/ylHXh0qCrDppDpCA==} + dependencies: + '@walletconnect/core': 2.11.1 + '@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.1 + '@walletconnect/utils': 2.11.1 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + /@walletconnect/sign-client@2.11.2: resolution: {integrity: sha512-MfBcuSz2GmMH+P7MrCP46mVE5qhP0ZyWA0FyIH6/WuxQ6G+MgKsGfaITqakpRPsykWOJq8tXMs3XvUPDU413OQ==} dependencies: @@ -5625,6 +6171,32 @@ packages: tslib: 1.14.1 dev: false + /@walletconnect/types@2.11.1: + resolution: {integrity: sha512-UbdbX+d6MOK0AXKxt5imV3KvAcLVpZUHylaRDIP5ffwVylM/p4DHnKppil1Qq5N+IGDr3RsUwLGFkKjqsQYRKw==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.0.1 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + dev: false + /@walletconnect/types@2.11.2: resolution: {integrity: sha512-p632MFB+lJbip2cvtXPBQslpUdiw1sDtQ5y855bOlAGquay+6fZ4h1DcDePeKQDQM3P77ax2a9aNPZxV6y/h1Q==} dependencies: @@ -5651,6 +6223,38 @@ packages: - uWebSockets.js dev: false + /@walletconnect/universal-provider@2.11.1: + resolution: {integrity: sha512-BJvPYByIfbBYF4x8mqDV79ebQX0tD54pp8itsqrHWn0qKZeJyIH8sQ69yY0GnbJrzoFS3ZLULdC0yDxWDeuRGw==} + 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/logger': 2.0.1 + '@walletconnect/sign-client': 2.11.1 + '@walletconnect/types': 2.11.1 + '@walletconnect/utils': 2.11.1 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + /@walletconnect/universal-provider@2.11.2: resolution: {integrity: sha512-cNtIn5AVoDxKAJ4PmB8m5adnf5mYQMUamEUPKMVvOPscfGtIMQEh9peKsh2AN5xcRVDbgluC01Id545evFyymw==} dependencies: @@ -5683,6 +6287,40 @@ packages: - utf-8-validate dev: false + /@walletconnect/utils@2.11.1: + resolution: {integrity: sha512-wRFDHN86dZ05mCET1H3912odIeQa8j7cZKxl1FlWRpV2YsILj9HCYSX6Uq2brwO02Kv2vryke44G1r8XI/LViA==} + 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.9 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.11.1 + '@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.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + dev: false + /@walletconnect/utils@2.11.2: resolution: {integrity: sha512-LyfdmrnZY6dWqlF4eDrx5jpUwsB2bEPjoqR5Z6rXPiHJKUOdJt7az+mNOn5KTSOlRpd1DmozrBrWr+G9fFLYVw==} dependencies: @@ -5747,6 +6385,106 @@ packages: - react dev: false + /@web3modal/ethers5@4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(ethers@5.7.2)(react@18.2.0): + resolution: {integrity: sha512-N/GBw7fGz8tGuJNdT/u20xZffkZAJf2ptylge9ffcX07Y+6DTYUc0Zsn/CayORuaWKb9XzRCC4hAySlV+rxR1Q==} + peerDependencies: + '@web3modal/siwe': 4.1.5 + ethers: '>=4.1.0 <6.0.0' + react: '>=17' + react-dom: '>=17' + vue: '>=3' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + vue: + optional: true + dependencies: + '@coinbase/wallet-sdk': 3.9.1 + '@walletconnect/ethereum-provider': 2.11.1(react@18.2.0) + '@web3modal/polyfills': 4.1.5 + '@web3modal/scaffold': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) + '@web3modal/scaffold-react': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) + '@web3modal/scaffold-utils': 4.1.5(react@18.2.0) + '@web3modal/scaffold-vue': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) + '@web3modal/siwe': 4.1.5(react@18.2.0) + ethers: 5.7.2 + react: 18.2.0 + valtio: 1.11.2(react@18.2.0) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - '@web3modal/wallet' + - bufferutil + - encoding + - ioredis + - supports-color + - uWebSockets.js + - utf-8-validate + dev: false + + /@web3modal/ethers@4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(ethers@5.7.2)(react@18.2.0): + resolution: {integrity: sha512-laUovo5L58aeBTSZQ3Vjspil6hfzVuUNCV/5dqWKJXv36Ju53JtsrPnS5Tnxt1d1gTnvv+l3SJWZmYEEV6H8oA==} + peerDependencies: + '@web3modal/siwe': 4.1.5 + ethers: '>=6.0.0' + react: '>=17' + react-dom: '>=17' + vue: '>=3' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + vue: + optional: true + dependencies: + '@coinbase/wallet-sdk': 3.9.1 + '@walletconnect/ethereum-provider': 2.11.1(react@18.2.0) + '@web3modal/polyfills': 4.1.5 + '@web3modal/scaffold': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) + '@web3modal/scaffold-react': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) + '@web3modal/scaffold-utils': 4.1.5(react@18.2.0) + '@web3modal/scaffold-vue': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) + '@web3modal/siwe': 4.1.5(react@18.2.0) + ethers: 5.7.2 + react: 18.2.0 + valtio: 1.11.2(react@18.2.0) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - '@web3modal/wallet' + - bufferutil + - encoding + - ioredis + - supports-color + - uWebSockets.js + - utf-8-validate + dev: false + /@web3modal/polyfills@4.1.5: resolution: {integrity: sha512-74CGHzgNbB4BgF3Nr/YMhc3y6E3k08/o+VxOSvOlQvfK/nxrKWHcblOVh8A2+kFFP85HqAIy8OSmx8aV6j6vtA==} dependencies: @@ -6050,6 +6788,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + dev: false + /aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} @@ -6344,6 +7086,10 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: false + /bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + dev: false + /bech32@2.0.0: resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} @@ -7240,6 +7986,18 @@ packages: /electron-to-chromium@1.4.728: resolution: {integrity: sha512-Ud1v7hJJYIqehlUJGqR6PF1Ek8l80zWwxA6nGxigBsGJ9f9M2fciHyrIiNMerSHSH3p+0/Ia7jIlnDkt41h5cw==} + /elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + /elliptic@6.5.5: resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} dependencies: @@ -7694,6 +8452,44 @@ packages: '@scure/bip39': 1.2.2 dev: false + /ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /ethers@6.11.1: resolution: {integrity: sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==} engines: {node: '>=14.0.0'} @@ -8958,6 +9754,10 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + /js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: false + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -11229,6 +12029,10 @@ packages: ajv-keywords: 3.5.2(ajv@6.12.6) dev: true + /scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + dev: false + /secp256k1@5.0.0: resolution: {integrity: sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==} engines: {node: '>=14.0.0'} @@ -12089,7 +12893,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(ts-node@10.9.2) + postcss-load-config: 4.0.2(postcss@8.4.38) resolve-from: 5.0.0 rollup: 3.29.4 source-map: 0.8.0-beta.0 @@ -12140,6 +12944,45 @@ packages: - ts-node dev: true + /tsup@8.0.2(typescript@5.4.3): + resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + dependencies: + bundle-require: 4.0.2(esbuild@0.19.12) + cac: 6.7.14 + chokidar: 3.6.0 + debug: 4.3.4 + esbuild: 0.19.12 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 4.0.2(postcss@8.4.38) + resolve-from: 5.0.0 + rollup: 4.14.0 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tree-kill: 1.2.2 + typescript: 5.4.3 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + /tsx@4.7.2: resolution: {integrity: sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==} engines: {node: '>=18.0.0'} @@ -13091,6 +13934,19 @@ packages: async-limiter: 1.0.1 dev: false + /ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} From fab8817558231ed5851bd1c01e36a1fc10199f5c Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Sun, 7 Apr 2024 20:20:24 -0300 Subject: [PATCH 03/39] fix: platform changed to browser --- packages/connectors/tsup.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/connectors/tsup.config.js b/packages/connectors/tsup.config.js index 8d59ac3f6..d0ee142e0 100644 --- a/packages/connectors/tsup.config.js +++ b/packages/connectors/tsup.config.js @@ -3,6 +3,7 @@ import { defineConfig } from 'tsup'; export default defineConfig((options) => ({ ...baseConfig(options, { withReact: false }), + platform: 'browser', entry: ['src/index.ts'], external: ['fuels'], noExternal: [ From ae3c5df6e2e88bd2d7cf52567cef6c41221c3f82 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Sun, 7 Apr 2024 20:21:37 -0300 Subject: [PATCH 04/39] feat: walletconnect connector added to default connectors and evm connector temporarily removed --- packages/connectors/package.json | 2 +- packages/connectors/src/defaultConnectors.ts | 8 ++++---- packages/connectors/src/index.ts | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/connectors/package.json b/packages/connectors/package.json index eda69ac34..60d15df25 100644 --- a/packages/connectors/package.json +++ b/packages/connectors/package.json @@ -25,7 +25,7 @@ "@fuel-connectors/fuel-wallet": "workspace:*", "@fuel-connectors/fuelet-wallet": "workspace:*", "@fuel-connectors/evm-connector": "workspace:*", - "@fuel-connectors/ethereum-connector": "workspace:*", + "@fuel-connectors/walletconnect-connector": "workspace:*", "fuels": "0.79.0", "terser": "5.29.2", "tsup": "8.0.2", diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index 48ccc3f01..8fe33fb56 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -1,8 +1,8 @@ -import { EthereumWalletConnector } from '@fuel-connectors/ethereum-connector'; -import { EVMWalletConnector } from '@fuel-connectors/evm-connector'; +// import { EVMWalletConnector } from '@fuel-connectors/evm-connector'; import { FuelWalletDevelopmentConnector } from '@fuel-connectors/fuel-development-wallet'; import { FuelWalletConnector } from '@fuel-connectors/fuel-wallet'; import { FueletWalletConnector } from '@fuel-connectors/fuelet-wallet'; +import { WalletconnectWalletConnector } from '@fuel-connectors/walletconnect-connector'; import type { FuelConnector } from 'fuels'; type DefaultConnectors = { @@ -15,8 +15,8 @@ export function defaultConnectors({ const connectors = [ new FuelWalletConnector(), new FueletWalletConnector(), - new EVMWalletConnector(), - new EthereumWalletConnector(), + // new EVMWalletConnector(), + new WalletconnectWalletConnector(), ]; if (devMode) { diff --git a/packages/connectors/src/index.ts b/packages/connectors/src/index.ts index a5f0d3742..ea11da79b 100644 --- a/packages/connectors/src/index.ts +++ b/packages/connectors/src/index.ts @@ -2,5 +2,5 @@ export * from './defaultConnectors'; export * from '@fuel-connectors/fuel-development-wallet'; export * from '@fuel-connectors/fuel-wallet'; export * from '@fuel-connectors/fuelet-wallet'; -export * from '@fuel-connectors/evm-connector'; -export * from '@fuel-connectors/ethereum-connector'; +// export * from '@fuel-connectors/evm-connector'; +export * from '@fuel-connectors/walletconnect-connector'; From 78260be626eaaf88c89b4b60684d3ee89aa71cdb Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Sun, 7 Apr 2024 20:23:46 -0300 Subject: [PATCH 05/39] build: pnpm-lock updated --- pnpm-lock.yaml | 888 +------------------------------------------------ 1 file changed, 16 insertions(+), 872 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 802ccdbc6..3b92ed048 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,9 +99,6 @@ importers: packages/connectors: devDependencies: - '@fuel-connectors/ethereum-connector': - specifier: workspace:* - version: link:../ethereum-connector '@fuel-connectors/evm-connector': specifier: workspace:* version: link:../evm-connector @@ -114,152 +111,21 @@ importers: '@fuel-connectors/fuelet-wallet': specifier: workspace:* version: link:../fuelet-wallet + '@fuel-connectors/walletconnect-connector': + specifier: workspace:* + version: link:../walletconnect-connector fuels: specifier: 0.79.0 version: 0.79.0(dexie@4.0.1) terser: specifier: 5.29.2 version: 5.29.2 - tsup: - specifier: 8.0.2 - version: 8.0.2(typescript@5.4.3) - typescript: - specifier: 5.4.3 - version: 5.4.3 - - packages/ethereum-connector: - dependencies: - '@ethereumjs/util': - specifier: ^9.0.1 - version: 9.0.3 - '@ethersproject/bytes': - specifier: ^5.7.0 - version: 5.7.0 - '@wagmi/connectors': - specifier: 4.1.24 - version: 4.1.24(@wagmi/core@2.6.15)(react-native@0.73.6)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) - '@wagmi/core': - specifier: 2.6.15 - version: 2.6.15(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) - '@web3modal/ethers': - specifier: 4.1.5 - version: 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(ethers@5.7.2)(react@18.2.0) - '@web3modal/wagmi': - specifier: 4.1.5 - version: 4.1.5(@wagmi/connectors@4.1.24)(@wagmi/core@2.6.15)(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0)(viem@2.9.9) - ethers: - specifier: 5.7.2 - version: 5.7.2 - memoizee: - specifier: ^0.4.15 - version: 0.4.15 - viem: - specifier: 2.9.9 - version: 2.9.9(typescript@5.4.3) - devDependencies: - '@fuel-ts/account': - specifier: ^0.79.0 - version: 0.79.0(dexie@4.0.1) - '@fuel-ts/forc': - specifier: 0.79.0 - version: 0.79.0 - '@fuel-ts/fuel-core': - specifier: ^0.79.0 - version: 0.79.0 - '@types/memoizee': - specifier: ^0.4.11 - version: 0.4.11 - fuels: - specifier: ^0.79.0 - version: 0.79.0(dexie@4.0.1) - jsdom: - specifier: 24.0.0 - version: 24.0.0 - ts-loader: - specifier: ^9.5.1 - version: 9.5.1(typescript@5.4.3)(webpack@5.91.0) - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.4)(typescript@5.4.3) tsup: specifier: 8.0.2 version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) - tsx: - specifier: ^4.7.0 - version: 4.7.2 typescript: specifier: 5.4.3 version: 5.4.3 - vite: - specifier: ^5.0.10 - version: 5.2.6(@types/node@20.12.4) - vite-plugin-dts: - specifier: ^3.6.4 - version: 3.8.1(@types/node@20.12.4)(typescript@5.4.3)(vite@5.2.6) - vitest: - specifier: ^1.4.0 - version: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0) - - packages/ethereum-connector-ether: - dependencies: - '@ethereumjs/util': - specifier: ^9.0.1 - version: 9.0.3 - '@ethersproject/bytes': - specifier: ^5.7.0 - version: 5.7.0 - '@web3modal/ethers5': - specifier: 4.1.5 - version: 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(ethers@5.7.2)(react@18.2.0) - ethers: - specifier: 5.7.2 - version: 5.7.2 - memoizee: - specifier: ^0.4.15 - version: 0.4.15 - devDependencies: - '@fuel-ts/account': - specifier: ^0.79.0 - version: 0.79.0(dexie@4.0.1) - '@fuel-ts/forc': - specifier: 0.79.0 - version: 0.79.0 - '@fuel-ts/fuel-core': - specifier: ^0.79.0 - version: 0.79.0 - '@types/memoizee': - specifier: ^0.4.11 - version: 0.4.11 - fuels: - specifier: ^0.79.0 - version: 0.79.0(dexie@4.0.1) - jsdom: - specifier: 24.0.0 - version: 24.0.0 - ts-loader: - specifier: ^9.5.1 - version: 9.5.1(typescript@5.4.3)(webpack@5.91.0) - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.4)(typescript@5.4.3) - tsup: - specifier: 8.0.2 - version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) - tsx: - specifier: ^4.7.0 - version: 4.7.2 - typescript: - specifier: 5.4.3 - version: 5.4.3 - vite: - specifier: ^5.0.10 - version: 5.2.6(@types/node@20.12.4) - vite-plugin-dts: - specifier: ^3.6.4 - version: 3.8.1(@types/node@20.12.4)(typescript@5.4.3)(vite@5.2.6) - vitest: - specifier: ^1.4.0 - version: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0) packages/evm-connector: dependencies: @@ -326,7 +192,7 @@ importers: version: 0.79.0(dexie@4.0.1) tsup: specifier: 8.0.2 - version: 8.0.2(typescript@5.4.3) + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) typescript: specifier: 5.4.3 version: 5.4.3 @@ -351,7 +217,7 @@ importers: version: 0.79.0(dexie@4.0.1) tsup: specifier: 8.0.2 - version: 8.0.2(typescript@5.4.3) + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) typescript: specifier: 5.4.3 version: 5.4.3 @@ -372,7 +238,7 @@ importers: version: 0.79.0(dexie@4.0.1) tsup: specifier: 8.0.2 - version: 8.0.2(typescript@5.4.3) + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) typescript: specifier: 5.4.3 version: 5.4.3 @@ -2955,321 +2821,16 @@ packages: ethereum-cryptography: 2.1.3 dev: false - /@ethersproject/abi@5.7.0: - resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} - dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: false - - /@ethersproject/abstract-provider@5.7.0: - resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - dev: false - - /@ethersproject/abstract-signer@5.7.0: - resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - dev: false - - /@ethersproject/address@5.7.0: - resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/rlp': 5.7.0 - dev: false - - /@ethersproject/base64@5.7.0: - resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} - dependencies: - '@ethersproject/bytes': 5.7.0 - dev: false - - /@ethersproject/basex@5.7.0: - resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/properties': 5.7.0 - dev: false - - /@ethersproject/bignumber@5.7.0: - resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - bn.js: 5.2.1 - dev: false - /@ethersproject/bytes@5.7.0: resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} dependencies: '@ethersproject/logger': 5.7.0 dev: false - /@ethersproject/constants@5.7.0: - resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - dev: false - - /@ethersproject/contracts@5.7.0: - resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} - dependencies: - '@ethersproject/abi': 5.7.0 - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - dev: false - - /@ethersproject/hash@5.7.0: - resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: false - - /@ethersproject/hdnode@5.7.0: - resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wordlists': 5.7.0 - dev: false - - /@ethersproject/json-wallets@5.7.0: - resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - aes-js: 3.0.0 - scrypt-js: 3.0.1 - dev: false - - /@ethersproject/keccak256@5.7.0: - resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} - dependencies: - '@ethersproject/bytes': 5.7.0 - js-sha3: 0.8.0 - dev: false - /@ethersproject/logger@5.7.0: resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} dev: false - /@ethersproject/networks@5.7.1: - resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} - dependencies: - '@ethersproject/logger': 5.7.0 - dev: false - - /@ethersproject/pbkdf2@5.7.0: - resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/sha2': 5.7.0 - dev: false - - /@ethersproject/properties@5.7.0: - resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} - dependencies: - '@ethersproject/logger': 5.7.0 - dev: false - - /@ethersproject/providers@5.7.2: - resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - bech32: 1.1.4 - ws: 7.4.6 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@ethersproject/random@5.7.0: - resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: false - - /@ethersproject/rlp@5.7.0: - resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: false - - /@ethersproject/sha2@5.7.0: - resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - hash.js: 1.1.7 - dev: false - - /@ethersproject/signing-key@5.7.0: - resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - bn.js: 5.2.1 - elliptic: 6.5.4 - hash.js: 1.1.7 - dev: false - - /@ethersproject/solidity@5.7.0: - resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: false - - /@ethersproject/strings@5.7.0: - resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: false - - /@ethersproject/transactions@5.7.0: - resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} - dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - dev: false - - /@ethersproject/units@5.7.0: - resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: false - - /@ethersproject/wallet@5.7.0: - resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/json-wallets': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wordlists': 5.7.0 - dev: false - - /@ethersproject/web@5.7.1: - resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} - dependencies: - '@ethersproject/base64': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: false - - /@ethersproject/wordlists@5.7.0: - resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: false - /@fuel-ts/abi-coder@0.79.0: resolution: {integrity: sha512-Jdp0megar7aFP+jecnUvd1SR488wYG0AMb0C7lXpXoWIryk8DwHv8odIMXnj5WA7/VpApXiREgYoTCFs8k65oA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -5795,46 +5356,6 @@ packages: - zod dev: false - /@walletconnect/core@2.11.1: - resolution: {integrity: sha512-T57Vd7YdbHPsy3tthBuwrhaZNafN0+PqjISFRNeJy/bsKdXxpJg2hGSARuOTpCO7V6VcaatqlaSMuG3DrnG5rA==} - dependencies: - '@walletconnect/heartbeat': 1.2.1 - '@walletconnect/jsonrpc-provider': 1.0.13 - '@walletconnect/jsonrpc-types': 1.0.3 - '@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.1 - '@walletconnect/utils': 2.11.1 - events: 3.3.0 - isomorphic-unfetch: 3.1.0 - lodash.isequal: 4.5.0 - uint8arrays: 3.1.1 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - encoding - - ioredis - - uWebSockets.js - - utf-8-validate - dev: false - /@walletconnect/core@2.11.2: resolution: {integrity: sha512-bB4SiXX8hX3/hyBfVPC5gwZCXCl+OPj+/EDVM71iAO3TDsh78KPbrVAbDnnsbHzZVHlsMohtXX3j5XVsheN3+g==} dependencies: @@ -5881,41 +5402,6 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/ethereum-provider@2.11.1(react@18.2.0): - resolution: {integrity: sha512-UfQH0ho24aa2M1xYmanbJv2ggQPebKmQytp2j20QEvURJ2R0v7YKWZ+0PfwOs6o6cuGw6gGxy/0WQXQRZSAsfg==} - 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(react@18.2.0) - '@walletconnect/sign-client': 2.11.1 - '@walletconnect/types': 2.11.1 - '@walletconnect/universal-provider': 2.11.1 - '@walletconnect/utils': 2.11.1 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - encoding - - ioredis - - react - - uWebSockets.js - - utf-8-validate - dev: false - /@walletconnect/ethereum-provider@2.11.2(react@18.2.0): resolution: {integrity: sha512-BUDqee0Uy2rCZVkW5Ao3q6Ado/3fePYnFdryVF+YL6bPhj+xQZ5OfKodl+uvs7Rwq++O5wTX2RqOTzpW7+v+Mg==} dependencies: @@ -6090,47 +5576,15 @@ packages: '@stablelib/ed25519': 1.0.3 '@stablelib/random': 1.0.2 '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - tslib: 1.14.1 - uint8arrays: 3.1.1 - dev: false - - /@walletconnect/safe-json@1.0.2: - resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} - dependencies: - tslib: 1.14.1 - dev: false - - /@walletconnect/sign-client@2.11.1: - resolution: {integrity: sha512-s3oKSx6/F5X2WmkV1jfJImBFACf9Km5HpTb+n5q+mobJVpUQw/clvoVyIrNNppLhm1V1S/ylHXh0qCrDppDpCA==} - dependencies: - '@walletconnect/core': 2.11.1 - '@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.1 - '@walletconnect/utils': 2.11.1 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - encoding - - ioredis - - uWebSockets.js - - utf-8-validate + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + uint8arrays: 3.1.1 + dev: false + + /@walletconnect/safe-json@1.0.2: + resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} + dependencies: + tslib: 1.14.1 dev: false /@walletconnect/sign-client@2.11.2: @@ -6171,32 +5625,6 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/types@2.11.1: - resolution: {integrity: sha512-UbdbX+d6MOK0AXKxt5imV3KvAcLVpZUHylaRDIP5ffwVylM/p4DHnKppil1Qq5N+IGDr3RsUwLGFkKjqsQYRKw==} - dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.1 - '@walletconnect/jsonrpc-types': 1.0.3 - '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.0.1 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - uWebSockets.js - dev: false - /@walletconnect/types@2.11.2: resolution: {integrity: sha512-p632MFB+lJbip2cvtXPBQslpUdiw1sDtQ5y855bOlAGquay+6fZ4h1DcDePeKQDQM3P77ax2a9aNPZxV6y/h1Q==} dependencies: @@ -6223,38 +5651,6 @@ packages: - uWebSockets.js dev: false - /@walletconnect/universal-provider@2.11.1: - resolution: {integrity: sha512-BJvPYByIfbBYF4x8mqDV79ebQX0tD54pp8itsqrHWn0qKZeJyIH8sQ69yY0GnbJrzoFS3ZLULdC0yDxWDeuRGw==} - 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/logger': 2.0.1 - '@walletconnect/sign-client': 2.11.1 - '@walletconnect/types': 2.11.1 - '@walletconnect/utils': 2.11.1 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - encoding - - ioredis - - uWebSockets.js - - utf-8-validate - dev: false - /@walletconnect/universal-provider@2.11.2: resolution: {integrity: sha512-cNtIn5AVoDxKAJ4PmB8m5adnf5mYQMUamEUPKMVvOPscfGtIMQEh9peKsh2AN5xcRVDbgluC01Id545evFyymw==} dependencies: @@ -6287,40 +5683,6 @@ packages: - utf-8-validate dev: false - /@walletconnect/utils@2.11.1: - resolution: {integrity: sha512-wRFDHN86dZ05mCET1H3912odIeQa8j7cZKxl1FlWRpV2YsILj9HCYSX6Uq2brwO02Kv2vryke44G1r8XI/LViA==} - 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.9 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.11.1 - '@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.1 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - uWebSockets.js - dev: false - /@walletconnect/utils@2.11.2: resolution: {integrity: sha512-LyfdmrnZY6dWqlF4eDrx5jpUwsB2bEPjoqR5Z6rXPiHJKUOdJt7az+mNOn5KTSOlRpd1DmozrBrWr+G9fFLYVw==} dependencies: @@ -6385,106 +5747,6 @@ packages: - react dev: false - /@web3modal/ethers5@4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(ethers@5.7.2)(react@18.2.0): - resolution: {integrity: sha512-N/GBw7fGz8tGuJNdT/u20xZffkZAJf2ptylge9ffcX07Y+6DTYUc0Zsn/CayORuaWKb9XzRCC4hAySlV+rxR1Q==} - peerDependencies: - '@web3modal/siwe': 4.1.5 - ethers: '>=4.1.0 <6.0.0' - react: '>=17' - react-dom: '>=17' - vue: '>=3' - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - vue: - optional: true - dependencies: - '@coinbase/wallet-sdk': 3.9.1 - '@walletconnect/ethereum-provider': 2.11.1(react@18.2.0) - '@web3modal/polyfills': 4.1.5 - '@web3modal/scaffold': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) - '@web3modal/scaffold-react': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) - '@web3modal/scaffold-utils': 4.1.5(react@18.2.0) - '@web3modal/scaffold-vue': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) - '@web3modal/siwe': 4.1.5(react@18.2.0) - ethers: 5.7.2 - react: 18.2.0 - valtio: 1.11.2(react@18.2.0) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/kv' - - '@web3modal/wallet' - - bufferutil - - encoding - - ioredis - - supports-color - - uWebSockets.js - - utf-8-validate - dev: false - - /@web3modal/ethers@4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(ethers@5.7.2)(react@18.2.0): - resolution: {integrity: sha512-laUovo5L58aeBTSZQ3Vjspil6hfzVuUNCV/5dqWKJXv36Ju53JtsrPnS5Tnxt1d1gTnvv+l3SJWZmYEEV6H8oA==} - peerDependencies: - '@web3modal/siwe': 4.1.5 - ethers: '>=6.0.0' - react: '>=17' - react-dom: '>=17' - vue: '>=3' - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - vue: - optional: true - dependencies: - '@coinbase/wallet-sdk': 3.9.1 - '@walletconnect/ethereum-provider': 2.11.1(react@18.2.0) - '@web3modal/polyfills': 4.1.5 - '@web3modal/scaffold': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) - '@web3modal/scaffold-react': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) - '@web3modal/scaffold-utils': 4.1.5(react@18.2.0) - '@web3modal/scaffold-vue': 4.1.5(@web3modal/siwe@4.1.5)(@web3modal/wallet@4.1.5)(react@18.2.0) - '@web3modal/siwe': 4.1.5(react@18.2.0) - ethers: 5.7.2 - react: 18.2.0 - valtio: 1.11.2(react@18.2.0) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/kv' - - '@web3modal/wallet' - - bufferutil - - encoding - - ioredis - - supports-color - - uWebSockets.js - - utf-8-validate - dev: false - /@web3modal/polyfills@4.1.5: resolution: {integrity: sha512-74CGHzgNbB4BgF3Nr/YMhc3y6E3k08/o+VxOSvOlQvfK/nxrKWHcblOVh8A2+kFFP85HqAIy8OSmx8aV6j6vtA==} dependencies: @@ -6788,10 +6050,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - /aes-js@3.0.0: - resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} - dev: false - /aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} @@ -7086,10 +6344,6 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: false - /bech32@1.1.4: - resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} - dev: false - /bech32@2.0.0: resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} @@ -7986,18 +7240,6 @@ packages: /electron-to-chromium@1.4.728: resolution: {integrity: sha512-Ud1v7hJJYIqehlUJGqR6PF1Ek8l80zWwxA6nGxigBsGJ9f9M2fciHyrIiNMerSHSH3p+0/Ia7jIlnDkt41h5cw==} - /elliptic@6.5.4: - resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: false - /elliptic@6.5.5: resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} dependencies: @@ -8452,44 +7694,6 @@ packages: '@scure/bip39': 1.2.2 dev: false - /ethers@5.7.2: - resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} - dependencies: - '@ethersproject/abi': 5.7.0 - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/contracts': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/json-wallets': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/providers': 5.7.2 - '@ethersproject/random': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/solidity': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/units': 5.7.0 - '@ethersproject/wallet': 5.7.0 - '@ethersproject/web': 5.7.1 - '@ethersproject/wordlists': 5.7.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /ethers@6.11.1: resolution: {integrity: sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==} engines: {node: '>=14.0.0'} @@ -9754,10 +8958,6 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} - /js-sha3@0.8.0: - resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} - dev: false - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -12029,10 +11229,6 @@ packages: ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /scrypt-js@3.0.1: - resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} - dev: false - /secp256k1@5.0.0: resolution: {integrity: sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==} engines: {node: '>=14.0.0'} @@ -12893,7 +12089,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.4.38) + postcss-load-config: 4.0.2(ts-node@10.9.2) resolve-from: 5.0.0 rollup: 3.29.4 source-map: 0.8.0-beta.0 @@ -12944,45 +12140,6 @@ packages: - ts-node dev: true - /tsup@8.0.2(typescript@5.4.3): - resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - dependencies: - bundle-require: 4.0.2(esbuild@0.19.12) - cac: 6.7.14 - chokidar: 3.6.0 - debug: 4.3.4 - esbuild: 0.19.12 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.4.38) - resolve-from: 5.0.0 - rollup: 4.14.0 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tree-kill: 1.2.2 - typescript: 5.4.3 - transitivePeerDependencies: - - supports-color - - ts-node - dev: true - /tsx@4.7.2: resolution: {integrity: sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==} engines: {node: '>=18.0.0'} @@ -13934,19 +13091,6 @@ packages: async-limiter: 1.0.1 dev: false - /ws@7.4.6: - resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} From 911b465c5754a380872ee7373fa3d5f4d0bd0694 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Mon, 8 Apr 2024 12:22:54 -0300 Subject: [PATCH 06/39] fix: connect method fixed --- .../src/walletconnectWalletConnector.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts index c4c144ac9..340b6d47b 100644 --- a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts +++ b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts @@ -249,11 +249,14 @@ export class WalletconnectWalletConnector extends FuelConnector { if (!(await this.isConnected())) { await this.ethModal?.open(); - this.emit(this.events.connection, true); + this.ethModal?.subscribeEvents((event) => { + if (event.data.event === 'CONNECT_SUCCESS') { + this.emit(this.events.connection, true); - // @ts-ignore - this.on(this.events.CONNECTION, (connection: boolean) => { - this.connected = connection; + this.on(this.events.connection, (connection: boolean) => { + this.connected = connection; + }); + } }); return true; From f98375fb3e2739140799419d8ce9e4da0a25ed2d Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Mon, 8 Apr 2024 18:22:27 -0300 Subject: [PATCH 07/39] fix: window.ethereum removed as provider --- .../src/walletconnectWalletConnector.ts | 78 ++++++------------- 1 file changed, 25 insertions(+), 53 deletions(-) diff --git a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts index 340b6d47b..0b3d7f05e 100644 --- a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts +++ b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts @@ -8,7 +8,6 @@ import { disconnect, getAccount, injected, - reconnect, } from '@wagmi/core'; import { mainnet } from '@wagmi/core/chains'; import { type Web3Modal, createWeb3Modal } from '@web3modal/wagmi'; @@ -26,12 +25,11 @@ import { transactionRequestify, } from 'fuels'; import { PredicateAccount } from './Predicate'; -import { BETA_5_URL, WINDOW } from './constants'; +import { BETA_5_URL } from './constants'; import { type EthereumWalletConnectorConfig, EthereumWalletConnectorEvents, } from './types'; -import type { EIP1193Provider } from './utils/eip-1193'; import { ETHEREUM_ICON } from './utils/ethereum-icon'; import { createPredicate } from './utils/predicate'; import { predicates } from './utils/predicateResources'; @@ -74,7 +72,6 @@ export class WalletconnectWalletConnector extends FuelConnector { this.setupEthereumEvents(); } - // * WEB3MODAL AND WAGMI async configProviders(config: EthereumWalletConnectorConfig = {}) { const metadata = { name: 'Web3Modal', @@ -101,7 +98,6 @@ export class WalletconnectWalletConnector extends FuelConnector { }), ], }); - reconnect(this.ethConfig); this.ethModal = createWeb3Modal({ wagmiConfig: this.ethConfig, @@ -112,16 +108,14 @@ export class WalletconnectWalletConnector extends FuelConnector { this.config = Object.assign(config, { fuelProvider: config.fuelProvider || FuelProvider.create(BETA_5_URL), - ethProvider: this.ethConfig?.connectors[0]?.getProvider(), + ethProvider: config.ethProvider || null, }); } - // * WEB3MODAL AND WAGMI setupEthereumEvents() { this._ethereumEvents = Number( setInterval(() => { - //@ts-ignore - if (WINDOW?.ethereum) { + if (this.ethProvider) { clearInterval(this._ethereumEvents); window.dispatchEvent( new CustomEvent('FuelConnector', { detail: this }), @@ -131,26 +125,6 @@ export class WalletconnectWalletConnector extends FuelConnector { ); } - // * WEB3MODAL AND WAGMI - async getLazyEthereum() { - reconnect(this.ethConfig as Config); - - const ethProvider = await getAccount( - this.ethConfig as Config, - ).connector?.getProvider(); - - if (!ethProvider) { - if (WINDOW?.ethereum) { - //@ts-ignore - return WINDOW.ethereum; - } - return null; - } - - return ethProvider; - } - // * WEB3MODAL AND WAGMI - /** * ============================================================ * Application communication methods @@ -159,12 +133,6 @@ export class WalletconnectWalletConnector extends FuelConnector { async getProviders() { if (!this.fuelProvider || !this.ethProvider) { - this.ethProvider = (await this.getLazyEthereum()) as EIP1193Provider; - - if (!this.ethProvider) { - throw new Error('Ethereum provider not found'); - } - this.fuelProvider = (await this.config.fuelProvider) ?? null; if (!this.fuelProvider) { @@ -174,7 +142,6 @@ export class WalletconnectWalletConnector extends FuelConnector { return { fuelProvider: this.fuelProvider, - ethProvider: this.ethProvider, }; } @@ -187,20 +154,20 @@ export class WalletconnectWalletConnector extends FuelConnector { } async setupEventBridge() { - const { ethProvider } = await this.getProviders(); //@ts-ignore - ethProvider.on(this.events.ACCOUNTS_CHANGED, async (accounts) => { + this.ethProvider.on(this.events.ACCOUNTS_CHANGED, async (accounts) => { this.emit('accounts', await this.accounts()); if (this._currentAccount !== accounts[0]) { await this.setupCurrentAccount(); } }); //@ts-ignore - ethProvider.on(this.events.CONNECT, async (_arg) => { + this.ethProvider.on(this.events.CONNECT, async (_arg) => { this.emit('connection', await this.isConnected()); }); + //@ts-ignore - ethProvider.on(this.events.DISCONNECT, async (_arg) => { + this.ethProvider.on(this.events.DISCONNECT, async (_arg) => { this.emit('connection', await this.isConnected()); }); } @@ -220,7 +187,6 @@ export class WalletconnectWalletConnector extends FuelConnector { async ping(): Promise { await this.configProviders(); - await this.setup(); return true; } @@ -236,11 +202,13 @@ export class WalletconnectWalletConnector extends FuelConnector { } async accounts(): Promise> { - const { ethProvider } = await this.getProviders(); + if (!this.ethProvider) { + return []; + } const accounts = //@ts-ignore - await this.predicateAccount.getPredicateAccounts(ethProvider); + await this.predicateAccount.getPredicateAccounts(this.ethProvider); return accounts.map((account) => account.predicateAccount); } @@ -249,8 +217,14 @@ export class WalletconnectWalletConnector extends FuelConnector { if (!(await this.isConnected())) { await this.ethModal?.open(); - this.ethModal?.subscribeEvents((event) => { + this.ethModal?.subscribeEvents(async (event) => { if (event.data.event === 'CONNECT_SUCCESS') { + this.ethProvider = await getAccount( + this.ethConfig as Config, + ).connector?.getProvider(); + + await this.setup(); + this.emit(this.events.connection, true); this.on(this.events.connection, (connection: boolean) => { @@ -266,13 +240,11 @@ export class WalletconnectWalletConnector extends FuelConnector { } async disconnect(): Promise { - if (await this.isConnected()) { - await disconnect(this.ethConfig as Config); + await disconnect(this.ethConfig as Config); - this.emit(this.events.connection, false); - this.emit(this.events.accounts, []); - this.emit(this.events.currentAccount, null); - } + this.emit(this.events.connection, false); + this.emit(this.events.accounts, []); + this.emit(this.events.currentAccount, null); return false; } @@ -289,12 +261,12 @@ export class WalletconnectWalletConnector extends FuelConnector { throw Error('No connected accounts'); } - const { ethProvider, fuelProvider } = await this.getProviders(); + const { fuelProvider } = await this.getProviders(); const chainId = fuelProvider.getChainId(); const account = await this.predicateAccount.getPredicateFromAddress( address, //@ts-ignore - ethProvider, + this.ethProvider, ); if (!account) { throw Error(`No account found for ${address}`); @@ -320,7 +292,7 @@ export class WalletconnectWalletConnector extends FuelConnector { const txID = requestWithPredicateAttached.getTransactionId(chainId); //@ts-ignore - const signature = await ethProvider.request({ + const signature = await this.ethProvider.request({ method: 'personal_sign', params: [txID, account.ethAccount], }); From c30be18b5440aaf99e71649a252bb645e83a4795 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Mon, 8 Apr 2024 20:09:37 -0300 Subject: [PATCH 08/39] fix: disconnect method fixed to reload page as walletconnect needs --- .../src/walletconnectWalletConnector.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts index 0b3d7f05e..fe55bafb2 100644 --- a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts +++ b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts @@ -240,12 +240,16 @@ export class WalletconnectWalletConnector extends FuelConnector { } async disconnect(): Promise { - await disconnect(this.ethConfig as Config); + this.ethProvider = null; this.emit(this.events.connection, false); this.emit(this.events.accounts, []); this.emit(this.events.currentAccount, null); + await getAccount(this.ethConfig as Config).connector?.disconnect(); + + location.reload(); + return false; } From a699b8e05cc0d4f3ff7bdb041187c3db5e1d74b5 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Mon, 8 Apr 2024 20:11:18 -0300 Subject: [PATCH 09/39] docs: changeset created --- .changeset/eighty-ducks-think.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/eighty-ducks-think.md diff --git a/.changeset/eighty-ducks-think.md b/.changeset/eighty-ducks-think.md new file mode 100644 index 000000000..18552181d --- /dev/null +++ b/.changeset/eighty-ducks-think.md @@ -0,0 +1,6 @@ +--- +"@fuel-connectors/walletconnect-connector": patch +"@fuels/connectors": patch +--- + +rename connector name and implement all methods From 6def35015e305dfdea2fe90c92d6d796753069d4 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Mon, 8 Apr 2024 20:48:54 -0300 Subject: [PATCH 10/39] test: same tests from evm connector implemented --- .../src/test/chainConfig.json | 520 ++++++++++++++++++ .../src/test/mockProvider.ts | 176 ++++++ .../src/test/testConnector.ts | 19 + .../src/test/walletConnector.test.ts | 182 ++++++ 4 files changed, 897 insertions(+) create mode 100644 packages/walletconnect-connector/src/test/chainConfig.json create mode 100644 packages/walletconnect-connector/src/test/mockProvider.ts create mode 100644 packages/walletconnect-connector/src/test/testConnector.ts create mode 100644 packages/walletconnect-connector/src/test/walletConnector.test.ts diff --git a/packages/walletconnect-connector/src/test/chainConfig.json b/packages/walletconnect-connector/src/test/chainConfig.json new file mode 100644 index 000000000..e9736df42 --- /dev/null +++ b/packages/walletconnect-connector/src/test/chainConfig.json @@ -0,0 +1,520 @@ +{ + "chain_name": "local_testnet", + "block_gas_limit": 5000000000, + "initial_state": { + "coins": [ + { + "owner": "0x94ffcc53b892684acefaebc8a3d4a595e528a8cf664eeb3ef36f1020b0809d0d", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x6e8ec14985922d2b5daf0a9ae68ca63d849e72f09fbc8ab2ddbb88b779a083a0", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x09c0b2d1a486c439a87bcba6b46a7a1a23f3897cc83a94521a96da5c23bc58db", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x09c0b2d1a486c439a87bcba6b46a7a1a23f3897cc83a94521a96da5c23bc58db", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x09c0b2d1a486c439a87bcba6b46a7a1a23f3897cc83a94521a96da5c23bc58db", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x5d99ee966b42cd8fc7bdd1364b389153a9e78b42b7d4a691470674e817888d4e", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x5d99ee966b42cd8fc7bdd1364b389153a9e78b42b7d4a691470674e817888d4e", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x5d99ee966b42cd8fc7bdd1364b389153a9e78b42b7d4a691470674e817888d4e", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0xbdaad6a89e073e177895b3e5a9ccd15806749eda134a6438dae32fc5b6601f3f", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0xbdaad6a89e073e177895b3e5a9ccd15806749eda134a6438dae32fc5b6601f3f", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0xbdaad6a89e073e177895b3e5a9ccd15806749eda134a6438dae32fc5b6601f3f", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x95a7aa6cc32743f8706c40ef49a7423b47da763bb4bbc055b1f07254dc729036", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x95a7aa6cc32743f8706c40ef49a7423b47da763bb4bbc055b1f07254dc729036", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x95a7aa6cc32743f8706c40ef49a7423b47da763bb4bbc055b1f07254dc729036", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0xcee104acd38b940c8f1c62c6d7ea00a0ad2241d6dee0509a4bf27297508870d3", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0xcee104acd38b940c8f1c62c6d7ea00a0ad2241d6dee0509a4bf27297508870d3", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0xcee104acd38b940c8f1c62c6d7ea00a0ad2241d6dee0509a4bf27297508870d3", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x7e3626e306588eba79cafab73f0709e55ab8f4bdfe8c8b75034a430fc56ece89", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x7e3626e306588eba79cafab73f0709e55ab8f4bdfe8c8b75034a430fc56ece89", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x7e3626e306588eba79cafab73f0709e55ab8f4bdfe8c8b75034a430fc56ece89", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x1c31df52b6df56407dd95f83082e8beb9cfc9532ac111d5bd8491651d95ba775", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x1c31df52b6df56407dd95f83082e8beb9cfc9532ac111d5bd8491651d95ba775", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x1c31df52b6df56407dd95f83082e8beb9cfc9532ac111d5bd8491651d95ba775", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x09dd7a49174d6fcc9f4c6f7942c18060a935ddd03ee69b594189b8c3581276ea", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x09dd7a49174d6fcc9f4c6f7942c18060a935ddd03ee69b594189b8c3581276ea", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x09dd7a49174d6fcc9f4c6f7942c18060a935ddd03ee69b594189b8c3581276ea", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x86604282dc604481b809845be49667607c470644f6822fc01eb0d22f167e08cf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x86604282dc604481b809845be49667607c470644f6822fc01eb0d22f167e08cf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x86604282dc604481b809845be49667607c470644f6822fc01eb0d22f167e08cf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0xbca334a06d19db5041c78fe2f465b07be5bec828f38b7796b2877e7d1542c950", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0xbca334a06d19db5041c78fe2f465b07be5bec828f38b7796b2877e7d1542c950", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0xbca334a06d19db5041c78fe2f465b07be5bec828f38b7796b2877e7d1542c950", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0xbd9a1dc8d3ec3521c43f6c2c01611b4d0204c7610204ff0178488c8738a30bd2", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0xbd9a1dc8d3ec3521c43f6c2c01611b4d0204c7610204ff0178488c8738a30bd2", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0xbd9a1dc8d3ec3521c43f6c2c01611b4d0204c7610204ff0178488c8738a30bd2", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0xb32197cf75efe05bf453c26178139f09b391582065549c1422bc92555ecffb64", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0xb32197cf75efe05bf453c26178139f09b391582065549c1422bc92555ecffb64", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0xb32197cf75efe05bf453c26178139f09b391582065549c1422bc92555ecffb64", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x3b24509ed4ab3c7959f5c9391c1445c59290cdb5f13d6f780922f376b7029f30", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x3b24509ed4ab3c7959f5c9391c1445c59290cdb5f13d6f780922f376b7029f30", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x3b24509ed4ab3c7959f5c9391c1445c59290cdb5f13d6f780922f376b7029f30", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x77c6f40b7da70d885f68efaad7c661327482a63ea10dcb4271de819438254ae1", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x77c6f40b7da70d885f68efaad7c661327482a63ea10dcb4271de819438254ae1", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x77c6f40b7da70d885f68efaad7c661327482a63ea10dcb4271de819438254ae1", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x6a2c4691c547c43924650dbd30620b184b5fe3fb6dbe5c4446110b08f6f405bf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x6a2c4691c547c43924650dbd30620b184b5fe3fb6dbe5c4446110b08f6f405bf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x6a2c4691c547c43924650dbd30620b184b5fe3fb6dbe5c4446110b08f6f405bf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x49075a7538e2c88ebe1926ce4d898198a2a4e790d14512943a9864bc536b3c82", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x49075a7538e2c88ebe1926ce4d898198a2a4e790d14512943a9864bc536b3c82", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x49075a7538e2c88ebe1926ce4d898198a2a4e790d14512943a9864bc536b3c82", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + } + ], + "messages": [ + { + "sender": "0xc43454aa38dd91f88109a4b7aef5efb96ce34e3f24992fe0f81d233ca686f80f", + "recipient": "0x69a2b736b60159b43bb8a4f98c0589f6da5fa3a3d101e8e269c499eb942753ba", + "nonce": "0101010101010101010101010101010101010101010101010101010101010101", + "amount": "0x000000000000FFFF", + "data": "", + "da_height": "0x00" + }, + { + "sender": "0x69a2b736b60159b43bb8a4f98c0589f6da5fa3a3d101e8e269c499eb942753ba", + "recipient": "0xc43454aa38dd91f88109a4b7aef5efb96ce34e3f24992fe0f81d233ca686f80f", + "nonce": "0e1ef2963832068b0e1ef2963832068b0e1ef2963832068b0e1ef2963832068b", + "amount": "0xb04f3c08f59b309e", + "data": "", + "da_height": "0x00" + } + ] + }, + "consensus_parameters": { + "tx_params": { + "max_inputs": 255, + "max_outputs": 255, + "max_witnesses": 255, + "max_gas_per_tx": 10000000, + "max_size": 17825792 + }, + "predicate_params": { + "max_predicate_length": 1048576, + "max_predicate_data_length": 1048576, + "max_gas_per_predicate": 10000000, + "max_message_data_length": 1048576 + }, + "script_params": { + "max_script_length": 1048576, + "max_script_data_length": 1048576 + }, + "contract_params": { + "contract_max_size": 16777216, + "max_storage_slots": 255 + }, + "fee_params": { + "gas_price_factor": 92, + "gas_per_byte": 4 + } + }, + "gas_costs": { + "add": 1, + "addi": 1, + "aloc": 1, + "and": 1, + "andi": 1, + "bal": 13, + "bhei": 1, + "bhsh": 1, + "burn": 132, + "cb": 1, + "cfei": 1, + "cfsi": 1, + "croo": 16, + "div": 1, + "divi": 1, + "ecr1": 3000, + "eck1": 951, + "ed19": 3000, + "eq": 1, + "exp": 1, + "expi": 1, + "flag": 1, + "gm": 1, + "gt": 1, + "gtf": 1, + "ji": 1, + "jmp": 1, + "jne": 1, + "jnei": 1, + "jnzi": 1, + "jmpf": 1, + "jmpb": 1, + "jnzf": 1, + "jnzb": 1, + "jnef": 1, + "jneb": 1, + "lb": 1, + "log": 9, + "lt": 1, + "lw": 1, + "mint": 135, + "mlog": 1, + "modOp": 1, + "modi": 1, + "moveOp": 1, + "movi": 1, + "mroo": 2, + "mul": 1, + "muli": 1, + "mldv": 1, + "noop": 1, + "not": 1, + "or": 1, + "ori": 1, + "poph": 2, + "popl": 2, + "pshh": 2, + "pshl": 2, + "ret": 13, + "rvrt": 13, + "sb": 1, + "sll": 1, + "slli": 1, + "srl": 1, + "srli": 1, + "srw": 12, + "sub": 1, + "subi": 1, + "sw": 1, + "sww": 67, + "time": 1, + "tr": 105, + "tro": 60, + "wdcm": 1, + "wqcm": 1, + "wdop": 1, + "wqop": 1, + "wdml": 1, + "wqml": 1, + "wddv": 1, + "wqdv": 2, + "wdmd": 3, + "wqmd": 4, + "wdam": 2, + "wqam": 3, + "wdmm": 3, + "wqmm": 3, + "xor": 1, + "xori": 1, + "call": { + "LightOperation": { + "base": 144, + "units_per_gas": 214 + } + }, + "ccp": { + "LightOperation": { + "base": 15, + "units_per_gas": 103 + } + }, + "csiz": { + "LightOperation": { + "base": 17, + "units_per_gas": 790 + } + }, + "k256": { + "LightOperation": { + "base": 11, + "units_per_gas": 214 + } + }, + "ldc": { + "LightOperation": { + "base": 15, + "units_per_gas": 272 + } + }, + "logd": { + "LightOperation": { + "base": 26, + "units_per_gas": 64 + } + }, + "mcl": { + "LightOperation": { + "base": 1, + "units_per_gas": 3333 + } + }, + "mcli": { + "LightOperation": { + "base": 1, + "units_per_gas": 3333 + } + }, + "mcp": { + "LightOperation": { + "base": 1, + "units_per_gas": 2000 + } + }, + "mcpi": { + "LightOperation": { + "base": 3, + "units_per_gas": 2000 + } + }, + "meq": { + "LightOperation": { + "base": 1, + "units_per_gas": 2500 + } + }, + "retd": { + "LightOperation": { + "base": 29, + "units_per_gas": 62 + } + }, + "s256": { + "LightOperation": { + "base": 2, + "units_per_gas": 214 + } + }, + "scwq": { + "LightOperation": { + "base": 13, + "units_per_gas": 5 + } + }, + "smo": { + "LightOperation": { + "base": 209, + "units_per_gas": 55 + } + }, + "srwq": { + "LightOperation": { + "base": 47, + "units_per_gas": 5 + } + }, + "swwq": { + "LightOperation": { + "base": 44, + "units_per_gas": 5 + } + }, + "contract_root": { + "LightOperation": { + "base": 75, + "units_per_gas": 1 + } + }, + "state_root": { + "LightOperation": { + "base": 412, + "units_per_gas": 1 + } + }, + "vm_initialization": { + "HeavyOperation": { + "base": 2000, + "gas_per_unit": 0 + } + }, + "new_storage_per_byte": 1 + }, + "consensus": { + "PoA": { + "signing_key": "0x94ffcc53b892684acefaebc8a3d4a595e528a8cf664eeb3ef36f1020b0809d0d" + } + } +} diff --git a/packages/walletconnect-connector/src/test/mockProvider.ts b/packages/walletconnect-connector/src/test/mockProvider.ts new file mode 100644 index 000000000..3823cd167 --- /dev/null +++ b/packages/walletconnect-connector/src/test/mockProvider.ts @@ -0,0 +1,176 @@ +import EventEmitter from 'node:events'; +import { + bytesToHex, + ecsign, + hashPersonalMessage, + hexToBytes, + privateToAddress, + toRpcSig, +} from '@ethereumjs/util'; + +interface IMockProvider { + request(args: { + method: 'eth_accounts'; + params: string[]; + }): Promise; + request(args: { + method: 'eth_requestAccounts'; + params: string[]; + }): Promise; + request(args: { + method: 'wallet_requestPermissions'; + params: string[]; + }): Promise; + + request(args: { + method: 'wallet_revokePermissions'; + params: string[]; + }): Promise; + + request(args: { method: 'net_version' }): Promise; + request(args: { method: 'eth_chainId'; params: string[] }): Promise; + + request(args: { method: 'personal_sign'; params: string[] }): Promise; + request(args: { method: 'eth_decrypt'; params: string[] }): Promise; + + // biome-ignore lint/suspicious/noExplicitAny: This request pattern will match against unknown request types and error. + request(args: { method: string; params?: any[] }): Promise; +} + +export class MockProvider extends EventEmitter implements IMockProvider { + private accounts: { address: string; privateKey: Uint8Array }[] = []; + private connected = false; + + public debug = false; + + public isMetaMask = true; + public manualConfirmEnable = false; + + private acceptEnable?: (value: unknown) => void; + + private rejectEnable?: (value: unknown) => void; + + constructor(numAccounts = 3) { + super(); + for (let i = 0; i < numAccounts; i += 1) { + // const privateKey = randomBytes(32); + const privateKey = hexToBytes( + '0x96dfa8c25bdae93fa0b6460079f8bb18aaec70c8451b5e32251cbc22f0dbf308', + ); + const address = bytesToHex(privateToAddress(privateKey)); + this.accounts.push({ address, privateKey: privateKey }); + } + } + + get selectedAddress(): string { + if (this.accounts && this.accounts.length > 0) { + const selectedAddress = this.accounts[0]?.address; + if (selectedAddress) { + return selectedAddress; + } + } + throw new Error('Address not defined'); + } + + get networkVersion(): number { + return 1; + } + + get chainId(): string { + return `0x${(1).toString(16)}`; + } + + answerEnable(acceptance: boolean) { + if (acceptance) this.acceptEnable?.('Accepted'); + else this.rejectEnable?.('User rejected'); + } + + getAccounts(): string[] { + return this.accounts.map(({ address }) => address); + } + + // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the EIP 1193 interface. + async request({ method, params }: any): Promise { + switch (method) { + case 'eth_requestAccounts': + if (this.manualConfirmEnable) { + return new Promise((resolve, reject) => { + this.acceptEnable = resolve; + this.rejectEnable = reject; + }).then(() => this.accounts.map(({ address }) => address)); + } + this.connected = true; + return this.accounts.map(({ address }) => address); + + case 'wallet_requestPermissions': + if (this.manualConfirmEnable) { + return new Promise((resolve, reject) => { + this.acceptEnable = resolve; + this.rejectEnable = reject; + }).then(() => this.accounts.map(({ address }) => address)); + } + this.connected = true; + return this.accounts.map(({ address }) => address); + + case 'eth_accounts': + return this.connected ? this.getAccounts() : []; + + case 'wallet_revokePermissions': + return null; + + case 'net_version': + return this.networkVersion; + + case 'eth_chainId': + return this.chainId; + + case 'personal_sign': { + const [message, address] = params; + const account = this.accounts.find((a) => a.address === address); + if (!account) throw new Error('Account not found'); + + const hash = hashPersonalMessage(hexToBytes(message)); + const signed = ecsign(hash, account.privateKey); + const signedStr = toRpcSig(signed.v, signed.r, signed.s); + + return signedStr; + } + + case 'eth_sendTransaction': { + throw new Error('This service can not send transactions.'); + } + + default: + throw new Error( + `The method ${method} is not implemented by the mock provider.`, + ); + } + } + + // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the EIP 1193 interface. + sendAsync(props: { method: string }, cb: any) { + switch (props.method) { + case 'eth_accounts': + cb(null, { result: [this.getAccounts()] }); + break; + + case 'net_version': + cb(null, { result: this.networkVersion }); + break; + + default: + throw new Error(`Method '${props.method}' is not supported yet.`); + } + } + + // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the NodeJS.EventEmitter interface. + on(props: string, listener: (...args: any[]) => void) { + super.on(props, listener); + return this; + } + + removeAllListeners() { + super.removeAllListeners(); + return this; + } +} diff --git a/packages/walletconnect-connector/src/test/testConnector.ts b/packages/walletconnect-connector/src/test/testConnector.ts new file mode 100644 index 000000000..069e08ad5 --- /dev/null +++ b/packages/walletconnect-connector/src/test/testConnector.ts @@ -0,0 +1,19 @@ +import type { Provider } from 'fuels'; + +import { WalletconnectWalletConnector } from '../index'; +import type { EIP1193Provider } from '../utils/eip-1193'; + +export class testWalletconnectWalletConnector extends WalletconnectWalletConnector { + constructor(ethProvider: EIP1193Provider, fuelProvider: Provider) { + super(); + this.ethProvider = ethProvider; + this.fuelProvider = fuelProvider; + } + + async getProviders() { + if (this.fuelProvider && this.ethProvider) { + return { fuelProvider: this.fuelProvider, ethProvider: this.ethProvider }; + } + throw 'Providers must exists'; + } +} diff --git a/packages/walletconnect-connector/src/test/walletConnector.test.ts b/packages/walletconnect-connector/src/test/walletConnector.test.ts new file mode 100644 index 000000000..b27327003 --- /dev/null +++ b/packages/walletconnect-connector/src/test/walletConnector.test.ts @@ -0,0 +1,182 @@ +import path from 'node:path'; +import { launchNodeAndGetWallets } from '@fuel-ts/account/test-utils'; +import type { Asset, Provider } from 'fuels'; +import { + afterAll, + afterEach, + beforeAll, + beforeEach, + describe, + expect, + test, +} from 'vitest'; +import { getPredicateAddress } from '../utils/predicate'; +import { predicates } from '../utils/predicateResources'; +import { MockProvider } from './mockProvider'; +import { testWalletconnectWalletConnector as WalletconnectWalletConnector } from './testConnector'; + +const predicate = 'verification-predicate'; + +describe('EVM Wallet Connector', () => { + // Providers used to interact with wallets + let ethProvider: MockProvider; + let fuelProvider: Provider; + + // Our connector bridging MetaMask and predicate accounts + let connector: WalletconnectWalletConnector; + + let stopProvider: () => void; + + const bytecode = predicates[predicate].bytecode; + const abi = predicates[predicate].abi; + + const chainConfigPath = path.join(__dirname, 'chainConfig.json'); + + beforeAll(async () => { + //Launch test node + process.env.GENESIS_SECRET = + '0x6e48a022f9d4ae187bca4e2645abd62198ae294ee484766edbdaadf78160dc68'; + const { stop, provider } = await launchNodeAndGetWallets({ + launchNodeOptions: { + args: ['--chain', chainConfigPath], + loggingEnabled: false, + }, + }); + + fuelProvider = provider; + stopProvider = stop; + }); + + afterAll(() => { + stopProvider?.(); + }); + + beforeEach(async () => { + // Create the Ethereum provider + ethProvider = new MockProvider(); + + const accounts = ethProvider.getAccounts(); + if (accounts.length < 2) { + throw new Error('Not enough accounts available'); + } + + const predicateAccounts = await Promise.all( + accounts.map(async (account) => + getPredicateAddress(account, bytecode, abi), + ), + ); + if (predicateAccounts.length < 2) { + throw new Error('Not enough predicate accounts available'); + } + + // Class contains state, reset the state for each test + connector = new WalletconnectWalletConnector(ethProvider, fuelProvider); + }); + + afterEach(() => { + ethProvider.removeAllListeners(); + }); + + describe('connect()', () => { + test('connects to ethers signer', async () => { + const connected = await connector.connect(); + + expect(connected).to.be.true; + }); + }); + + describe('signMessage()', () => { + test('throws error', async () => { + await expect(() => + connector.signMessage('address', 'message'), + ).rejects.toThrowError('A predicate account cannot sign messages'); + }); + }); + + describe('assets()', () => { + test('returns an empty array', async () => { + expect(await connector.assets()).to.deep.equal([]); + }); + }); + + describe('addAsset()', () => { + test('throws error', async () => { + const asset: Asset = { + name: '', + symbol: '', + icon: '', + networks: [], + }; + await expect(() => connector.addAsset(asset)).rejects.toThrowError( + 'Method not implemented.', + ); + }); + }); + + describe('addAssets()', () => { + test('throws error', async () => { + await expect(() => connector.addAssets([])).rejects.toThrowError( + 'Method not implemented.', + ); + }); + }); + + describe('addAbi()', () => { + test('throws error', async () => { + await expect(() => connector.addAbi({})).rejects.toThrowError( + 'Method not implemented.', + ); + }); + }); + + describe('getAbi()', () => { + test('throws error', async () => { + await expect(() => connector.getAbi('contractId')).rejects.toThrowError( + 'Cannot get contractId ABI for a predicate', + ); + }); + }); + + describe('hasAbi()', () => { + test('throws error', async () => { + await expect(() => connector.hasAbi('contractId')).rejects.toThrowError( + 'A predicate account cannot have an ABI', + ); + }); + }); + + describe('network()', () => { + test('returns the fuel network info', async () => { + const network = await connector.currentNetwork(); + + expect(network.chainId.toString()).to.be.equal( + (await fuelProvider.getNetwork()).chainId.toString(), + ); + expect(network.url).to.be.equal(fuelProvider.url); + }); + }); + + describe('networks()', () => { + test('returns an array of fuel network info', async () => { + const networks = await connector.networks(); + const network = networks.pop(); + + const networkChainId = network?.chainId.toString(); + const connectorNetwork = await connector.fuelProvider?.getNetwork(); + const expectedChainId = connectorNetwork + ? connectorNetwork.chainId.toString() + : undefined; + expect(networkChainId).to.be.equal(expectedChainId); + + expect(network?.url).to.be.equal(fuelProvider.url); + }); + }); + + describe('addNetwork()', () => { + test('throws error', async () => { + await expect(() => connector.addNetwork('')).rejects.toThrowError( + 'Method not implemented.', + ); + }); + }); +}); From f72d82c3a6b2bc9298f47e9abe36648c8381fb2d Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Tue, 9 Apr 2024 11:32:48 -0300 Subject: [PATCH 11/39] chore: remove unused files --- .../src/utils/eip-1193.ts | 7 ----- .../walletconnect-connector/vite.config.ts | 27 ------------------- 2 files changed, 34 deletions(-) delete mode 100644 packages/walletconnect-connector/src/utils/eip-1193.ts delete mode 100644 packages/walletconnect-connector/vite.config.ts diff --git a/packages/walletconnect-connector/src/utils/eip-1193.ts b/packages/walletconnect-connector/src/utils/eip-1193.ts deleted file mode 100644 index 11b5f113b..000000000 --- a/packages/walletconnect-connector/src/utils/eip-1193.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type EventEmitter from 'node:events'; - -export interface EIP1193Provider extends EventEmitter { - // biome-ignore lint/suspicious/noExplicitAny: - request(args: { method: string; params?: any[] }): Promise; - providers?: EIP1193Provider[]; -} diff --git a/packages/walletconnect-connector/vite.config.ts b/packages/walletconnect-connector/vite.config.ts deleted file mode 100644 index ac83f03b3..000000000 --- a/packages/walletconnect-connector/vite.config.ts +++ /dev/null @@ -1,27 +0,0 @@ -// vite.config.js -import { resolve } from 'node:path'; -import { defineConfig } from 'vite'; -import dts from 'vite-plugin-dts'; - -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; - -export default defineConfig({ - plugins: [ - dts({ - include: [resolve(__dirname, 'src/')], - }), - ], - define: { - __dirname: JSON.stringify(path.dirname(__filename)), - __filename: JSON.stringify(fileURLToPath(import.meta.url)), - }, - build: { - lib: { - entry: path.resolve('src/index.ts'), - name: '@fuels/wallet-connector-walletconnect', - // the proper extensions will be added - fileName: 'wallet-connector-walletconnect', - }, - }, -}); From 3d11378aa981f0acb612ccbd1336958bb62479ff Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Tue, 9 Apr 2024 11:33:42 -0300 Subject: [PATCH 12/39] fix: evm connector added to default connectors again --- packages/connectors/src/defaultConnectors.ts | 4 ++-- packages/connectors/src/index.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index 8fe33fb56..15d1f1b00 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -1,4 +1,4 @@ -// import { EVMWalletConnector } from '@fuel-connectors/evm-connector'; +import { EVMWalletConnector } from '@fuel-connectors/evm-connector'; import { FuelWalletDevelopmentConnector } from '@fuel-connectors/fuel-development-wallet'; import { FuelWalletConnector } from '@fuel-connectors/fuel-wallet'; import { FueletWalletConnector } from '@fuel-connectors/fuelet-wallet'; @@ -15,7 +15,7 @@ export function defaultConnectors({ const connectors = [ new FuelWalletConnector(), new FueletWalletConnector(), - // new EVMWalletConnector(), + new EVMWalletConnector(), new WalletconnectWalletConnector(), ]; diff --git a/packages/connectors/src/index.ts b/packages/connectors/src/index.ts index ea11da79b..c032dc7b1 100644 --- a/packages/connectors/src/index.ts +++ b/packages/connectors/src/index.ts @@ -2,5 +2,5 @@ export * from './defaultConnectors'; export * from '@fuel-connectors/fuel-development-wallet'; export * from '@fuel-connectors/fuel-wallet'; export * from '@fuel-connectors/fuelet-wallet'; -// export * from '@fuel-connectors/evm-connector'; +export * from '@fuel-connectors/evm-connector'; export * from '@fuel-connectors/walletconnect-connector'; From 862a85e8e837d0c13559b6ba78112cc4dac9331d Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Tue, 9 Apr 2024 11:34:53 -0300 Subject: [PATCH 13/39] fix: window.ethereum removed due conflicts with a dependency --- packages/evm-connector/src/EvmWalletConnector.ts | 9 +++++++-- packages/evm-connector/src/constants.ts | 7 ------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/evm-connector/src/EvmWalletConnector.ts b/packages/evm-connector/src/EvmWalletConnector.ts index 303f534a9..1d0d99310 100644 --- a/packages/evm-connector/src/EvmWalletConnector.ts +++ b/packages/evm-connector/src/EvmWalletConnector.ts @@ -68,13 +68,16 @@ export class EVMWalletConnector extends FuelConnector { async configProviders(config: EVMWalletConnectorConfig = {}) { this.config = Object.assign(config, { fuelProvider: config.fuelProvider || Provider.create(BETA_5_URL), - ethProvider: config.ethProvider || window.ethereum, + ethProvider: + //@ts-ignore + config.ethProvider || (window.ethereum as EIP1193Provider), }); } setupEthereumEvents() { this._ethereumEvents = Number( setInterval(() => { + //@ts-ignore if (WINDOW?.ethereum) { clearInterval(this._ethereumEvents); window.dispatchEvent( @@ -89,8 +92,10 @@ export class EVMWalletConnector extends FuelConnector { if (this.config.ethProvider) { return this.config.ethProvider; } + //@ts-ignore if (WINDOW?.ethereum) { - return WINDOW.ethereum; + //@ts-ignore + return WINDOW.ethereum as EIP1193Provider; } return null; diff --git a/packages/evm-connector/src/constants.ts b/packages/evm-connector/src/constants.ts index 2fb52704a..0f4b4747b 100644 --- a/packages/evm-connector/src/constants.ts +++ b/packages/evm-connector/src/constants.ts @@ -1,10 +1,3 @@ -import type { EIP1193Provider } from './utils/eip-1193'; - -declare global { - interface Window { - ethereum: EIP1193Provider | null; - } -} const HAS_WINDOW = typeof window !== 'undefined'; export const WINDOW = HAS_WINDOW ? window : null; export const BETA_5_URL = 'https://beta-5.fuel.network/graphql'; From c2227ac20a39defa46929d3fd14b88bcbb0c4a69 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Tue, 9 Apr 2024 11:36:09 -0300 Subject: [PATCH 14/39] refactor: walletconnect connector refactored --- .../walletconnect-connector/src/Predicate.ts | 6 +- .../src/test/testConnector.ts | 3 +- .../src/utils/wagmiConfig.ts | 55 +++++++++++++++ .../src/walletconnectWalletConnector.ts | 67 +++++-------------- 4 files changed, 75 insertions(+), 56 deletions(-) create mode 100644 packages/walletconnect-connector/src/utils/wagmiConfig.ts diff --git a/packages/walletconnect-connector/src/Predicate.ts b/packages/walletconnect-connector/src/Predicate.ts index 3cd4ec8e4..42594f0b3 100644 --- a/packages/walletconnect-connector/src/Predicate.ts +++ b/packages/walletconnect-connector/src/Predicate.ts @@ -1,22 +1,22 @@ -import type { EIP1193Provider } from './utils/eip-1193'; import { getPredicateAddress } from './utils/predicate'; import { predicates } from './utils/predicateResources'; export class PredicateAccount { private predicate = predicates['verification-predicate']; - async getPredicateFromAddress(address: string, ethProvider: EIP1193Provider) { + async getPredicateFromAddress(address: string, ethProvider: unknown) { const accounts = await this.getPredicateAccounts(ethProvider); return accounts.find((account) => account.predicateAccount === address); } - async getPredicateAccounts(ethProvider: EIP1193Provider): Promise< + async getPredicateAccounts(ethProvider: unknown): Promise< Array<{ ethAccount: string; predicateAccount: string; }> > { + //@ts-ignore const ethAccounts: Array = await ethProvider.request({ method: 'eth_accounts', }); diff --git a/packages/walletconnect-connector/src/test/testConnector.ts b/packages/walletconnect-connector/src/test/testConnector.ts index 069e08ad5..551b34b26 100644 --- a/packages/walletconnect-connector/src/test/testConnector.ts +++ b/packages/walletconnect-connector/src/test/testConnector.ts @@ -1,10 +1,9 @@ import type { Provider } from 'fuels'; import { WalletconnectWalletConnector } from '../index'; -import type { EIP1193Provider } from '../utils/eip-1193'; export class testWalletconnectWalletConnector extends WalletconnectWalletConnector { - constructor(ethProvider: EIP1193Provider, fuelProvider: Provider) { + constructor(ethProvider: unknown, fuelProvider: Provider) { super(); this.ethProvider = ethProvider; this.fuelProvider = fuelProvider; diff --git a/packages/walletconnect-connector/src/utils/wagmiConfig.ts b/packages/walletconnect-connector/src/utils/wagmiConfig.ts new file mode 100644 index 000000000..7a4868eb5 --- /dev/null +++ b/packages/walletconnect-connector/src/utils/wagmiConfig.ts @@ -0,0 +1,55 @@ +import { coinbaseWallet, walletConnect } from '@wagmi/connectors'; +import { http, type Config, createConfig, injected } from '@wagmi/core'; +import { mainnet } from '@wagmi/core/chains'; +import { type Web3Modal, createWeb3Modal } from '@web3modal/wagmi'; + +export default class WagmiConfig { + private WAGMI_PROJECT_ID = '0e0f5503e675e719c07e73ff5f38d31f'; + private WAGMI_PROJECT_URL = 'http://localhost:5173'; + + private metadata = { + name: 'WalletConnect Connector', + description: 'WalletConnect Connector', + url: this.WAGMI_PROJECT_URL, + icons: ['https://avatars.githubusercontent.com/u/37784886'], + }; + + private ethConfig: Config; + private ethModal: Web3Modal; + + constructor() { + this.ethConfig = createConfig({ + chains: [mainnet], + transports: { + [mainnet.id]: http(), + }, + connectors: [ + walletConnect({ + projectId: this.WAGMI_PROJECT_ID, + metadata: this.metadata, + showQrModal: false, + }), + injected({ shimDisconnect: false }), + coinbaseWallet({ + appName: this.metadata.name, + appLogoUrl: this.metadata.icons[0], + darkMode: true, + reloadOnDisconnect: true, + }), + ], + }); + + this.ethModal = createWeb3Modal({ + wagmiConfig: this.ethConfig, + projectId: this.WAGMI_PROJECT_ID, + }); + } + + getEthConfig() { + return this.ethConfig; + } + + getEthModal() { + return this.ethModal; + } +} diff --git a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts index fe55bafb2..eeb5aa9ce 100644 --- a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts +++ b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts @@ -1,16 +1,7 @@ import { hexToBytes } from '@ethereumjs/util'; import { hexlify, splitSignature } from '@ethersproject/bytes'; -import { coinbaseWallet, walletConnect } from '@wagmi/connectors'; -import { - http, - type Config, - createConfig, - disconnect, - getAccount, - injected, -} from '@wagmi/core'; -import { mainnet } from '@wagmi/core/chains'; -import { type Web3Modal, createWeb3Modal } from '@web3modal/wagmi'; +import { type Config, getAccount } from '@wagmi/core'; +import type { Web3Modal } from '@web3modal/wagmi'; import { type AbiMap, type Asset, @@ -33,12 +24,16 @@ import { import { ETHEREUM_ICON } from './utils/ethereum-icon'; import { createPredicate } from './utils/predicate'; import { predicates } from './utils/predicateResources'; +import WagmiConfig from './utils/wagmiConfig'; export class WalletconnectWalletConnector extends FuelConnector { name = 'Ethereum Wallets'; + connected = false; installed = false; + events = { ...FuelConnectorEventTypes, ...EthereumWalletConnectorEvents }; + metadata: ConnectorMetadata = { image: ETHEREUM_ICON, install: { @@ -48,13 +43,10 @@ export class WalletconnectWalletConnector extends FuelConnector { }, }; - ethConfig: Config | null = null; - - wagmiProjectId = '0e0f5503e675e719c07e73ff5f38d31f'; - + ethConfig: Config; ethProvider: unknown | null = null; fuelProvider: FuelProvider | null = null; - ethModal: Web3Modal | null = null; + ethModal: Web3Modal; private predicateAccount: PredicateAccount; private predicate = predicates['verification-predicate']; @@ -68,44 +60,16 @@ export class WalletconnectWalletConnector extends FuelConnector { this.predicateAccount = new PredicateAccount(); + const wagmiConfig = new WagmiConfig(); + + this.ethConfig = wagmiConfig.getEthConfig(); + this.ethModal = wagmiConfig.getEthModal(); + this.configProviders(config); this.setupEthereumEvents(); } async configProviders(config: EthereumWalletConnectorConfig = {}) { - const metadata = { - name: 'Web3Modal', - description: 'Web3Modal Example', - url: 'https://web3modal.com', // url must match your domain & subdomain - icons: ['https://avatars.githubusercontent.com/u/37784886'], - }; - - this.ethConfig = createConfig({ - chains: [mainnet], - transports: { - [mainnet.id]: http(), - }, - connectors: [ - walletConnect({ - projectId: this.wagmiProjectId, - metadata, - showQrModal: false, - }), - injected({ shimDisconnect: true }), - coinbaseWallet({ - appName: metadata.name, - appLogoUrl: metadata.icons[0], - }), - ], - }); - - this.ethModal = createWeb3Modal({ - wagmiConfig: this.ethConfig, - projectId: this.wagmiProjectId, - enableAnalytics: true, // Optional - defaults to your Cloud configuration - enableOnramp: true, // Optional - false as default - }); - this.config = Object.assign(config, { fuelProvider: config.fuelProvider || FuelProvider.create(BETA_5_URL), ethProvider: config.ethProvider || null, @@ -161,6 +125,7 @@ export class WalletconnectWalletConnector extends FuelConnector { await this.setupCurrentAccount(); } }); + //@ts-ignore this.ethProvider.on(this.events.CONNECT, async (_arg) => { this.emit('connection', await this.isConnected()); @@ -220,7 +185,7 @@ export class WalletconnectWalletConnector extends FuelConnector { this.ethModal?.subscribeEvents(async (event) => { if (event.data.event === 'CONNECT_SUCCESS') { this.ethProvider = await getAccount( - this.ethConfig as Config, + this.ethConfig, ).connector?.getProvider(); await this.setup(); @@ -322,7 +287,7 @@ export class WalletconnectWalletConnector extends FuelConnector { throw Error('No connected accounts'); } - const account = getAccount(this.ethConfig as Config).address; + const account = getAccount(this.ethConfig).address; if (!account) { throw Error('No connected accounts'); From d494b3b2f95756d8b3d5781dc6628a2fdc11afab Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Tue, 9 Apr 2024 15:17:22 -0300 Subject: [PATCH 15/39] fix: wallet disconnect and account address inconsistencies fixed --- .../walletconnect-connector/src/Predicate.ts | 12 ++++---- .../src/walletconnectWalletConnector.ts | 30 ++++++++----------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/packages/walletconnect-connector/src/Predicate.ts b/packages/walletconnect-connector/src/Predicate.ts index 42594f0b3..2b8bd4b1f 100644 --- a/packages/walletconnect-connector/src/Predicate.ts +++ b/packages/walletconnect-connector/src/Predicate.ts @@ -1,25 +1,23 @@ +import { type Config, getAccount } from '@wagmi/core'; import { getPredicateAddress } from './utils/predicate'; import { predicates } from './utils/predicateResources'; export class PredicateAccount { private predicate = predicates['verification-predicate']; - async getPredicateFromAddress(address: string, ethProvider: unknown) { - const accounts = await this.getPredicateAccounts(ethProvider); + async getPredicateFromAddress(address: string, ethConfig: Config) { + const accounts = await this.getPredicateAccounts(ethConfig); return accounts.find((account) => account.predicateAccount === address); } - async getPredicateAccounts(ethProvider: unknown): Promise< + async getPredicateAccounts(ethConfig: Config): Promise< Array<{ ethAccount: string; predicateAccount: string; }> > { - //@ts-ignore - const ethAccounts: Array = await ethProvider.request({ - method: 'eth_accounts', - }); + const ethAccounts = getAccount(ethConfig).addresses ?? []; const accounts = ethAccounts.map((account) => ({ ethAccount: account, diff --git a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts index eeb5aa9ce..6473a46ce 100644 --- a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts +++ b/packages/walletconnect-connector/src/walletconnectWalletConnector.ts @@ -1,6 +1,6 @@ import { hexToBytes } from '@ethereumjs/util'; import { hexlify, splitSignature } from '@ethersproject/bytes'; -import { type Config, getAccount } from '@wagmi/core'; +import { type Config, disconnect, getAccount } from '@wagmi/core'; import type { Web3Modal } from '@web3modal/wagmi'; import { type AbiMap, @@ -96,7 +96,7 @@ export class WalletconnectWalletConnector extends FuelConnector { */ async getProviders() { - if (!this.fuelProvider || !this.ethProvider) { + if (!this.fuelProvider) { this.fuelProvider = (await this.config.fuelProvider) ?? null; if (!this.fuelProvider) { @@ -119,9 +119,9 @@ export class WalletconnectWalletConnector extends FuelConnector { async setupEventBridge() { //@ts-ignore - this.ethProvider.on(this.events.ACCOUNTS_CHANGED, async (accounts) => { + this.ethProvider.on(this.events.ACCOUNTS_CHANGED, async () => { this.emit('accounts', await this.accounts()); - if (this._currentAccount !== accounts[0]) { + if (this._currentAccount !== getAccount(this.ethConfig).address) { await this.setupCurrentAccount(); } }); @@ -138,9 +138,10 @@ export class WalletconnectWalletConnector extends FuelConnector { } async setupCurrentAccount() { - const [currentAccount = null] = await this.accounts(); + const currentAccount = getAccount(this.ethConfig).address || null; this._currentAccount = currentAccount; + this.emit('currentAccount', currentAccount); } @@ -161,9 +162,9 @@ export class WalletconnectWalletConnector extends FuelConnector { } async isConnected(): Promise { - const accounts = await this.accounts(); + const account = getAccount(this.ethConfig); - return accounts.length > 0; + return account.isConnected || false; } async accounts(): Promise> { @@ -171,9 +172,9 @@ export class WalletconnectWalletConnector extends FuelConnector { return []; } - const accounts = - //@ts-ignore - await this.predicateAccount.getPredicateAccounts(this.ethProvider); + const accounts = await this.predicateAccount.getPredicateAccounts( + this.ethConfig, + ); return accounts.map((account) => account.predicateAccount); } @@ -205,16 +206,12 @@ export class WalletconnectWalletConnector extends FuelConnector { } async disconnect(): Promise { - this.ethProvider = null; + await disconnect(this.ethConfig); this.emit(this.events.connection, false); this.emit(this.events.accounts, []); this.emit(this.events.currentAccount, null); - await getAccount(this.ethConfig as Config).connector?.disconnect(); - - location.reload(); - return false; } @@ -234,8 +231,7 @@ export class WalletconnectWalletConnector extends FuelConnector { const chainId = fuelProvider.getChainId(); const account = await this.predicateAccount.getPredicateFromAddress( address, - //@ts-ignore - this.ethProvider, + this.ethConfig, ); if (!account) { throw Error(`No account found for ${address}`); From 517e200b1ac26ee35f1c3d0d2cf3e609b1dd8f5d Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Wed, 10 Apr 2024 00:40:42 -0300 Subject: [PATCH 16/39] fix: refactor project and fix bugs --- examples/react-app/.env | 1 + examples/react-app/package.json | 2 + examples/react-app/src/main.tsx | 59 +++- examples/react-app/src/vite-env.d.ts | 8 + packages/burner-wallet-connector/package.json | 48 +++ .../signature-verification/Forc.lock | 0 .../signature-verification/Forc.toml | 0 .../signature-verification/README.md | 31 ++ .../fuel-toolchain.toml | 0 .../verification-predicate/Forc.toml | 0 .../release/verification-predicate-abi.json | 0 .../release/verification-predicate-bin-root | 0 .../out/release/verification-predicate.bin | Bin .../verification-predicate/src/main.sw | 0 .../src/BurnerWalletConnector.ts | 276 ++++++++++++++++++ .../burner-wallet-connector/src/Predicate.ts | 34 +++ .../burner-wallet-connector/src/constants.ts | 3 + packages/burner-wallet-connector/src/index.ts | 1 + packages/burner-wallet-connector/src/types.ts | 15 + .../src/utils/burner-wallet-icon.ts | 2 + .../src/utils/generatePredicateResources.ts | 0 .../src/utils/predicate.ts | 0 .../src/utils/predicateResources.ts | 0 .../burner-wallet-connector/tsconfig.json | 16 + .../burner-wallet-connector/tsup.config.js | 9 + packages/connectors/src/defaultConnectors.ts | 4 +- packages/connectors/tsup.config.js | 6 +- packages/walletconnect-connector/package.json | 5 +- .../predicate/Forc.lock | 13 + .../predicate/Forc.toml | 5 + .../predicate/out/release/predicate-abi.json | 65 +++++ .../predicate/out/release/predicate-bin-root | 1 + .../predicate/out/release/predicate.bin | Bin 0 -> 2008 bytes .../predicate/src/main.sw | 101 +++++++ .../scripts/generatePredicateResources.ts | 42 +++ .../walletconnect-connector/src/Predicate.ts | 33 --- ...Connector.ts => WalletConnectConnector.ts} | 253 ++++++++-------- .../walletconnect-connector/src/constants.ts | 4 +- packages/walletconnect-connector/src/index.ts | 3 +- .../src/predicates/index.ts | 81 +++++ packages/walletconnect-connector/src/types.ts | 16 +- .../src/utils/Predicate.ts | 66 +++++ .../src/utils/ethereum-icon.ts | 2 - .../src/utils/wagmiConfig.ts | 72 ++--- pnpm-lock.yaml | 192 ++++++++++-- 45 files changed, 1206 insertions(+), 263 deletions(-) create mode 100644 examples/react-app/.env create mode 100644 packages/burner-wallet-connector/package.json rename packages/{walletconnect-connector => burner-wallet-connector}/signature-verification/Forc.lock (100%) rename packages/{walletconnect-connector => burner-wallet-connector}/signature-verification/Forc.toml (100%) create mode 100644 packages/burner-wallet-connector/signature-verification/README.md rename packages/{walletconnect-connector => burner-wallet-connector}/signature-verification/fuel-toolchain.toml (100%) rename packages/{walletconnect-connector => burner-wallet-connector}/signature-verification/verification-predicate/Forc.toml (100%) rename packages/{walletconnect-connector => burner-wallet-connector}/signature-verification/verification-predicate/out/release/verification-predicate-abi.json (100%) rename packages/{walletconnect-connector => burner-wallet-connector}/signature-verification/verification-predicate/out/release/verification-predicate-bin-root (100%) rename packages/{walletconnect-connector => burner-wallet-connector}/signature-verification/verification-predicate/out/release/verification-predicate.bin (100%) rename packages/{walletconnect-connector => burner-wallet-connector}/signature-verification/verification-predicate/src/main.sw (100%) create mode 100644 packages/burner-wallet-connector/src/BurnerWalletConnector.ts create mode 100644 packages/burner-wallet-connector/src/Predicate.ts create mode 100644 packages/burner-wallet-connector/src/constants.ts create mode 100644 packages/burner-wallet-connector/src/index.ts create mode 100644 packages/burner-wallet-connector/src/types.ts create mode 100644 packages/burner-wallet-connector/src/utils/burner-wallet-icon.ts rename packages/{walletconnect-connector => burner-wallet-connector}/src/utils/generatePredicateResources.ts (100%) rename packages/{walletconnect-connector => burner-wallet-connector}/src/utils/predicate.ts (100%) rename packages/{walletconnect-connector => burner-wallet-connector}/src/utils/predicateResources.ts (100%) create mode 100644 packages/burner-wallet-connector/tsconfig.json create mode 100644 packages/burner-wallet-connector/tsup.config.js create mode 100644 packages/walletconnect-connector/predicate/Forc.lock create mode 100644 packages/walletconnect-connector/predicate/Forc.toml create mode 100644 packages/walletconnect-connector/predicate/out/release/predicate-abi.json create mode 100644 packages/walletconnect-connector/predicate/out/release/predicate-bin-root create mode 100644 packages/walletconnect-connector/predicate/out/release/predicate.bin create mode 100644 packages/walletconnect-connector/predicate/src/main.sw create mode 100644 packages/walletconnect-connector/scripts/generatePredicateResources.ts delete mode 100644 packages/walletconnect-connector/src/Predicate.ts rename packages/walletconnect-connector/src/{walletconnectWalletConnector.ts => WalletConnectConnector.ts} (57%) create mode 100644 packages/walletconnect-connector/src/predicates/index.ts create mode 100644 packages/walletconnect-connector/src/utils/Predicate.ts delete mode 100644 packages/walletconnect-connector/src/utils/ethereum-icon.ts diff --git a/examples/react-app/.env b/examples/react-app/.env new file mode 100644 index 000000000..c916f500a --- /dev/null +++ b/examples/react-app/.env @@ -0,0 +1 @@ +VITE_APP_WC_PROJECT_ID=0e0f5503e675e719c07e73ff5f38d31f \ No newline at end of file diff --git a/examples/react-app/package.json b/examples/react-app/package.json index db594824f..231e9eb28 100644 --- a/examples/react-app/package.json +++ b/examples/react-app/package.json @@ -12,6 +12,8 @@ "@fuels/react": "0.18.1", "@radix-ui/react-toast": "1.1.5", "@tanstack/react-query": "5.28.8", + "@wagmi/connectors": "4.1.24", + "@wagmi/core": "2.0.1", "clsx": "2.1.0", "fuels": "0.79.0", "react": "18.2.0", diff --git a/examples/react-app/src/main.tsx b/examples/react-app/src/main.tsx index b33d1f133..f51c2a4b2 100644 --- a/examples/react-app/src/main.tsx +++ b/examples/react-app/src/main.tsx @@ -4,7 +4,17 @@ import ReactDOM from 'react-dom/client'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; -import { defaultConnectors } from '@fuels/connectors'; +import { coinbaseWallet, walletConnect } from '@wagmi/connectors'; +import { http, createConfig, injected } from '@wagmi/core'; +import { mainnet } from '@wagmi/core/chains'; + +import { + EVMWalletConnector, + FuelWalletConnector, + FuelWalletDevelopmentConnector, + FueletWalletConnector, + WalletConnectConnector, +} from '@fuels/connectors'; import { FuelProvider } from '@fuels/react'; import * as Toast from '@radix-ui/react-toast'; @@ -13,15 +23,56 @@ import App from './App.tsx'; import ScreenSizeIndicator from './components/screensize-indicator.tsx'; import './index.css'; -const queryClient = new QueryClient(); +const _queryClientt = new QueryClient(); + +// ============================================================ +// WalletConnect Connector configurations +// https://docs.walletconnect.com/web3modal/javascript/about +// ============================================================ +const WC_PROJECT_ID = import.meta.env.VITE_APP_WC_PROJECT_ID; +const METADATA = { + name: 'Wallet Demo', + description: 'Fuel Wallets Demo', + url: location.href, + icons: ['https://connectors.fuel.network/logo_white.png'], +}; +const wagmiConfig = createConfig({ + chains: [mainnet], + transports: { + [mainnet.id]: http(), + }, + connectors: [ + injected({ shimDisconnect: false }), + walletConnect({ + projectId: WC_PROJECT_ID, + metadata: METADATA, + showQrModal: false, + }), + coinbaseWallet({ + appName: METADATA.name, + appLogoUrl: METADATA.icons[0], + darkMode: true, + reloadOnDisconnect: true, + }), + ], +}); ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - + diff --git a/examples/react-app/src/vite-env.d.ts b/examples/react-app/src/vite-env.d.ts index 11f02fe2a..902f9d5f7 100644 --- a/examples/react-app/src/vite-env.d.ts +++ b/examples/react-app/src/vite-env.d.ts @@ -1 +1,9 @@ /// + +interface ImportMetaEnv { + readonly VITE_APP_WC_PROJECT_ID: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/packages/burner-wallet-connector/package.json b/packages/burner-wallet-connector/package.json new file mode 100644 index 000000000..7637dfbe2 --- /dev/null +++ b/packages/burner-wallet-connector/package.json @@ -0,0 +1,48 @@ +{ + "name": "@fuel-connectors/burner-wallet-connector", + "version": "0.0.1", + "private": true, + "type": "module", + "files": ["dist"], + "main": "./dist/wallet-connector-burner-wallet.umd.cjs", + "module": "./dist/wallet-connector-burner-wallet.js", + "exports": { + ".": { + "import": "./dist/wallet-connector-burner-wallet.js", + "require": "./dist/wallet-connector-burner-wallet.umd.cjs" + } + }, + "types": "./dist/index.d.ts", + "scripts": { + "build:forc": "pnpm fuels-forc build --release --path ./signature-verification", + "build:resources": "pnpm run build:forc && tsup --dts-only ./src/utils/generatePredicateResources.ts", + "build": "pnpm run build:resources && tsup --dts-only", + "build:watch": "pnpm run build:resources && tsup --watch --dts-only", + "ts:check": "tsc --noEmit", + "test": "vitest" + }, + "peerDependencies": { + "fuels": ">=0.77.0" + }, + "dependencies": { + "@ethereumjs/util": "^9.0.1", + "@ethersproject/bytes": "^5.7.0", + "memoizee": "^0.4.15" + }, + "devDependencies": { + "@types/memoizee": "^0.4.11", + "@fuel-ts/account": "^0.79.0", + "@fuel-ts/fuel-core": "^0.79.0", + "@fuel-ts/forc": "0.79.0", + "fuels": "^0.79.0", + "jsdom": "24.0.0", + "ts-loader": "^9.5.1", + "ts-node": "^10.9.2", + "tsx": "^4.7.0", + "typescript": "5.4.3", + "vite": "^5.0.10", + "vite-plugin-dts": "^3.6.4", + "vitest": "^1.4.0", + "tsup": "8.0.2" + } +} diff --git a/packages/walletconnect-connector/signature-verification/Forc.lock b/packages/burner-wallet-connector/signature-verification/Forc.lock similarity index 100% rename from packages/walletconnect-connector/signature-verification/Forc.lock rename to packages/burner-wallet-connector/signature-verification/Forc.lock diff --git a/packages/walletconnect-connector/signature-verification/Forc.toml b/packages/burner-wallet-connector/signature-verification/Forc.toml similarity index 100% rename from packages/walletconnect-connector/signature-verification/Forc.toml rename to packages/burner-wallet-connector/signature-verification/Forc.toml diff --git a/packages/burner-wallet-connector/signature-verification/README.md b/packages/burner-wallet-connector/signature-verification/README.md new file mode 100644 index 000000000..3624ccf54 --- /dev/null +++ b/packages/burner-wallet-connector/signature-verification/README.md @@ -0,0 +1,31 @@ +# Overview + +The repository consists of + +- verification-predicate + +The predicate is employed to authenticate that the signer in a transaction corresponds to a particular EVM wallet. + +## Building the projects + +Prerequsite: have `forc` installed. + +In the root of the repository run + +```bash +forc build --release +``` + +This will build the project and is required before tests can be run. + +## Continuous Integration (CI) + +To satisfy CI checks run the following commands from the root of the repository. + +Format Sway files + +```bash +forc fmt +``` + +Any warnings presented by clippy must be resolved. diff --git a/packages/walletconnect-connector/signature-verification/fuel-toolchain.toml b/packages/burner-wallet-connector/signature-verification/fuel-toolchain.toml similarity index 100% rename from packages/walletconnect-connector/signature-verification/fuel-toolchain.toml rename to packages/burner-wallet-connector/signature-verification/fuel-toolchain.toml diff --git a/packages/walletconnect-connector/signature-verification/verification-predicate/Forc.toml b/packages/burner-wallet-connector/signature-verification/verification-predicate/Forc.toml similarity index 100% rename from packages/walletconnect-connector/signature-verification/verification-predicate/Forc.toml rename to packages/burner-wallet-connector/signature-verification/verification-predicate/Forc.toml diff --git a/packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json b/packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json similarity index 100% rename from packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json rename to packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json diff --git a/packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root b/packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root similarity index 100% rename from packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root rename to packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root diff --git a/packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin b/packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin similarity index 100% rename from packages/walletconnect-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin rename to packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin diff --git a/packages/walletconnect-connector/signature-verification/verification-predicate/src/main.sw b/packages/burner-wallet-connector/signature-verification/verification-predicate/src/main.sw similarity index 100% rename from packages/walletconnect-connector/signature-verification/verification-predicate/src/main.sw rename to packages/burner-wallet-connector/signature-verification/verification-predicate/src/main.sw diff --git a/packages/burner-wallet-connector/src/BurnerWalletConnector.ts b/packages/burner-wallet-connector/src/BurnerWalletConnector.ts new file mode 100644 index 000000000..104b708e1 --- /dev/null +++ b/packages/burner-wallet-connector/src/BurnerWalletConnector.ts @@ -0,0 +1,276 @@ +import { + type AbiMap, + type Asset, + type ConnectorMetadata, + FuelConnector, + FuelConnectorEventTypes, + type JsonAbi, + type Network, + Provider, + type TransactionRequestLike, + type Version, + Wallet, + type WalletUnlocked, +} from 'fuels'; +import { PredicateAccount } from './Predicate'; +import { BETA_5_URL } from './constants'; +import type { BurnerWalletConnectorConfig } from './types'; +import { BURNER_WALLET_ICON } from './utils/burner-wallet-icon'; +import { predicates } from './utils/predicateResources'; + +export class BurnerWalletConnector extends FuelConnector { + name = 'Burner Wallet'; + metadata: ConnectorMetadata = { + image: BURNER_WALLET_ICON, + install: { + action: 'Install', + description: 'Install Burner Wallet to connect to Fuel', + link: '', + }, + }; + + installed = true; + connected = false; + + // ethProvider: unknown | null = null; + fuelProvider: Provider | null = null; + burnerWalletProvider: Provider | null = null; + + burnerWallet: WalletUnlocked | null = null; + + events = { + ...FuelConnectorEventTypes, + // ...EVMWalletConnectorEvents, + }; + + private predicateAccount: PredicateAccount; + private predicate = predicates['verification-predicate']; + private setupLock = false; + private _currentAccount: string | null = null; + private config: BurnerWalletConnectorConfig = {}; + private _ethereumEvents = 0; + + constructor(config: BurnerWalletConnectorConfig = {}) { + super(); + + this.predicateAccount = new PredicateAccount(); + + this.configProviders(config); + } + + async configProviders(config: BurnerWalletConnectorConfig = {}) { + this.config = Object.assign(config, { + fuelProvider: config.fuelProvider || Provider.create(BETA_5_URL), + burnerWalletProvider: config.burnerWalletProvider || null, + }); + } + + getLazyBurnerWallet() { + const burnerWalletPrivateKey = sessionStorage.getItem( + 'burnerWalletPrivateKey', + ); + + if (!burnerWalletPrivateKey) { + const wallet = Wallet.generate(); + + sessionStorage.setItem('burnerWalletPrivateKey', wallet.privateKey); + this.burnerWallet = wallet; + + return this.burnerWallet.provider; + } + + this.burnerWallet = Wallet.fromPrivateKey(burnerWalletPrivateKey); + + return this.burnerWallet.provider; + } + + /** + * ============================================================ + * Application communication methods + * ============================================================ + */ + async getProviders() { + if (!this.fuelProvider || !this.burnerWalletProvider) { + this.burnerWalletProvider = this.getLazyBurnerWallet(); + + if (!this.burnerWalletProvider) { + throw new Error('Burner wallet provider not found'); + } + + this.fuelProvider = (await this.config.fuelProvider) ?? null; + + if (!this.fuelProvider) { + throw new Error('Fuel provider not found'); + } + } + + return { + fuelProvider: this.fuelProvider, + burnerWalletProvider: this.burnerWalletProvider, + }; + } + + async setup() { + if (this.setupLock) return; + this.setupLock = true; + + await this.setupCurrentAccount(); + // await this.setupEventBridge(); + } + + // async setupEventBridge() { + // const { burnerWalletProvider } = await this.getProviders(); + + // burnerWalletProvider.on(this.events.ACCOUNTS_CHANGED, async (accounts) => { + // this.emit('accounts', await this.accounts()); + // if (this._currentAccount !== accounts[0]) { + // await this.setupCurrentAccount(); + // } + // }); + + // burnerWalletProvider.on(this.events.CONNECT, async (_arg) => { + // this.emit('connection', await this.isConnected()); + // }); + + // burnerWalletProvider.on(this.events.DISCONNECT, async (_arg) => { + // this.emit('connection', await this.isConnected()); + // }); + // } + + async setupCurrentAccount() { + const currentAccount = this.burnerWallet?.address.toString() ?? null; + + this._currentAccount = currentAccount; + this.emit('currentAccount', currentAccount); + } + + /** + * ============================================================ + * Connector methods + * ============================================================ + */ + + async ping(): Promise { + await this.configProviders(); + + return true; + } + + async version(): Promise { + return { app: '0.0.0', network: '0.0.0' }; + } + + async isConnected(): Promise { + const account = this.burnerWallet?.address.toString(); + + return !!account; + } + + async accounts(): Promise> { + if (!this.burnerWalletProvider) { + return []; + } + + const accounts = await this.predicateAccount.getPredicateAccounts( + this.burnerWallet as WalletUnlocked, + ); + + return accounts.map((account) => account.predicateAccount); + } + + async connect(): Promise { + if (!(await this.isConnected())) { + this.burnerWallet?.connect(this.burnerWalletProvider as Provider); + + this.emit(this.events.connection, true); + + this.on(this.events.connection, (connection: boolean) => { + this.connected = connection; + }); + + return true; + } + + return this.connected; + } + + async disconnect(): Promise { + this.burnerWallet?.lock(); + + this.emit(this.events.connection, false); + this.emit(this.events.accounts, []); + this.emit(this.events.currentAccount, null); + + return false; + } + + async signMessage(_address: string, _message: string): Promise { + throw new Error('A predicate account cannot sign messages'); + } + + async sendTransaction( + address: string, + transaction: TransactionRequestLike, + ): Promise { + console.log({ address, transaction }); + + return ''; + } + + async currentAccount(): Promise { + if (!(await this.isConnected())) { + throw Error('No connected accounts'); + } + + const account = this.burnerWallet?.address.toString(); + + if (!account) { + throw Error('No connected accounts'); + } + + return account; + } + + async addAssets(_assets: Asset[]): Promise { + throw new Error('Method not implemented.'); + } + + async addAsset(_asset: Asset): Promise { + throw new Error('Method not implemented.'); + } + + async assets(): Promise> { + return []; + } + + async addNetwork(_networkUrl: string): Promise { + throw new Error('Method not implemented.'); + } + + async selectNetwork(_network: Network): Promise { + throw new Error('Method not implemented.'); + } + + async networks(): Promise { + return [await this.currentNetwork()]; + } + + async currentNetwork(): Promise { + const { fuelProvider } = await this.getProviders(); + const chainId = fuelProvider.getChainId(); + + return { url: fuelProvider.url, chainId: chainId }; + } + + async addAbi(_abiMap: AbiMap): Promise { + throw new Error('Method not implemented.'); + } + + async getAbi(_contractId: string): Promise { + throw Error('Cannot get contractId ABI for a predicate'); + } + + async hasAbi(_contractId: string): Promise { + throw Error('A predicate account cannot have an ABI'); + } +} diff --git a/packages/burner-wallet-connector/src/Predicate.ts b/packages/burner-wallet-connector/src/Predicate.ts new file mode 100644 index 000000000..69364e42e --- /dev/null +++ b/packages/burner-wallet-connector/src/Predicate.ts @@ -0,0 +1,34 @@ +import type { WalletUnlocked } from 'fuels'; +import { getPredicateAddress } from './utils/predicate'; +import { predicates } from './utils/predicateResources'; + +export class PredicateAccount { + private predicate = predicates['verification-predicate']; + + //@ts-ignore + async getPredicateFromAddress(burnerWallet: WalletUnlocked) { + const accounts = await this.getPredicateAccounts(burnerWallet); + + return accounts; + } + + async getPredicateAccounts(burnerWallet: WalletUnlocked): Promise< + Array<{ + burnerAccount: string; + predicateAccount: string; + }> + > { + const burnerAccount = burnerWallet.address.toString(); + + const accounts = { + burnerAccount, + predicateAccount: getPredicateAddress( + burnerAccount, + this.predicate.bytecode, + this.predicate.abi, + ), + }; + + return [accounts]; + } +} diff --git a/packages/burner-wallet-connector/src/constants.ts b/packages/burner-wallet-connector/src/constants.ts new file mode 100644 index 000000000..0f4b4747b --- /dev/null +++ b/packages/burner-wallet-connector/src/constants.ts @@ -0,0 +1,3 @@ +const HAS_WINDOW = typeof window !== 'undefined'; +export const WINDOW = HAS_WINDOW ? window : null; +export const BETA_5_URL = 'https://beta-5.fuel.network/graphql'; diff --git a/packages/burner-wallet-connector/src/index.ts b/packages/burner-wallet-connector/src/index.ts new file mode 100644 index 000000000..75ccad37f --- /dev/null +++ b/packages/burner-wallet-connector/src/index.ts @@ -0,0 +1 @@ +export * from './BurnerWalletConnector'; diff --git a/packages/burner-wallet-connector/src/types.ts b/packages/burner-wallet-connector/src/types.ts new file mode 100644 index 000000000..180bf1215 --- /dev/null +++ b/packages/burner-wallet-connector/src/types.ts @@ -0,0 +1,15 @@ +import type { Provider, WalletUnlocked } from 'fuels'; + +export type BurnerWalletConnectorConfig = { + fuelProvider?: Provider | Promise; + burnerWalletProvider?: Provider | Promise; +}; + +export enum BurnerWalletConnectorEvents { + //accounts + ACCOUNTS_CHANGED = 'accountsChanged', + + //connections + CONNECT = 'connect', + DISCONNECT = 'disconnect', +} diff --git a/packages/burner-wallet-connector/src/utils/burner-wallet-icon.ts b/packages/burner-wallet-connector/src/utils/burner-wallet-icon.ts new file mode 100644 index 000000000..c05b4bc7e --- /dev/null +++ b/packages/burner-wallet-connector/src/utils/burner-wallet-icon.ts @@ -0,0 +1,2 @@ +export const BURNER_WALLET_ICON = + 'data:image/svg+xml; charset=utf-8;utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBpZD0iRmlyZSI+PHJlY3Qgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiIGZpbGw9Im5vbmUiPjwvcmVjdD48cGF0aCBkPSJNMTk3LjEyNzkzLDY2LjYwNDQ5Yy0xMy4wNzQ3MS0yMC44MjEyOS0yOS45MDk2Ny0zOC42NzU3OC00NC42NTMzMi01My4zOTM1NWE3Ljk5ODYzLDcuOTk4NjMsMCwwLDAtMTIuODc0NTEsMi4yMjE2OEwxMDguNzQ5NTEsODAuMjE4NzUsNzYuNDczNjMsNTguNzAxMTdhNy45OTkyNSw3Ljk5OTI1LDAsMCwwLTExLjEwNCwyLjIzNDM4QzQ1Ljg4MTM1LDkwLjMxMzQ4LDM2LDExNi45MTUsMzYsMTQwYTkyLDkyLDAsMCwwLDE4NCwwQzIyMCwxMTUuMTIyMDcsMjEyLjUxODU1LDkxLjExNDI2LDE5Ny4xMjc5Myw2Ni42MDQ0OVptLTkuODMzNSw4Mi42MTYyMWE1OS42OTY5Miw1OS42OTY5MiwwLDAsMS01MC4wNzI3NSw1MC4wNzQyMiw4LjExNTQzLDguMTE1NDMsMCwwLDEtMS4yMzEuMDk0NzMsOC4wMDA1NSw4LjAwMDU1LDAsMCwxLTEuMjExNDItMTUuOTA3MjMsNDQuMzE3MzksNDQuMzE3MzksMCwwLDAsMzYuNzAyNjMtMzYuNzAzMTIsNy45OTk5Myw3Ljk5OTkzLDAsMSwxLDE1LjgxMjUsMi40NDE0WiIgZmlsbD0iI2ZmODUxNCIgY2xhc3M9ImNvbG9yMDAwMDAwIHN2Z1NoYXBlIj48L3BhdGg+PC9zdmc+'; diff --git a/packages/walletconnect-connector/src/utils/generatePredicateResources.ts b/packages/burner-wallet-connector/src/utils/generatePredicateResources.ts similarity index 100% rename from packages/walletconnect-connector/src/utils/generatePredicateResources.ts rename to packages/burner-wallet-connector/src/utils/generatePredicateResources.ts diff --git a/packages/walletconnect-connector/src/utils/predicate.ts b/packages/burner-wallet-connector/src/utils/predicate.ts similarity index 100% rename from packages/walletconnect-connector/src/utils/predicate.ts rename to packages/burner-wallet-connector/src/utils/predicate.ts diff --git a/packages/walletconnect-connector/src/utils/predicateResources.ts b/packages/burner-wallet-connector/src/utils/predicateResources.ts similarity index 100% rename from packages/walletconnect-connector/src/utils/predicateResources.ts rename to packages/burner-wallet-connector/src/utils/predicateResources.ts diff --git a/packages/burner-wallet-connector/tsconfig.json b/packages/burner-wallet-connector/tsconfig.json new file mode 100644 index 000000000..610622201 --- /dev/null +++ b/packages/burner-wallet-connector/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "target": "ES2022", + "lib": ["DOM", "ES2022"], + "module": "es2022", + "moduleResolution": "Node", + "strict": true, + "noUncheckedIndexedAccess": true, + "declaration": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "outDir": "./dist" + }, + "exclude": ["./dist/**/*"] +} diff --git a/packages/burner-wallet-connector/tsup.config.js b/packages/burner-wallet-connector/tsup.config.js new file mode 100644 index 000000000..8e0c2622e --- /dev/null +++ b/packages/burner-wallet-connector/tsup.config.js @@ -0,0 +1,9 @@ +import baseConfig from '@fuels/tsup-config'; +import { defineConfig } from 'tsup'; + +export default defineConfig((options) => ({ + ...baseConfig(options, { withReact: false }), + format: ['cjs'], + external: ['fuels'], + entry: ['src/index.ts'], +})); diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index 15d1f1b00..4dc7934ac 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -2,7 +2,7 @@ import { EVMWalletConnector } from '@fuel-connectors/evm-connector'; import { FuelWalletDevelopmentConnector } from '@fuel-connectors/fuel-development-wallet'; import { FuelWalletConnector } from '@fuel-connectors/fuel-wallet'; import { FueletWalletConnector } from '@fuel-connectors/fuelet-wallet'; -import { WalletconnectWalletConnector } from '@fuel-connectors/walletconnect-connector'; +import { WalletConnectConnector } from '@fuel-connectors/walletconnect-connector'; import type { FuelConnector } from 'fuels'; type DefaultConnectors = { @@ -16,7 +16,7 @@ export function defaultConnectors({ new FuelWalletConnector(), new FueletWalletConnector(), new EVMWalletConnector(), - new WalletconnectWalletConnector(), + new WalletConnectConnector(), ]; if (devMode) { diff --git a/packages/connectors/tsup.config.js b/packages/connectors/tsup.config.js index d0ee142e0..ddbd1672c 100644 --- a/packages/connectors/tsup.config.js +++ b/packages/connectors/tsup.config.js @@ -11,7 +11,7 @@ export default defineConfig((options) => ({ '@fuel-connectors/fuel-wallet', '@fuel-connectors/fuelet-wallet', ], - minify: 'terser', + // minify: 'terser', dts: { resolve: [ '@fuel-connectors/fuel-development-wallet', @@ -19,6 +19,6 @@ export default defineConfig((options) => ({ '@fuel-connectors/fuelet-wallet', ], }, - splitting: true, - metafile: true, + splitting: false, + metafile: false, })); diff --git a/packages/walletconnect-connector/package.json b/packages/walletconnect-connector/package.json index bba1bcab7..08cb2e220 100644 --- a/packages/walletconnect-connector/package.json +++ b/packages/walletconnect-connector/package.json @@ -13,8 +13,8 @@ }, "types": "./dist/index.d.ts", "scripts": { - "build:forc": "pnpm fuels-forc build --release --path ./signature-verification", - "build:resources": "pnpm run build:forc && tsup --dts-only ./src/utils/generatePredicateResources.ts", + "build:forc": "pnpm fuels-forc build --release --path ./predicate", + "build:resources": "pnpm run build:forc && tsx ./scripts/generatePredicateResources.ts", "build": "pnpm run build:resources && tsup --dts-only", "build:watch": "pnpm run build:resources && tsup --watch --dts-only", "ts:check": "tsc --noEmit", @@ -26,7 +26,6 @@ "dependencies": { "@ethereumjs/util": "^9.0.1", "@ethersproject/bytes": "^5.7.0", - "@wagmi/connectors": "4.1.24", "@wagmi/core": "2.6.15", "@web3modal/wagmi": "4.1.5", "memoizee": "^0.4.15", diff --git a/packages/walletconnect-connector/predicate/Forc.lock b/packages/walletconnect-connector/predicate/Forc.lock new file mode 100644 index 000000000..12e968e01 --- /dev/null +++ b/packages/walletconnect-connector/predicate/Forc.lock @@ -0,0 +1,13 @@ +[[package]] +name = "core" +source = "path+from-root-566CA1D5F8BEAFBF" + +[[package]] +name = "predicate" +source = "member" +dependencies = ["std"] + +[[package]] +name = "std" +source = "git+https://github.com/fuellabs/sway?tag=v0.49.3#0dc6570377ee9c4a6359ade597fa27351e02a728" +dependencies = ["core"] diff --git a/packages/walletconnect-connector/predicate/Forc.toml b/packages/walletconnect-connector/predicate/Forc.toml new file mode 100644 index 000000000..149f45e0f --- /dev/null +++ b/packages/walletconnect-connector/predicate/Forc.toml @@ -0,0 +1,5 @@ +[project] +authors = ["Fuel Labs "] +entry = "main.sw" +license = "Apache-2.0" +name = "predicate" diff --git a/packages/walletconnect-connector/predicate/out/release/predicate-abi.json b/packages/walletconnect-connector/predicate/out/release/predicate-abi.json new file mode 100644 index 000000000..663ee3a9f --- /dev/null +++ b/packages/walletconnect-connector/predicate/out/release/predicate-abi.json @@ -0,0 +1,65 @@ +{ + "types": [ + { + "typeId": 0, + "type": "b256", + "components": null, + "typeParameters": null + }, + { + "typeId": 1, + "type": "bool", + "components": null, + "typeParameters": null + }, + { + "typeId": 2, + "type": "struct EvmAddress", + "components": [ + { + "name": "value", + "type": 0, + "typeArguments": null + } + ], + "typeParameters": null + }, + { + "typeId": 3, + "type": "u64", + "components": null, + "typeParameters": null + } + ], + "functions": [ + { + "inputs": [ + { + "name": "witness_index", + "type": 3, + "typeArguments": null + } + ], + "name": "main", + "output": { + "name": "", + "type": 1, + "typeArguments": null + }, + "attributes": null + } + ], + "loggedTypes": [], + "messagesTypes": [], + "configurables": [ + { + "name": "SIGNER", + "configurableType": { + "name": "", + "type": 2, + "typeArguments": [] + }, + "offset": 1952 + } + ] +} diff --git a/packages/walletconnect-connector/predicate/out/release/predicate-bin-root b/packages/walletconnect-connector/predicate/out/release/predicate-bin-root new file mode 100644 index 000000000..27770df53 --- /dev/null +++ b/packages/walletconnect-connector/predicate/out/release/predicate-bin-root @@ -0,0 +1 @@ +0xad8bfa6ad9c15d9d57af61964c2372ed1fa1ace00aeefbc8ed5cf07192510d68 \ No newline at end of file diff --git a/packages/walletconnect-connector/predicate/out/release/predicate.bin b/packages/walletconnect-connector/predicate/out/release/predicate.bin new file mode 100644 index 0000000000000000000000000000000000000000..af05cc157a982b1cca19cdfc3842e7f45234556a GIT binary patch literal 2008 zcma)7K~LO96nM1{gOQl3jRIk!XiBhTk#&!Zp6e*TQ^LE~Q^WOKp_hz?< z20VKC6>IX}SY!V^CF8N6pJ?d*4^j@(xp3)DQ0>N7M4Fv67Kb zi3MY^m_IxgAvfiXq%3bHB`X-`w(lyRyQ1DbRz4H6ddz}KydmHp+@b7j?6os7xBmco zZUvV})Q?yy`_ri`=DItXZjgj?uan+mkJA_aRWf*oMs4D4PQ%d6M32b>UM74hAr7~E z;>8Etiya&ll@xCt&Ln=GE>>D z#Hj22(>o4+F&;70nBJ`M*IA8w32e=*#`hSoeTf_rQSa@f_bDE{-p+cJM$|6q`-&gb zGmV+aDrWtVBUdZuN^!aeJY0C)WpFkke5Ud%L7&-jWjhAkMmGifDif7-FUh*MxN3*`QRp0j3kn3880l7Gb8BTEc zt6ecwTs1pOP9iECvyrITBP;3?MSZ44eX|htrv{>@T|Jvi*f@J+c)MiOPgIYp+Qr5{ zjDE&F#&eSv6JbdwCh5hRtj7g87Z1q4VjX(x`m-Eaown3&`imAUFQ(q6he!J#axd-DWlym>I}&u3M7x-C^6F zPUr0mmhBwN%v)IIV_n{e2Z3n_m}bskYQ7Uwe|aeCuNR|!rxf*f%fL9CW8^8uRq%QH z1e_)1N%VnHUC-Yhy<^n7BmYM7Vye$1) zypgGVQOV$~%Z{nziV1BV4Aa#i1kh zo|Z3!EouuIj9R9KRZ#t^az($MQ}?p48ne*tu*P_2sUhfAD2OdC^E*TzL@kzL!>%ce z*kAdhkIl2V@g8QgjoFbla0kF0zQm2bbf4xYE;Oq#O-3MqdkQ+>26q>Ng}6Pda1(G-!GPZ+R*D<K78d9sNeUymK&Pd`+B5yMRbq) Jifj44_dk{?8HNA= literal 0 HcmV?d00001 diff --git a/packages/walletconnect-connector/predicate/src/main.sw b/packages/walletconnect-connector/predicate/src/main.sw new file mode 100644 index 000000000..8571bf84d --- /dev/null +++ b/packages/walletconnect-connector/predicate/src/main.sw @@ -0,0 +1,101 @@ +predicate; + +use std::{ + b512::B512, + bytes::Bytes, + constants::ZERO_B256, + tx::{ + tx_id, + tx_witness_data, + }, + vm::evm::{ + ecr::ec_recover_evm_address, + evm_address::EvmAddress, + }, +}; + +/// Personal sign prefix for Ethereum inclusive of the 32 bytes for the length of the Tx ID. +/// +/// # Additional Information +/// +/// Take "\x19Ethereum Signed Message:\n32" and converted to hex. +/// The 00000000 at the end is the padding added by Sway to fill the word. +const ETHEREUM_PREFIX = 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000; + +struct SignedData { + /// The id of the transaction to be signed. + transaction_id: b256, + /// EIP-191 personal sign prefix. + ethereum_prefix: b256, + /// Additional data used for reserving memory for hashing (hack). + #[allow(dead_code)] + empty: b256, +} + +configurable { + /// The Ethereum address that signed the transaction. + SIGNER: EvmAddress = EvmAddress { + value: ZERO_B256, + }, +} + +fn main(witness_index: u64) -> bool { + // Retrieve the Ethereum signature from the witness data in the Tx at the specified index. + let signature: B512 = tx_witness_data(witness_index); + + // Hash the Fuel Tx (as the signed message) and attempt to recover the signer from the signature. + let result = ec_recover_evm_address(signature, personal_sign_hash(tx_id())); + + // If the signers match then the predicate has validated the Tx. + if result.is_ok() { + if SIGNER == result.unwrap() { + return true; + } + } + + // Otherwise, an invalid signature has been passed and we invalidate the Tx. + false +} + +/// Return the Keccak-256 hash of the transaction ID in the format of EIP-191. +/// +/// # Arguments +/// +/// * `transaction_id`: [b256] - Fuel Tx ID. +fn personal_sign_hash(transaction_id: b256) -> b256 { + // Hack, allocate memory to reduce manual `asm` code. + let data = SignedData { + transaction_id, + ethereum_prefix: ETHEREUM_PREFIX, + empty: ZERO_B256, + }; + + // Pointer to the data we have signed external to Sway. + let data_ptr = asm(ptr: data.transaction_id) { + ptr + }; + + // The Ethereum prefix is 28 bytes (plus padding we exclude). + // The Tx ID is 32 bytes at the end of the prefix. + let len_to_hash = 28 + 32; + + // Create a buffer in memory to overwrite with the result being the hash. + let mut buffer = b256::min(); + + // Copy the Tx ID to the end of the prefix and hash the exact len of the prefix and id (without + // the padding at the end because that would alter the hash). + asm( + hash: buffer, + tx_id: data_ptr, + end_of_prefix: data_ptr + len_to_hash, + prefix: data.ethereum_prefix, + id_len: 32, + hash_len: len_to_hash, + ) { + mcp end_of_prefix tx_id id_len; + k256 hash prefix hash_len; + } + + // The buffer contains the hash. + buffer +} diff --git a/packages/walletconnect-connector/scripts/generatePredicateResources.ts b/packages/walletconnect-connector/scripts/generatePredicateResources.ts new file mode 100644 index 000000000..d1869ab58 --- /dev/null +++ b/packages/walletconnect-connector/scripts/generatePredicateResources.ts @@ -0,0 +1,42 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const predicates = ['predicate']; + +let code = 'export const predicates = {\n'; + +predicates.forEach((predicate) => { + const outputDirectory = `${__dirname}/../${predicate}/out/release`; + const abiPath = `${outputDirectory}/${predicate}-abi.json`; + const bytecodePath = `${outputDirectory}/${predicate}.bin`; + + const abi = fs.readFileSync(abiPath, 'utf8'); + const bytecode = fs.readFileSync(bytecodePath); + + code += ` '${predicate}': {\n`; + code += ` abi: ${abi},\n`; + code += ` bytecode: base64ToUint8Array('${bytecode.toString( + 'base64', + )}'),\n`; + code += ' },\n'; +}); + +code += ` +}; + +function base64ToUint8Array(base64: string) { + const binaryString = atob(base64); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; +} +`; + +fs.writeFileSync(`${__dirname}/../src/predicates/index.ts`, code); +console.log('Generated'); diff --git a/packages/walletconnect-connector/src/Predicate.ts b/packages/walletconnect-connector/src/Predicate.ts deleted file mode 100644 index 2b8bd4b1f..000000000 --- a/packages/walletconnect-connector/src/Predicate.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { type Config, getAccount } from '@wagmi/core'; -import { getPredicateAddress } from './utils/predicate'; -import { predicates } from './utils/predicateResources'; - -export class PredicateAccount { - private predicate = predicates['verification-predicate']; - - async getPredicateFromAddress(address: string, ethConfig: Config) { - const accounts = await this.getPredicateAccounts(ethConfig); - - return accounts.find((account) => account.predicateAccount === address); - } - - async getPredicateAccounts(ethConfig: Config): Promise< - Array<{ - ethAccount: string; - predicateAccount: string; - }> - > { - const ethAccounts = getAccount(ethConfig).addresses ?? []; - - const accounts = ethAccounts.map((account) => ({ - ethAccount: account, - predicateAccount: getPredicateAddress( - account, - this.predicate.bytecode, - this.predicate.abi, - ), - })); - - return accounts; - } -} diff --git a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts b/packages/walletconnect-connector/src/WalletConnectConnector.ts similarity index 57% rename from packages/walletconnect-connector/src/walletconnectWalletConnector.ts rename to packages/walletconnect-connector/src/WalletConnectConnector.ts index 6473a46ce..b31167c93 100644 --- a/packages/walletconnect-connector/src/walletconnectWalletConnector.ts +++ b/packages/walletconnect-connector/src/WalletConnectConnector.ts @@ -1,6 +1,12 @@ import { hexToBytes } from '@ethereumjs/util'; import { hexlify, splitSignature } from '@ethersproject/bytes'; -import { type Config, disconnect, getAccount } from '@wagmi/core'; +import { + type Config, + disconnect, + getAccount, + reconnect, + watchAccount, +} from '@wagmi/core'; import type { Web3Modal } from '@web3modal/wagmi'; import { type AbiMap, @@ -15,24 +21,22 @@ import { type Version, transactionRequestify, } from 'fuels'; -import { PredicateAccount } from './Predicate'; -import { BETA_5_URL } from './constants'; +import { BETA_5_URL, ETHEREUM_ICON } from './constants'; +import { predicates } from './predicates'; import { - type EthereumWalletConnectorConfig, - EthereumWalletConnectorEvents, + type WalletConnectConfig, + WalletConnectConnectorEvents, } from './types'; -import { ETHEREUM_ICON } from './utils/ethereum-icon'; -import { createPredicate } from './utils/predicate'; -import { predicates } from './utils/predicateResources'; -import WagmiConfig from './utils/wagmiConfig'; +import { PredicateAccount } from './utils/Predicate'; +import { createModalConfig } from './utils/wagmiConfig'; -export class WalletconnectWalletConnector extends FuelConnector { +export class WalletConnectConnector extends FuelConnector { name = 'Ethereum Wallets'; connected = false; installed = false; - events = { ...FuelConnectorEventTypes, ...EthereumWalletConnectorEvents }; + events = { ...FuelConnectorEventTypes, ...WalletConnectConnectorEvents }; metadata: ConnectorMetadata = { image: ETHEREUM_ICON, @@ -43,57 +47,83 @@ export class WalletconnectWalletConnector extends FuelConnector { }, }; - ethConfig: Config; + wagmiConfig: Config; ethProvider: unknown | null = null; fuelProvider: FuelProvider | null = null; - ethModal: Web3Modal; + web3Modal: Web3Modal; private predicateAccount: PredicateAccount; - private predicate = predicates['verification-predicate']; - private setupLock = false; - private _currentAccount: string | null = null; - private config: EthereumWalletConnectorConfig = {}; - private _ethereumEvents = 0; + private config: WalletConnectConfig = {}; - constructor(config: EthereumWalletConnectorConfig = {}) { - super(); + private _unsubs: Array<() => void> = []; - this.predicateAccount = new PredicateAccount(); + constructor(config: WalletConnectConfig = {}) { + super(); - const wagmiConfig = new WagmiConfig(); + this.predicateAccount = new PredicateAccount( + config.predicateConfig ?? predicates.predicate, + ); - this.ethConfig = wagmiConfig.getEthConfig(); - this.ethModal = wagmiConfig.getEthModal(); + const { wagmiConfig, web3Modal } = createModalConfig(config); + this.wagmiConfig = wagmiConfig; + this.web3Modal = web3Modal; this.configProviders(config); - this.setupEthereumEvents(); + this.setupWatchers(); } - async configProviders(config: EthereumWalletConnectorConfig = {}) { + async configProviders(config: WalletConnectConfig = {}) { this.config = Object.assign(config, { fuelProvider: config.fuelProvider || FuelProvider.create(BETA_5_URL), - ethProvider: config.ethProvider || null, }); } - setupEthereumEvents() { - this._ethereumEvents = Number( - setInterval(() => { - if (this.ethProvider) { - clearInterval(this._ethereumEvents); - window.dispatchEvent( - new CustomEvent('FuelConnector', { detail: this }), - ); - } - }, 500), - ); - } - /** * ============================================================ * Application communication methods * ============================================================ */ + evmAccounts(): Array { + const accounts = getAccount(this.wagmiConfig).addresses; + return accounts as Array; + } + + setupWatchers() { + this._unsubs.push( + watchAccount(this.wagmiConfig, { + onChange: async (account) => { + switch (account.status) { + case 'connected': { + this.emit(this.events.connection, true); + this.emit( + this.events.currentAccount, + await this.predicateAccount.getPredicateAddress( + account.address, + ), + ); + this.emit( + this.events.accounts, + await this.predicateAccount.getPredicateAccounts( + this.evmAccounts(), + ), + ); + break; + } + case 'disconnected': { + this.emit(this.events.connection, false); + this.emit(this.events.currentAccount, null); + this.emit(this.events.accounts, []); + break; + } + } + }, + }), + ); + } + + destroy() { + this._unsubs.forEach((unsub) => unsub()); + } async getProviders() { if (!this.fuelProvider) { @@ -109,51 +139,13 @@ export class WalletconnectWalletConnector extends FuelConnector { }; } - async setup() { - if (this.setupLock) return; - this.setupLock = true; - - await this.setupCurrentAccount(); - await this.setupEventBridge(); - } - - async setupEventBridge() { - //@ts-ignore - this.ethProvider.on(this.events.ACCOUNTS_CHANGED, async () => { - this.emit('accounts', await this.accounts()); - if (this._currentAccount !== getAccount(this.ethConfig).address) { - await this.setupCurrentAccount(); - } - }); - - //@ts-ignore - this.ethProvider.on(this.events.CONNECT, async (_arg) => { - this.emit('connection', await this.isConnected()); - }); - - //@ts-ignore - this.ethProvider.on(this.events.DISCONNECT, async (_arg) => { - this.emit('connection', await this.isConnected()); - }); - } - - async setupCurrentAccount() { - const currentAccount = getAccount(this.ethConfig).address || null; - - this._currentAccount = currentAccount; - - this.emit('currentAccount', currentAccount); - } - /** * ============================================================ * Connector methods * ============================================================ */ - async ping(): Promise { await this.configProviders(); - return true; } @@ -161,58 +153,52 @@ export class WalletconnectWalletConnector extends FuelConnector { return { app: '0.0.0', network: '0.0.0' }; } - async isConnected(): Promise { - const account = getAccount(this.ethConfig); - - return account.isConnected || false; - } - - async accounts(): Promise> { - if (!this.ethProvider) { - return []; + async requireConnection() { + const { state } = this.wagmiConfig; + if (state.status === 'disconnected' && state.connections.size > 0) { + await reconnect(this.wagmiConfig); } + } - const accounts = await this.predicateAccount.getPredicateAccounts( - this.ethConfig, - ); - - return accounts.map((account) => account.predicateAccount); + async isConnected(): Promise { + await this.requireConnection(); + const account = getAccount(this.wagmiConfig); + return account.isConnected || false; } async connect(): Promise { - if (!(await this.isConnected())) { - await this.ethModal?.open(); - - this.ethModal?.subscribeEvents(async (event) => { - if (event.data.event === 'CONNECT_SUCCESS') { - this.ethProvider = await getAccount( - this.ethConfig, - ).connector?.getProvider(); - - await this.setup(); - - this.emit(this.events.connection, true); - - this.on(this.events.connection, (connection: boolean) => { - this.connected = connection; - }); + return new Promise((resolve) => { + this.web3Modal.open(); + const unsub = this.web3Modal.subscribeEvents(async (event) => { + switch (event.data.event) { + case 'CONNECT_SUCCESS': { + resolve(true); + unsub(); + break; + } + case 'MODAL_CLOSE': + case 'CONNECT_ERROR': { + resolve(false); + unsub(); + break; + } } }); - - return true; - } - - return this.connected; + }); } async disconnect(): Promise { - await disconnect(this.ethConfig); + const { connector } = getAccount(this.wagmiConfig); + await disconnect(this.wagmiConfig, { + connector, + }); + return this.isConnected(); + } - this.emit(this.events.connection, false); - this.emit(this.events.accounts, []); - this.emit(this.events.currentAccount, null); + async accounts(): Promise> { + await this.requireConnection(); - return false; + return this.predicateAccount.getPredicateAccounts(this.evmAccounts()); } async signMessage(_address: string, _message: string): Promise { @@ -229,21 +215,19 @@ export class WalletconnectWalletConnector extends FuelConnector { const { fuelProvider } = await this.getProviders(); const chainId = fuelProvider.getChainId(); - const account = await this.predicateAccount.getPredicateFromAddress( + const evmAccount = await this.predicateAccount.getEVMAddress( address, - this.ethConfig, + this.evmAccounts(), ); - if (!account) { + if (!evmAccount) { throw Error(`No account found for ${address}`); } const transactionRequest = transactionRequestify(transaction); // Create a predicate and set the witness index to call in predicate` - const predicate = createPredicate( - account.ethAccount, + const predicate = this.predicateAccount.createPredicate( + evmAccount, fuelProvider, - this.predicate.bytecode, - this.predicate.abi, [transactionRequest.witnesses.length], ); predicate.connect(fuelProvider); @@ -254,12 +238,14 @@ export class WalletconnectWalletConnector extends FuelConnector { // To each input of the request, attach the predicate and its data const requestWithPredicateAttached = predicate.populateTransactionPredicateData(transactionRequest); - const txID = requestWithPredicateAttached.getTransactionId(chainId); - //@ts-ignore - const signature = await this.ethProvider.request({ + // biome-ignore lint/suspicious/noExplicitAny: + const provider: any = await getAccount( + this.wagmiConfig, + ).connector?.getProvider(); + const signature = await provider.request({ method: 'personal_sign', - params: [txID, account.ethAccount], + params: [txID, evmAccount], }); // Transform the signature into compact form for Sway to understand @@ -282,14 +268,7 @@ export class WalletconnectWalletConnector extends FuelConnector { if (!(await this.isConnected())) { throw Error('No connected accounts'); } - - const account = getAccount(this.ethConfig).address; - - if (!account) { - throw Error('No connected accounts'); - } - - return account; + return getAccount(this.wagmiConfig).address || null; } async addAssets(_assets: Asset[]): Promise { diff --git a/packages/walletconnect-connector/src/constants.ts b/packages/walletconnect-connector/src/constants.ts index 0f4b4747b..a14fe83bc 100644 --- a/packages/walletconnect-connector/src/constants.ts +++ b/packages/walletconnect-connector/src/constants.ts @@ -1,3 +1,3 @@ -const HAS_WINDOW = typeof window !== 'undefined'; -export const WINDOW = HAS_WINDOW ? window : null; +export const ETHEREUM_ICON = + 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTUzNSIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDQxNyIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPjxwYXRoIGZpbGw9IiMzNDM0MzQiIGQ9Ik0xMjcuOTYxIDBsLTIuNzk1IDkuNXYyNzUuNjY4bDIuNzk1IDIuNzkgMTI3Ljk2Mi03NS42Mzh6Ii8+PHBhdGggZmlsbD0iIzhDOEM4QyIgZD0iTTEyNy45NjIgMEwwIDIxMi4zMmwxMjcuOTYyIDc1LjYzOVYxNTQuMTU4eiIvPjxwYXRoIGZpbGw9IiMzQzNDM0IiIGQ9Ik0xMjcuOTYxIDMxMi4xODdsLTEuNTc1IDEuOTJ2OTguMTk5bDEuNTc1IDQuNkwyNTYgMjM2LjU4N3oiLz48cGF0aCBmaWxsPSIjOEM4QzhDIiBkPSJNMTI3Ljk2MiA0MTYuOTA1di0xMDQuNzJMMCAyMzYuNTg1eiIvPjxwYXRoIGZpbGw9IiMxNDE0MTQiIGQ9Ik0xMjcuOTYxIDI4Ny45NThsMTI3Ljk2LTc1LjYzNy0xMjcuOTYtNTguMTYyeiIvPjxwYXRoIGZpbGw9IiMzOTM5MzkiIGQ9Ik0wIDIxMi4zMmwxMjcuOTYgNzUuNjM4di0xMzMuOHoiLz4KCTxtZXRhZGF0YT4KCQk8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnJkZnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CgkJCTxyZGY6RGVzY3JpcHRpb24gYWJvdXQ9Imh0dHBzOi8vaWNvbnNjb3V0LmNvbS9sZWdhbCNsaWNlbnNlcyIgZGM6dGl0bGU9ImV0aGVyZXVtLTEtY29tcGFueS1icmFuZC1sb2dvIiBkYzpkZXNjcmlwdGlvbj0iZXRoZXJldW0tMS1jb21wYW55LWJyYW5kLWxvZ28iIGRjOnB1Ymxpc2hlcj0iSWNvbnNjb3V0IiBkYzpkYXRlPSIyMDE3LTA3LTEyIiBkYzpmb3JtYXQ9ImltYWdlL3N2Zyt4bWwiIGRjOmxhbmd1YWdlPSJlbiI+CgkJCQk8ZGM6Y3JlYXRvcj4KCQkJCQk8cmRmOkJhZz4KCQkJCQkJPHJkZjpsaT5JY29uIE1hZmlhPC9yZGY6bGk+CgkJCQkJPC9yZGY6QmFnPgoJCQkJPC9kYzpjcmVhdG9yPgoJCQk8L3JkZjpEZXNjcmlwdGlvbj4KCQk8L3JkZjpSREY+CiAgICA8L21ldGFkYXRhPjwvc3ZnPgo='; export const BETA_5_URL = 'https://beta-5.fuel.network/graphql'; diff --git a/packages/walletconnect-connector/src/index.ts b/packages/walletconnect-connector/src/index.ts index daca7efc2..6ffd50ec5 100644 --- a/packages/walletconnect-connector/src/index.ts +++ b/packages/walletconnect-connector/src/index.ts @@ -1 +1,2 @@ -export * from './walletconnectWalletConnector'; +export * from './WalletConnectConnector'; +export * from './types'; diff --git a/packages/walletconnect-connector/src/predicates/index.ts b/packages/walletconnect-connector/src/predicates/index.ts new file mode 100644 index 000000000..567d6c1ed --- /dev/null +++ b/packages/walletconnect-connector/src/predicates/index.ts @@ -0,0 +1,81 @@ +export const predicates = { + predicate: { + abi: { + types: [ + { + typeId: 0, + type: 'b256', + components: null, + typeParameters: null, + }, + { + typeId: 1, + type: 'bool', + components: null, + typeParameters: null, + }, + { + typeId: 2, + type: 'struct EvmAddress', + components: [ + { + name: 'value', + type: 0, + typeArguments: null, + }, + ], + typeParameters: null, + }, + { + typeId: 3, + type: 'u64', + components: null, + typeParameters: null, + }, + ], + functions: [ + { + inputs: [ + { + name: 'witness_index', + type: 3, + typeArguments: null, + }, + ], + name: 'main', + output: { + name: '', + type: 1, + typeArguments: null, + }, + attributes: null, + }, + ], + loggedTypes: [], + messagesTypes: [], + configurables: [ + { + name: 'SIGNER', + configurableType: { + name: '', + type: 2, + typeArguments: [], + }, + offset: 1952, + }, + ], + }, + bytecode: base64ToUint8Array( + 'dAAAA0cAAAAAAAAAAAAHSF38wAEQ//MAGuxQAJEABrhxRAADYUkSAHZIAAJhQRIMdAAAB3JMAAITSSTAWkkgAXZIAAJhQRJKdAAAASQAAABdQQAAXU/wDxBNMwBdU/AQEFFDAF1f8BAQXXMAYUEEAVBHs1ga6QAAGuUQACD4MwBY++ACUPvgBHQAAMIaQ9AAUEe2eHJIAEAoRQSAUEO2eBpEAABySAAgKO0UgFBHsCBySAAgKEU0gFBHsEBySAAgKEV0gFBHtMhySABgKEe0gFBHtMhQS7SockwAIChJRMBQS7SoXU/wCBBNFMBQU7TIUFFAIF1X8AldW/AIKE0VQEFJRYBQR7SoUEuwyHJMACAbTATAEE0kwHJQACAoTXUAckwAIBtMFMAQTSTAclAAIChNdQBQT7HQclAAQChNJQBQS7YQclAAQChJNQBQS7YQUE+wiHJQAEAoTQUAUEOygHJQACAoQRUAPkk0ABpAgAATQQBAdkAAClBDsjhf7ABHUEe2EFBJAAhyTABAKEkUwFBLs/hyRABIKEkEQHQAAAZQQ7GIX+wQMV/sADlQS7P4ckQASChJBEBQQ7WockQASChBJEBQQ7KgckQASChBJEBdQ7B/E0EAQHZAADxQQ7WoUEey6HJIAEgoRQSAXUOwtRNBAAB2QAABNgAAAFBDsuhQQQAIUEe1KHJIAEAoRQSAUEO1KHJEACAbRARAEEUEQFBDtShySAAgG0gUgBBJBIBQQ7FIckwAIChBFMBQRQAgckwAIChFJMBQR7O4ckgAQChFBIBQQ7OYGukQABrlAAAg+DMAWPvgAlD74AR0AABiGkPQAFBHtfBySAAgKEUEgFBDshBf7ABCUEe18FBLtYhyTAAgKEkUwFBHtYhwRAAMUEe1iFBLsQhyTAAgKEkUwFBFAAhyTAAgKEUkwFBLtEByRAAoKEkEQHQAAApQQ7KgUEEAQFBHsGBf7BAMUEkQIHJMAAgoSQTAUEu0QHJAACgoSRQAUEO2UHJEACgoQSRAXUOwiBNBAABcR/BQdkAAARpEAAB2RAABdAAAG1BDtlBQR7MwckgAKChFBIBdQ7DKE0EAAHZAAAE2AAAAUEOzMFBBAAhQR7VockgAIChFBIBQQ7EoXUfwERBFEwBySAAgKEEUgFBHtWhQS7RockwAIChJBMBQQ7SIckwAIChBFMChQSQgdkAAASQAAABcQ/BQJEAAABrwUACRAAAoX/EAAF/xEAFf8SACX/EwA1/zsAQa7FAAkQAAABpDoAAaR5AAGkvgAHJMAEAoRQTAGvUQAJIAAAAa+SAAWfBQKF1DwABdR8ABXUvAAl1PwANd78AEkgAAKEr4AAAa8FAAkQAAOF/xAABf8RABX/EgAl/xMANf8UAEX/FQBV/zsAYa7FAAkQAAeBpDoAAaR5AAGkvgAF1P8BAQTTMAGlAAACZQAAAaUHAAX+1ACF/sAAlf7AAKUFOwQHJUAEAo7QVAGuuwABrlQAAg+DMAWPvgAlD74AR0AAAWUEOwWHJQACAoQTUAUEOwWF1PsAhdU7AKQUE1AHJMACAoRQTAGvUQAJIAAHga+SAAWfBQOF1DwABdR8ABXUvAAl1PwANdU8AEXVfABV3vwAaSAAA4SvgAABrwUACRAABYX/EAAF/xEAFf8SACX/EwA1/xQARf8VAFX/FgBl/xcAdf8YAIX/GQCV/zsAoa7FAAkQAAQBpDoAAaZ5AAGmPgAF1H8AkmRAAAGkRwAHJIACAo7QSAGkuwAF1NIABdUSABXVUgAl1JIANfRTAAX0VAAV9FUAJfRSADXUvwCRNJIAB2SAAsXUmQAhNJIAB2SAAiXUmQAl1P8AkQSSTAXU2QAl1RkABdVZABFVklQHZYAAF0AAAHJkgAABpYcAAVXVAAdlwAAXQAAAEoWUVAGlFgAF9lQAAaWAAAXVPwCRZRZQB2UAAFX2UgAV9lIAIaRAAAJkQAAHQAAA9dUZAAEFFEwBBRRYAQVRWAXFVQAF5RUAAQWWBAdQAADl9lEABdR/AJX2UQAV1H8AlfZRACGkQAACZEAABQQQAgXUfwCSZEAAAaRHAAUEuwIHJMACAoSQTAXUEgAF1NIAFdUSACXUkgA19FAABfRTABX0VAAl9FIANdQ/AJE0EAAHZAACxdQZACE0EAAHZAACJdQZACXUvwCRBBBIBdSZACXU2QAF1RkAEVVQUAdlQAAXQAAAcmQAAAGlRwABVZQAB2WAABdAAAAShVNQAaTVAAX2UwABpUAABdT/AJFk1UwHZMAAVfZQABX2UAAhpAAAAmQAAAdAAAD11NkAAQTTSAEE01QBBRFUBcUUAAXk1AABBVUEB1AAAOX2UQAF1D8AlfZQABXUPwCV9lAAIaQAAAJkAAABr0AACSAABAGvmAAFnwUFhdQ8AAXUfAAV1LwAJdT8ADXVPABF1XwAVdW8AGXV/AB11jwAhdZ8AJXe/ACpIAAFhK+AAARwAAABlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZToKMzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdIAAAAAAAAB2gAAAAAAAAHoA==', + ), + }, +}; + +function base64ToUint8Array(base64: string) { + const binaryString = atob(base64); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; +} diff --git a/packages/walletconnect-connector/src/types.ts b/packages/walletconnect-connector/src/types.ts index 58aa0587f..24510685c 100644 --- a/packages/walletconnect-connector/src/types.ts +++ b/packages/walletconnect-connector/src/types.ts @@ -1,11 +1,19 @@ -import type { Provider as FuelProvider } from 'fuels'; +import type { Config as WagmiConfig } from '@wagmi/core'; +import type { Provider as FuelProvider, JsonAbi } from 'fuels'; -export type EthereumWalletConnectorConfig = { +export interface PredicateConfig { + abi: JsonAbi; + bytecode: Uint8Array; +} + +export type WalletConnectConfig = { fuelProvider?: FuelProvider | Promise; - ethProvider?: unknown | Promise; + projectId?: string; + wagmiConfig?: WagmiConfig; + predicateConfig?: PredicateConfig; }; -export enum EthereumWalletConnectorEvents { +export enum WalletConnectConnectorEvents { //accounts ACCOUNTS_CHANGED = 'accountsChanged', diff --git a/packages/walletconnect-connector/src/utils/Predicate.ts b/packages/walletconnect-connector/src/utils/Predicate.ts new file mode 100644 index 000000000..21700b9fd --- /dev/null +++ b/packages/walletconnect-connector/src/utils/Predicate.ts @@ -0,0 +1,66 @@ +import { arrayify } from '@ethersproject/bytes'; +import { + Address, + type InputValue, + type JsonAbi, + Predicate, + type Provider, + getPredicateRoot, +} from 'fuels'; +import memoize from 'memoizee'; +import type { PredicateConfig } from '../types'; + +export class PredicateAccount { + private abi: JsonAbi; + private bytecode: Uint8Array; + + constructor({ abi, bytecode }: PredicateConfig) { + this.abi = abi; + this.bytecode = bytecode; + } + + getPredicateAddress = memoize((evmAddress: string): string => { + const configurable = { + SIGNER: Address.fromEvmAddress(evmAddress).toEvmAddress(), + }; + // @ts-ignore + const { predicateBytes } = Predicate.processPredicateData( + this.bytecode, + this.abi, + configurable, + ); + const address = Address.fromB256(getPredicateRoot(predicateBytes)); + + return address.toString(); + }); + + createPredicate = memoize( + ( + evmAddress: string, + provider: Provider, + inputData: TInputData, + ): Predicate => { + const configurable = { + SIGNER: Address.fromEvmAddress(evmAddress).toEvmAddress(), + }; + const predicate = new Predicate({ + bytecode: arrayify(this.bytecode), + abi: this.abi, + provider, + configurableConstants: configurable, + inputData, + }); + return predicate; + }, + ); + + getEVMAddress(address: string, evmAccounts: Array = []) { + return evmAccounts.find( + (account) => this.getPredicateAddress(account) === address, + ); + } + + getPredicateAccounts(evmAccounts: Array = []): Array { + return evmAccounts.map((account) => this.getPredicateAddress(account)); + } +} diff --git a/packages/walletconnect-connector/src/utils/ethereum-icon.ts b/packages/walletconnect-connector/src/utils/ethereum-icon.ts deleted file mode 100644 index 9afee0920..000000000 --- a/packages/walletconnect-connector/src/utils/ethereum-icon.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const ETHEREUM_ICON = - 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTUzNSIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDQxNyIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPjxwYXRoIGZpbGw9IiMzNDM0MzQiIGQ9Ik0xMjcuOTYxIDBsLTIuNzk1IDkuNXYyNzUuNjY4bDIuNzk1IDIuNzkgMTI3Ljk2Mi03NS42Mzh6Ii8+PHBhdGggZmlsbD0iIzhDOEM4QyIgZD0iTTEyNy45NjIgMEwwIDIxMi4zMmwxMjcuOTYyIDc1LjYzOVYxNTQuMTU4eiIvPjxwYXRoIGZpbGw9IiMzQzNDM0IiIGQ9Ik0xMjcuOTYxIDMxMi4xODdsLTEuNTc1IDEuOTJ2OTguMTk5bDEuNTc1IDQuNkwyNTYgMjM2LjU4N3oiLz48cGF0aCBmaWxsPSIjOEM4QzhDIiBkPSJNMTI3Ljk2MiA0MTYuOTA1di0xMDQuNzJMMCAyMzYuNTg1eiIvPjxwYXRoIGZpbGw9IiMxNDE0MTQiIGQ9Ik0xMjcuOTYxIDI4Ny45NThsMTI3Ljk2LTc1LjYzNy0xMjcuOTYtNTguMTYyeiIvPjxwYXRoIGZpbGw9IiMzOTM5MzkiIGQ9Ik0wIDIxMi4zMmwxMjcuOTYgNzUuNjM4di0xMzMuOHoiLz4KCTxtZXRhZGF0YT4KCQk8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnJkZnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CgkJCTxyZGY6RGVzY3JpcHRpb24gYWJvdXQ9Imh0dHBzOi8vaWNvbnNjb3V0LmNvbS9sZWdhbCNsaWNlbnNlcyIgZGM6dGl0bGU9ImV0aGVyZXVtLTEtY29tcGFueS1icmFuZC1sb2dvIiBkYzpkZXNjcmlwdGlvbj0iZXRoZXJldW0tMS1jb21wYW55LWJyYW5kLWxvZ28iIGRjOnB1Ymxpc2hlcj0iSWNvbnNjb3V0IiBkYzpkYXRlPSIyMDE3LTA3LTEyIiBkYzpmb3JtYXQ9ImltYWdlL3N2Zyt4bWwiIGRjOmxhbmd1YWdlPSJlbiI+CgkJCQk8ZGM6Y3JlYXRvcj4KCQkJCQk8cmRmOkJhZz4KCQkJCQkJPHJkZjpsaT5JY29uIE1hZmlhPC9yZGY6bGk+CgkJCQkJPC9yZGY6QmFnPgoJCQkJPC9kYzpjcmVhdG9yPgoJCQk8L3JkZjpEZXNjcmlwdGlvbj4KCQk8L3JkZjpSREY+CiAgICA8L21ldGFkYXRhPjwvc3ZnPgo='; diff --git a/packages/walletconnect-connector/src/utils/wagmiConfig.ts b/packages/walletconnect-connector/src/utils/wagmiConfig.ts index 7a4868eb5..0815a1dca 100644 --- a/packages/walletconnect-connector/src/utils/wagmiConfig.ts +++ b/packages/walletconnect-connector/src/utils/wagmiConfig.ts @@ -1,55 +1,41 @@ -import { coinbaseWallet, walletConnect } from '@wagmi/connectors'; import { http, type Config, createConfig, injected } from '@wagmi/core'; -import { mainnet } from '@wagmi/core/chains'; +import { mainnet, sepolia } from '@wagmi/core/chains'; import { type Web3Modal, createWeb3Modal } from '@web3modal/wagmi'; +import type { WalletConnectConfig } from '../types'; -export default class WagmiConfig { - private WAGMI_PROJECT_ID = '0e0f5503e675e719c07e73ff5f38d31f'; - private WAGMI_PROJECT_URL = 'http://localhost:5173'; - - private metadata = { - name: 'WalletConnect Connector', - description: 'WalletConnect Connector', - url: this.WAGMI_PROJECT_URL, - icons: ['https://avatars.githubusercontent.com/u/37784886'], - }; - - private ethConfig: Config; - private ethModal: Web3Modal; +interface ModalConfig { + wagmiConfig: Config; + web3Modal: Web3Modal; +} - constructor() { - this.ethConfig = createConfig({ - chains: [mainnet], +export function createModalConfig(config: WalletConnectConfig): ModalConfig { + const wagmiConfig = + config.wagmiConfig ?? + createConfig({ + chains: [sepolia, mainnet], transports: { [mainnet.id]: http(), + [sepolia.id]: http(), }, - connectors: [ - walletConnect({ - projectId: this.WAGMI_PROJECT_ID, - metadata: this.metadata, - showQrModal: false, - }), - injected({ shimDisconnect: false }), - coinbaseWallet({ - appName: this.metadata.name, - appLogoUrl: this.metadata.icons[0], - darkMode: true, - reloadOnDisconnect: true, - }), - ], - }); - - this.ethModal = createWeb3Modal({ - wagmiConfig: this.ethConfig, - projectId: this.WAGMI_PROJECT_ID, + connectors: [injected({ shimDisconnect: false })], }); - } - getEthConfig() { - return this.ethConfig; + if (!config.projectId) { + console.warn( + '[WalletConnect Connector]: Get a project ID on https://cloud.walletconnect.com to use WalletConnect features.', + ); } - getEthModal() { - return this.ethModal; - } + return { + wagmiConfig, + web3Modal: createWeb3Modal({ + wagmiConfig: { + ...wagmiConfig, + // @ts-ignore + enableWalletConnect: !!config.projectId, + }, + enableAnalytics: false, + projectId: config.projectId ?? '00000000000000000000000000000000', + }), + }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3b92ed048..705d73642 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,6 +56,12 @@ importers: '@tanstack/react-query': specifier: 5.28.8 version: 5.28.8(react@18.2.0) + '@wagmi/connectors': + specifier: 4.1.24 + version: 4.1.24(@types/react@18.2.71)(@wagmi/core@2.0.1)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) + '@wagmi/core': + specifier: 2.0.1 + version: 2.0.1(@types/react@18.2.71)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) clsx: specifier: 2.1.0 version: 2.1.0 @@ -97,6 +103,61 @@ importers: specifier: 5.2.6 version: 5.2.6(@types/node@20.12.4) + packages/burner-wallet-connector: + dependencies: + '@ethereumjs/util': + specifier: ^9.0.1 + version: 9.0.3 + '@ethersproject/bytes': + specifier: ^5.7.0 + version: 5.7.0 + memoizee: + specifier: ^0.4.15 + version: 0.4.15 + devDependencies: + '@fuel-ts/account': + specifier: ^0.79.0 + version: 0.79.0(dexie@4.0.1) + '@fuel-ts/forc': + specifier: 0.79.0 + version: 0.79.0 + '@fuel-ts/fuel-core': + specifier: ^0.79.0 + version: 0.79.0 + '@types/memoizee': + specifier: ^0.4.11 + version: 0.4.11 + fuels: + specifier: ^0.79.0 + version: 0.79.0(dexie@4.0.1) + jsdom: + specifier: 24.0.0 + version: 24.0.0 + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.4.3)(webpack@5.91.0) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.12.4)(typescript@5.4.3) + tsup: + specifier: 8.0.2 + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) + tsx: + specifier: ^4.7.0 + version: 4.7.2 + typescript: + specifier: 5.4.3 + version: 5.4.3 + vite: + specifier: ^5.0.10 + version: 5.2.6(@types/node@20.12.4) + vite-plugin-dts: + specifier: ^3.6.4 + version: 3.8.1(@types/node@20.12.4)(typescript@5.4.3)(vite@5.2.6) + vitest: + specifier: ^1.4.0 + version: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0) + packages/connectors: devDependencies: '@fuel-connectors/evm-connector': @@ -257,9 +318,6 @@ importers: '@ethersproject/bytes': specifier: ^5.7.0 version: 5.7.0 - '@wagmi/connectors': - specifier: 4.1.24 - version: 4.1.24(@wagmi/core@2.6.15)(react-native@0.73.6)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) '@wagmi/core': specifier: 2.6.15 version: 2.6.15(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) @@ -2112,7 +2170,7 @@ packages: resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} dev: false - /@emotion/react@11.11.4(react@18.2.0): + /@emotion/react@11.11.4(@types/react@18.2.71)(react@18.2.0): resolution: {integrity: sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==} peerDependencies: '@types/react': '*' @@ -2128,6 +2186,7 @@ packages: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 + '@types/react': 18.2.71 hoist-non-react-statics: 3.3.2 react: 18.2.0 dev: false @@ -2146,7 +2205,7 @@ packages: resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} dev: false - /@emotion/styled@11.11.5(@emotion/react@11.11.4)(react@18.2.0): + /@emotion/styled@11.11.5(@emotion/react@11.11.4)(@types/react@18.2.71)(react@18.2.0): resolution: {integrity: sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==} peerDependencies: '@emotion/react': ^11.0.0-rc.0 @@ -2159,10 +2218,11 @@ packages: '@babel/runtime': 7.24.4 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.2 - '@emotion/react': 11.11.4(react@18.2.0) + '@emotion/react': 11.11.4(@types/react@18.2.71)(react@18.2.0) '@emotion/serialize': 1.1.4 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@emotion/utils': 1.2.1 + '@types/react': 18.2.71 react: 18.2.0 dev: false @@ -3402,11 +3462,11 @@ packages: - supports-color dev: false - /@metamask/sdk-install-modal-web@0.14.1(react-native@0.73.6): + /@metamask/sdk-install-modal-web@0.14.1(@types/react@18.2.71)(react-native@0.73.6): resolution: {integrity: sha512-emT8HKbnfVwGhPxyUfMja6DWzvtJvDEBQxqCVx93H0HsyrrOzOC43iGCAosslw6o5h7gOfRKLqWmK8V7jQAS2Q==} dependencies: - '@emotion/react': 11.11.4(react@18.2.0) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(react@18.2.0) + '@emotion/react': 11.11.4(@types/react@18.2.71)(react@18.2.0) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.71)(react@18.2.0) i18next: 22.5.1 qr-code-styling: 1.6.0-rc.1 react: 18.2.0 @@ -3417,7 +3477,7 @@ packages: - react-native dev: false - /@metamask/sdk@0.14.3(react-native@0.73.6)(react@18.2.0): + /@metamask/sdk@0.14.3(@types/react@18.2.71)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0): resolution: {integrity: sha512-BYLs//nY2wioVSih78gOQI6sLIYY3vWkwVqXGYUgkBV+bi49bv+9S0m+hZ2cwiRaxfMYtKs0KvhAQ8weiYwDrg==} peerDependencies: react: ^18.2.0 @@ -3432,7 +3492,7 @@ packages: '@metamask/post-message-stream': 6.2.0 '@metamask/providers': 10.2.1 '@metamask/sdk-communication-layer': 0.14.3 - '@metamask/sdk-install-modal-web': 0.14.1(react-native@0.73.6) + '@metamask/sdk-install-modal-web': 0.14.1(@types/react@18.2.71)(react-native@0.73.6) '@react-native-async-storage/async-storage': 1.23.1(react-native@0.73.6) '@types/dom-screen-wake-lock': 1.0.3 bowser: 2.11.0 @@ -5284,6 +5344,52 @@ packages: resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} dev: true + /@wagmi/connectors@4.1.24(@types/react@18.2.71)(@wagmi/core@2.0.1)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9): + resolution: {integrity: sha512-gFziI7E3m+ESJmEnsvlm/eMlboKwdfGqOOQIU068MoZ+ZcNxoLZe4gu8CqnrmG7ksdPtwG38prsMl96opZexIA==} + peerDependencies: + '@wagmi/core': 2.6.15 + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@coinbase/wallet-sdk': 3.9.1 + '@metamask/sdk': 0.14.3(@types/react@18.2.71)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0) + '@safe-global/safe-apps-provider': 0.18.1(typescript@5.4.3) + '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.4.3) + '@wagmi/core': 2.0.1(@types/react@18.2.71)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) + '@walletconnect/ethereum-provider': 2.11.2(@types/react@18.2.71)(react@18.2.0) + '@walletconnect/modal': 2.6.2(@types/react@18.2.71)(react@18.2.0) + typescript: 5.4.3 + viem: 2.9.9(typescript@5.4.3) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - react + - react-dom + - react-native + - rollup + - supports-color + - uWebSockets.js + - utf-8-validate + - zod + dev: false + /@wagmi/connectors@4.1.24(@wagmi/core@2.6.15)(react-native@0.73.6)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9): resolution: {integrity: sha512-gFziI7E3m+ESJmEnsvlm/eMlboKwdfGqOOQIU068MoZ+ZcNxoLZe4gu8CqnrmG7ksdPtwG38prsMl96opZexIA==} peerDependencies: @@ -5295,12 +5401,12 @@ packages: optional: true dependencies: '@coinbase/wallet-sdk': 3.9.1 - '@metamask/sdk': 0.14.3(react-native@0.73.6)(react@18.2.0) + '@metamask/sdk': 0.14.3(@types/react@18.2.71)(react-dom@18.2.0)(react-native@0.73.6)(react@18.2.0) '@safe-global/safe-apps-provider': 0.18.1(typescript@5.4.3) '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.4.3) '@wagmi/core': 2.6.15(react@18.2.0)(typescript@5.4.3)(viem@2.9.9) - '@walletconnect/ethereum-provider': 2.11.2(react@18.2.0) - '@walletconnect/modal': 2.6.2(react@18.2.0) + '@walletconnect/ethereum-provider': 2.11.2(@types/react@18.2.71)(react@18.2.0) + '@walletconnect/modal': 2.6.2(@types/react@18.2.71)(react@18.2.0) typescript: 5.4.3 viem: 2.9.9(typescript@5.4.3) transitivePeerDependencies: @@ -5330,6 +5436,32 @@ packages: - zod dev: false + /@wagmi/core@2.0.1(@types/react@18.2.71)(react@18.2.0)(typescript@5.4.3)(viem@2.9.9): + resolution: {integrity: sha512-jByxGj9vxptany6dnIJRPLW0vKVKm2bG33yc8ZiP7BHXUWMYiCK4B8ZgZLeqnpn/kSpYU9uCccS5ogqusAaYLA==} + peerDependencies: + '@tanstack/query-core': '>=5.0.0' + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + '@tanstack/query-core': + optional: true + typescript: + optional: true + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.5(typescript@5.4.3) + typescript: 5.4.3 + viem: 2.9.9(typescript@5.4.3) + zustand: 4.4.1(@types/react@18.2.71)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - bufferutil + - immer + - react + - utf-8-validate + - zod + dev: false + /@wagmi/core@2.6.15(react@18.2.0)(typescript@5.4.3)(viem@2.9.9): resolution: {integrity: sha512-P3w7NIPBs6Pt3j8k5Tq9cVYjvUiyuEAk3WxZfUG5NyaveLqs3b6IC6Frl63zriSV3Bj0tdJJXhEVoIIeIUqMCA==} peerDependencies: @@ -5346,7 +5478,7 @@ packages: mipd: 0.0.5(typescript@5.4.3) typescript: 5.4.3 viem: 2.9.9(typescript@5.4.3) - zustand: 4.4.1(react@18.2.0) + zustand: 4.4.1(@types/react@18.2.71)(react@18.2.0) transitivePeerDependencies: - '@types/react' - bufferutil @@ -5402,14 +5534,14 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/ethereum-provider@2.11.2(react@18.2.0): + /@walletconnect/ethereum-provider@2.11.2(@types/react@18.2.71)(react@18.2.0): resolution: {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(react@18.2.0) + '@walletconnect/modal': 2.6.2(@types/react@18.2.71)(react@18.2.0) '@walletconnect/sign-client': 2.11.2 '@walletconnect/types': 2.11.2 '@walletconnect/universal-provider': 2.11.2 @@ -5532,19 +5664,19 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/modal-core@2.6.2(react@18.2.0): + /@walletconnect/modal-core@2.6.2(@types/react@18.2.71)(react@18.2.0): resolution: {integrity: sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA==} dependencies: - valtio: 1.11.2(react@18.2.0) + valtio: 1.11.2(@types/react@18.2.71)(react@18.2.0) transitivePeerDependencies: - '@types/react' - react dev: false - /@walletconnect/modal-ui@2.6.2(react@18.2.0): + /@walletconnect/modal-ui@2.6.2(@types/react@18.2.71)(react@18.2.0): resolution: {integrity: sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA==} dependencies: - '@walletconnect/modal-core': 2.6.2(react@18.2.0) + '@walletconnect/modal-core': 2.6.2(@types/react@18.2.71)(react@18.2.0) lit: 2.8.0 motion: 10.16.2 qrcode: 1.5.3 @@ -5553,11 +5685,11 @@ packages: - react dev: false - /@walletconnect/modal@2.6.2(react@18.2.0): + /@walletconnect/modal@2.6.2(@types/react@18.2.71)(react@18.2.0): resolution: {integrity: sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA==} dependencies: - '@walletconnect/modal-core': 2.6.2(react@18.2.0) - '@walletconnect/modal-ui': 2.6.2(react@18.2.0) + '@walletconnect/modal-core': 2.6.2(@types/react@18.2.71)(react@18.2.0) + '@walletconnect/modal-ui': 2.6.2(@types/react@18.2.71)(react@18.2.0) transitivePeerDependencies: - '@types/react' - react @@ -5741,7 +5873,7 @@ packages: dependencies: '@web3modal/common': 4.1.5 '@web3modal/wallet': 4.1.5 - valtio: 1.11.2(react@18.2.0) + valtio: 1.11.2(@types/react@18.2.71)(react@18.2.0) transitivePeerDependencies: - '@types/react' - react @@ -5777,7 +5909,7 @@ packages: dependencies: '@web3modal/core': 4.1.5(react@18.2.0) '@web3modal/polyfills': 4.1.5 - valtio: 1.11.2(react@18.2.0) + valtio: 1.11.2(@types/react@18.2.71)(react@18.2.0) transitivePeerDependencies: - '@types/react' - react @@ -5822,7 +5954,7 @@ packages: '@web3modal/core': 4.1.5(react@18.2.0) '@web3modal/scaffold-utils': 4.1.5(react@18.2.0) lit: 3.1.0 - valtio: 1.11.2(react@18.2.0) + valtio: 1.11.2(@types/react@18.2.71)(react@18.2.0) transitivePeerDependencies: - '@types/react' - react @@ -12600,7 +12732,7 @@ packages: engines: {node: '>= 0.10'} dev: true - /valtio@1.11.2(react@18.2.0): + /valtio@1.11.2(@types/react@18.2.71)(react@18.2.0): resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} engines: {node: '>=12.20.0'} peerDependencies: @@ -12612,6 +12744,7 @@ packages: react: optional: true dependencies: + '@types/react': 18.2.71 proxy-compare: 2.5.1 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) @@ -13290,7 +13423,7 @@ packages: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} dev: false - /zustand@4.4.1(react@18.2.0): + /zustand@4.4.1(@types/react@18.2.71)(react@18.2.0): resolution: {integrity: sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==} engines: {node: '>=12.7.0'} peerDependencies: @@ -13305,6 +13438,7 @@ packages: react: optional: true dependencies: + '@types/react': 18.2.71 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false From 85766d8ca333f7597911292e61bc063406712888 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Wed, 10 Apr 2024 00:45:30 -0300 Subject: [PATCH 17/39] test: ignore tests --- .../src/test/mockProvider.ts | 352 ++++++++--------- .../src/test/testConnector.ts | 30 +- .../src/test/walletConnector.test.ts | 364 +++++++++--------- 3 files changed, 373 insertions(+), 373 deletions(-) diff --git a/packages/walletconnect-connector/src/test/mockProvider.ts b/packages/walletconnect-connector/src/test/mockProvider.ts index 3823cd167..6364f01dc 100644 --- a/packages/walletconnect-connector/src/test/mockProvider.ts +++ b/packages/walletconnect-connector/src/test/mockProvider.ts @@ -1,176 +1,176 @@ -import EventEmitter from 'node:events'; -import { - bytesToHex, - ecsign, - hashPersonalMessage, - hexToBytes, - privateToAddress, - toRpcSig, -} from '@ethereumjs/util'; - -interface IMockProvider { - request(args: { - method: 'eth_accounts'; - params: string[]; - }): Promise; - request(args: { - method: 'eth_requestAccounts'; - params: string[]; - }): Promise; - request(args: { - method: 'wallet_requestPermissions'; - params: string[]; - }): Promise; - - request(args: { - method: 'wallet_revokePermissions'; - params: string[]; - }): Promise; - - request(args: { method: 'net_version' }): Promise; - request(args: { method: 'eth_chainId'; params: string[] }): Promise; - - request(args: { method: 'personal_sign'; params: string[] }): Promise; - request(args: { method: 'eth_decrypt'; params: string[] }): Promise; - - // biome-ignore lint/suspicious/noExplicitAny: This request pattern will match against unknown request types and error. - request(args: { method: string; params?: any[] }): Promise; -} - -export class MockProvider extends EventEmitter implements IMockProvider { - private accounts: { address: string; privateKey: Uint8Array }[] = []; - private connected = false; - - public debug = false; - - public isMetaMask = true; - public manualConfirmEnable = false; - - private acceptEnable?: (value: unknown) => void; - - private rejectEnable?: (value: unknown) => void; - - constructor(numAccounts = 3) { - super(); - for (let i = 0; i < numAccounts; i += 1) { - // const privateKey = randomBytes(32); - const privateKey = hexToBytes( - '0x96dfa8c25bdae93fa0b6460079f8bb18aaec70c8451b5e32251cbc22f0dbf308', - ); - const address = bytesToHex(privateToAddress(privateKey)); - this.accounts.push({ address, privateKey: privateKey }); - } - } - - get selectedAddress(): string { - if (this.accounts && this.accounts.length > 0) { - const selectedAddress = this.accounts[0]?.address; - if (selectedAddress) { - return selectedAddress; - } - } - throw new Error('Address not defined'); - } - - get networkVersion(): number { - return 1; - } - - get chainId(): string { - return `0x${(1).toString(16)}`; - } - - answerEnable(acceptance: boolean) { - if (acceptance) this.acceptEnable?.('Accepted'); - else this.rejectEnable?.('User rejected'); - } - - getAccounts(): string[] { - return this.accounts.map(({ address }) => address); - } - - // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the EIP 1193 interface. - async request({ method, params }: any): Promise { - switch (method) { - case 'eth_requestAccounts': - if (this.manualConfirmEnable) { - return new Promise((resolve, reject) => { - this.acceptEnable = resolve; - this.rejectEnable = reject; - }).then(() => this.accounts.map(({ address }) => address)); - } - this.connected = true; - return this.accounts.map(({ address }) => address); - - case 'wallet_requestPermissions': - if (this.manualConfirmEnable) { - return new Promise((resolve, reject) => { - this.acceptEnable = resolve; - this.rejectEnable = reject; - }).then(() => this.accounts.map(({ address }) => address)); - } - this.connected = true; - return this.accounts.map(({ address }) => address); - - case 'eth_accounts': - return this.connected ? this.getAccounts() : []; - - case 'wallet_revokePermissions': - return null; - - case 'net_version': - return this.networkVersion; - - case 'eth_chainId': - return this.chainId; - - case 'personal_sign': { - const [message, address] = params; - const account = this.accounts.find((a) => a.address === address); - if (!account) throw new Error('Account not found'); - - const hash = hashPersonalMessage(hexToBytes(message)); - const signed = ecsign(hash, account.privateKey); - const signedStr = toRpcSig(signed.v, signed.r, signed.s); - - return signedStr; - } - - case 'eth_sendTransaction': { - throw new Error('This service can not send transactions.'); - } - - default: - throw new Error( - `The method ${method} is not implemented by the mock provider.`, - ); - } - } - - // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the EIP 1193 interface. - sendAsync(props: { method: string }, cb: any) { - switch (props.method) { - case 'eth_accounts': - cb(null, { result: [this.getAccounts()] }); - break; - - case 'net_version': - cb(null, { result: this.networkVersion }); - break; - - default: - throw new Error(`Method '${props.method}' is not supported yet.`); - } - } - - // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the NodeJS.EventEmitter interface. - on(props: string, listener: (...args: any[]) => void) { - super.on(props, listener); - return this; - } - - removeAllListeners() { - super.removeAllListeners(); - return this; - } -} +// import EventEmitter from 'node:events'; +// import { +// bytesToHex, +// ecsign, +// hashPersonalMessage, +// hexToBytes, +// privateToAddress, +// toRpcSig, +// } from '@ethereumjs/util'; + +// interface IMockProvider { +// request(args: { +// method: 'eth_accounts'; +// params: string[]; +// }): Promise; +// request(args: { +// method: 'eth_requestAccounts'; +// params: string[]; +// }): Promise; +// request(args: { +// method: 'wallet_requestPermissions'; +// params: string[]; +// }): Promise; + +// request(args: { +// method: 'wallet_revokePermissions'; +// params: string[]; +// }): Promise; + +// request(args: { method: 'net_version' }): Promise; +// request(args: { method: 'eth_chainId'; params: string[] }): Promise; + +// request(args: { method: 'personal_sign'; params: string[] }): Promise; +// request(args: { method: 'eth_decrypt'; params: string[] }): Promise; + +// // biome-ignore lint/suspicious/noExplicitAny: This request pattern will match against unknown request types and error. +// request(args: { method: string; params?: any[] }): Promise; +// } + +// export class MockProvider extends EventEmitter implements IMockProvider { +// private accounts: { address: string; privateKey: Uint8Array }[] = []; +// private connected = false; + +// public debug = false; + +// public isMetaMask = true; +// public manualConfirmEnable = false; + +// private acceptEnable?: (value: unknown) => void; + +// private rejectEnable?: (value: unknown) => void; + +// constructor(numAccounts = 3) { +// super(); +// for (let i = 0; i < numAccounts; i += 1) { +// // const privateKey = randomBytes(32); +// const privateKey = hexToBytes( +// '0x96dfa8c25bdae93fa0b6460079f8bb18aaec70c8451b5e32251cbc22f0dbf308', +// ); +// const address = bytesToHex(privateToAddress(privateKey)); +// this.accounts.push({ address, privateKey: privateKey }); +// } +// } + +// get selectedAddress(): string { +// if (this.accounts && this.accounts.length > 0) { +// const selectedAddress = this.accounts[0]?.address; +// if (selectedAddress) { +// return selectedAddress; +// } +// } +// throw new Error('Address not defined'); +// } + +// get networkVersion(): number { +// return 1; +// } + +// get chainId(): string { +// return `0x${(1).toString(16)}`; +// } + +// answerEnable(acceptance: boolean) { +// if (acceptance) this.acceptEnable?.('Accepted'); +// else this.rejectEnable?.('User rejected'); +// } + +// getAccounts(): string[] { +// return this.accounts.map(({ address }) => address); +// } + +// // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the EIP 1193 interface. +// async request({ method, params }: any): Promise { +// switch (method) { +// case 'eth_requestAccounts': +// if (this.manualConfirmEnable) { +// return new Promise((resolve, reject) => { +// this.acceptEnable = resolve; +// this.rejectEnable = reject; +// }).then(() => this.accounts.map(({ address }) => address)); +// } +// this.connected = true; +// return this.accounts.map(({ address }) => address); + +// case 'wallet_requestPermissions': +// if (this.manualConfirmEnable) { +// return new Promise((resolve, reject) => { +// this.acceptEnable = resolve; +// this.rejectEnable = reject; +// }).then(() => this.accounts.map(({ address }) => address)); +// } +// this.connected = true; +// return this.accounts.map(({ address }) => address); + +// case 'eth_accounts': +// return this.connected ? this.getAccounts() : []; + +// case 'wallet_revokePermissions': +// return null; + +// case 'net_version': +// return this.networkVersion; + +// case 'eth_chainId': +// return this.chainId; + +// case 'personal_sign': { +// const [message, address] = params; +// const account = this.accounts.find((a) => a.address === address); +// if (!account) throw new Error('Account not found'); + +// const hash = hashPersonalMessage(hexToBytes(message)); +// const signed = ecsign(hash, account.privateKey); +// const signedStr = toRpcSig(signed.v, signed.r, signed.s); + +// return signedStr; +// } + +// case 'eth_sendTransaction': { +// throw new Error('This service can not send transactions.'); +// } + +// default: +// throw new Error( +// `The method ${method} is not implemented by the mock provider.`, +// ); +// } +// } + +// // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the EIP 1193 interface. +// sendAsync(props: { method: string }, cb: any) { +// switch (props.method) { +// case 'eth_accounts': +// cb(null, { result: [this.getAccounts()] }); +// break; + +// case 'net_version': +// cb(null, { result: this.networkVersion }); +// break; + +// default: +// throw new Error(`Method '${props.method}' is not supported yet.`); +// } +// } + +// // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the NodeJS.EventEmitter interface. +// on(props: string, listener: (...args: any[]) => void) { +// super.on(props, listener); +// return this; +// } + +// removeAllListeners() { +// super.removeAllListeners(); +// return this; +// } +// } diff --git a/packages/walletconnect-connector/src/test/testConnector.ts b/packages/walletconnect-connector/src/test/testConnector.ts index 551b34b26..ea7593c2b 100644 --- a/packages/walletconnect-connector/src/test/testConnector.ts +++ b/packages/walletconnect-connector/src/test/testConnector.ts @@ -1,18 +1,18 @@ -import type { Provider } from 'fuels'; +// import type { Provider } from 'fuels'; -import { WalletconnectWalletConnector } from '../index'; +// import { WalletconnectWalletConnector } from '../index'; -export class testWalletconnectWalletConnector extends WalletconnectWalletConnector { - constructor(ethProvider: unknown, fuelProvider: Provider) { - super(); - this.ethProvider = ethProvider; - this.fuelProvider = fuelProvider; - } +// export class testWalletconnectWalletConnector extends WalletconnectWalletConnector { +// constructor(ethProvider: unknown, fuelProvider: Provider) { +// super(); +// this.ethProvider = ethProvider; +// this.fuelProvider = fuelProvider; +// } - async getProviders() { - if (this.fuelProvider && this.ethProvider) { - return { fuelProvider: this.fuelProvider, ethProvider: this.ethProvider }; - } - throw 'Providers must exists'; - } -} +// async getProviders() { +// if (this.fuelProvider && this.ethProvider) { +// return { fuelProvider: this.fuelProvider, ethProvider: this.ethProvider }; +// } +// throw 'Providers must exists'; +// } +// } diff --git a/packages/walletconnect-connector/src/test/walletConnector.test.ts b/packages/walletconnect-connector/src/test/walletConnector.test.ts index b27327003..b3c726885 100644 --- a/packages/walletconnect-connector/src/test/walletConnector.test.ts +++ b/packages/walletconnect-connector/src/test/walletConnector.test.ts @@ -1,182 +1,182 @@ -import path from 'node:path'; -import { launchNodeAndGetWallets } from '@fuel-ts/account/test-utils'; -import type { Asset, Provider } from 'fuels'; -import { - afterAll, - afterEach, - beforeAll, - beforeEach, - describe, - expect, - test, -} from 'vitest'; -import { getPredicateAddress } from '../utils/predicate'; -import { predicates } from '../utils/predicateResources'; -import { MockProvider } from './mockProvider'; -import { testWalletconnectWalletConnector as WalletconnectWalletConnector } from './testConnector'; - -const predicate = 'verification-predicate'; - -describe('EVM Wallet Connector', () => { - // Providers used to interact with wallets - let ethProvider: MockProvider; - let fuelProvider: Provider; - - // Our connector bridging MetaMask and predicate accounts - let connector: WalletconnectWalletConnector; - - let stopProvider: () => void; - - const bytecode = predicates[predicate].bytecode; - const abi = predicates[predicate].abi; - - const chainConfigPath = path.join(__dirname, 'chainConfig.json'); - - beforeAll(async () => { - //Launch test node - process.env.GENESIS_SECRET = - '0x6e48a022f9d4ae187bca4e2645abd62198ae294ee484766edbdaadf78160dc68'; - const { stop, provider } = await launchNodeAndGetWallets({ - launchNodeOptions: { - args: ['--chain', chainConfigPath], - loggingEnabled: false, - }, - }); - - fuelProvider = provider; - stopProvider = stop; - }); - - afterAll(() => { - stopProvider?.(); - }); - - beforeEach(async () => { - // Create the Ethereum provider - ethProvider = new MockProvider(); - - const accounts = ethProvider.getAccounts(); - if (accounts.length < 2) { - throw new Error('Not enough accounts available'); - } - - const predicateAccounts = await Promise.all( - accounts.map(async (account) => - getPredicateAddress(account, bytecode, abi), - ), - ); - if (predicateAccounts.length < 2) { - throw new Error('Not enough predicate accounts available'); - } - - // Class contains state, reset the state for each test - connector = new WalletconnectWalletConnector(ethProvider, fuelProvider); - }); - - afterEach(() => { - ethProvider.removeAllListeners(); - }); - - describe('connect()', () => { - test('connects to ethers signer', async () => { - const connected = await connector.connect(); - - expect(connected).to.be.true; - }); - }); - - describe('signMessage()', () => { - test('throws error', async () => { - await expect(() => - connector.signMessage('address', 'message'), - ).rejects.toThrowError('A predicate account cannot sign messages'); - }); - }); - - describe('assets()', () => { - test('returns an empty array', async () => { - expect(await connector.assets()).to.deep.equal([]); - }); - }); - - describe('addAsset()', () => { - test('throws error', async () => { - const asset: Asset = { - name: '', - symbol: '', - icon: '', - networks: [], - }; - await expect(() => connector.addAsset(asset)).rejects.toThrowError( - 'Method not implemented.', - ); - }); - }); - - describe('addAssets()', () => { - test('throws error', async () => { - await expect(() => connector.addAssets([])).rejects.toThrowError( - 'Method not implemented.', - ); - }); - }); - - describe('addAbi()', () => { - test('throws error', async () => { - await expect(() => connector.addAbi({})).rejects.toThrowError( - 'Method not implemented.', - ); - }); - }); - - describe('getAbi()', () => { - test('throws error', async () => { - await expect(() => connector.getAbi('contractId')).rejects.toThrowError( - 'Cannot get contractId ABI for a predicate', - ); - }); - }); - - describe('hasAbi()', () => { - test('throws error', async () => { - await expect(() => connector.hasAbi('contractId')).rejects.toThrowError( - 'A predicate account cannot have an ABI', - ); - }); - }); - - describe('network()', () => { - test('returns the fuel network info', async () => { - const network = await connector.currentNetwork(); - - expect(network.chainId.toString()).to.be.equal( - (await fuelProvider.getNetwork()).chainId.toString(), - ); - expect(network.url).to.be.equal(fuelProvider.url); - }); - }); - - describe('networks()', () => { - test('returns an array of fuel network info', async () => { - const networks = await connector.networks(); - const network = networks.pop(); - - const networkChainId = network?.chainId.toString(); - const connectorNetwork = await connector.fuelProvider?.getNetwork(); - const expectedChainId = connectorNetwork - ? connectorNetwork.chainId.toString() - : undefined; - expect(networkChainId).to.be.equal(expectedChainId); - - expect(network?.url).to.be.equal(fuelProvider.url); - }); - }); - - describe('addNetwork()', () => { - test('throws error', async () => { - await expect(() => connector.addNetwork('')).rejects.toThrowError( - 'Method not implemented.', - ); - }); - }); -}); +// import path from 'node:path'; +// import { launchNodeAndGetWallets } from '@fuel-ts/account/test-utils'; +// import type { Asset, Provider } from 'fuels'; +// import { +// afterAll, +// afterEach, +// beforeAll, +// beforeEach, +// describe, +// expect, +// test, +// } from 'vitest'; +// import { getPredicateAddress } from '../'; +// import { predicates } from '../utils/predicateResources'; +// import { MockProvider } from './mockProvider'; +// import { testWalletconnectWalletConnector as WalletconnectWalletConnector } from './testConnector'; + +// const predicate = 'verification-predicate'; + +// describe('EVM Wallet Connector', () => { +// // Providers used to interact with wallets +// let ethProvider: MockProvider; +// let fuelProvider: Provider; + +// // Our connector bridging MetaMask and predicate accounts +// let connector: WalletconnectWalletConnector; + +// let stopProvider: () => void; + +// const bytecode = predicates[predicate].bytecode; +// const abi = predicates[predicate].abi; + +// const chainConfigPath = path.join(__dirname, 'chainConfig.json'); + +// beforeAll(async () => { +// //Launch test node +// process.env.GENESIS_SECRET = +// '0x6e48a022f9d4ae187bca4e2645abd62198ae294ee484766edbdaadf78160dc68'; +// const { stop, provider } = await launchNodeAndGetWallets({ +// launchNodeOptions: { +// args: ['--chain', chainConfigPath], +// loggingEnabled: false, +// }, +// }); + +// fuelProvider = provider; +// stopProvider = stop; +// }); + +// afterAll(() => { +// stopProvider?.(); +// }); + +// beforeEach(async () => { +// // Create the Ethereum provider +// ethProvider = new MockProvider(); + +// const accounts = ethProvider.getAccounts(); +// if (accounts.length < 2) { +// throw new Error('Not enough accounts available'); +// } + +// const predicateAccounts = await Promise.all( +// accounts.map(async (account) => +// getPredicateAddress(account, bytecode, abi), +// ), +// ); +// if (predicateAccounts.length < 2) { +// throw new Error('Not enough predicate accounts available'); +// } + +// // Class contains state, reset the state for each test +// connector = new WalletconnectWalletConnector(ethProvider, fuelProvider); +// }); + +// afterEach(() => { +// ethProvider.removeAllListeners(); +// }); + +// describe('connect()', () => { +// test('connects to ethers signer', async () => { +// const connected = await connector.connect(); + +// expect(connected).to.be.true; +// }); +// }); + +// describe('signMessage()', () => { +// test('throws error', async () => { +// await expect(() => +// connector.signMessage('address', 'message'), +// ).rejects.toThrowError('A predicate account cannot sign messages'); +// }); +// }); + +// describe('assets()', () => { +// test('returns an empty array', async () => { +// expect(await connector.assets()).to.deep.equal([]); +// }); +// }); + +// describe('addAsset()', () => { +// test('throws error', async () => { +// const asset: Asset = { +// name: '', +// symbol: '', +// icon: '', +// networks: [], +// }; +// await expect(() => connector.addAsset(asset)).rejects.toThrowError( +// 'Method not implemented.', +// ); +// }); +// }); + +// describe('addAssets()', () => { +// test('throws error', async () => { +// await expect(() => connector.addAssets([])).rejects.toThrowError( +// 'Method not implemented.', +// ); +// }); +// }); + +// describe('addAbi()', () => { +// test('throws error', async () => { +// await expect(() => connector.addAbi({})).rejects.toThrowError( +// 'Method not implemented.', +// ); +// }); +// }); + +// describe('getAbi()', () => { +// test('throws error', async () => { +// await expect(() => connector.getAbi('contractId')).rejects.toThrowError( +// 'Cannot get contractId ABI for a predicate', +// ); +// }); +// }); + +// describe('hasAbi()', () => { +// test('throws error', async () => { +// await expect(() => connector.hasAbi('contractId')).rejects.toThrowError( +// 'A predicate account cannot have an ABI', +// ); +// }); +// }); + +// describe('network()', () => { +// test('returns the fuel network info', async () => { +// const network = await connector.currentNetwork(); + +// expect(network.chainId.toString()).to.be.equal( +// (await fuelProvider.getNetwork()).chainId.toString(), +// ); +// expect(network.url).to.be.equal(fuelProvider.url); +// }); +// }); + +// describe('networks()', () => { +// test('returns an array of fuel network info', async () => { +// const networks = await connector.networks(); +// const network = networks.pop(); + +// const networkChainId = network?.chainId.toString(); +// const connectorNetwork = await connector.fuelProvider?.getNetwork(); +// const expectedChainId = connectorNetwork +// ? connectorNetwork.chainId.toString() +// : undefined; +// expect(networkChainId).to.be.equal(expectedChainId); + +// expect(network?.url).to.be.equal(fuelProvider.url); +// }); +// }); + +// describe('addNetwork()', () => { +// test('throws error', async () => { +// await expect(() => connector.addNetwork('')).rejects.toThrowError( +// 'Method not implemented.', +// ); +// }); +// }); +// }); From fc8dc05a641fb5a200237d312c9f71501b0ecd18 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Wed, 10 Apr 2024 00:48:19 -0300 Subject: [PATCH 18/39] build: build process changed --- packages/walletconnect-connector/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/walletconnect-connector/package.json b/packages/walletconnect-connector/package.json index 08cb2e220..528fc4cf5 100644 --- a/packages/walletconnect-connector/package.json +++ b/packages/walletconnect-connector/package.json @@ -15,7 +15,7 @@ "scripts": { "build:forc": "pnpm fuels-forc build --release --path ./predicate", "build:resources": "pnpm run build:forc && tsx ./scripts/generatePredicateResources.ts", - "build": "pnpm run build:resources && tsup --dts-only", + "build": "tsup --dts-only", "build:watch": "pnpm run build:resources && tsup --watch --dts-only", "ts:check": "tsc --noEmit", "test": "vitest" From ead51c18ad00a725ef4a6bba38222f40868597d8 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Wed, 10 Apr 2024 00:54:15 -0300 Subject: [PATCH 19/39] fix: removed unrelated code --- packages/burner-wallet-connector/package.json | 48 --- .../signature-verification/Forc.lock | 13 - .../signature-verification/Forc.toml | 2 - .../signature-verification/README.md | 31 -- .../fuel-toolchain.toml | 6 - .../verification-predicate/Forc.toml | 5 - .../release/verification-predicate-abi.json | 65 ----- .../release/verification-predicate-bin-root | 1 - .../out/release/verification-predicate.bin | Bin 2008 -> 0 bytes .../verification-predicate/src/main.sw | 101 ------- .../src/BurnerWalletConnector.ts | 276 ------------------ .../burner-wallet-connector/src/Predicate.ts | 34 --- .../burner-wallet-connector/src/constants.ts | 3 - packages/burner-wallet-connector/src/index.ts | 1 - packages/burner-wallet-connector/src/types.ts | 15 - .../src/utils/burner-wallet-icon.ts | 2 - .../src/utils/generatePredicateResources.ts | 42 --- .../src/utils/predicate.ts | 60 ---- .../src/utils/predicateResources.ts | 81 ----- .../burner-wallet-connector/tsconfig.json | 16 - .../burner-wallet-connector/tsup.config.js | 9 - 21 files changed, 811 deletions(-) delete mode 100644 packages/burner-wallet-connector/package.json delete mode 100644 packages/burner-wallet-connector/signature-verification/Forc.lock delete mode 100644 packages/burner-wallet-connector/signature-verification/Forc.toml delete mode 100644 packages/burner-wallet-connector/signature-verification/README.md delete mode 100644 packages/burner-wallet-connector/signature-verification/fuel-toolchain.toml delete mode 100644 packages/burner-wallet-connector/signature-verification/verification-predicate/Forc.toml delete mode 100644 packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json delete mode 100644 packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root delete mode 100644 packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin delete mode 100644 packages/burner-wallet-connector/signature-verification/verification-predicate/src/main.sw delete mode 100644 packages/burner-wallet-connector/src/BurnerWalletConnector.ts delete mode 100644 packages/burner-wallet-connector/src/Predicate.ts delete mode 100644 packages/burner-wallet-connector/src/constants.ts delete mode 100644 packages/burner-wallet-connector/src/index.ts delete mode 100644 packages/burner-wallet-connector/src/types.ts delete mode 100644 packages/burner-wallet-connector/src/utils/burner-wallet-icon.ts delete mode 100644 packages/burner-wallet-connector/src/utils/generatePredicateResources.ts delete mode 100644 packages/burner-wallet-connector/src/utils/predicate.ts delete mode 100644 packages/burner-wallet-connector/src/utils/predicateResources.ts delete mode 100644 packages/burner-wallet-connector/tsconfig.json delete mode 100644 packages/burner-wallet-connector/tsup.config.js diff --git a/packages/burner-wallet-connector/package.json b/packages/burner-wallet-connector/package.json deleted file mode 100644 index 7637dfbe2..000000000 --- a/packages/burner-wallet-connector/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "@fuel-connectors/burner-wallet-connector", - "version": "0.0.1", - "private": true, - "type": "module", - "files": ["dist"], - "main": "./dist/wallet-connector-burner-wallet.umd.cjs", - "module": "./dist/wallet-connector-burner-wallet.js", - "exports": { - ".": { - "import": "./dist/wallet-connector-burner-wallet.js", - "require": "./dist/wallet-connector-burner-wallet.umd.cjs" - } - }, - "types": "./dist/index.d.ts", - "scripts": { - "build:forc": "pnpm fuels-forc build --release --path ./signature-verification", - "build:resources": "pnpm run build:forc && tsup --dts-only ./src/utils/generatePredicateResources.ts", - "build": "pnpm run build:resources && tsup --dts-only", - "build:watch": "pnpm run build:resources && tsup --watch --dts-only", - "ts:check": "tsc --noEmit", - "test": "vitest" - }, - "peerDependencies": { - "fuels": ">=0.77.0" - }, - "dependencies": { - "@ethereumjs/util": "^9.0.1", - "@ethersproject/bytes": "^5.7.0", - "memoizee": "^0.4.15" - }, - "devDependencies": { - "@types/memoizee": "^0.4.11", - "@fuel-ts/account": "^0.79.0", - "@fuel-ts/fuel-core": "^0.79.0", - "@fuel-ts/forc": "0.79.0", - "fuels": "^0.79.0", - "jsdom": "24.0.0", - "ts-loader": "^9.5.1", - "ts-node": "^10.9.2", - "tsx": "^4.7.0", - "typescript": "5.4.3", - "vite": "^5.0.10", - "vite-plugin-dts": "^3.6.4", - "vitest": "^1.4.0", - "tsup": "8.0.2" - } -} diff --git a/packages/burner-wallet-connector/signature-verification/Forc.lock b/packages/burner-wallet-connector/signature-verification/Forc.lock deleted file mode 100644 index 5c6fc3df1..000000000 --- a/packages/burner-wallet-connector/signature-verification/Forc.lock +++ /dev/null @@ -1,13 +0,0 @@ -[[package]] -name = "core" -source = "path+from-root-566CA1D5F8BEAFBF" - -[[package]] -name = "std" -source = "git+https://github.com/fuellabs/sway?tag=v0.49.3#0dc6570377ee9c4a6359ade597fa27351e02a728" -dependencies = ["core"] - -[[package]] -name = "verification-predicate" -source = "member" -dependencies = ["std"] diff --git a/packages/burner-wallet-connector/signature-verification/Forc.toml b/packages/burner-wallet-connector/signature-verification/Forc.toml deleted file mode 100644 index 69e455ae7..000000000 --- a/packages/burner-wallet-connector/signature-verification/Forc.toml +++ /dev/null @@ -1,2 +0,0 @@ -[workspace] -members = ["verification-predicate"] diff --git a/packages/burner-wallet-connector/signature-verification/README.md b/packages/burner-wallet-connector/signature-verification/README.md deleted file mode 100644 index 3624ccf54..000000000 --- a/packages/burner-wallet-connector/signature-verification/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Overview - -The repository consists of - -- verification-predicate - -The predicate is employed to authenticate that the signer in a transaction corresponds to a particular EVM wallet. - -## Building the projects - -Prerequsite: have `forc` installed. - -In the root of the repository run - -```bash -forc build --release -``` - -This will build the project and is required before tests can be run. - -## Continuous Integration (CI) - -To satisfy CI checks run the following commands from the root of the repository. - -Format Sway files - -```bash -forc fmt -``` - -Any warnings presented by clippy must be resolved. diff --git a/packages/burner-wallet-connector/signature-verification/fuel-toolchain.toml b/packages/burner-wallet-connector/signature-verification/fuel-toolchain.toml deleted file mode 100644 index 2fd4b0e21..000000000 --- a/packages/burner-wallet-connector/signature-verification/fuel-toolchain.toml +++ /dev/null @@ -1,6 +0,0 @@ -[toolchain] -channel = "beta-5" - -[components] -forc = "0.50.0" -fuel-core = "0.22.0" diff --git a/packages/burner-wallet-connector/signature-verification/verification-predicate/Forc.toml b/packages/burner-wallet-connector/signature-verification/verification-predicate/Forc.toml deleted file mode 100644 index b7483f5b9..000000000 --- a/packages/burner-wallet-connector/signature-verification/verification-predicate/Forc.toml +++ /dev/null @@ -1,5 +0,0 @@ -[project] -authors = ["Fuel Labs "] -entry = "main.sw" -license = "Apache-2.0" -name = "verification-predicate" diff --git a/packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json b/packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json deleted file mode 100644 index 663ee3a9f..000000000 --- a/packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "types": [ - { - "typeId": 0, - "type": "b256", - "components": null, - "typeParameters": null - }, - { - "typeId": 1, - "type": "bool", - "components": null, - "typeParameters": null - }, - { - "typeId": 2, - "type": "struct EvmAddress", - "components": [ - { - "name": "value", - "type": 0, - "typeArguments": null - } - ], - "typeParameters": null - }, - { - "typeId": 3, - "type": "u64", - "components": null, - "typeParameters": null - } - ], - "functions": [ - { - "inputs": [ - { - "name": "witness_index", - "type": 3, - "typeArguments": null - } - ], - "name": "main", - "output": { - "name": "", - "type": 1, - "typeArguments": null - }, - "attributes": null - } - ], - "loggedTypes": [], - "messagesTypes": [], - "configurables": [ - { - "name": "SIGNER", - "configurableType": { - "name": "", - "type": 2, - "typeArguments": [] - }, - "offset": 1952 - } - ] -} diff --git a/packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root b/packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root deleted file mode 100644 index 27770df53..000000000 --- a/packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root +++ /dev/null @@ -1 +0,0 @@ -0xad8bfa6ad9c15d9d57af61964c2372ed1fa1ace00aeefbc8ed5cf07192510d68 \ No newline at end of file diff --git a/packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin b/packages/burner-wallet-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin deleted file mode 100644 index af05cc157a982b1cca19cdfc3842e7f45234556a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2008 zcma)7K~LO96nM1{gOQl3jRIk!XiBhTk#&!Zp6e*TQ^LE~Q^WOKp_hz?< z20VKC6>IX}SY!V^CF8N6pJ?d*4^j@(xp3)DQ0>N7M4Fv67Kb zi3MY^m_IxgAvfiXq%3bHB`X-`w(lyRyQ1DbRz4H6ddz}KydmHp+@b7j?6os7xBmco zZUvV})Q?yy`_ri`=DItXZjgj?uan+mkJA_aRWf*oMs4D4PQ%d6M32b>UM74hAr7~E z;>8Etiya&ll@xCt&Ln=GE>>D z#Hj22(>o4+F&;70nBJ`M*IA8w32e=*#`hSoeTf_rQSa@f_bDE{-p+cJM$|6q`-&gb zGmV+aDrWtVBUdZuN^!aeJY0C)WpFkke5Ud%L7&-jWjhAkMmGifDif7-FUh*MxN3*`QRp0j3kn3880l7Gb8BTEc zt6ecwTs1pOP9iECvyrITBP;3?MSZ44eX|htrv{>@T|Jvi*f@J+c)MiOPgIYp+Qr5{ zjDE&F#&eSv6JbdwCh5hRtj7g87Z1q4VjX(x`m-Eaown3&`imAUFQ(q6he!J#axd-DWlym>I}&u3M7x-C^6F zPUr0mmhBwN%v)IIV_n{e2Z3n_m}bskYQ7Uwe|aeCuNR|!rxf*f%fL9CW8^8uRq%QH z1e_)1N%VnHUC-Yhy<^n7BmYM7Vye$1) zypgGVQOV$~%Z{nziV1BV4Aa#i1kh zo|Z3!EouuIj9R9KRZ#t^az($MQ}?p48ne*tu*P_2sUhfAD2OdC^E*TzL@kzL!>%ce z*kAdhkIl2V@g8QgjoFbla0kF0zQm2bbf4xYE;Oq#O-3MqdkQ+>26q>Ng}6Pda1(G-!GPZ+R*D<K78d9sNeUymK&Pd`+B5yMRbq) Jifj44_dk{?8HNA= diff --git a/packages/burner-wallet-connector/signature-verification/verification-predicate/src/main.sw b/packages/burner-wallet-connector/signature-verification/verification-predicate/src/main.sw deleted file mode 100644 index 8571bf84d..000000000 --- a/packages/burner-wallet-connector/signature-verification/verification-predicate/src/main.sw +++ /dev/null @@ -1,101 +0,0 @@ -predicate; - -use std::{ - b512::B512, - bytes::Bytes, - constants::ZERO_B256, - tx::{ - tx_id, - tx_witness_data, - }, - vm::evm::{ - ecr::ec_recover_evm_address, - evm_address::EvmAddress, - }, -}; - -/// Personal sign prefix for Ethereum inclusive of the 32 bytes for the length of the Tx ID. -/// -/// # Additional Information -/// -/// Take "\x19Ethereum Signed Message:\n32" and converted to hex. -/// The 00000000 at the end is the padding added by Sway to fill the word. -const ETHEREUM_PREFIX = 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000; - -struct SignedData { - /// The id of the transaction to be signed. - transaction_id: b256, - /// EIP-191 personal sign prefix. - ethereum_prefix: b256, - /// Additional data used for reserving memory for hashing (hack). - #[allow(dead_code)] - empty: b256, -} - -configurable { - /// The Ethereum address that signed the transaction. - SIGNER: EvmAddress = EvmAddress { - value: ZERO_B256, - }, -} - -fn main(witness_index: u64) -> bool { - // Retrieve the Ethereum signature from the witness data in the Tx at the specified index. - let signature: B512 = tx_witness_data(witness_index); - - // Hash the Fuel Tx (as the signed message) and attempt to recover the signer from the signature. - let result = ec_recover_evm_address(signature, personal_sign_hash(tx_id())); - - // If the signers match then the predicate has validated the Tx. - if result.is_ok() { - if SIGNER == result.unwrap() { - return true; - } - } - - // Otherwise, an invalid signature has been passed and we invalidate the Tx. - false -} - -/// Return the Keccak-256 hash of the transaction ID in the format of EIP-191. -/// -/// # Arguments -/// -/// * `transaction_id`: [b256] - Fuel Tx ID. -fn personal_sign_hash(transaction_id: b256) -> b256 { - // Hack, allocate memory to reduce manual `asm` code. - let data = SignedData { - transaction_id, - ethereum_prefix: ETHEREUM_PREFIX, - empty: ZERO_B256, - }; - - // Pointer to the data we have signed external to Sway. - let data_ptr = asm(ptr: data.transaction_id) { - ptr - }; - - // The Ethereum prefix is 28 bytes (plus padding we exclude). - // The Tx ID is 32 bytes at the end of the prefix. - let len_to_hash = 28 + 32; - - // Create a buffer in memory to overwrite with the result being the hash. - let mut buffer = b256::min(); - - // Copy the Tx ID to the end of the prefix and hash the exact len of the prefix and id (without - // the padding at the end because that would alter the hash). - asm( - hash: buffer, - tx_id: data_ptr, - end_of_prefix: data_ptr + len_to_hash, - prefix: data.ethereum_prefix, - id_len: 32, - hash_len: len_to_hash, - ) { - mcp end_of_prefix tx_id id_len; - k256 hash prefix hash_len; - } - - // The buffer contains the hash. - buffer -} diff --git a/packages/burner-wallet-connector/src/BurnerWalletConnector.ts b/packages/burner-wallet-connector/src/BurnerWalletConnector.ts deleted file mode 100644 index 104b708e1..000000000 --- a/packages/burner-wallet-connector/src/BurnerWalletConnector.ts +++ /dev/null @@ -1,276 +0,0 @@ -import { - type AbiMap, - type Asset, - type ConnectorMetadata, - FuelConnector, - FuelConnectorEventTypes, - type JsonAbi, - type Network, - Provider, - type TransactionRequestLike, - type Version, - Wallet, - type WalletUnlocked, -} from 'fuels'; -import { PredicateAccount } from './Predicate'; -import { BETA_5_URL } from './constants'; -import type { BurnerWalletConnectorConfig } from './types'; -import { BURNER_WALLET_ICON } from './utils/burner-wallet-icon'; -import { predicates } from './utils/predicateResources'; - -export class BurnerWalletConnector extends FuelConnector { - name = 'Burner Wallet'; - metadata: ConnectorMetadata = { - image: BURNER_WALLET_ICON, - install: { - action: 'Install', - description: 'Install Burner Wallet to connect to Fuel', - link: '', - }, - }; - - installed = true; - connected = false; - - // ethProvider: unknown | null = null; - fuelProvider: Provider | null = null; - burnerWalletProvider: Provider | null = null; - - burnerWallet: WalletUnlocked | null = null; - - events = { - ...FuelConnectorEventTypes, - // ...EVMWalletConnectorEvents, - }; - - private predicateAccount: PredicateAccount; - private predicate = predicates['verification-predicate']; - private setupLock = false; - private _currentAccount: string | null = null; - private config: BurnerWalletConnectorConfig = {}; - private _ethereumEvents = 0; - - constructor(config: BurnerWalletConnectorConfig = {}) { - super(); - - this.predicateAccount = new PredicateAccount(); - - this.configProviders(config); - } - - async configProviders(config: BurnerWalletConnectorConfig = {}) { - this.config = Object.assign(config, { - fuelProvider: config.fuelProvider || Provider.create(BETA_5_URL), - burnerWalletProvider: config.burnerWalletProvider || null, - }); - } - - getLazyBurnerWallet() { - const burnerWalletPrivateKey = sessionStorage.getItem( - 'burnerWalletPrivateKey', - ); - - if (!burnerWalletPrivateKey) { - const wallet = Wallet.generate(); - - sessionStorage.setItem('burnerWalletPrivateKey', wallet.privateKey); - this.burnerWallet = wallet; - - return this.burnerWallet.provider; - } - - this.burnerWallet = Wallet.fromPrivateKey(burnerWalletPrivateKey); - - return this.burnerWallet.provider; - } - - /** - * ============================================================ - * Application communication methods - * ============================================================ - */ - async getProviders() { - if (!this.fuelProvider || !this.burnerWalletProvider) { - this.burnerWalletProvider = this.getLazyBurnerWallet(); - - if (!this.burnerWalletProvider) { - throw new Error('Burner wallet provider not found'); - } - - this.fuelProvider = (await this.config.fuelProvider) ?? null; - - if (!this.fuelProvider) { - throw new Error('Fuel provider not found'); - } - } - - return { - fuelProvider: this.fuelProvider, - burnerWalletProvider: this.burnerWalletProvider, - }; - } - - async setup() { - if (this.setupLock) return; - this.setupLock = true; - - await this.setupCurrentAccount(); - // await this.setupEventBridge(); - } - - // async setupEventBridge() { - // const { burnerWalletProvider } = await this.getProviders(); - - // burnerWalletProvider.on(this.events.ACCOUNTS_CHANGED, async (accounts) => { - // this.emit('accounts', await this.accounts()); - // if (this._currentAccount !== accounts[0]) { - // await this.setupCurrentAccount(); - // } - // }); - - // burnerWalletProvider.on(this.events.CONNECT, async (_arg) => { - // this.emit('connection', await this.isConnected()); - // }); - - // burnerWalletProvider.on(this.events.DISCONNECT, async (_arg) => { - // this.emit('connection', await this.isConnected()); - // }); - // } - - async setupCurrentAccount() { - const currentAccount = this.burnerWallet?.address.toString() ?? null; - - this._currentAccount = currentAccount; - this.emit('currentAccount', currentAccount); - } - - /** - * ============================================================ - * Connector methods - * ============================================================ - */ - - async ping(): Promise { - await this.configProviders(); - - return true; - } - - async version(): Promise { - return { app: '0.0.0', network: '0.0.0' }; - } - - async isConnected(): Promise { - const account = this.burnerWallet?.address.toString(); - - return !!account; - } - - async accounts(): Promise> { - if (!this.burnerWalletProvider) { - return []; - } - - const accounts = await this.predicateAccount.getPredicateAccounts( - this.burnerWallet as WalletUnlocked, - ); - - return accounts.map((account) => account.predicateAccount); - } - - async connect(): Promise { - if (!(await this.isConnected())) { - this.burnerWallet?.connect(this.burnerWalletProvider as Provider); - - this.emit(this.events.connection, true); - - this.on(this.events.connection, (connection: boolean) => { - this.connected = connection; - }); - - return true; - } - - return this.connected; - } - - async disconnect(): Promise { - this.burnerWallet?.lock(); - - this.emit(this.events.connection, false); - this.emit(this.events.accounts, []); - this.emit(this.events.currentAccount, null); - - return false; - } - - async signMessage(_address: string, _message: string): Promise { - throw new Error('A predicate account cannot sign messages'); - } - - async sendTransaction( - address: string, - transaction: TransactionRequestLike, - ): Promise { - console.log({ address, transaction }); - - return ''; - } - - async currentAccount(): Promise { - if (!(await this.isConnected())) { - throw Error('No connected accounts'); - } - - const account = this.burnerWallet?.address.toString(); - - if (!account) { - throw Error('No connected accounts'); - } - - return account; - } - - async addAssets(_assets: Asset[]): Promise { - throw new Error('Method not implemented.'); - } - - async addAsset(_asset: Asset): Promise { - throw new Error('Method not implemented.'); - } - - async assets(): Promise> { - return []; - } - - async addNetwork(_networkUrl: string): Promise { - throw new Error('Method not implemented.'); - } - - async selectNetwork(_network: Network): Promise { - throw new Error('Method not implemented.'); - } - - async networks(): Promise { - return [await this.currentNetwork()]; - } - - async currentNetwork(): Promise { - const { fuelProvider } = await this.getProviders(); - const chainId = fuelProvider.getChainId(); - - return { url: fuelProvider.url, chainId: chainId }; - } - - async addAbi(_abiMap: AbiMap): Promise { - throw new Error('Method not implemented.'); - } - - async getAbi(_contractId: string): Promise { - throw Error('Cannot get contractId ABI for a predicate'); - } - - async hasAbi(_contractId: string): Promise { - throw Error('A predicate account cannot have an ABI'); - } -} diff --git a/packages/burner-wallet-connector/src/Predicate.ts b/packages/burner-wallet-connector/src/Predicate.ts deleted file mode 100644 index 69364e42e..000000000 --- a/packages/burner-wallet-connector/src/Predicate.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { WalletUnlocked } from 'fuels'; -import { getPredicateAddress } from './utils/predicate'; -import { predicates } from './utils/predicateResources'; - -export class PredicateAccount { - private predicate = predicates['verification-predicate']; - - //@ts-ignore - async getPredicateFromAddress(burnerWallet: WalletUnlocked) { - const accounts = await this.getPredicateAccounts(burnerWallet); - - return accounts; - } - - async getPredicateAccounts(burnerWallet: WalletUnlocked): Promise< - Array<{ - burnerAccount: string; - predicateAccount: string; - }> - > { - const burnerAccount = burnerWallet.address.toString(); - - const accounts = { - burnerAccount, - predicateAccount: getPredicateAddress( - burnerAccount, - this.predicate.bytecode, - this.predicate.abi, - ), - }; - - return [accounts]; - } -} diff --git a/packages/burner-wallet-connector/src/constants.ts b/packages/burner-wallet-connector/src/constants.ts deleted file mode 100644 index 0f4b4747b..000000000 --- a/packages/burner-wallet-connector/src/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -const HAS_WINDOW = typeof window !== 'undefined'; -export const WINDOW = HAS_WINDOW ? window : null; -export const BETA_5_URL = 'https://beta-5.fuel.network/graphql'; diff --git a/packages/burner-wallet-connector/src/index.ts b/packages/burner-wallet-connector/src/index.ts deleted file mode 100644 index 75ccad37f..000000000 --- a/packages/burner-wallet-connector/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './BurnerWalletConnector'; diff --git a/packages/burner-wallet-connector/src/types.ts b/packages/burner-wallet-connector/src/types.ts deleted file mode 100644 index 180bf1215..000000000 --- a/packages/burner-wallet-connector/src/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { Provider, WalletUnlocked } from 'fuels'; - -export type BurnerWalletConnectorConfig = { - fuelProvider?: Provider | Promise; - burnerWalletProvider?: Provider | Promise; -}; - -export enum BurnerWalletConnectorEvents { - //accounts - ACCOUNTS_CHANGED = 'accountsChanged', - - //connections - CONNECT = 'connect', - DISCONNECT = 'disconnect', -} diff --git a/packages/burner-wallet-connector/src/utils/burner-wallet-icon.ts b/packages/burner-wallet-connector/src/utils/burner-wallet-icon.ts deleted file mode 100644 index c05b4bc7e..000000000 --- a/packages/burner-wallet-connector/src/utils/burner-wallet-icon.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const BURNER_WALLET_ICON = - 'data:image/svg+xml; charset=utf-8;utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBpZD0iRmlyZSI+PHJlY3Qgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiIGZpbGw9Im5vbmUiPjwvcmVjdD48cGF0aCBkPSJNMTk3LjEyNzkzLDY2LjYwNDQ5Yy0xMy4wNzQ3MS0yMC44MjEyOS0yOS45MDk2Ny0zOC42NzU3OC00NC42NTMzMi01My4zOTM1NWE3Ljk5ODYzLDcuOTk4NjMsMCwwLDAtMTIuODc0NTEsMi4yMjE2OEwxMDguNzQ5NTEsODAuMjE4NzUsNzYuNDczNjMsNTguNzAxMTdhNy45OTkyNSw3Ljk5OTI1LDAsMCwwLTExLjEwNCwyLjIzNDM4QzQ1Ljg4MTM1LDkwLjMxMzQ4LDM2LDExNi45MTUsMzYsMTQwYTkyLDkyLDAsMCwwLDE4NCwwQzIyMCwxMTUuMTIyMDcsMjEyLjUxODU1LDkxLjExNDI2LDE5Ny4xMjc5Myw2Ni42MDQ0OVptLTkuODMzNSw4Mi42MTYyMWE1OS42OTY5Miw1OS42OTY5MiwwLDAsMS01MC4wNzI3NSw1MC4wNzQyMiw4LjExNTQzLDguMTE1NDMsMCwwLDEtMS4yMzEuMDk0NzMsOC4wMDA1NSw4LjAwMDU1LDAsMCwxLTEuMjExNDItMTUuOTA3MjMsNDQuMzE3MzksNDQuMzE3MzksMCwwLDAsMzYuNzAyNjMtMzYuNzAzMTIsNy45OTk5Myw3Ljk5OTkzLDAsMSwxLDE1LjgxMjUsMi40NDE0WiIgZmlsbD0iI2ZmODUxNCIgY2xhc3M9ImNvbG9yMDAwMDAwIHN2Z1NoYXBlIj48L3BhdGg+PC9zdmc+'; diff --git a/packages/burner-wallet-connector/src/utils/generatePredicateResources.ts b/packages/burner-wallet-connector/src/utils/generatePredicateResources.ts deleted file mode 100644 index 384b53abb..000000000 --- a/packages/burner-wallet-connector/src/utils/generatePredicateResources.ts +++ /dev/null @@ -1,42 +0,0 @@ -import fs from 'node:fs'; -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const predicates = ['verification-predicate']; - -let code = 'export const predicates = {\n'; - -predicates.forEach((predicate) => { - const outputDirectory = `${__dirname}/../../signature-verification/${predicate}/out/release`; - const abiPath = `${outputDirectory}/${predicate}-abi.json`; - const bytecodePath = `${outputDirectory}/${predicate}.bin`; - - const abi = fs.readFileSync(abiPath, 'utf8'); - const bytecode = fs.readFileSync(bytecodePath); - - code += ` '${predicate}': {\n`; - code += ` abi: ${abi},\n`; - code += ` bytecode: base64ToUint8Array('${bytecode.toString( - 'base64', - )}'),\n`; - code += ' },\n'; -}); - -code += ` -}; - -function base64ToUint8Array(base64: string) { - var binaryString = atob(base64); - var bytes = new Uint8Array(binaryString.length); - for (var i = 0; i < binaryString.length; i++) { - bytes[i] = binaryString.charCodeAt(i); - } - return bytes; -} -`; - -fs.writeFileSync(`${__dirname}/predicateResources.ts`, code); -console.log('Generated'); diff --git a/packages/burner-wallet-connector/src/utils/predicate.ts b/packages/burner-wallet-connector/src/utils/predicate.ts deleted file mode 100644 index a4a95ba5f..000000000 --- a/packages/burner-wallet-connector/src/utils/predicate.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { type BytesLike, arrayify } from '@ethersproject/bytes'; -import { - Address, - type InputValue, - type JsonAbi, - Predicate, - type Provider, - getPredicateRoot, -} from 'fuels'; -import memoize from 'memoizee'; - -export const getPredicateAddress = memoize( - ( - ethAddress: string, - predicateBytecode: BytesLike, - predicateAbi: JsonAbi, - ): string => { - const configurable = { - SIGNER: Address.fromB256( - ethAddress.replace('0x', '0x000000000000000000000000'), - ).toEvmAddress(), - }; - - // @ts-ignore - const { predicateBytes } = Predicate.processPredicateData( - predicateBytecode, - predicateAbi, - configurable, - ); - const address = Address.fromB256(getPredicateRoot(predicateBytes)); - - return address.toString(); - }, -); - -export const createPredicate = memoize(function createPredicate< - TInputData extends InputValue[], ->( - ethAddress: string, - provider: Provider, - predicateBytecode: BytesLike, - predicateAbi: JsonAbi, - inputData?: TInputData, -): Predicate { - const configurable = { - SIGNER: Address.fromB256( - ethAddress.replace('0x', '0x000000000000000000000000'), - ).toEvmAddress(), - }; - - const predicate = new Predicate({ - bytecode: arrayify(predicateBytecode), - abi: predicateAbi, - provider, - configurableConstants: configurable, - inputData, - }); - - return predicate; -}); diff --git a/packages/burner-wallet-connector/src/utils/predicateResources.ts b/packages/burner-wallet-connector/src/utils/predicateResources.ts deleted file mode 100644 index e6192f823..000000000 --- a/packages/burner-wallet-connector/src/utils/predicateResources.ts +++ /dev/null @@ -1,81 +0,0 @@ -export const predicates = { - 'verification-predicate': { - abi: { - types: [ - { - typeId: 0, - type: 'b256', - components: null, - typeParameters: null, - }, - { - typeId: 1, - type: 'bool', - components: null, - typeParameters: null, - }, - { - typeId: 2, - type: 'struct EvmAddress', - components: [ - { - name: 'value', - type: 0, - typeArguments: null, - }, - ], - typeParameters: null, - }, - { - typeId: 3, - type: 'u64', - components: null, - typeParameters: null, - }, - ], - functions: [ - { - inputs: [ - { - name: 'witness_index', - type: 3, - typeArguments: null, - }, - ], - name: 'main', - output: { - name: '', - type: 1, - typeArguments: null, - }, - attributes: null, - }, - ], - loggedTypes: [], - messagesTypes: [], - configurables: [ - { - name: 'SIGNER', - configurableType: { - name: '', - type: 2, - typeArguments: [], - }, - offset: 1952, - }, - ], - }, - bytecode: base64ToUint8Array( - 'dAAAA0cAAAAAAAAAAAAHSF38wAEQ//MAGuxQAJEABrhxRAADYUkSAHZIAAJhQRIMdAAAB3JMAAITSSTAWkkgAXZIAAJhQRJKdAAAASQAAABdQQAAXU/wDxBNMwBdU/AQEFFDAF1f8BAQXXMAYUEEAVBHs1ga6QAAGuUQACD4MwBY++ACUPvgBHQAAMIaQ9AAUEe2eHJIAEAoRQSAUEO2eBpEAABySAAgKO0UgFBHsCBySAAgKEU0gFBHsEBySAAgKEV0gFBHtMhySABgKEe0gFBHtMhQS7SockwAIChJRMBQS7SoXU/wCBBNFMBQU7TIUFFAIF1X8AldW/AIKE0VQEFJRYBQR7SoUEuwyHJMACAbTATAEE0kwHJQACAoTXUAckwAIBtMFMAQTSTAclAAIChNdQBQT7HQclAAQChNJQBQS7YQclAAQChJNQBQS7YQUE+wiHJQAEAoTQUAUEOygHJQACAoQRUAPkk0ABpAgAATQQBAdkAAClBDsjhf7ABHUEe2EFBJAAhyTABAKEkUwFBLs/hyRABIKEkEQHQAAAZQQ7GIX+wQMV/sADlQS7P4ckQASChJBEBQQ7WockQASChBJEBQQ7KgckQASChBJEBdQ7B/E0EAQHZAADxQQ7WoUEey6HJIAEgoRQSAXUOwtRNBAAB2QAABNgAAAFBDsuhQQQAIUEe1KHJIAEAoRQSAUEO1KHJEACAbRARAEEUEQFBDtShySAAgG0gUgBBJBIBQQ7FIckwAIChBFMBQRQAgckwAIChFJMBQR7O4ckgAQChFBIBQQ7OYGukQABrlAAAg+DMAWPvgAlD74AR0AABiGkPQAFBHtfBySAAgKEUEgFBDshBf7ABCUEe18FBLtYhyTAAgKEkUwFBHtYhwRAAMUEe1iFBLsQhyTAAgKEkUwFBFAAhyTAAgKEUkwFBLtEByRAAoKEkEQHQAAApQQ7KgUEEAQFBHsGBf7BAMUEkQIHJMAAgoSQTAUEu0QHJAACgoSRQAUEO2UHJEACgoQSRAXUOwiBNBAABcR/BQdkAAARpEAAB2RAABdAAAG1BDtlBQR7MwckgAKChFBIBdQ7DKE0EAAHZAAAE2AAAAUEOzMFBBAAhQR7VockgAIChFBIBQQ7EoXUfwERBFEwBySAAgKEEUgFBHtWhQS7RockwAIChJBMBQQ7SIckwAIChBFMChQSQgdkAAASQAAABcQ/BQJEAAABrwUACRAAAoX/EAAF/xEAFf8SACX/EwA1/zsAQa7FAAkQAAABpDoAAaR5AAGkvgAHJMAEAoRQTAGvUQAJIAAAAa+SAAWfBQKF1DwABdR8ABXUvAAl1PwANd78AEkgAAKEr4AAAa8FAAkQAAOF/xAABf8RABX/EgAl/xMANf8UAEX/FQBV/zsAYa7FAAkQAAeBpDoAAaR5AAGkvgAF1P8BAQTTMAGlAAACZQAAAaUHAAX+1ACF/sAAlf7AAKUFOwQHJUAEAo7QVAGuuwABrlQAAg+DMAWPvgAlD74AR0AAAWUEOwWHJQACAoQTUAUEOwWF1PsAhdU7AKQUE1AHJMACAoRQTAGvUQAJIAAHga+SAAWfBQOF1DwABdR8ABXUvAAl1PwANdU8AEXVfABV3vwAaSAAA4SvgAABrwUACRAABYX/EAAF/xEAFf8SACX/EwA1/xQARf8VAFX/FgBl/xcAdf8YAIX/GQCV/zsAoa7FAAkQAAQBpDoAAaZ5AAGmPgAF1H8AkmRAAAGkRwAHJIACAo7QSAGkuwAF1NIABdUSABXVUgAl1JIANfRTAAX0VAAV9FUAJfRSADXUvwCRNJIAB2SAAsXUmQAhNJIAB2SAAiXUmQAl1P8AkQSSTAXU2QAl1RkABdVZABFVklQHZYAAF0AAAHJkgAABpYcAAVXVAAdlwAAXQAAAEoWUVAGlFgAF9lQAAaWAAAXVPwCRZRZQB2UAAFX2UgAV9lIAIaRAAAJkQAAHQAAA9dUZAAEFFEwBBRRYAQVRWAXFVQAF5RUAAQWWBAdQAADl9lEABdR/AJX2UQAV1H8AlfZRACGkQAACZEAABQQQAgXUfwCSZEAAAaRHAAUEuwIHJMACAoSQTAXUEgAF1NIAFdUSACXUkgA19FAABfRTABX0VAAl9FIANdQ/AJE0EAAHZAACxdQZACE0EAAHZAACJdQZACXUvwCRBBBIBdSZACXU2QAF1RkAEVVQUAdlQAAXQAAAcmQAAAGlRwABVZQAB2WAABdAAAAShVNQAaTVAAX2UwABpUAABdT/AJFk1UwHZMAAVfZQABX2UAAhpAAAAmQAAAdAAAD11NkAAQTTSAEE01QBBRFUBcUUAAXk1AABBVUEB1AAAOX2UQAF1D8AlfZQABXUPwCV9lAAIaQAAAJkAAABr0AACSAABAGvmAAFnwUFhdQ8AAXUfAAV1LwAJdT8ADXVPABF1XwAVdW8AGXV/AB11jwAhdZ8AJXe/ACpIAAFhK+AAARwAAABlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZToKMzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdIAAAAAAAAB2gAAAAAAAAHoA==', - ), - }, -}; - -function base64ToUint8Array(base64: string) { - const binaryString = atob(base64); - const bytes = new Uint8Array(binaryString.length); - for (let i = 0; i < binaryString.length; i++) { - bytes[i] = binaryString.charCodeAt(i); - } - return bytes; -} diff --git a/packages/burner-wallet-connector/tsconfig.json b/packages/burner-wallet-connector/tsconfig.json deleted file mode 100644 index 610622201..000000000 --- a/packages/burner-wallet-connector/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "target": "ES2022", - "lib": ["DOM", "ES2022"], - "module": "es2022", - "moduleResolution": "Node", - "strict": true, - "noUncheckedIndexedAccess": true, - "declaration": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "outDir": "./dist" - }, - "exclude": ["./dist/**/*"] -} diff --git a/packages/burner-wallet-connector/tsup.config.js b/packages/burner-wallet-connector/tsup.config.js deleted file mode 100644 index 8e0c2622e..000000000 --- a/packages/burner-wallet-connector/tsup.config.js +++ /dev/null @@ -1,9 +0,0 @@ -import baseConfig from '@fuels/tsup-config'; -import { defineConfig } from 'tsup'; - -export default defineConfig((options) => ({ - ...baseConfig(options, { withReact: false }), - format: ['cjs'], - external: ['fuels'], - entry: ['src/index.ts'], -})); From a2d7bf5fbda750a0ad732225a69139dff7d3231a Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Wed, 10 Apr 2024 09:18:55 -0300 Subject: [PATCH 20/39] fix: restore tsup values --- packages/connectors/tsup.config.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/connectors/tsup.config.js b/packages/connectors/tsup.config.js index ddbd1672c..d0ee142e0 100644 --- a/packages/connectors/tsup.config.js +++ b/packages/connectors/tsup.config.js @@ -11,7 +11,7 @@ export default defineConfig((options) => ({ '@fuel-connectors/fuel-wallet', '@fuel-connectors/fuelet-wallet', ], - // minify: 'terser', + minify: 'terser', dts: { resolve: [ '@fuel-connectors/fuel-development-wallet', @@ -19,6 +19,6 @@ export default defineConfig((options) => ({ '@fuel-connectors/fuelet-wallet', ], }, - splitting: false, - metafile: false, + splitting: true, + metafile: true, })); From 4572fc72f37689a449341f4f629a4deb5fbf9e80 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Wed, 10 Apr 2024 11:30:05 -0300 Subject: [PATCH 21/39] test: tests for not implemented methods created --- .../src/test/chainConfig.json | 520 ------------------ .../src/test/mockProvider.ts | 176 ------ .../src/test/testConnector.ts | 29 +- .../src/test/walletConnector.test.ts | 262 +++------ 4 files changed, 94 insertions(+), 893 deletions(-) delete mode 100644 packages/walletconnect-connector/src/test/chainConfig.json delete mode 100644 packages/walletconnect-connector/src/test/mockProvider.ts diff --git a/packages/walletconnect-connector/src/test/chainConfig.json b/packages/walletconnect-connector/src/test/chainConfig.json deleted file mode 100644 index e9736df42..000000000 --- a/packages/walletconnect-connector/src/test/chainConfig.json +++ /dev/null @@ -1,520 +0,0 @@ -{ - "chain_name": "local_testnet", - "block_gas_limit": 5000000000, - "initial_state": { - "coins": [ - { - "owner": "0x94ffcc53b892684acefaebc8a3d4a595e528a8cf664eeb3ef36f1020b0809d0d", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x6e8ec14985922d2b5daf0a9ae68ca63d849e72f09fbc8ab2ddbb88b779a083a0", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x09c0b2d1a486c439a87bcba6b46a7a1a23f3897cc83a94521a96da5c23bc58db", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x09c0b2d1a486c439a87bcba6b46a7a1a23f3897cc83a94521a96da5c23bc58db", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0x09c0b2d1a486c439a87bcba6b46a7a1a23f3897cc83a94521a96da5c23bc58db", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0x5d99ee966b42cd8fc7bdd1364b389153a9e78b42b7d4a691470674e817888d4e", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x5d99ee966b42cd8fc7bdd1364b389153a9e78b42b7d4a691470674e817888d4e", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0x5d99ee966b42cd8fc7bdd1364b389153a9e78b42b7d4a691470674e817888d4e", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0xbdaad6a89e073e177895b3e5a9ccd15806749eda134a6438dae32fc5b6601f3f", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0xbdaad6a89e073e177895b3e5a9ccd15806749eda134a6438dae32fc5b6601f3f", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0xbdaad6a89e073e177895b3e5a9ccd15806749eda134a6438dae32fc5b6601f3f", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0x95a7aa6cc32743f8706c40ef49a7423b47da763bb4bbc055b1f07254dc729036", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x95a7aa6cc32743f8706c40ef49a7423b47da763bb4bbc055b1f07254dc729036", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0x95a7aa6cc32743f8706c40ef49a7423b47da763bb4bbc055b1f07254dc729036", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0xcee104acd38b940c8f1c62c6d7ea00a0ad2241d6dee0509a4bf27297508870d3", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0xcee104acd38b940c8f1c62c6d7ea00a0ad2241d6dee0509a4bf27297508870d3", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0xcee104acd38b940c8f1c62c6d7ea00a0ad2241d6dee0509a4bf27297508870d3", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0x7e3626e306588eba79cafab73f0709e55ab8f4bdfe8c8b75034a430fc56ece89", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x7e3626e306588eba79cafab73f0709e55ab8f4bdfe8c8b75034a430fc56ece89", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0x7e3626e306588eba79cafab73f0709e55ab8f4bdfe8c8b75034a430fc56ece89", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0x1c31df52b6df56407dd95f83082e8beb9cfc9532ac111d5bd8491651d95ba775", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x1c31df52b6df56407dd95f83082e8beb9cfc9532ac111d5bd8491651d95ba775", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0x1c31df52b6df56407dd95f83082e8beb9cfc9532ac111d5bd8491651d95ba775", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0x09dd7a49174d6fcc9f4c6f7942c18060a935ddd03ee69b594189b8c3581276ea", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x09dd7a49174d6fcc9f4c6f7942c18060a935ddd03ee69b594189b8c3581276ea", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0x09dd7a49174d6fcc9f4c6f7942c18060a935ddd03ee69b594189b8c3581276ea", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0x86604282dc604481b809845be49667607c470644f6822fc01eb0d22f167e08cf", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x86604282dc604481b809845be49667607c470644f6822fc01eb0d22f167e08cf", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0x86604282dc604481b809845be49667607c470644f6822fc01eb0d22f167e08cf", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0xbca334a06d19db5041c78fe2f465b07be5bec828f38b7796b2877e7d1542c950", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0xbca334a06d19db5041c78fe2f465b07be5bec828f38b7796b2877e7d1542c950", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0xbca334a06d19db5041c78fe2f465b07be5bec828f38b7796b2877e7d1542c950", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0xbd9a1dc8d3ec3521c43f6c2c01611b4d0204c7610204ff0178488c8738a30bd2", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0xbd9a1dc8d3ec3521c43f6c2c01611b4d0204c7610204ff0178488c8738a30bd2", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0xbd9a1dc8d3ec3521c43f6c2c01611b4d0204c7610204ff0178488c8738a30bd2", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0xb32197cf75efe05bf453c26178139f09b391582065549c1422bc92555ecffb64", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0xb32197cf75efe05bf453c26178139f09b391582065549c1422bc92555ecffb64", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0xb32197cf75efe05bf453c26178139f09b391582065549c1422bc92555ecffb64", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0x3b24509ed4ab3c7959f5c9391c1445c59290cdb5f13d6f780922f376b7029f30", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x3b24509ed4ab3c7959f5c9391c1445c59290cdb5f13d6f780922f376b7029f30", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0x3b24509ed4ab3c7959f5c9391c1445c59290cdb5f13d6f780922f376b7029f30", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0x77c6f40b7da70d885f68efaad7c661327482a63ea10dcb4271de819438254ae1", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x77c6f40b7da70d885f68efaad7c661327482a63ea10dcb4271de819438254ae1", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0x77c6f40b7da70d885f68efaad7c661327482a63ea10dcb4271de819438254ae1", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0x6a2c4691c547c43924650dbd30620b184b5fe3fb6dbe5c4446110b08f6f405bf", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x6a2c4691c547c43924650dbd30620b184b5fe3fb6dbe5c4446110b08f6f405bf", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0x6a2c4691c547c43924650dbd30620b184b5fe3fb6dbe5c4446110b08f6f405bf", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - }, - { - "owner": "0x49075a7538e2c88ebe1926ce4d898198a2a4e790d14512943a9864bc536b3c82", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "owner": "0x49075a7538e2c88ebe1926ce4d898198a2a4e790d14512943a9864bc536b3c82", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" - }, - { - "owner": "0x49075a7538e2c88ebe1926ce4d898198a2a4e790d14512943a9864bc536b3c82", - "amount": "0xFFFFFFFFFFFFFFFF", - "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" - } - ], - "messages": [ - { - "sender": "0xc43454aa38dd91f88109a4b7aef5efb96ce34e3f24992fe0f81d233ca686f80f", - "recipient": "0x69a2b736b60159b43bb8a4f98c0589f6da5fa3a3d101e8e269c499eb942753ba", - "nonce": "0101010101010101010101010101010101010101010101010101010101010101", - "amount": "0x000000000000FFFF", - "data": "", - "da_height": "0x00" - }, - { - "sender": "0x69a2b736b60159b43bb8a4f98c0589f6da5fa3a3d101e8e269c499eb942753ba", - "recipient": "0xc43454aa38dd91f88109a4b7aef5efb96ce34e3f24992fe0f81d233ca686f80f", - "nonce": "0e1ef2963832068b0e1ef2963832068b0e1ef2963832068b0e1ef2963832068b", - "amount": "0xb04f3c08f59b309e", - "data": "", - "da_height": "0x00" - } - ] - }, - "consensus_parameters": { - "tx_params": { - "max_inputs": 255, - "max_outputs": 255, - "max_witnesses": 255, - "max_gas_per_tx": 10000000, - "max_size": 17825792 - }, - "predicate_params": { - "max_predicate_length": 1048576, - "max_predicate_data_length": 1048576, - "max_gas_per_predicate": 10000000, - "max_message_data_length": 1048576 - }, - "script_params": { - "max_script_length": 1048576, - "max_script_data_length": 1048576 - }, - "contract_params": { - "contract_max_size": 16777216, - "max_storage_slots": 255 - }, - "fee_params": { - "gas_price_factor": 92, - "gas_per_byte": 4 - } - }, - "gas_costs": { - "add": 1, - "addi": 1, - "aloc": 1, - "and": 1, - "andi": 1, - "bal": 13, - "bhei": 1, - "bhsh": 1, - "burn": 132, - "cb": 1, - "cfei": 1, - "cfsi": 1, - "croo": 16, - "div": 1, - "divi": 1, - "ecr1": 3000, - "eck1": 951, - "ed19": 3000, - "eq": 1, - "exp": 1, - "expi": 1, - "flag": 1, - "gm": 1, - "gt": 1, - "gtf": 1, - "ji": 1, - "jmp": 1, - "jne": 1, - "jnei": 1, - "jnzi": 1, - "jmpf": 1, - "jmpb": 1, - "jnzf": 1, - "jnzb": 1, - "jnef": 1, - "jneb": 1, - "lb": 1, - "log": 9, - "lt": 1, - "lw": 1, - "mint": 135, - "mlog": 1, - "modOp": 1, - "modi": 1, - "moveOp": 1, - "movi": 1, - "mroo": 2, - "mul": 1, - "muli": 1, - "mldv": 1, - "noop": 1, - "not": 1, - "or": 1, - "ori": 1, - "poph": 2, - "popl": 2, - "pshh": 2, - "pshl": 2, - "ret": 13, - "rvrt": 13, - "sb": 1, - "sll": 1, - "slli": 1, - "srl": 1, - "srli": 1, - "srw": 12, - "sub": 1, - "subi": 1, - "sw": 1, - "sww": 67, - "time": 1, - "tr": 105, - "tro": 60, - "wdcm": 1, - "wqcm": 1, - "wdop": 1, - "wqop": 1, - "wdml": 1, - "wqml": 1, - "wddv": 1, - "wqdv": 2, - "wdmd": 3, - "wqmd": 4, - "wdam": 2, - "wqam": 3, - "wdmm": 3, - "wqmm": 3, - "xor": 1, - "xori": 1, - "call": { - "LightOperation": { - "base": 144, - "units_per_gas": 214 - } - }, - "ccp": { - "LightOperation": { - "base": 15, - "units_per_gas": 103 - } - }, - "csiz": { - "LightOperation": { - "base": 17, - "units_per_gas": 790 - } - }, - "k256": { - "LightOperation": { - "base": 11, - "units_per_gas": 214 - } - }, - "ldc": { - "LightOperation": { - "base": 15, - "units_per_gas": 272 - } - }, - "logd": { - "LightOperation": { - "base": 26, - "units_per_gas": 64 - } - }, - "mcl": { - "LightOperation": { - "base": 1, - "units_per_gas": 3333 - } - }, - "mcli": { - "LightOperation": { - "base": 1, - "units_per_gas": 3333 - } - }, - "mcp": { - "LightOperation": { - "base": 1, - "units_per_gas": 2000 - } - }, - "mcpi": { - "LightOperation": { - "base": 3, - "units_per_gas": 2000 - } - }, - "meq": { - "LightOperation": { - "base": 1, - "units_per_gas": 2500 - } - }, - "retd": { - "LightOperation": { - "base": 29, - "units_per_gas": 62 - } - }, - "s256": { - "LightOperation": { - "base": 2, - "units_per_gas": 214 - } - }, - "scwq": { - "LightOperation": { - "base": 13, - "units_per_gas": 5 - } - }, - "smo": { - "LightOperation": { - "base": 209, - "units_per_gas": 55 - } - }, - "srwq": { - "LightOperation": { - "base": 47, - "units_per_gas": 5 - } - }, - "swwq": { - "LightOperation": { - "base": 44, - "units_per_gas": 5 - } - }, - "contract_root": { - "LightOperation": { - "base": 75, - "units_per_gas": 1 - } - }, - "state_root": { - "LightOperation": { - "base": 412, - "units_per_gas": 1 - } - }, - "vm_initialization": { - "HeavyOperation": { - "base": 2000, - "gas_per_unit": 0 - } - }, - "new_storage_per_byte": 1 - }, - "consensus": { - "PoA": { - "signing_key": "0x94ffcc53b892684acefaebc8a3d4a595e528a8cf664eeb3ef36f1020b0809d0d" - } - } -} diff --git a/packages/walletconnect-connector/src/test/mockProvider.ts b/packages/walletconnect-connector/src/test/mockProvider.ts deleted file mode 100644 index 6364f01dc..000000000 --- a/packages/walletconnect-connector/src/test/mockProvider.ts +++ /dev/null @@ -1,176 +0,0 @@ -// import EventEmitter from 'node:events'; -// import { -// bytesToHex, -// ecsign, -// hashPersonalMessage, -// hexToBytes, -// privateToAddress, -// toRpcSig, -// } from '@ethereumjs/util'; - -// interface IMockProvider { -// request(args: { -// method: 'eth_accounts'; -// params: string[]; -// }): Promise; -// request(args: { -// method: 'eth_requestAccounts'; -// params: string[]; -// }): Promise; -// request(args: { -// method: 'wallet_requestPermissions'; -// params: string[]; -// }): Promise; - -// request(args: { -// method: 'wallet_revokePermissions'; -// params: string[]; -// }): Promise; - -// request(args: { method: 'net_version' }): Promise; -// request(args: { method: 'eth_chainId'; params: string[] }): Promise; - -// request(args: { method: 'personal_sign'; params: string[] }): Promise; -// request(args: { method: 'eth_decrypt'; params: string[] }): Promise; - -// // biome-ignore lint/suspicious/noExplicitAny: This request pattern will match against unknown request types and error. -// request(args: { method: string; params?: any[] }): Promise; -// } - -// export class MockProvider extends EventEmitter implements IMockProvider { -// private accounts: { address: string; privateKey: Uint8Array }[] = []; -// private connected = false; - -// public debug = false; - -// public isMetaMask = true; -// public manualConfirmEnable = false; - -// private acceptEnable?: (value: unknown) => void; - -// private rejectEnable?: (value: unknown) => void; - -// constructor(numAccounts = 3) { -// super(); -// for (let i = 0; i < numAccounts; i += 1) { -// // const privateKey = randomBytes(32); -// const privateKey = hexToBytes( -// '0x96dfa8c25bdae93fa0b6460079f8bb18aaec70c8451b5e32251cbc22f0dbf308', -// ); -// const address = bytesToHex(privateToAddress(privateKey)); -// this.accounts.push({ address, privateKey: privateKey }); -// } -// } - -// get selectedAddress(): string { -// if (this.accounts && this.accounts.length > 0) { -// const selectedAddress = this.accounts[0]?.address; -// if (selectedAddress) { -// return selectedAddress; -// } -// } -// throw new Error('Address not defined'); -// } - -// get networkVersion(): number { -// return 1; -// } - -// get chainId(): string { -// return `0x${(1).toString(16)}`; -// } - -// answerEnable(acceptance: boolean) { -// if (acceptance) this.acceptEnable?.('Accepted'); -// else this.rejectEnable?.('User rejected'); -// } - -// getAccounts(): string[] { -// return this.accounts.map(({ address }) => address); -// } - -// // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the EIP 1193 interface. -// async request({ method, params }: any): Promise { -// switch (method) { -// case 'eth_requestAccounts': -// if (this.manualConfirmEnable) { -// return new Promise((resolve, reject) => { -// this.acceptEnable = resolve; -// this.rejectEnable = reject; -// }).then(() => this.accounts.map(({ address }) => address)); -// } -// this.connected = true; -// return this.accounts.map(({ address }) => address); - -// case 'wallet_requestPermissions': -// if (this.manualConfirmEnable) { -// return new Promise((resolve, reject) => { -// this.acceptEnable = resolve; -// this.rejectEnable = reject; -// }).then(() => this.accounts.map(({ address }) => address)); -// } -// this.connected = true; -// return this.accounts.map(({ address }) => address); - -// case 'eth_accounts': -// return this.connected ? this.getAccounts() : []; - -// case 'wallet_revokePermissions': -// return null; - -// case 'net_version': -// return this.networkVersion; - -// case 'eth_chainId': -// return this.chainId; - -// case 'personal_sign': { -// const [message, address] = params; -// const account = this.accounts.find((a) => a.address === address); -// if (!account) throw new Error('Account not found'); - -// const hash = hashPersonalMessage(hexToBytes(message)); -// const signed = ecsign(hash, account.privateKey); -// const signedStr = toRpcSig(signed.v, signed.r, signed.s); - -// return signedStr; -// } - -// case 'eth_sendTransaction': { -// throw new Error('This service can not send transactions.'); -// } - -// default: -// throw new Error( -// `The method ${method} is not implemented by the mock provider.`, -// ); -// } -// } - -// // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the EIP 1193 interface. -// sendAsync(props: { method: string }, cb: any) { -// switch (props.method) { -// case 'eth_accounts': -// cb(null, { result: [this.getAccounts()] }); -// break; - -// case 'net_version': -// cb(null, { result: this.networkVersion }); -// break; - -// default: -// throw new Error(`Method '${props.method}' is not supported yet.`); -// } -// } - -// // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the NodeJS.EventEmitter interface. -// on(props: string, listener: (...args: any[]) => void) { -// super.on(props, listener); -// return this; -// } - -// removeAllListeners() { -// super.removeAllListeners(); -// return this; -// } -// } diff --git a/packages/walletconnect-connector/src/test/testConnector.ts b/packages/walletconnect-connector/src/test/testConnector.ts index ea7593c2b..ee00aa37b 100644 --- a/packages/walletconnect-connector/src/test/testConnector.ts +++ b/packages/walletconnect-connector/src/test/testConnector.ts @@ -1,18 +1,17 @@ -// import type { Provider } from 'fuels'; +import type { Provider } from 'fuels'; -// import { WalletconnectWalletConnector } from '../index'; +import { WalletConnectConnector } from '../index'; -// export class testWalletconnectWalletConnector extends WalletconnectWalletConnector { -// constructor(ethProvider: unknown, fuelProvider: Provider) { -// super(); -// this.ethProvider = ethProvider; -// this.fuelProvider = fuelProvider; -// } +export class testWalletConnectConnector extends WalletConnectConnector { + constructor(fuelProvider: Provider) { + super(); + this.fuelProvider = fuelProvider; + } -// async getProviders() { -// if (this.fuelProvider && this.ethProvider) { -// return { fuelProvider: this.fuelProvider, ethProvider: this.ethProvider }; -// } -// throw 'Providers must exists'; -// } -// } + async getProviders() { + if (this.fuelProvider) { + return { fuelProvider: this.fuelProvider }; + } + throw 'Providers must exists'; + } +} diff --git a/packages/walletconnect-connector/src/test/walletConnector.test.ts b/packages/walletconnect-connector/src/test/walletConnector.test.ts index b3c726885..eb90f8525 100644 --- a/packages/walletconnect-connector/src/test/walletConnector.test.ts +++ b/packages/walletconnect-connector/src/test/walletConnector.test.ts @@ -1,182 +1,80 @@ -// import path from 'node:path'; -// import { launchNodeAndGetWallets } from '@fuel-ts/account/test-utils'; -// import type { Asset, Provider } from 'fuels'; -// import { -// afterAll, -// afterEach, -// beforeAll, -// beforeEach, -// describe, -// expect, -// test, -// } from 'vitest'; -// import { getPredicateAddress } from '../'; -// import { predicates } from '../utils/predicateResources'; -// import { MockProvider } from './mockProvider'; -// import { testWalletconnectWalletConnector as WalletconnectWalletConnector } from './testConnector'; - -// const predicate = 'verification-predicate'; - -// describe('EVM Wallet Connector', () => { -// // Providers used to interact with wallets -// let ethProvider: MockProvider; -// let fuelProvider: Provider; - -// // Our connector bridging MetaMask and predicate accounts -// let connector: WalletconnectWalletConnector; - -// let stopProvider: () => void; - -// const bytecode = predicates[predicate].bytecode; -// const abi = predicates[predicate].abi; - -// const chainConfigPath = path.join(__dirname, 'chainConfig.json'); - -// beforeAll(async () => { -// //Launch test node -// process.env.GENESIS_SECRET = -// '0x6e48a022f9d4ae187bca4e2645abd62198ae294ee484766edbdaadf78160dc68'; -// const { stop, provider } = await launchNodeAndGetWallets({ -// launchNodeOptions: { -// args: ['--chain', chainConfigPath], -// loggingEnabled: false, -// }, -// }); - -// fuelProvider = provider; -// stopProvider = stop; -// }); - -// afterAll(() => { -// stopProvider?.(); -// }); - -// beforeEach(async () => { -// // Create the Ethereum provider -// ethProvider = new MockProvider(); - -// const accounts = ethProvider.getAccounts(); -// if (accounts.length < 2) { -// throw new Error('Not enough accounts available'); -// } - -// const predicateAccounts = await Promise.all( -// accounts.map(async (account) => -// getPredicateAddress(account, bytecode, abi), -// ), -// ); -// if (predicateAccounts.length < 2) { -// throw new Error('Not enough predicate accounts available'); -// } - -// // Class contains state, reset the state for each test -// connector = new WalletconnectWalletConnector(ethProvider, fuelProvider); -// }); - -// afterEach(() => { -// ethProvider.removeAllListeners(); -// }); - -// describe('connect()', () => { -// test('connects to ethers signer', async () => { -// const connected = await connector.connect(); - -// expect(connected).to.be.true; -// }); -// }); - -// describe('signMessage()', () => { -// test('throws error', async () => { -// await expect(() => -// connector.signMessage('address', 'message'), -// ).rejects.toThrowError('A predicate account cannot sign messages'); -// }); -// }); - -// describe('assets()', () => { -// test('returns an empty array', async () => { -// expect(await connector.assets()).to.deep.equal([]); -// }); -// }); - -// describe('addAsset()', () => { -// test('throws error', async () => { -// const asset: Asset = { -// name: '', -// symbol: '', -// icon: '', -// networks: [], -// }; -// await expect(() => connector.addAsset(asset)).rejects.toThrowError( -// 'Method not implemented.', -// ); -// }); -// }); - -// describe('addAssets()', () => { -// test('throws error', async () => { -// await expect(() => connector.addAssets([])).rejects.toThrowError( -// 'Method not implemented.', -// ); -// }); -// }); - -// describe('addAbi()', () => { -// test('throws error', async () => { -// await expect(() => connector.addAbi({})).rejects.toThrowError( -// 'Method not implemented.', -// ); -// }); -// }); - -// describe('getAbi()', () => { -// test('throws error', async () => { -// await expect(() => connector.getAbi('contractId')).rejects.toThrowError( -// 'Cannot get contractId ABI for a predicate', -// ); -// }); -// }); - -// describe('hasAbi()', () => { -// test('throws error', async () => { -// await expect(() => connector.hasAbi('contractId')).rejects.toThrowError( -// 'A predicate account cannot have an ABI', -// ); -// }); -// }); - -// describe('network()', () => { -// test('returns the fuel network info', async () => { -// const network = await connector.currentNetwork(); - -// expect(network.chainId.toString()).to.be.equal( -// (await fuelProvider.getNetwork()).chainId.toString(), -// ); -// expect(network.url).to.be.equal(fuelProvider.url); -// }); -// }); - -// describe('networks()', () => { -// test('returns an array of fuel network info', async () => { -// const networks = await connector.networks(); -// const network = networks.pop(); - -// const networkChainId = network?.chainId.toString(); -// const connectorNetwork = await connector.fuelProvider?.getNetwork(); -// const expectedChainId = connectorNetwork -// ? connectorNetwork.chainId.toString() -// : undefined; -// expect(networkChainId).to.be.equal(expectedChainId); - -// expect(network?.url).to.be.equal(fuelProvider.url); -// }); -// }); - -// describe('addNetwork()', () => { -// test('throws error', async () => { -// await expect(() => connector.addNetwork('')).rejects.toThrowError( -// 'Method not implemented.', -// ); -// }); -// }); -// }); +import type { Asset } from 'fuels'; +import { beforeEach, describe, expect, test } from 'vitest'; +import { WalletConnectConnector } from '../WalletConnectConnector'; + +describe('WalletConnect Connector', () => { + let connector: WalletConnectConnector; + + beforeEach(async () => { + // Class contains state, reset the state for each test + connector = new WalletConnectConnector(); + }); + + describe('signMessage()', () => { + test('throws error', async () => { + await expect(() => + connector.signMessage('address', 'message'), + ).rejects.toThrowError('A predicate account cannot sign messages'); + }); + }); + + describe('assets()', () => { + test('returns an empty array', async () => { + expect(await connector.assets()).to.deep.equal([]); + }); + }); + + describe('addAsset()', () => { + test('throws error', async () => { + const asset: Asset = { + name: '', + symbol: '', + icon: '', + networks: [], + }; + await expect(() => connector.addAsset(asset)).rejects.toThrowError( + 'Method not implemented.', + ); + }); + }); + + describe('addAssets()', () => { + test('throws error', async () => { + await expect(() => connector.addAssets([])).rejects.toThrowError( + 'Method not implemented.', + ); + }); + }); + + describe('addAbi()', () => { + test('throws error', async () => { + await expect(() => connector.addAbi({})).rejects.toThrowError( + 'Method not implemented.', + ); + }); + }); + + describe('getAbi()', () => { + test('throws error', async () => { + await expect(() => connector.getAbi('contractId')).rejects.toThrowError( + 'Cannot get contractId ABI for a predicate', + ); + }); + }); + + describe('hasAbi()', () => { + test('throws error', async () => { + await expect(() => connector.hasAbi('contractId')).rejects.toThrowError( + 'A predicate account cannot have an ABI', + ); + }); + }); + + describe('addNetwork()', () => { + test('throws error', async () => { + await expect(() => connector.addNetwork('')).rejects.toThrowError( + 'Method not implemented.', + ); + }); + }); +}); From ab8e26fc203e3eff530613a4982c452f0ab4d00d Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Wed, 10 Apr 2024 11:53:49 -0300 Subject: [PATCH 22/39] fix: size of connector icon fixed --- examples/react-app/src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/react-app/src/App.tsx b/examples/react-app/src/App.tsx index acdfb07d0..ecba247ac 100644 --- a/examples/react-app/src/App.tsx +++ b/examples/react-app/src/App.tsx @@ -45,7 +45,7 @@ export default function App() { {currentConnector.title} )} From def8168662ca1782ac5175888a79042dd7721f0b Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Wed, 10 Apr 2024 16:56:09 -0300 Subject: [PATCH 23/39] test: silent console log in tests --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e9d0f83a5..0726421b7 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build": "turbo build", "build:watch": "turbo build:watch", "ts:check": "turbo run ts:check", - "test": "vitest", + "test": "vitest --silent", "test:ci": "turbo run test -- --run --coverage.enabled --coverage.reporter=json-summary --coverage.reporter=json --coverage.thresholds.functions=50 --coverage.thresholds.lines=50 --coverage.thresholds.branches=50 --coverage.thresholds.statements=50", "lint:check": "biome check --apply-unsafe .", "lint:ci": "biome lint --max-diagnostics=1000 --diagnostic-level=error .", From 1c07b472fa65bca357218faf0f4264110ecdfe85 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Wed, 10 Apr 2024 16:56:50 -0300 Subject: [PATCH 24/39] fix: walletconnect connector icon changed --- packages/walletconnect-connector/src/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/walletconnect-connector/src/constants.ts b/packages/walletconnect-connector/src/constants.ts index a14fe83bc..eefae87f5 100644 --- a/packages/walletconnect-connector/src/constants.ts +++ b/packages/walletconnect-connector/src/constants.ts @@ -1,3 +1,3 @@ export const ETHEREUM_ICON = - 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTUzNSIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDQxNyIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPjxwYXRoIGZpbGw9IiMzNDM0MzQiIGQ9Ik0xMjcuOTYxIDBsLTIuNzk1IDkuNXYyNzUuNjY4bDIuNzk1IDIuNzkgMTI3Ljk2Mi03NS42Mzh6Ii8+PHBhdGggZmlsbD0iIzhDOEM4QyIgZD0iTTEyNy45NjIgMEwwIDIxMi4zMmwxMjcuOTYyIDc1LjYzOVYxNTQuMTU4eiIvPjxwYXRoIGZpbGw9IiMzQzNDM0IiIGQ9Ik0xMjcuOTYxIDMxMi4xODdsLTEuNTc1IDEuOTJ2OTguMTk5bDEuNTc1IDQuNkwyNTYgMjM2LjU4N3oiLz48cGF0aCBmaWxsPSIjOEM4QzhDIiBkPSJNMTI3Ljk2MiA0MTYuOTA1di0xMDQuNzJMMCAyMzYuNTg1eiIvPjxwYXRoIGZpbGw9IiMxNDE0MTQiIGQ9Ik0xMjcuOTYxIDI4Ny45NThsMTI3Ljk2LTc1LjYzNy0xMjcuOTYtNTguMTYyeiIvPjxwYXRoIGZpbGw9IiMzOTM5MzkiIGQ9Ik0wIDIxMi4zMmwxMjcuOTYgNzUuNjM4di0xMzMuOHoiLz4KCTxtZXRhZGF0YT4KCQk8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnJkZnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CgkJCTxyZGY6RGVzY3JpcHRpb24gYWJvdXQ9Imh0dHBzOi8vaWNvbnNjb3V0LmNvbS9sZWdhbCNsaWNlbnNlcyIgZGM6dGl0bGU9ImV0aGVyZXVtLTEtY29tcGFueS1icmFuZC1sb2dvIiBkYzpkZXNjcmlwdGlvbj0iZXRoZXJldW0tMS1jb21wYW55LWJyYW5kLWxvZ28iIGRjOnB1Ymxpc2hlcj0iSWNvbnNjb3V0IiBkYzpkYXRlPSIyMDE3LTA3LTEyIiBkYzpmb3JtYXQ9ImltYWdlL3N2Zyt4bWwiIGRjOmxhbmd1YWdlPSJlbiI+CgkJCQk8ZGM6Y3JlYXRvcj4KCQkJCQk8cmRmOkJhZz4KCQkJCQkJPHJkZjpsaT5JY29uIE1hZmlhPC9yZGY6bGk+CgkJCQkJPC9yZGY6QmFnPgoJCQkJPC9kYzpjcmVhdG9yPgoJCQk8L3JkZjpEZXNjcmlwdGlvbj4KCQk8L3JkZjpSREY+CiAgICA8L21ldGFkYXRhPjwvc3ZnPgo='; + 'data:image/svg+xml;utf8;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0yNTMgMzM1LjEyMkwyNTUuODg2IDMzOEwzODggMjU5Ljk4N0wyNTUuODg2IDQxTDI1MyA1MC43OTgzVjMzNS4xMjJaIiBmaWxsPSIjMzQzNDM0Ii8+CjxwYXRoIGQ9Ik0yNTYgMzM4VjQxTDEyNCAyNTkuOTg2TDI1NiAzMzhaIiBmaWxsPSIjOEM4QzhDIi8+CjxwYXRoIGQ9Ik0yNTQgNDY1LjI4MUwyNTUuNjI4IDQ3MEwzODggMjg1TDI1NS42MjkgMzYyLjU2M0wyNTQuMDAxIDM2NC41MzJMMjU0IDQ2NS4yODFaIiBmaWxsPSIjM0MzQzNCIi8+CjxwYXRoIGQ9Ik0xMjQgMjg1TDI1NiA0NzBWMzYyLjU2MkwxMjQgMjg1WiIgZmlsbD0iIzhDOEM4QyIvPgo8cGF0aCBkPSJNMjU2IDIwMFYzMzhMMzg4IDI1OS45ODhMMjU2IDIwMFoiIGZpbGw9IiMxNDE0MTQiLz4KPHBhdGggZD0iTTI1NiAyMDBMMTI0IDI1OS45ODhMMjU2IDMzOFYyMDBaIiBmaWxsPSIjMzkzOTM5Ii8+Cjwvc3ZnPgo='; export const BETA_5_URL = 'https://beta-5.fuel.network/graphql'; From bc4d09b2a464a3e45a7c390e04cdce69f037e923 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Wed, 10 Apr 2024 19:31:09 -0300 Subject: [PATCH 25/39] test: fix warn logs --- package.json | 2 +- .../src/test/walletConnector.test.ts | 2 +- pnpm-lock.yaml | 55 ------------------- 3 files changed, 2 insertions(+), 57 deletions(-) diff --git a/package.json b/package.json index 0726421b7..e9d0f83a5 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build": "turbo build", "build:watch": "turbo build:watch", "ts:check": "turbo run ts:check", - "test": "vitest --silent", + "test": "vitest", "test:ci": "turbo run test -- --run --coverage.enabled --coverage.reporter=json-summary --coverage.reporter=json --coverage.thresholds.functions=50 --coverage.thresholds.lines=50 --coverage.thresholds.branches=50 --coverage.thresholds.statements=50", "lint:check": "biome check --apply-unsafe .", "lint:ci": "biome lint --max-diagnostics=1000 --diagnostic-level=error .", diff --git a/packages/walletconnect-connector/src/test/walletConnector.test.ts b/packages/walletconnect-connector/src/test/walletConnector.test.ts index eb90f8525..659d756eb 100644 --- a/packages/walletconnect-connector/src/test/walletConnector.test.ts +++ b/packages/walletconnect-connector/src/test/walletConnector.test.ts @@ -7,7 +7,7 @@ describe('WalletConnect Connector', () => { beforeEach(async () => { // Class contains state, reset the state for each test - connector = new WalletConnectConnector(); + connector = new WalletConnectConnector({ projectId: '0000' }); }); describe('signMessage()', () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 705d73642..209e7101b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -103,61 +103,6 @@ importers: specifier: 5.2.6 version: 5.2.6(@types/node@20.12.4) - packages/burner-wallet-connector: - dependencies: - '@ethereumjs/util': - specifier: ^9.0.1 - version: 9.0.3 - '@ethersproject/bytes': - specifier: ^5.7.0 - version: 5.7.0 - memoizee: - specifier: ^0.4.15 - version: 0.4.15 - devDependencies: - '@fuel-ts/account': - specifier: ^0.79.0 - version: 0.79.0(dexie@4.0.1) - '@fuel-ts/forc': - specifier: 0.79.0 - version: 0.79.0 - '@fuel-ts/fuel-core': - specifier: ^0.79.0 - version: 0.79.0 - '@types/memoizee': - specifier: ^0.4.11 - version: 0.4.11 - fuels: - specifier: ^0.79.0 - version: 0.79.0(dexie@4.0.1) - jsdom: - specifier: 24.0.0 - version: 24.0.0 - ts-loader: - specifier: ^9.5.1 - version: 9.5.1(typescript@5.4.3)(webpack@5.91.0) - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.4)(typescript@5.4.3) - tsup: - specifier: 8.0.2 - version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) - tsx: - specifier: ^4.7.0 - version: 4.7.2 - typescript: - specifier: 5.4.3 - version: 5.4.3 - vite: - specifier: ^5.0.10 - version: 5.2.6(@types/node@20.12.4) - vite-plugin-dts: - specifier: ^3.6.4 - version: 3.8.1(@types/node@20.12.4)(typescript@5.4.3)(vite@5.2.6) - vitest: - specifier: ^1.4.0 - version: 1.4.0(@types/node@20.12.4)(jsdom@24.0.0) - packages/connectors: devDependencies: '@fuel-connectors/evm-connector': From 5d5ced11b0357fd344e6af493bfcb857833b9d91 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Wed, 10 Apr 2024 19:35:44 -0300 Subject: [PATCH 26/39] fix: predicate hashTransaction fixed --- .../walletconnect-connector/src/WalletConnectConnector.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/walletconnect-connector/src/WalletConnectConnector.ts b/packages/walletconnect-connector/src/WalletConnectConnector.ts index b31167c93..58770edde 100644 --- a/packages/walletconnect-connector/src/WalletConnectConnector.ts +++ b/packages/walletconnect-connector/src/WalletConnectConnector.ts @@ -238,6 +238,13 @@ export class WalletConnectConnector extends FuelConnector { // To each input of the request, attach the predicate and its data const requestWithPredicateAttached = predicate.populateTransactionPredicateData(transactionRequest); + + requestWithPredicateAttached.inputs.forEach((input) => { + if ('predicate' in input && input.predicate) { + input.witnessIndex = 0; + } + }); + const txID = requestWithPredicateAttached.getTransactionId(chainId); // biome-ignore lint/suspicious/noExplicitAny: const provider: any = await getAccount( From 6d98124566bf35874ae8be9cccf31f5e7a740488 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Thu, 11 Apr 2024 10:42:22 -0300 Subject: [PATCH 27/39] fix: .env ignored --- examples/react-app/.env | 1 - examples/react-app/.gitignore | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 examples/react-app/.env create mode 100644 examples/react-app/.gitignore diff --git a/examples/react-app/.env b/examples/react-app/.env deleted file mode 100644 index c916f500a..000000000 --- a/examples/react-app/.env +++ /dev/null @@ -1 +0,0 @@ -VITE_APP_WC_PROJECT_ID=0e0f5503e675e719c07e73ff5f38d31f \ No newline at end of file diff --git a/examples/react-app/.gitignore b/examples/react-app/.gitignore new file mode 100644 index 000000000..2eea525d8 --- /dev/null +++ b/examples/react-app/.gitignore @@ -0,0 +1 @@ +.env \ No newline at end of file From a8cd1b48b20408acae81d5cbad2a70d36fd7750d Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Thu, 11 Apr 2024 10:46:57 -0300 Subject: [PATCH 28/39] fix: old connector events removed --- .../src/WalletConnectConnector.ts | 7 ++----- packages/walletconnect-connector/src/types.ts | 18 ------------------ 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/packages/walletconnect-connector/src/WalletConnectConnector.ts b/packages/walletconnect-connector/src/WalletConnectConnector.ts index 58770edde..0b37779c3 100644 --- a/packages/walletconnect-connector/src/WalletConnectConnector.ts +++ b/packages/walletconnect-connector/src/WalletConnectConnector.ts @@ -23,10 +23,7 @@ import { } from 'fuels'; import { BETA_5_URL, ETHEREUM_ICON } from './constants'; import { predicates } from './predicates'; -import { - type WalletConnectConfig, - WalletConnectConnectorEvents, -} from './types'; +import type { WalletConnectConfig } from './types'; import { PredicateAccount } from './utils/Predicate'; import { createModalConfig } from './utils/wagmiConfig'; @@ -36,7 +33,7 @@ export class WalletConnectConnector extends FuelConnector { connected = false; installed = false; - events = { ...FuelConnectorEventTypes, ...WalletConnectConnectorEvents }; + events = FuelConnectorEventTypes; metadata: ConnectorMetadata = { image: ETHEREUM_ICON, diff --git a/packages/walletconnect-connector/src/types.ts b/packages/walletconnect-connector/src/types.ts index 24510685c..948516aa3 100644 --- a/packages/walletconnect-connector/src/types.ts +++ b/packages/walletconnect-connector/src/types.ts @@ -12,21 +12,3 @@ export type WalletConnectConfig = { wagmiConfig?: WagmiConfig; predicateConfig?: PredicateConfig; }; - -export enum WalletConnectConnectorEvents { - //accounts - ACCOUNTS_CHANGED = 'accountsChanged', - - //chain - CHAIN_CHANGED = 'chainChanged', - - //session - SESSION_EVENT = 'session_event', - - //connection uri - DISPLAY_URI = 'display_uri', - - //connections - CONNECT = 'connect', - DISCONNECT = 'disconnect', -} From df9a676a985bd137e520f828fd9b59f9bf98c2a8 Mon Sep 17 00:00:00 2001 From: Pedro Pereira <98242932+pedropereiradev@users.noreply.github.com> Date: Thu, 11 Apr 2024 10:47:45 -0300 Subject: [PATCH 29/39] Update examples/react-app/src/main.tsx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Luiz Estácio | stacio.eth --- examples/react-app/src/main.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/react-app/src/main.tsx b/examples/react-app/src/main.tsx index f51c2a4b2..98601d36b 100644 --- a/examples/react-app/src/main.tsx +++ b/examples/react-app/src/main.tsx @@ -23,7 +23,7 @@ import App from './App.tsx'; import ScreenSizeIndicator from './components/screensize-indicator.tsx'; import './index.css'; -const _queryClientt = new QueryClient(); +const queryClient = new QueryClient(); // ============================================================ // WalletConnect Connector configurations From 0f6a6a88381684b85704c2e50805e8d5d5132956 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Thu, 11 Apr 2024 11:00:07 -0300 Subject: [PATCH 30/39] fix: query client name changed --- examples/react-app/src/main.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/react-app/src/main.tsx b/examples/react-app/src/main.tsx index 98601d36b..e56c0ba28 100644 --- a/examples/react-app/src/main.tsx +++ b/examples/react-app/src/main.tsx @@ -59,7 +59,7 @@ const wagmiConfig = createConfig({ ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - + Date: Thu, 11 Apr 2024 11:01:50 -0300 Subject: [PATCH 31/39] fix: window.ethereum typed --- packages/evm-connector/src/EvmWalletConnector.ts | 10 ++-------- packages/evm-connector/src/constants.ts | 7 +++++++ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/evm-connector/src/EvmWalletConnector.ts b/packages/evm-connector/src/EvmWalletConnector.ts index 1d0d99310..bf6f28862 100644 --- a/packages/evm-connector/src/EvmWalletConnector.ts +++ b/packages/evm-connector/src/EvmWalletConnector.ts @@ -68,16 +68,13 @@ export class EVMWalletConnector extends FuelConnector { async configProviders(config: EVMWalletConnectorConfig = {}) { this.config = Object.assign(config, { fuelProvider: config.fuelProvider || Provider.create(BETA_5_URL), - ethProvider: - //@ts-ignore - config.ethProvider || (window.ethereum as EIP1193Provider), + ethProvider: config.ethProvider || (window.ethereum as EIP1193Provider), }); } setupEthereumEvents() { this._ethereumEvents = Number( setInterval(() => { - //@ts-ignore if (WINDOW?.ethereum) { clearInterval(this._ethereumEvents); window.dispatchEvent( @@ -92,9 +89,7 @@ export class EVMWalletConnector extends FuelConnector { if (this.config.ethProvider) { return this.config.ethProvider; } - //@ts-ignore if (WINDOW?.ethereum) { - //@ts-ignore return WINDOW.ethereum as EIP1193Provider; } @@ -222,8 +217,7 @@ export class EVMWalletConnector extends FuelConnector { this.emit(this.events.connection, true); - // @ts-ignore - this.on(this.events.CONNECTION, (connection: boolean) => { + this.on(this.events.connection, (connection: boolean) => { this.connected = connection; }); diff --git a/packages/evm-connector/src/constants.ts b/packages/evm-connector/src/constants.ts index 0f4b4747b..0a460f149 100644 --- a/packages/evm-connector/src/constants.ts +++ b/packages/evm-connector/src/constants.ts @@ -1,3 +1,10 @@ +declare global { + interface Window { + // biome-ignore lint/suspicious/noExplicitAny: + ethereum: any; + } +} + const HAS_WINDOW = typeof window !== 'undefined'; export const WINDOW = HAS_WINDOW ? window : null; export const BETA_5_URL = 'https://beta-5.fuel.network/graphql'; From 5a5b1ca634419ee834873b59cec6b4e38d5c4a19 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Fri, 12 Apr 2024 15:38:01 -0300 Subject: [PATCH 32/39] test: add test for constructor, account error and network --- .../src/test/walletConnector.test.ts | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/packages/walletconnect-connector/src/test/walletConnector.test.ts b/packages/walletconnect-connector/src/test/walletConnector.test.ts index 659d756eb..38cb3d421 100644 --- a/packages/walletconnect-connector/src/test/walletConnector.test.ts +++ b/packages/walletconnect-connector/src/test/walletConnector.test.ts @@ -1,4 +1,4 @@ -import type { Asset } from 'fuels'; +import type { Asset, Network } from 'fuels'; import { beforeEach, describe, expect, test } from 'vitest'; import { WalletConnectConnector } from '../WalletConnectConnector'; @@ -10,6 +10,26 @@ describe('WalletConnect Connector', () => { connector = new WalletConnectConnector({ projectId: '0000' }); }); + describe('constructor()', () => { + test('initialize properties correctly', () => { + const walletWalletConnector = new WalletConnectConnector({ + projectId: '0000', + }); + + expect(walletWalletConnector.name).to.equal('Ethereum Wallets'); + expect(walletWalletConnector.connected).to.be.false; + expect(walletWalletConnector.installed).to.be.false; + }); + }); + + describe('currenctAccount()', () => { + test('throws error', async () => { + await expect(() => connector.currentAccount()).rejects.toThrowError( + 'No connected accounts', + ); + }); + }); + describe('signMessage()', () => { test('throws error', async () => { await expect(() => @@ -77,4 +97,22 @@ describe('WalletConnect Connector', () => { ); }); }); + + describe('selectNetwork()', () => { + test('throws error', async () => { + const network: Network = { url: '', chainId: 0 }; + await expect(() => connector.selectNetwork(network)).rejects.toThrowError( + 'Method not implemented.', + ); + }); + }); + + describe('currentNetwork()', () => { + test('returns fuel network', async () => { + const network = await connector.currentNetwork(); + + expect(network.url).to.equal(connector.fuelProvider?.url); + expect(network.chainId).to.equal(connector.fuelProvider?.getChainId()); + }); + }); }); From 7930e998e4088be4f4e62a4d58da7027a3764876 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Fri, 12 Apr 2024 15:44:46 -0300 Subject: [PATCH 33/39] feat: add sepolia chain to walletconnect --- examples/react-app/src/main.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/react-app/src/main.tsx b/examples/react-app/src/main.tsx index e56c0ba28..84c411a3a 100644 --- a/examples/react-app/src/main.tsx +++ b/examples/react-app/src/main.tsx @@ -6,7 +6,7 @@ import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { coinbaseWallet, walletConnect } from '@wagmi/connectors'; import { http, createConfig, injected } from '@wagmi/core'; -import { mainnet } from '@wagmi/core/chains'; +import { mainnet, sepolia } from '@wagmi/core/chains'; import { EVMWalletConnector, @@ -37,9 +37,10 @@ const METADATA = { icons: ['https://connectors.fuel.network/logo_white.png'], }; const wagmiConfig = createConfig({ - chains: [mainnet], + chains: [mainnet, sepolia], transports: { [mainnet.id]: http(), + [sepolia.id]: http(), }, connectors: [ injected({ shimDisconnect: false }), From bdc44c0c52070be4e0eec08b75308653ce8513b4 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Fri, 12 Apr 2024 16:03:13 -0300 Subject: [PATCH 34/39] fix: revert changes in evm-connector --- packages/evm-connector/src/EvmWalletConnector.ts | 7 ++++--- packages/evm-connector/src/constants.ts | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/evm-connector/src/EvmWalletConnector.ts b/packages/evm-connector/src/EvmWalletConnector.ts index bf6f28862..303f534a9 100644 --- a/packages/evm-connector/src/EvmWalletConnector.ts +++ b/packages/evm-connector/src/EvmWalletConnector.ts @@ -68,7 +68,7 @@ export class EVMWalletConnector extends FuelConnector { async configProviders(config: EVMWalletConnectorConfig = {}) { this.config = Object.assign(config, { fuelProvider: config.fuelProvider || Provider.create(BETA_5_URL), - ethProvider: config.ethProvider || (window.ethereum as EIP1193Provider), + ethProvider: config.ethProvider || window.ethereum, }); } @@ -90,7 +90,7 @@ export class EVMWalletConnector extends FuelConnector { return this.config.ethProvider; } if (WINDOW?.ethereum) { - return WINDOW.ethereum as EIP1193Provider; + return WINDOW.ethereum; } return null; @@ -217,7 +217,8 @@ export class EVMWalletConnector extends FuelConnector { this.emit(this.events.connection, true); - this.on(this.events.connection, (connection: boolean) => { + // @ts-ignore + this.on(this.events.CONNECTION, (connection: boolean) => { this.connected = connection; }); diff --git a/packages/evm-connector/src/constants.ts b/packages/evm-connector/src/constants.ts index 0a460f149..2fb52704a 100644 --- a/packages/evm-connector/src/constants.ts +++ b/packages/evm-connector/src/constants.ts @@ -1,10 +1,10 @@ +import type { EIP1193Provider } from './utils/eip-1193'; + declare global { interface Window { - // biome-ignore lint/suspicious/noExplicitAny: - ethereum: any; + ethereum: EIP1193Provider | null; } } - const HAS_WINDOW = typeof window !== 'undefined'; export const WINDOW = HAS_WINDOW ? window : null; export const BETA_5_URL = 'https://beta-5.fuel.network/graphql'; From 1a67c1a97c3a744790dfc4b7a7a74dc0fe5b7e06 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Tue, 16 Apr 2024 14:36:12 -0300 Subject: [PATCH 35/39] ci: add specific pnpm version --- .github/workflows/pr-tests.yml | 5 ++++- .github/workflows/pr.yaml | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index 58a47529b..8e52c25fd 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -20,7 +20,10 @@ jobs: uses: FuelLabs/github-actions/setups/node@master with: node-version: 20.11.0 - + + - name: Install pnpm + run: pnpm add -g pnpm@8.9.0 + - uses: FuelLabs/github-actions/setups/docker@master with: username: ${{ github.repository_owner }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 2be68416c..05031f713 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -45,6 +45,9 @@ jobs: - name: CI Setup uses: FuelLabs/github-actions/setups/node@master + - name: Install pnpm + run: pnpm add -g pnpm@8.9.0 + - name: Validate Changeset run: pnpm changeset status --since=origin/${{ github.base_ref }} @@ -54,6 +57,10 @@ jobs: steps: - uses: actions/checkout@v3 - uses: FuelLabs/github-actions/setups/node@master + + - name: Install pnpm + run: pnpm add -g pnpm@8.9.0 + - run: pnpm audit --prod lint: @@ -70,6 +77,9 @@ jobs: - name: Setup Node uses: FuelLabs/github-actions/setups/node@master + - name: Install pnpm + run: pnpm add -g pnpm@8.9.0 + - name: Run lint & ts:check run: | pnpm lint:ci From 78ec00d5d7e7913606700828d0688e2129b92ba6 Mon Sep 17 00:00:00 2001 From: Pedro Pereira Date: Tue, 16 Apr 2024 15:25:43 -0300 Subject: [PATCH 36/39] ci: change pnpm-version --- .github/workflows/pr-tests.yml | 6 ++---- .github/workflows/pr.yaml | 15 ++++++--------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index 8e52c25fd..c74e1924a 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -20,10 +20,8 @@ jobs: uses: FuelLabs/github-actions/setups/node@master with: node-version: 20.11.0 - - - name: Install pnpm - run: pnpm add -g pnpm@8.9.0 - + pnpm-version: 8.9.0 + - uses: FuelLabs/github-actions/setups/docker@master with: username: ${{ github.repository_owner }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 05031f713..8b08204b7 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -44,9 +44,8 @@ jobs: - name: CI Setup uses: FuelLabs/github-actions/setups/node@master - - - name: Install pnpm - run: pnpm add -g pnpm@8.9.0 + with: + pnpm-version: 8.9.0 - name: Validate Changeset run: pnpm changeset status --since=origin/${{ github.base_ref }} @@ -57,9 +56,8 @@ jobs: steps: - uses: actions/checkout@v3 - uses: FuelLabs/github-actions/setups/node@master - - - name: Install pnpm - run: pnpm add -g pnpm@8.9.0 + with: + pnpm-version: 8.9.0 - run: pnpm audit --prod @@ -76,9 +74,8 @@ jobs: - name: Setup Node uses: FuelLabs/github-actions/setups/node@master - - - name: Install pnpm - run: pnpm add -g pnpm@8.9.0 + with: + pnpm-version: 8.9.0 - name: Run lint & ts:check run: | From b8362f353efee64535fd18e835fc265442b6d89b Mon Sep 17 00:00:00 2001 From: luizstacio Date: Thu, 18 Apr 2024 16:03:11 -0300 Subject: [PATCH 37/39] chore: remove metamask connector --- packages/connectors/src/defaultConnectors.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index df61b63ad..c2e36a5db 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -7,15 +7,17 @@ import type { FuelConnector } from 'fuels'; type DefaultConnectors = { devMode?: boolean; + projectId?: string; }; export function defaultConnectors({ devMode, + projectId, }: DefaultConnectors = {}): Array { const connectors = [ new FuelWalletConnector(), new FueletWalletConnector(), - new WalletConnectConnector(), + new WalletConnectConnector({ projectId }), new BurnerWalletConnector(), ]; From 918a4adedcd7a4b44d987448403ef126ad782feb Mon Sep 17 00:00:00 2001 From: luizstacio Date: Thu, 18 Apr 2024 16:14:45 -0300 Subject: [PATCH 38/39] chore: remove projectId --- packages/connectors/src/defaultConnectors.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index c2e36a5db..df61b63ad 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -7,17 +7,15 @@ import type { FuelConnector } from 'fuels'; type DefaultConnectors = { devMode?: boolean; - projectId?: string; }; export function defaultConnectors({ devMode, - projectId, }: DefaultConnectors = {}): Array { const connectors = [ new FuelWalletConnector(), new FueletWalletConnector(), - new WalletConnectConnector({ projectId }), + new WalletConnectConnector(), new BurnerWalletConnector(), ]; From 7dc242480100dfa8bd5da4ce6df83c4fc733f1ab Mon Sep 17 00:00:00 2001 From: luizstacio Date: Thu, 18 Apr 2024 16:15:08 -0300 Subject: [PATCH 39/39] chore: remove EVM wallet --- examples/react-app/src/main.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/react-app/src/main.tsx b/examples/react-app/src/main.tsx index 5f4a14ada..7eac09ea7 100644 --- a/examples/react-app/src/main.tsx +++ b/examples/react-app/src/main.tsx @@ -9,7 +9,6 @@ import { http, createConfig, injected } from '@wagmi/core'; import { mainnet, sepolia } from '@wagmi/core/chains'; import { - EVMWalletConnector, FuelWalletConnector, FuelWalletDevelopmentConnector, FueletWalletConnector,